diff --git a/src/listeners/verification/joinVC.ts b/src/listeners/verification/joinVC.ts index f5489d3..d5c7b3b 100644 --- a/src/listeners/verification/joinVC.ts +++ b/src/listeners/verification/joinVC.ts @@ -26,7 +26,7 @@ import type { VoiceState, GuildMember, Guild, - User, + User, VoiceBasedChannel, } from 'discord.js'; import { time, @@ -139,73 +139,20 @@ export class VerificationJoinVCListener extends Listener { .filter((c) => c.type === ChannelType.GuildVoice); // Create a text channel for verifiers only - // Checks if there are more than 10 voice channels if (!verifier) { - // TODO refactor this mess to circumvent - // "Contains words not allowed for servers in Server Discovery." let verificationText: TextChannel; let bannedName = false; try { - verificationText = await guild.channels.create({ - name: `✅┃${member.displayName}-verification`, - type: ChannelType.GuildText, - topic: `Channel for verifiers only. ${member.id} ${channel.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], - }, - ], - }); + verificationText = await this.createTextChannel(member, channel, category, guild); } catch { - verificationText = await guild.channels.create({ - name: `✅┃${member.displayName}-verification`, - type: ChannelType.GuildText, - topic: `Channel for verifiers only. ${member.id} ${channel.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], - }, - ], - }); bannedName = true; + verificationText = await this.createTextChannel( + member, + channel, + category, + guild, + bannedName, + ); } if (!bannedName) { @@ -230,102 +177,9 @@ export class VerificationJoinVCListener extends Listener { // Checks if there are more than 10 voice channels if (listVoiceChannels.size > maxVCs - 1) { - 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], - deny: [PermissionsBitField.Flags.Connect], - }, - { - id: IDs.roles.vegan.vegan, - allow: [PermissionsBitField.Flags.ViewChannel], - deny: [PermissionsBitField.Flags.Connect], - }, - { - 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 this.createVoiceChannel(guild, category, true); } else { - 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 this.createVoiceChannel(guild, category); } // Change permissions to join the current channel @@ -364,6 +218,100 @@ 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!);