From 12d44454284b77e7f3db4213c3393729be59b957 Mon Sep 17 00:00:00 2001 From: smyalygames Date: Sat, 18 Feb 2023 13:31:58 +0000 Subject: [PATCH] refactor(arabot): remove duplicate code for creating channels --- src/listeners/verification/joinVC.ts | 106 ++------------------- src/listeners/verification/leaveVC.ts | 50 +--------- src/listeners/verification/start.ts | 50 +--------- src/utils/verification.ts | 127 ++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 194 deletions(-) create mode 100644 src/utils/verification.ts diff --git a/src/listeners/verification/joinVC.ts b/src/listeners/verification/joinVC.ts index d5c7b3b..f504ef6 100644 --- a/src/listeners/verification/joinVC.ts +++ b/src/listeners/verification/joinVC.ts @@ -26,7 +26,7 @@ import type { VoiceState, GuildMember, Guild, - User, VoiceBasedChannel, + User, } from 'discord.js'; import { time, @@ -38,6 +38,7 @@ import { ActionRowBuilder, EmbedBuilder, } from 'discord.js'; +import { createVerificationText, createVerificationVoice } from '#utils/verification'; import { maxVCs, questionInfo, serverFind } from '#utils/verificationConfig'; import { joinVerification, startVerification, finishVerification } from '#utils/database/verification'; import { findNotes } from '#utils/database/sus'; @@ -143,14 +144,13 @@ export class VerificationJoinVCListener extends Listener { let verificationText: TextChannel; let bannedName = false; try { - verificationText = await this.createTextChannel(member, channel, category, guild); + verificationText = await createVerificationText(member, channel, category); } catch { bannedName = true; - verificationText = await this.createTextChannel( + verificationText = await createVerificationText( member, channel, category, - guild, bannedName, ); } @@ -177,9 +177,9 @@ export class VerificationJoinVCListener extends Listener { // Checks if there are more than 10 voice channels if (listVoiceChannels.size > maxVCs - 1) { - await this.createVoiceChannel(guild, category, true); + await createVerificationVoice(category, true); } else { - await this.createVoiceChannel(guild, category); + await createVerificationVoice(category); } // Change permissions to join the current channel @@ -218,100 +218,6 @@ export class VerificationJoinVCListener extends Listener { await currentChannel.setUserLimit(0); } - private async createTextChannel( - member: GuildMember, - voiceChannel: VoiceBasedChannel, - category: CategoryChannel, - guild: Guild, - bannedName = false, - ) { - const channel = await guild.channels.create({ - name: `✅┃${!bannedName ? member.displayName : member.id}-verification`, - type: ChannelType.GuildText, - topic: `Channel for verifiers only. ${member.id} ${voiceChannel.id} (Please do not change this)`, - parent: category.id, - userLimit: 1, - permissionOverwrites: [ - { - id: guild.roles.everyone, - deny: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.verifyBlock, - deny: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.staff.verifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.staff.trialVerifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel], - }, - ], - }); - return channel; - } - - private async createVoiceChannel(guild: Guild, category: CategoryChannel, full = false) { - const channel = await guild.channels.create({ - name: 'Verification', - type: ChannelType.GuildVoice, - parent: category.id, - userLimit: 1, - permissionOverwrites: [ - { - id: guild.roles.everyone, - deny: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Stream], - }, - { - id: IDs.roles.verifyBlock, - deny: [PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.SendMessages], - }, - { - id: IDs.roles.nonvegan.nonvegan, - allow: [PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.vegan.vegan, - allow: [PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.vegan.activist, - deny: [PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect], - }, - { - id: IDs.roles.staff.verifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.MuteMembers], - }, - { - id: IDs.roles.staff.trialVerifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.MuteMembers], - }, - ], - }); - - if (full) { - await channel.permissionOverwrites.edit(IDs.roles.nonvegan.nonvegan, { Connect: false }); - await channel.permissionOverwrites.edit(IDs.roles.vegan.vegan, { Connect: false }); - } - } - // Creates an embed for information about the user private async getUserInfo(user: GuildMember, roles: string) { const joinTime = time(user.joinedAt!); diff --git a/src/listeners/verification/leaveVC.ts b/src/listeners/verification/leaveVC.ts index e110d71..ea33c8f 100644 --- a/src/listeners/verification/leaveVC.ts +++ b/src/listeners/verification/leaveVC.ts @@ -21,7 +21,8 @@ import { Listener } from '@sapphire/framework'; import type { VoiceState, CategoryChannel, VoiceChannel, TextChannel, } from 'discord.js'; -import { time, ChannelType, PermissionsBitField } from 'discord.js'; +import { time, ChannelType } from 'discord.js'; +import { createVerificationVoice } from '#utils/verification'; import { maxVCs, leaveBan } from '#utils/verificationConfig'; import { getUser, checkFinish, countIncomplete } from '#utils/database/verification'; import { fetchRoles } from '#utils/database/dbExistingUser'; @@ -126,52 +127,7 @@ export class VerificationLeaveVCListener extends Listener { // If there are no VCs left in verification after having the channel deleted if (listVoiceChannels.size - 1 === 0) { // Create a verification channel - await guild.channels.create({ - name: 'Verification', - type: ChannelType.GuildVoice, - parent: category.id, - userLimit: 1, - permissionOverwrites: [ - { - id: guild.roles.everyone, - deny: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.SendMessages], - }, - { - id: IDs.roles.verifyBlock, - deny: [PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.SendMessages], - }, - { - id: IDs.roles.nonvegan.nonvegan, - allow: [PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.vegan.vegan, - allow: [PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.vegan.activist, - deny: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.Connect], - }, - { - id: IDs.roles.staff.verifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.MuteMembers], - }, - { - id: IDs.roles.staff.trialVerifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.MuteMembers], - }, - ], - }); + await createVerificationVoice(category); } // If there are less than 10, stop diff --git a/src/listeners/verification/start.ts b/src/listeners/verification/start.ts index 9500a01..afe081f 100644 --- a/src/listeners/verification/start.ts +++ b/src/listeners/verification/start.ts @@ -24,7 +24,8 @@ import type { TextChannel, VoiceChannel, } from 'discord.js'; -import { ChannelType, PermissionsBitField } from 'discord.js'; +import { ChannelType } from 'discord.js'; +import { createVerificationVoice } from '#utils/verification'; import IDs from '#utils/ids'; export class VerificationReady extends Listener { @@ -84,52 +85,7 @@ export class VerificationReady extends Listener { } }); if (!verification) { - await category.guild.channels.create({ - name: 'Verification', - type: ChannelType.GuildVoice, - parent: category.id, - userLimit: 1, - permissionOverwrites: [ - { - id: category.guild.roles.everyone, - deny: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.SendMessages], - }, - { - id: IDs.roles.verifyBlock, - deny: [PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.SendMessages], - }, - { - id: IDs.roles.nonvegan.nonvegan, - allow: [PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.vegan.vegan, - allow: [PermissionsBitField.Flags.ViewChannel], - }, - { - id: IDs.roles.vegan.activist, - deny: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.Connect], - }, - { - id: IDs.roles.staff.verifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.MuteMembers], - }, - { - id: IDs.roles.staff.trialVerifier, - allow: [PermissionsBitField.Flags.SendMessages, - PermissionsBitField.Flags.ViewChannel, - PermissionsBitField.Flags.Connect, - PermissionsBitField.Flags.MuteMembers], - }, - ], - }); + await createVerificationVoice(category); } } } diff --git a/src/utils/verification.ts b/src/utils/verification.ts new file mode 100644 index 0000000..e752249 --- /dev/null +++ b/src/utils/verification.ts @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +/* + Animal Rights Advocates Discord Bot + Copyright (C) 2022 Anthony Berg + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +import { + CategoryChannel, + ChannelType, + GuildMember, + PermissionsBitField, + VoiceBasedChannel, +} from 'discord.js'; +import IDs from '#utils/ids'; + +export async function createVerificationText( + member: GuildMember, + voiceChannel: VoiceBasedChannel, + category: CategoryChannel, + bannedName = false, +) { + const { guild } = category; + + const channel = await guild.channels.create({ + name: `✅┃${!bannedName ? member.displayName : member.id}-verification`, + type: ChannelType.GuildText, + topic: `Channel for verifiers only. ${member.id} ${voiceChannel.id} (Please do not change this)`, + parent: category.id, + userLimit: 1, + permissionOverwrites: [ + { + id: guild.roles.everyone, + deny: [PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.ViewChannel], + }, + { + id: IDs.roles.verifyBlock, + deny: [PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.ViewChannel], + }, + { + id: IDs.roles.staff.verifier, + allow: [PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.ViewChannel], + }, + { + id: IDs.roles.staff.trialVerifier, + allow: [PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.ViewChannel], + }, + ], + }); + return channel; +} + +export async function createVerificationVoice( + category: CategoryChannel, + full = false, +) { + const { guild } = category; + + const channel = await guild.channels.create({ + name: 'Verification', + type: ChannelType.GuildVoice, + parent: category.id, + userLimit: 1, + permissionOverwrites: [ + { + id: guild.roles.everyone, + deny: [PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.Stream], + }, + { + id: IDs.roles.verifyBlock, + deny: [PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.Connect, + PermissionsBitField.Flags.SendMessages], + }, + { + id: IDs.roles.nonvegan.nonvegan, + allow: [PermissionsBitField.Flags.ViewChannel], + }, + { + id: IDs.roles.vegan.vegan, + allow: [PermissionsBitField.Flags.ViewChannel], + }, + { + id: IDs.roles.vegan.activist, + deny: [PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.Connect], + }, + { + id: IDs.roles.staff.verifier, + allow: [PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.Connect, + PermissionsBitField.Flags.MuteMembers], + }, + { + id: IDs.roles.staff.trialVerifier, + allow: [PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.Connect, + PermissionsBitField.Flags.MuteMembers], + }, + ], + }); + + if (full) { + await channel.permissionOverwrites.edit(IDs.roles.nonvegan.nonvegan, { Connect: false }); + await channel.permissionOverwrites.edit(IDs.roles.vegan.vegan, { Connect: false }); + } +}