diff --git a/src/handlers/channels/CHANNEL_DELETE.ts b/src/handlers/channels/CHANNEL_DELETE.ts index 1258c5df3..d7be3c8d2 100644 --- a/src/handlers/channels/CHANNEL_DELETE.ts +++ b/src/handlers/channels/CHANNEL_DELETE.ts @@ -23,8 +23,11 @@ export async function handleChannelDelete(bot: Bot, data: DiscordGatewayPayload) bot.events.voiceChannelLeave(bot, vs, guild, channel); }); - } else if ( + } + + if ( [ + DiscordChannelTypes.GuildVoice, DiscordChannelTypes.GuildText, DiscordChannelTypes.DM, DiscordChannelTypes.GroupDm, diff --git a/src/helpers/channels/start_typing.ts b/src/helpers/channels/start_typing.ts index e5247419e..10fb2ce98 100644 --- a/src/helpers/channels/start_typing.ts +++ b/src/helpers/channels/start_typing.ts @@ -18,6 +18,7 @@ export async function startTyping(bot: Bot, channelId: bigint) { DiscordChannelTypes.GuildNewsThread, DiscordChannelTypes.GuildPrivateThread, DiscordChannelTypes.GuildPublicThread, + DiscordChannelTypes.GuildVoice, ].includes(channel.type) ) { throw new Error(bot.constants.Errors.CHANNEL_NOT_TEXT_BASED); diff --git a/src/helpers/messages/pin_message.ts b/src/helpers/messages/pin_message.ts index 8642c3493..d0d18cd47 100644 --- a/src/helpers/messages/pin_message.ts +++ b/src/helpers/messages/pin_message.ts @@ -1,9 +1,26 @@ import type { Bot } from "../../bot.ts"; +import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; /** Pin a message in a channel. Requires MANAGE_MESSAGES. Max pins allowed in a channel = 50. */ export async function pin(bot: Bot, channelId: bigint, messageId: bigint) { - await bot.utils.requireBotChannelPermissions(bot, channelId, ["MANAGE_MESSAGES"]); - + const channel = await bot.cache.channels.get(channelId); + if (channel) { + if ( + ![ + DiscordChannelTypes.DM, + DiscordChannelTypes.GuildNews, + DiscordChannelTypes.GuildText, + DiscordChannelTypes.GuildPublicThread, + DiscordChannelTypes.GuildPrivateThread, + DiscordChannelTypes.GuildNewsThread, + ].includes(channel.type) + ) { + throw new Error(bot.constants.Errors.CHANNEL_NOT_TEXT_BASED); + } + + await bot.utils.requireBotChannelPermissions(bot, channel, ["MANAGE_MESSAGES"]); + } + return await bot.rest.runMethod( bot.rest, "put", diff --git a/src/helpers/messages/send_message.ts b/src/helpers/messages/send_message.ts index c40bb9171..04c569e49 100644 --- a/src/helpers/messages/send_message.ts +++ b/src/helpers/messages/send_message.ts @@ -23,6 +23,7 @@ export async function sendMessage(bot: Bot, channelId: bigint, content: string | DiscordChannelTypes.GuildPublicThread, DiscordChannelTypes.GuildPrivateThread, DiscordChannelTypes.GuildNewsThread, + DiscordChannelTypes.GuildVoice, ].includes(channel.type) ) { throw new Error(Errors.CHANNEL_NOT_TEXT_BASED); diff --git a/src/transformers/channel.ts b/src/transformers/channel.ts index 2396874b3..d9b376a50 100644 --- a/src/transformers/channel.ts +++ b/src/transformers/channel.ts @@ -45,6 +45,7 @@ export function transformChannel( ? bot.transformers.snowflake(payload.channel.application_id) : undefined, parentId: payload.channel.parent_id ? bot.transformers.snowflake(payload.channel.parent_id) : undefined, + // TODO: stage channels? voiceStates: payload.channel.type === DiscordChannelTypes.GuildVoice ? new Collection() : undefined, }; }