From be65d8444e57f612f51fcacb9e5d691d6bdff587 Mon Sep 17 00:00:00 2001 From: David Gan Date: Sun, 19 Nov 2023 23:47:06 -0500 Subject: [PATCH 1/4] Allow bot to ban users outside server --- src/commandDetails/admin/ban.ts | 8 +++----- src/components/admin.ts | 21 +++++++++++++++------ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/commandDetails/admin/ban.ts b/src/commandDetails/admin/ban.ts index 8a44aaf3..e13d0bac 100644 --- a/src/commandDetails/admin/ban.ts +++ b/src/commandDetails/admin/ban.ts @@ -1,6 +1,6 @@ import { CodeyUserError } from './../../codeyUserError'; import { container } from '@sapphire/framework'; -import { PermissionsBitField, User } from 'discord.js'; +import { PermissionsBitField, User, GuildMemberManager } from 'discord.js'; import { CodeyCommandDetails, CodeyCommandOptionType, @@ -31,11 +31,9 @@ const banExecuteCommand: SapphireMessageExecuteType = async (client, messageFrom ); } const days = args['days']; - // Get the GuildMember object corresponding to the user in the guild - // This is needed because we can only ban GuildMembers, not Users + // get Guild object corresponding to server const guild = await client.guilds.fetch(vars.TARGET_GUILD_ID); - const memberInGuild = await guild.members.fetch({ user }); - if (await banUser(memberInGuild, reason, days)) { + if (await banUser(guild, user, reason, days)) { return `Successfully banned user ${user.tag} (id: ${user.id}) ${ days ? `and deleted their messages in the past ${days} days ` : `` }for the following reason: ${reason}`; diff --git a/src/components/admin.ts b/src/components/admin.ts index 49dac0b2..21010c0c 100644 --- a/src/components/admin.ts +++ b/src/components/admin.ts @@ -1,4 +1,4 @@ -import { GuildMember } from 'discord.js'; +import { Guild, User } from 'discord.js'; import { vars } from '../config'; import { logger } from '../logger/default'; import { pluralize } from '../utils/pluralize'; @@ -9,7 +9,7 @@ const MOD_USER_ID_FOR_BAN_APPEAL: string = vars.MOD_USER_ID_FOR_BAN_APPEAL; const makeBanMessage = (reason: string, days?: number): string => ` Uh oh, you have been banned from the UW Computer Science Club server ${ - days && `and your messages in the past ${days} ${pluralize('day', days)} have been deleted` + days && `and your messages in the past ${days} ${pluralize('day', days)} have been deleted ` }for the following reason: > ${reason} @@ -19,16 +19,25 @@ a reason why you think you should be unbanned. `; /* Ban a user, returns whether ban was successful */ +// Bans user from guild even if they are not in server +// makeBanMessage is only sent to User if they are in server (in Discord, you cannot send direct messages to users who are not in any mutual servers) export const banUser = async ( - member: GuildMember, + guild: Guild, + user: User, reason: string, days?: number, ): Promise => { let isSuccessful = false; try { - const user = member.user; - await user.send(makeBanMessage(reason, days)); - await member.ban({ reason, deleteMessageDays: days }); + try { + await user.send(makeBanMessage(reason, days)); + } catch(err){ + logger.error({ + event: "Can't send message to user not in server", + error: (err as Error).toString(), + }); + } + await guild.members.ban(user, {reason: reason, deleteMessageSeconds: (days==null? 0: days * 86400)}); isSuccessful = true; } catch (err) { logger.error({ From 51685ee0c32651a4dae4e99a7134c6378c6ce20c Mon Sep 17 00:00:00 2001 From: David Gan Date: Wed, 6 Dec 2023 11:25:56 -0500 Subject: [PATCH 2/4] added pluralize --- src/commandDetails/admin/ban.ts | 3 ++- src/components/admin.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/commandDetails/admin/ban.ts b/src/commandDetails/admin/ban.ts index e13d0bac..888bf938 100644 --- a/src/commandDetails/admin/ban.ts +++ b/src/commandDetails/admin/ban.ts @@ -8,6 +8,7 @@ import { } from '../../codeyCommand'; import { banUser } from '../../components/admin'; import { vars } from '../../config'; +import { pluralize } from '../../utils/pluralize'; // Ban a user const banExecuteCommand: SapphireMessageExecuteType = async (client, messageFromUser, args) => { @@ -35,7 +36,7 @@ const banExecuteCommand: SapphireMessageExecuteType = async (client, messageFrom const guild = await client.guilds.fetch(vars.TARGET_GUILD_ID); if (await banUser(guild, user, reason, days)) { return `Successfully banned user ${user.tag} (id: ${user.id}) ${ - days ? `and deleted their messages in the past ${days} days ` : `` + days ? `and deleted their messages in the past ${days} ${pluralize('day', days)} ` : `` }for the following reason: ${reason}`; } else { throw new CodeyUserError( diff --git a/src/components/admin.ts b/src/components/admin.ts index 21010c0c..4b82346c 100644 --- a/src/components/admin.ts +++ b/src/components/admin.ts @@ -9,7 +9,7 @@ const MOD_USER_ID_FOR_BAN_APPEAL: string = vars.MOD_USER_ID_FOR_BAN_APPEAL; const makeBanMessage = (reason: string, days?: number): string => ` Uh oh, you have been banned from the UW Computer Science Club server ${ - days && `and your messages in the past ${days} ${pluralize('day', days)} have been deleted ` + days ? `and your messages in the past ${days} ${pluralize('day', days)} have been deleted `: '' }for the following reason: > ${reason} From 95dd1b77c2119317c9e006a3ea31923fa56816a6 Mon Sep 17 00:00:00 2001 From: David Gan Date: Wed, 6 Dec 2023 11:28:00 -0500 Subject: [PATCH 3/4] resolve merge conflict --- src/components/admin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/admin.ts b/src/components/admin.ts index 4b82346c..7df449e6 100644 --- a/src/components/admin.ts +++ b/src/components/admin.ts @@ -9,7 +9,7 @@ const MOD_USER_ID_FOR_BAN_APPEAL: string = vars.MOD_USER_ID_FOR_BAN_APPEAL; const makeBanMessage = (reason: string, days?: number): string => ` Uh oh, you have been banned from the UW Computer Science Club server ${ - days ? `and your messages in the past ${days} ${pluralize('day', days)} have been deleted `: '' + days ? `and your messages in the past ${days} ${pluralize('day', days)} have been deleted ` : '' }for the following reason: > ${reason} From 1491363b16aee0284364274d75598f289f804684 Mon Sep 17 00:00:00 2001 From: David Gan Date: Wed, 6 Dec 2023 11:38:00 -0500 Subject: [PATCH 4/4] added spaces for bot --- src/commandDetails/admin/ban.ts | 2 +- src/components/admin.ts | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/commandDetails/admin/ban.ts b/src/commandDetails/admin/ban.ts index 888bf938..bd609799 100644 --- a/src/commandDetails/admin/ban.ts +++ b/src/commandDetails/admin/ban.ts @@ -1,6 +1,6 @@ import { CodeyUserError } from './../../codeyUserError'; import { container } from '@sapphire/framework'; -import { PermissionsBitField, User, GuildMemberManager } from 'discord.js'; +import { PermissionsBitField, User } from 'discord.js'; import { CodeyCommandDetails, CodeyCommandOptionType, diff --git a/src/components/admin.ts b/src/components/admin.ts index 7df449e6..f54f43d2 100644 --- a/src/components/admin.ts +++ b/src/components/admin.ts @@ -31,13 +31,16 @@ export const banUser = async ( try { try { await user.send(makeBanMessage(reason, days)); - } catch(err){ + } catch (err) { logger.error({ - event: "Can't send message to user not in server", - error: (err as Error).toString(), + event: "Can't send message to user not in server", + error: (err as Error).toString(), }); } - await guild.members.ban(user, {reason: reason, deleteMessageSeconds: (days==null? 0: days * 86400)}); + await guild.members.ban(user, { + reason: reason, + deleteMessageSeconds: days == null ? 0 : days * 86400, + }); isSuccessful = true; } catch (err) { logger.error({