From 60a7ba5c110112f95e5d5c54f63d00c77b466f73 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Tue, 22 Mar 2022 21:51:30 +0000 Subject: [PATCH] fix: add modifyRolePositions --- helpers/roles/mod.ts | 1 + helpers/roles/modifyRolePositions.ts | 26 +++++++++++++++++++ plugins/permissions/src/roles/edit.ts | 1 + .../src/roles/modifyRolePositions.ts | 12 +++++++++ 4 files changed, 40 insertions(+) create mode 100644 helpers/roles/modifyRolePositions.ts create mode 100644 plugins/permissions/src/roles/modifyRolePositions.ts diff --git a/helpers/roles/mod.ts b/helpers/roles/mod.ts index d6e117a19..0541ba668 100644 --- a/helpers/roles/mod.ts +++ b/helpers/roles/mod.ts @@ -3,4 +3,5 @@ export * from "./createRole.ts"; export * from "./deleteRole.ts"; export * from "./editRole.ts"; export * from "./getRoles.ts"; +export * from "./modifyRolePositions.ts"; export * from "./removeRole.ts"; diff --git a/helpers/roles/modifyRolePositions.ts b/helpers/roles/modifyRolePositions.ts new file mode 100644 index 000000000..5b43997a5 --- /dev/null +++ b/helpers/roles/modifyRolePositions.ts @@ -0,0 +1,26 @@ +import { Bot } from "../../bot.ts"; +import { DiscordRole } from "../../types/discord.ts"; +import { Collection } from "../../util/collection.ts"; + +/** Modify the positions of a set of role objects for the guild. Requires the MANAGE_ROLES permission. Returns a list of all of the guild's role objects on success. Fires multiple Guild Role Update Gateway events. */ +export async function modifyRolePositions(bot: Bot, guildId: bigint, options: ModifyRolePositions[]) { + const roles = await bot.rest.runMethod( + bot.rest, + "get", + bot.constants.endpoints.GUILD_ROLES(guildId), + options, + ); + + return new Collection(roles.map((role) => { + const result = bot.transformers.role(bot, { role, guildId }); + return [result.id, result]; + })); +} + +export interface ModifyRolePositions { + /** The role id */ + id: bigint; + /** The sorting position for the role. */ + position?: number | null; +} + diff --git a/plugins/permissions/src/roles/edit.ts b/plugins/permissions/src/roles/edit.ts index ff14a4d4a..e277fbfbf 100644 --- a/plugins/permissions/src/roles/edit.ts +++ b/plugins/permissions/src/roles/edit.ts @@ -29,3 +29,4 @@ export default function editRole(bot: BotWithCache) { return await editRoleOld(guildId, id, options); }; } + diff --git a/plugins/permissions/src/roles/modifyRolePositions.ts b/plugins/permissions/src/roles/modifyRolePositions.ts new file mode 100644 index 000000000..71dd7b3c6 --- /dev/null +++ b/plugins/permissions/src/roles/modifyRolePositions.ts @@ -0,0 +1,12 @@ +import { BotWithCache } from "../../deps.ts"; +import { requireBotGuildPermissions } from "../permissions.ts"; + +export function modifyRolePositions(bot: BotWithCache) { + const modifyRolePositionsOld = bot.helpers.modifyRolePositions; + + bot.helpers.modifyRolePositions = async function (guildId, categoryId) { + requireBotGuildPermissions(bot, guildId, ["MANAGE_ROLES"]); + + return await modifyRolePositionsOld(guildId, categoryId); + }; +}