diff --git a/src/helpers/channels/clone_channel.ts b/src/helpers/channels/clone_channel.ts index d87d48682..8c48d47ad 100644 --- a/src/helpers/channels/clone_channel.ts +++ b/src/helpers/channels/clone_channel.ts @@ -2,6 +2,8 @@ import { cacheHandlers } from "../../cache.ts"; import { createChannel } from "./create_channel.ts"; import { Errors } from "../../types/misc/errors.ts"; import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; +import { calculatePermissions } from "../../util/permissions.ts"; +import { Overwrite } from "../../types/channels/overwrite.ts"; /** Create a copy of a channel */ export async function cloneChannel(channelId: string, reason?: string) { @@ -17,6 +19,20 @@ export async function cloneChannel(channelId: string, reason?: string) { throw new Error(Errors.CHANNEL_NOT_IN_GUILD); } + //Convert channel permission + const newOverwrites: Overwrite[] = []; + + channelToClone.permissionOverwrites.forEach((overwrite) => { + newOverwrites.push({ + id: overwrite.id, + type: overwrite.type, + allow: calculatePermissions(BigInt(overwrite.allow)), + deny: calculatePermissions(BigInt(overwrite.deny)), + }); + }); + + channelToClone.permissionOverwrites = newOverwrites; + //Create the channel (also handles permissions) return createChannel(channelToClone.guildId!, channelToClone, reason); } diff --git a/src/helpers/channels/create_channel.ts b/src/helpers/channels/create_channel.ts index 903103343..ac586c930 100644 --- a/src/helpers/channels/create_channel.ts +++ b/src/helpers/channels/create_channel.ts @@ -21,15 +21,7 @@ export async function createChannel( ) { const requiredPerms: Set = new Set(["MANAGE_CHANNELS"]); - //Integration with permissions for channel cloning - let useDefaultOverwrites = false; - options?.permissionOverwrites?.forEach((overwrite) => { - if (overwrite.id && parseInt(overwrite.allow)) { - useDefaultOverwrites = true; - - return; - } eventHandlers.debug?.( "loop", `Running forEach loop in create_channel file.`, @@ -48,14 +40,12 @@ export async function createChannel( endpoints.GUILD_CHANNELS(guildId), { ...camelKeysToSnakeCase(options ?? {}), - permission_overwrites: useDefaultOverwrites - ? options?.permissionOverwrites - : options?.permissionOverwrites?.map((perm) => ({ - ...perm, + permission_overwrites: options?.permissionOverwrites?.map((perm) => ({ + ...perm, - allow: calculateBits(perm.allow), - deny: calculateBits(perm.deny), - })), + allow: calculateBits(perm.allow), + deny: calculateBits(perm.deny), + })), type: options?.type || DiscordChannelTypes.GUILD_TEXT, }, )) as DiscordChannel;