From ec91822a73b2bf3e52544ddf81413780bc21a29b Mon Sep 17 00:00:00 2001 From: LTS20050703 Date: Thu, 8 Sep 2022 23:13:19 +0700 Subject: [PATCH] feat:add modifyGuildMfaLevel (#2416) * add modifyGuildMfaLevel * plugins/permissions: editGuildMfaLevel * tests/guilds: editGuildMfaLevel * helpers/guilds: editGuuldMfaLevel return void * editGuildMfaLevel return void * Update plugins/permissions/src/guilds/editGuildMfaLevel.ts * tests/guilds: fix editGuildMfaLevel CACHED_COMMUNITY_GUILD_ID is not owned by the bot Co-authored-by: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> --- helpers/guilds/editGuildMfaLevel.ts | 12 ++++++++++++ helpers/guilds/mod.ts | 4 ++-- plugins/permissions/src/guilds/editGuildMfaLevel.ts | 11 +++++++++++ tests/guilds/editGuildMfaLevel.test.ts | 13 +++++++++++++ util/routes.ts | 1 + 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 helpers/guilds/editGuildMfaLevel.ts create mode 100644 plugins/permissions/src/guilds/editGuildMfaLevel.ts create mode 100644 tests/guilds/editGuildMfaLevel.test.ts diff --git a/helpers/guilds/editGuildMfaLevel.ts b/helpers/guilds/editGuildMfaLevel.ts new file mode 100644 index 000000000..6e561c0d4 --- /dev/null +++ b/helpers/guilds/editGuildMfaLevel.ts @@ -0,0 +1,12 @@ +import type { Bot } from "../../mod.ts"; +import type { MfaLevels } from "../../types/shared.ts"; + +/** Modify a guild's MFA level. Requires guild ownership. */ +export async function editGuildMfaLevel(bot: Bot, guildId: bigint, mfaLevel: MfaLevels, reason?: string) { + return await bot.rest.runMethod( + bot.rest, + "POST", + bot.constants.routes.GUILD_MFA_LEVEL(guildId), + { level: mfaLevel, reason }, + ); +} diff --git a/helpers/guilds/mod.ts b/helpers/guilds/mod.ts index f70ea8c7b..3d7a56687 100644 --- a/helpers/guilds/mod.ts +++ b/helpers/guilds/mod.ts @@ -1,9 +1,8 @@ export * from "./automod/mod.ts"; -export * from "./scheduledEvents/mod.ts"; - export * from "./createGuild.ts"; export * from "./deleteGuild.ts"; export * from "./editGuild.ts"; +export * from "./editGuildMfaLevel.ts"; export * from "./editWelcomeScreen.ts"; export * from "./editWidget.ts"; export * from "./getAuditLogs.ts"; @@ -23,3 +22,4 @@ export * from "./getWidget.ts"; export * from "./getWidgetImageUrl.ts"; export * from "./getWidgetSettings.ts"; export * from "./leaveGuild.ts"; +export * from "./scheduledEvents/mod.ts"; diff --git a/plugins/permissions/src/guilds/editGuildMfaLevel.ts b/plugins/permissions/src/guilds/editGuildMfaLevel.ts new file mode 100644 index 000000000..faed6e2ad --- /dev/null +++ b/plugins/permissions/src/guilds/editGuildMfaLevel.ts @@ -0,0 +1,11 @@ +import { BotWithCache } from "../../deps.ts"; + +export default function editGuildMfaLevel(bot: BotWithCache) { + const editGuildMfaLevelOld = bot.helpers.editGuildMfaLevel; + + bot.helpers.editGuildMfaLevel = async function (guildId, mfaLevel, reason) { + const guild = bot.guilds.get(guildId); + if (guild?.ownerId !== bot.id) throw new Error("The bot is not the owner of the guild"); + return await editGuildMfaLevelOld(guildId, mfaLevel, reason); + }; +} diff --git a/tests/guilds/editGuildMfaLevel.test.ts b/tests/guilds/editGuildMfaLevel.test.ts new file mode 100644 index 000000000..e737b27e0 --- /dev/null +++ b/tests/guilds/editGuildMfaLevel.test.ts @@ -0,0 +1,13 @@ +import { MfaLevels } from "../../mod.ts"; +import { assertEquals } from "../deps.ts"; +import { loadBot } from "../mod.ts"; + +Deno.test("[guild] edit guild mfa level", async () => { + const bot = loadBot(); + const guild = await bot.helpers.createGuild({ name: "test" }); + await bot.helpers.editGuildMfaLevel(guild.id, MfaLevels.Elevated, "test"); + assertEquals((await bot.helpers.getGuild(guild.id)).mfaLevel, MfaLevels.Elevated); + await bot.helpers.editGuildMfaLevel(guild.id, MfaLevels.None, "revert test"); + assertEquals((await bot.helpers.getGuild(guild.id)).mfaLevel, MfaLevels.None); + await bot.helpers.deleteGuild(guild.id); +}); diff --git a/util/routes.ts b/util/routes.ts index dc72f9d63..6db3327e0 100644 --- a/util/routes.ts +++ b/util/routes.ts @@ -348,6 +348,7 @@ export const routes = { return url; }, + GUILD_MFA_LEVEL: (guildId: bigint) => `/guilds/${guildId}/mfa`, // Voice VOICE_REGIONS: () => { return `/voice/regions`;