From 170fa3575961bc7e513392c0545e9268722f01ce Mon Sep 17 00:00:00 2001 From: Nicholas Sylke Date: Sat, 19 Jun 2021 20:47:44 -0500 Subject: [PATCH 1/5] feat: remaining moderation commands --- src/rest/commands/moderation/mute.ts | 20 ++++++++++++++++++++ src/rest/commands/moderation/slowmode.ts | 20 ++++++++++++++++++++ src/rest/commands/moderation/softban.ts | 20 ++++++++++++++++++++ src/rest/commands/moderation/unban.ts | 20 ++++++++++++++++++++ src/rest/commands/moderation/unmute.ts | 20 ++++++++++++++++++++ src/rest/commands/moderation/voicekick.ts | 20 ++++++++++++++++++++ src/rest/commands/moderation/warn.ts | 20 ++++++++++++++++++++ 7 files changed, 140 insertions(+) create mode 100644 src/rest/commands/moderation/mute.ts create mode 100644 src/rest/commands/moderation/slowmode.ts create mode 100644 src/rest/commands/moderation/softban.ts create mode 100644 src/rest/commands/moderation/unban.ts create mode 100644 src/rest/commands/moderation/unmute.ts create mode 100644 src/rest/commands/moderation/voicekick.ts create mode 100644 src/rest/commands/moderation/warn.ts diff --git a/src/rest/commands/moderation/mute.ts b/src/rest/commands/moderation/mute.ts new file mode 100644 index 0000000..ecc895d --- /dev/null +++ b/src/rest/commands/moderation/mute.ts @@ -0,0 +1,20 @@ +import Command, { + basicInteractionResponse, +} from "../../common/command/Command.ts"; +import { bot } from "../../cache.ts"; +import { enTranslate } from "../../common/util/i18next.ts"; + +const MuteCommand: Command = (interaction) => { + return basicInteractionResponse( + interaction.id, + interaction.token, + "Command not implemented yet.", + ); +}; + +MuteCommand.options = { + name: "mute", + description: enTranslate("commands/moderation/mute:COMMAND_DESCRIPTION"), +}; + +bot.commands.add(MuteCommand); diff --git a/src/rest/commands/moderation/slowmode.ts b/src/rest/commands/moderation/slowmode.ts new file mode 100644 index 0000000..11ea1a6 --- /dev/null +++ b/src/rest/commands/moderation/slowmode.ts @@ -0,0 +1,20 @@ +import Command, { + basicInteractionResponse, +} from "../../common/command/Command.ts"; +import { bot } from "../../cache.ts"; +import { enTranslate } from "../../common/util/i18next.ts"; + +const SlowmodeCommand: Command = (interaction) => { + return basicInteractionResponse( + interaction.id, + interaction.token, + "Command not implemented yet.", + ); +}; + +SlowmodeCommand.options = { + name: "slowmode", + description: enTranslate("commands/moderation/slowmode:COMMAND_DESCRIPTION"), +}; + +bot.commands.add(SlowmodeCommand); diff --git a/src/rest/commands/moderation/softban.ts b/src/rest/commands/moderation/softban.ts new file mode 100644 index 0000000..f71091d --- /dev/null +++ b/src/rest/commands/moderation/softban.ts @@ -0,0 +1,20 @@ +import Command, { + basicInteractionResponse, +} from "../../common/command/Command.ts"; +import { bot } from "../../cache.ts"; +import { enTranslate } from "../../common/util/i18next.ts"; + +const SoftbanCommand: Command = (interaction) => { + return basicInteractionResponse( + interaction.id, + interaction.token, + "Command not implemented yet.", + ); +}; + +SoftbanCommand.options = { + name: "softban", + description: enTranslate("commands/moderation/softban:COMMAND_DESCRIPTION"), +}; + +bot.commands.add(SoftbanCommand); diff --git a/src/rest/commands/moderation/unban.ts b/src/rest/commands/moderation/unban.ts new file mode 100644 index 0000000..b389256 --- /dev/null +++ b/src/rest/commands/moderation/unban.ts @@ -0,0 +1,20 @@ +import Command, { + basicInteractionResponse, +} from "../../common/command/Command.ts"; +import { bot } from "../../cache.ts"; +import { enTranslate } from "../../common/util/i18next.ts"; + +const UnbanCommand: Command = (interaction) => { + return basicInteractionResponse( + interaction.id, + interaction.token, + "Command not implemented yet.", + ); +}; + +UnbanCommand.options = { + name: "unban", + description: enTranslate("commands/moderation/unban:COMMAND_DESCRIPTION"), +}; + +bot.commands.add(UnbanCommand); diff --git a/src/rest/commands/moderation/unmute.ts b/src/rest/commands/moderation/unmute.ts new file mode 100644 index 0000000..1a05710 --- /dev/null +++ b/src/rest/commands/moderation/unmute.ts @@ -0,0 +1,20 @@ +import Command, { + basicInteractionResponse, +} from "../../common/command/Command.ts"; +import { bot } from "../../cache.ts"; +import { enTranslate } from "../../common/util/i18next.ts"; + +const UnmuteCommand: Command = (interaction) => { + return basicInteractionResponse( + interaction.id, + interaction.token, + "Command not implemented yet.", + ); +}; + +UnmuteCommand.options = { + name: "unmute", + description: enTranslate("commands/moderation/unmute:COMMAND_DESCRIPTION"), +}; + +bot.commands.add(UnmuteCommand); diff --git a/src/rest/commands/moderation/voicekick.ts b/src/rest/commands/moderation/voicekick.ts new file mode 100644 index 0000000..f14ce9c --- /dev/null +++ b/src/rest/commands/moderation/voicekick.ts @@ -0,0 +1,20 @@ +import Command, { + basicInteractionResponse, +} from "../../common/command/Command.ts"; +import { bot } from "../../cache.ts"; +import { enTranslate } from "../../common/util/i18next.ts"; + +const VoiceKickCommand: Command = (interaction) => { + return basicInteractionResponse( + interaction.id, + interaction.token, + "Command not implemented yet.", + ); +}; + +VoiceKickCommand.options = { + name: "voicekick", + description: enTranslate("commands/moderation/voicekick:COMMAND_DESCRIPTION"), +}; + +bot.commands.add(VoiceKickCommand); diff --git a/src/rest/commands/moderation/warn.ts b/src/rest/commands/moderation/warn.ts new file mode 100644 index 0000000..1db4612 --- /dev/null +++ b/src/rest/commands/moderation/warn.ts @@ -0,0 +1,20 @@ +import Command, { + basicInteractionResponse, +} from "../../common/command/Command.ts"; +import { bot } from "../../cache.ts"; +import { enTranslate } from "../../common/util/i18next.ts"; + +const WarnCommand: Command = (interaction) => { + return basicInteractionResponse( + interaction.id, + interaction.token, + "Command not implemented yet.", + ); +}; + +WarnCommand.options = { + name: "warn", + description: enTranslate("commands/moderation/warn:COMMAND_DESCRIPTION"), +}; + +bot.commands.add(WarnCommand); From b575ff1dd127ed217c7bd5364f615f7541ee704e Mon Sep 17 00:00:00 2001 From: Nicholas Sylke Date: Sat, 19 Jun 2021 21:08:33 -0500 Subject: [PATCH 2/5] feat: slowmode command --- deps.ts | 1 + src/rest/commands/moderation/slowmode.ts | 95 ++++++++++++++++++++++-- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/deps.ts b/deps.ts index e16166a..72e8443 100644 --- a/deps.ts +++ b/deps.ts @@ -1 +1,2 @@ export * from "https://deno.land/x/discordeno@11.2.0/mod.ts"; +export { ms } from "https://deno.land/x/ms@v0.1.0/ms.ts"; diff --git a/src/rest/commands/moderation/slowmode.ts b/src/rest/commands/moderation/slowmode.ts index 11ea1a6..87a6431 100644 --- a/src/rest/commands/moderation/slowmode.ts +++ b/src/rest/commands/moderation/slowmode.ts @@ -2,19 +2,98 @@ import Command, { basicInteractionResponse, } from "../../common/command/Command.ts"; import { bot } from "../../cache.ts"; -import { enTranslate } from "../../common/util/i18next.ts"; - -const SlowmodeCommand: Command = (interaction) => { - return basicInteractionResponse( - interaction.id, - interaction.token, - "Command not implemented yet.", - ); +import { enTranslate, translate } from "../../common/util/i18next.ts"; +import { + DiscordApplicationCommandOptionTypes, + editChannel, + ms, + snowflakeToBigint, + validatePermissions, +} from "../../../../deps.ts"; + +const SlowmodeCommand: Command = async (interaction) => { + const guildId: bigint = snowflakeToBigint(interaction.guildId!); + + if ( + !validatePermissions(snowflakeToBigint(interaction.member!.permissions), [ + "MANAGE_CHANNELS", + ]) + ) { + return basicInteractionResponse( + interaction.id, + interaction.token, + translate( + guildId, + "permission:USER_MISSING_PERMISSION", + { permission: "Manage Channels" }, + ), + ); + } + + const raw = interaction.data?.options?.[0]; + + if (!raw) { + return basicInteractionResponse( + interaction.id, + interaction.token, + translate(guildId, "commands/moderation/slowmode:MISSING_ARGUMENT"), + ); + } + + if (raw.type === DiscordApplicationCommandOptionTypes.String && raw.value) { + const time = (ms(+raw.value) as number); + + if (!isFinite(time) || time > 21600) { + return basicInteractionResponse( + interaction.id, + interaction.token, + translate( + guildId, + "commands/moderation/slowmode:ERROR", + ), + ); + } + + try { + await editChannel(snowflakeToBigint(interaction.channelId!), { + rateLimitPerUser: time, + }); + } catch { + return basicInteractionResponse( + interaction.id, + interaction.token, + translate( + guildId, + "permission:SELF_MISSING_PERMISSION", + { permission: "Manage Channels" }, + ), + ); + } + + return basicInteractionResponse( + interaction.id, + interaction.token, + translate( + guildId, + "commands/moderation/slowmode:SLOWMODE_UPDATED", + ), + ); + } }; SlowmodeCommand.options = { name: "slowmode", description: enTranslate("commands/moderation/slowmode:COMMAND_DESCRIPTION"), + options: [ + { + required: false, + name: "time", + description: enTranslate( + "commands/moderation/slowmode:SUBCOMMAND_DESCRIPTION_TIME", + ), + type: DiscordApplicationCommandOptionTypes.String, + }, + ], }; bot.commands.add(SlowmodeCommand); From 1bb8b51319a3f356e286a4cedcf4f1d42018847b Mon Sep 17 00:00:00 2001 From: Nicholas Sylke Date: Sat, 19 Jun 2021 21:16:29 -0500 Subject: [PATCH 3/5] fix: slowmode time check --- src/rest/commands/moderation/slowmode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rest/commands/moderation/slowmode.ts b/src/rest/commands/moderation/slowmode.ts index 87a6431..5f769e2 100644 --- a/src/rest/commands/moderation/slowmode.ts +++ b/src/rest/commands/moderation/slowmode.ts @@ -41,7 +41,7 @@ const SlowmodeCommand: Command = async (interaction) => { } if (raw.type === DiscordApplicationCommandOptionTypes.String && raw.value) { - const time = (ms(+raw.value) as number); + const time = /[A-Za-z]?$/.test(raw.value) ? (ms(raw.value) as number) : +raw.value; if (!isFinite(time) || time > 21600) { return basicInteractionResponse( From bf60110667642fa3af182e97c95a1382a3a4e736 Mon Sep 17 00:00:00 2001 From: Nicholas Sylke Date: Sat, 19 Jun 2021 21:18:17 -0500 Subject: [PATCH 4/5] chore: deno fmt --- src/rest/commands/moderation/slowmode.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rest/commands/moderation/slowmode.ts b/src/rest/commands/moderation/slowmode.ts index 5f769e2..c4ca8f3 100644 --- a/src/rest/commands/moderation/slowmode.ts +++ b/src/rest/commands/moderation/slowmode.ts @@ -41,7 +41,9 @@ const SlowmodeCommand: Command = async (interaction) => { } if (raw.type === DiscordApplicationCommandOptionTypes.String && raw.value) { - const time = /[A-Za-z]?$/.test(raw.value) ? (ms(raw.value) as number) : +raw.value; + const time = /[A-Za-z]?$/.test(raw.value) + ? (ms(raw.value) as number) + : +raw.value; if (!isFinite(time) || time > 21600) { return basicInteractionResponse( From 72426b9035e41d3253d9273ce351c512df6f0c4b Mon Sep 17 00:00:00 2001 From: Nicholas Sylke Date: Sat, 19 Jun 2021 21:27:37 -0500 Subject: [PATCH 5/5] fix: slowmode time check (conver to seconds) --- src/rest/commands/moderation/slowmode.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rest/commands/moderation/slowmode.ts b/src/rest/commands/moderation/slowmode.ts index c4ca8f3..62c048c 100644 --- a/src/rest/commands/moderation/slowmode.ts +++ b/src/rest/commands/moderation/slowmode.ts @@ -41,8 +41,9 @@ const SlowmodeCommand: Command = async (interaction) => { } if (raw.type === DiscordApplicationCommandOptionTypes.String && raw.value) { + // If using ms, convert to seconds by dividing by 1000 const time = /[A-Za-z]?$/.test(raw.value) - ? (ms(raw.value) as number) + ? (ms(raw.value) as number) / 1000 : +raw.value; if (!isFinite(time) || time > 21600) {