diff --git a/src/listeners/rolesJoinServer.ts b/src/listeners/rolesJoinServer.ts index a4e7216..0c2871c 100644 --- a/src/listeners/rolesJoinServer.ts +++ b/src/listeners/rolesJoinServer.ts @@ -19,7 +19,7 @@ import { Listener } from '@sapphire/framework'; import type { GuildMember } from 'discord.js'; -// import { fetchRoles } from '#utils/database/dbExistingUser'; +import { fetchRoles } from '#utils/database/dbExistingUser'; import IDs from '#utils/ids'; import { blockTime } from '#utils/database/verification'; import { checkActive, getSection } from '#utils/database/restriction'; @@ -35,8 +35,7 @@ export class RolesJoinServerListener extends Listener { public async run(member: GuildMember) { // Add basic roles - const roles = []; - // const roles = await fetchRoles(member.id); + const roles = await fetchRoles(member.id); // Check if the user is restricted if (await checkActive(member.id)) { diff --git a/src/listeners/verification/joinVC.ts b/src/listeners/verification/joinVC.ts index f5489d3..f504ef6 100644 --- a/src/listeners/verification/joinVC.ts +++ b/src/listeners/verification/joinVC.ts @@ -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'; @@ -139,73 +140,19 @@ 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 createVerificationText(member, channel, category); } 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 createVerificationText( + member, + channel, + category, + 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 createVerificationVoice(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 createVerificationVoice(category); } // Change permissions to join the current channel 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 }); + } +}