From cdb67ba95adfe311055a039fd94a04f8f1909ed5 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Tue, 9 Nov 2021 20:47:14 +0000 Subject: [PATCH] nukes everything --- src/bot.ts | 24 ++++- src/cache.ts | 3 - src/handlers/roles/GUILD_ROLE_CREATE.ts | 15 +-- src/handlers/roles/GUILD_ROLE_DELETE.ts | 16 +-- src/handlers/roles/GUILD_ROLE_UPDATE.ts | 12 +-- src/handlers/voice/VOICE_STATE_UPDATE.ts | 30 +++--- src/helpers/channels/category_children.ts | 8 -- src/helpers/channels/clone_channel.ts | 29 +++--- src/helpers/channels/create_channel.ts | 9 +- src/helpers/channels/create_stage_instance.ts | 11 --- src/helpers/channels/delete_channel.ts | 17 ---- src/helpers/channels/delete_stage_instance.ts | 11 --- src/helpers/channels/edit_channel.ts | 8 -- src/helpers/channels/get_channel.ts | 9 +- src/helpers/channels/get_channels.ts | 15 +-- src/helpers/channels/get_stage_instance.ts | 9 -- src/helpers/channels/is_channel_synced.ts | 24 ----- src/helpers/channels/start_typing.ts | 23 ----- src/helpers/channels/threads/add_to_thread.ts | 12 --- src/helpers/channels/threads/delete_thread.ts | 12 +-- .../channels/threads/get_thread_members.ts | 34 +++---- src/helpers/channels/threads/join_thread.ts | 7 +- src/helpers/channels/threads/leave_thread.ts | 5 +- .../channels/threads/remove_thread_member.ts | 12 +-- .../threads/startThreadWithMessage.ts | 27 ++--- .../threads/startThreadWithoutMessage.ts | 17 +--- src/helpers/channels/update_stage_instance.ts | 10 -- src/helpers/emojis/get_emoji.ts | 11 +-- src/helpers/emojis/get_emojis.ts | 14 +-- src/helpers/guilds/create_guild.ts | 8 +- src/helpers/guilds/edit_guild.ts | 14 +-- src/helpers/guilds/get_guild.ts | 7 +- src/helpers/guilds/get_widget.ts | 8 +- src/helpers/guilds/get_widget_image_url.ts | 12 +-- src/helpers/invites/delete_invite.ts | 18 +--- src/helpers/members/edit_member.ts | 38 ------- .../members/fetchAndRetrieveMembers.ts | 7 -- src/helpers/members/get_member.ts | 10 +- src/helpers/members/get_members.ts | 32 ++---- src/helpers/members/search_members.ts | 21 +--- src/helpers/members/send_direct_message.ts | 21 +--- src/helpers/messages/delete_message.ts | 6 -- src/helpers/messages/edit_message.ts | 14 --- src/helpers/messages/get_message.ts | 4 - src/helpers/messages/pin_message.ts | 24 +---- src/helpers/messages/send_message.ts | 34 ------- src/helpers/messages/suppress_embeds.ts | 6 -- src/helpers/mod.ts | 2 - src/helpers/roles/create_role.ts | 8 -- src/helpers/roles/get_roles.ts | 14 +-- .../templates/create_guild_from_template.ts | 4 - src/transformers/guild.ts | 20 ---- src/util/dispatch_requirements.ts | 99 ------------------- tests/helpers/channels/categoryChannels.ts | 2 +- tests/helpers/emojis/create_emoji.ts | 4 +- tests/helpers/emojis/delete_emoji.ts | 8 +- tests/helpers/emojis/edit_emoji.ts | 8 +- tests/helpers/emojis/get_emoji.ts | 10 +- tests/helpers/emojis/get_emojis.ts | 4 +- tests/helpers/guilds/editGuild.ts | 2 +- tests/helpers/messages/edit_message.ts | 4 +- 61 files changed, 156 insertions(+), 751 deletions(-) delete mode 100644 src/helpers/channels/category_children.ts delete mode 100644 src/helpers/channels/is_channel_synced.ts delete mode 100644 src/helpers/members/fetchAndRetrieveMembers.ts delete mode 100644 src/util/dispatch_requirements.ts diff --git a/src/bot.ts b/src/bot.ts index 4d677671f..eef1525b0 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -1074,8 +1074,22 @@ export interface EventHandlers { voiceServerUpdate: (bot: Bot, payload: { token: string; endpoint?: string; guildId: bigint }) => any; voiceStateUpdate: ( bot: Bot, - voiceState: DiscordenoVoiceState, - payload: { guild?: DiscordenoGuild; member?: DiscordenoMember; user?: DiscordenoUser } + voiceState: { + guildId?: bigint; + channelId?: bigint; + userId: bigint; + member?: DiscordenoMember; + user?: DiscordenoUser; + sessionId: string; + deaf: boolean; + mute: boolean; + selfDeaf: boolean; + selfMute: boolean; + selfStream?: boolean; + selfVideo: boolean; + suppress: boolean; + requestToSpeakTimestamp?: number; + } ) => any; channelCreate: (bot: Bot, channel: DiscordenoChannel) => any; dispatchRequirements: (bot: Bot, data: GatewayPayload, shardId: number) => any; @@ -1136,9 +1150,9 @@ export interface EventHandlers { guildDelete: (bot: Bot, id: bigint, shardId: number) => any; guildUpdate: (bot: Bot, guild: DiscordenoGuild) => any; raw: (bot: Bot, data: GatewayPayload, shardId: number) => any; - roleCreate: (bot: Bot, guild: DiscordenoGuild, role: DiscordenoRole) => any; - roleDelete: (bot: Bot, guild: DiscordenoGuild, role: DiscordenoRole) => any; - roleUpdate: (bot: Bot, guild: DiscordenoGuild, role: DiscordenoRole, oldRole?: DiscordenoRole) => any; + roleCreate: (bot: Bot, role: DiscordenoRole) => any; + roleDelete: (bot: Bot, payload: { guildId: bigint; roleId: bigint }) => any; + roleUpdate: (bot: Bot, role: DiscordenoRole) => any; webhooksUpdate: (bot: Bot, payload: { channelId: bigint; guildId: bigint }) => any; botUpdate: (bot: Bot, user: DiscordenoUser) => any; typingStart: ( diff --git a/src/cache.ts b/src/cache.ts index a2d576b4c..497d3787b 100644 --- a/src/cache.ts +++ b/src/cache.ts @@ -212,7 +212,6 @@ export type AsyncCacheHandler = { export type CacheExecutor = ( type: | "GET_ALL_MEMBERS" - | "FILTER_CATEGORY_CHILDREN_CHANNELS" | "DELETE_MESSAGES_FROM_CHANNEL" | "DELETE_ROLE_FROM_MEMBER" | "BULK_DELETE_MESSAGES" @@ -228,8 +227,6 @@ export type CacheExecutor = ( export function createExecute(cache: Cache): CacheExecutor { return function (type, options) { switch (type) { - case "FILTER_CATEGORY_CHILDREN_CHANNELS": - return cache.channels.filter((c) => c.parentId === options.parentChannelId); case "DELETE_MESSAGES_FROM_CHANNEL": cache.messages.forEach((message) => { if (message.channelId === options.channelId) { diff --git a/src/handlers/roles/GUILD_ROLE_CREATE.ts b/src/handlers/roles/GUILD_ROLE_CREATE.ts index 530d39bc5..773bba64c 100644 --- a/src/handlers/roles/GUILD_ROLE_CREATE.ts +++ b/src/handlers/roles/GUILD_ROLE_CREATE.ts @@ -5,15 +5,8 @@ import { SnakeCasedPropertiesDeep } from "../../types/util.ts"; export async function handleGuildRoleCreate(bot: Bot, data: DiscordGatewayPayload) { const payload = data.d as SnakeCasedPropertiesDeep; - - const guildId = bot.transformers.snowflake(payload.guild_id); - const guild = await bot.cache.guilds.get(guildId); - if (!guild) return; - - const role = bot.transformers.role(bot, { role: payload.role, guildId }); - - guild.roles = guild.roles.set(role.id, role); - await bot.cache.guilds.set(guild.id, guild); - - bot.events.roleCreate(bot, guild, role); + bot.events.roleCreate( + bot, + bot.transformers.role(bot, { role: payload.role, guildId: bot.transformers.snowflake(payload.guild_id) }) + ); } diff --git a/src/handlers/roles/GUILD_ROLE_DELETE.ts b/src/handlers/roles/GUILD_ROLE_DELETE.ts index d0347c820..1ef304469 100644 --- a/src/handlers/roles/GUILD_ROLE_DELETE.ts +++ b/src/handlers/roles/GUILD_ROLE_DELETE.ts @@ -5,19 +5,5 @@ import { SnakeCasedPropertiesDeep } from "../../types/util.ts"; export async function handleGuildRoleDelete(bot: Bot, data: DiscordGatewayPayload) { const payload = data.d as SnakeCasedPropertiesDeep; - const guildId = bot.transformers.snowflake(payload.guild_id); - const guild = await bot.cache.guilds.get(guildId); - if (!guild) return; - - const roleId = bot.transformers.snowflake(payload.role_id); - - const cachedRole = guild.roles.get(roleId); - guild.roles.delete(roleId); - - await bot.cache.guilds.set(guild.id, guild); - - if (cachedRole) bot.events.roleDelete(bot, guild, cachedRole); - - // For bots without GUILD_MEMBERS member.roles is never updated breaking permissions checking. - await bot.cache.execute("DELETE_ROLE_FROM_MEMBER", { guildId: guild.id, roleId }); + bot.events.roleDelete(bot, { roleId: bot.transformers.snowflake(payload.role_id), guildId: bot.transformers.snowflake(payload.guild_id) }); } diff --git a/src/handlers/roles/GUILD_ROLE_UPDATE.ts b/src/handlers/roles/GUILD_ROLE_UPDATE.ts index 5d29d6843..e928737f2 100644 --- a/src/handlers/roles/GUILD_ROLE_UPDATE.ts +++ b/src/handlers/roles/GUILD_ROLE_UPDATE.ts @@ -5,13 +5,9 @@ import { SnakeCasedPropertiesDeep } from "../../types/util.ts"; export async function handleGuildRoleUpdate(bot: Bot, data: DiscordGatewayPayload) { const payload = data.d as SnakeCasedPropertiesDeep; - const guildId = bot.transformers.snowflake(payload.guild_id); - const guild = await bot.cache.guilds.get(guildId); - if (!guild) return; - const role = bot.transformers.role(bot, { role: payload.role, guildId }); - guild.roles = guild.roles.set(role.id, role); - await bot.cache.guilds.set(guild.id, guild); - - bot.events.roleUpdate(bot, guild, role, guild.roles.get(role.id)); + bot.events.roleUpdate( + bot, + bot.transformers.role(bot, { role: payload.role, guildId: bot.transformers.snowflake(payload.guild_id) }) + ); } diff --git a/src/handlers/voice/VOICE_STATE_UPDATE.ts b/src/handlers/voice/VOICE_STATE_UPDATE.ts index d387a3998..59b2a7c31 100644 --- a/src/handlers/voice/VOICE_STATE_UPDATE.ts +++ b/src/handlers/voice/VOICE_STATE_UPDATE.ts @@ -8,16 +8,24 @@ export async function handleVoiceStateUpdate(bot: Bot, data: DiscordGatewayPaylo if (!payload.guild_id) return; const guildId = bot.transformers.snowflake(payload.guild_id); - const voiceState = bot.transformers.voiceState(bot, { voiceState: payload, guildId }); + const userId = bot.transformers.snowflake(payload.user_id); - const guild = await bot.cache.guilds.get(guildId); - if (guild) { - guild.voiceStates.set(voiceState.userId, voiceState); - await bot.cache.guilds.set(guild.id, guild); - } - - const user = payload.member ? bot.transformers.user(bot, payload.member.user) : undefined; - const member = payload.member ? bot.transformers.member(bot, payload.member, guildId, user!.id) : undefined; - - bot.events.voiceStateUpdate(bot, voiceState, { guild, member, user }); + bot.events.voiceStateUpdate(bot, { + guildId, + userId, + channelId: payload.channel_id ? bot.transformers.snowflake(payload.channel_id) : undefined, + member: payload.member ? bot.transformers.member(bot, payload.member, guildId, userId) : undefined, + user: payload.member ? bot.transformers.user(bot, payload.member.user) : undefined, + sessionId: payload.session_id, + deaf: payload.deaf, + mute: payload.mute, + selfDeaf: payload.self_deaf, + selfMute: payload.self_mute, + selfStream: payload.self_stream, + selfVideo: payload.self_video, + suppress: payload.suppress, + requestToSpeakTimestamp: payload.request_to_speak_timestamp + ? Date.parse(payload.request_to_speak_timestamp) + : undefined, + }); } diff --git a/src/helpers/channels/category_children.ts b/src/helpers/channels/category_children.ts deleted file mode 100644 index da8614f9d..000000000 --- a/src/helpers/channels/category_children.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Bot } from "../../bot.ts"; - -/** Gets an array of all the channels ids that are the children of this category. - * ⚠️ This does not work for custom cache users! - */ -export async function categoryChildren(bot: Bot, parentChannelId: bigint) { - return await bot.cache.execute("FILTER_CATEGORY_CHILDREN_CHANNELS", { parentChannelId }); -} diff --git a/src/helpers/channels/clone_channel.ts b/src/helpers/channels/clone_channel.ts index 2e2da197e..966542bec 100644 --- a/src/helpers/channels/clone_channel.ts +++ b/src/helpers/channels/clone_channel.ts @@ -1,23 +1,22 @@ import type { Bot } from "../../bot.ts"; -import { separate } from "../../transformers/channel.ts"; -import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; +import { DiscordenoChannel, separate } from "../../transformers/channel.ts"; import type { CreateGuildChannel } from "../../types/guilds/create_guild_channel.ts"; /** Create a copy of a channel */ -export async function cloneChannel(bot: Bot, channelId: bigint, reason?: string) { - const channelToClone = await bot.cache.channels.get(channelId); - if (!channelToClone) throw new Error(bot.constants.Errors.CHANNEL_NOT_FOUND); - - //Check for DM channel - if (channelToClone.type === DiscordChannelTypes.DM || channelToClone.type === DiscordChannelTypes.GroupDm) { - throw new Error(bot.constants.Errors.CHANNEL_NOT_IN_GUILD); - } +export async function cloneChannel(bot: Bot, channel: DiscordenoChannel, reason?: string) { + if (!channel.guildId) throw new Error(`Cannot clone a channel outside a guild`); const createChannelOptions: CreateGuildChannel = { - ...channelToClone, - name: channelToClone.name!, - topic: channelToClone.topic || undefined, - permissionOverwrites: channelToClone.permissionOverwrites.map((overwrite) => { + type: channel.type, + bitrate: channel.bitrate, + userLimit: channel.userLimit, + rateLimitPerUser: channel.rateLimitPerUser, + position: channel.position, + parentId: channel.parentId, + nsfw: channel.nsfw, + name: channel.name!, + topic: channel.topic || undefined, + permissionOverwrites: channel.permissionOverwrites.map((overwrite) => { const [type, id, allow, deny] = separate(overwrite); return { @@ -30,5 +29,5 @@ export async function cloneChannel(bot: Bot, channelId: bigint, reason?: string) }; //Create the channel (also handles permissions) - return await bot.helpers.createChannel(channelToClone.guildId!, createChannelOptions, reason); + return await bot.helpers.createChannel(channel.guildId!, createChannelOptions, reason); } diff --git a/src/helpers/channels/create_channel.ts b/src/helpers/channels/create_channel.ts index e39be7946..f876dc0f4 100644 --- a/src/helpers/channels/create_channel.ts +++ b/src/helpers/channels/create_channel.ts @@ -5,10 +5,6 @@ import type { Bot } from "../../bot.ts"; /** Create a channel in your server. Bot needs MANAGE_CHANNEL permissions in the server. */ export async function createChannel(bot: Bot, guildId: bigint, options?: CreateGuildChannel, reason?: string) { - if (options?.permissionOverwrites) { - await bot.utils.requireOverwritePermissions(bot, guildId, options.permissionOverwrites); - } - // BITRATES ARE IN THOUSANDS SO IF USER PROVIDES 32 WE CONVERT TO 32000 if (options?.bitrate && options.bitrate < 1000) options.bitrate *= 1000; @@ -38,8 +34,5 @@ export async function createChannel(bot: Bot, guildId: bigint, options?: CreateG : {} ); - const channel = bot.transformers.channel(bot, { channel: result, guildId }); - await bot.cache.channels.set(channel.id, channel); - - return channel; + return bot.transformers.channel(bot, { channel: result, guildId }); } diff --git a/src/helpers/channels/create_stage_instance.ts b/src/helpers/channels/create_stage_instance.ts index c1047284f..b41bdcc15 100644 --- a/src/helpers/channels/create_stage_instance.ts +++ b/src/helpers/channels/create_stage_instance.ts @@ -1,20 +1,9 @@ import type { StageInstance } from "../../types/channels/stage_instance.ts"; import type { Bot } from "../../bot.ts"; -import { ChannelTypes } from "../../types/channels/channel_types.ts"; import { PrivacyLevel } from "../../types/channels/privacy_level.ts"; /** Creates a new Stage instance associated to a Stage channel. Requires the user to be a moderator of the Stage channel. */ export async function createStageInstance(bot: Bot, channelId: bigint, topic: string, privacyLevel?: PrivacyLevel) { - const channel = await bot.cache.channels.get(channelId); - - if (channel) { - if (channel.type !== ChannelTypes.GuildStageVoice) { - throw new Error(bot.constants.Errors.CHANNEL_NOT_STAGE_VOICE); - } - - await bot.utils.requireBotChannelPermissions(bot, channel, ["MANAGE_CHANNELS", "MUTE_MEMBERS", "MOVE_MEMBERS"]); - } - if (!bot.utils.validateLength(topic, { max: 120, min: 1 })) { throw new Error(bot.constants.Errors.INVALID_TOPIC_LENGTH); } diff --git a/src/helpers/channels/delete_channel.ts b/src/helpers/channels/delete_channel.ts index 60e3626d3..3766d4e80 100644 --- a/src/helpers/channels/delete_channel.ts +++ b/src/helpers/channels/delete_channel.ts @@ -2,23 +2,6 @@ import type { Bot } from "../../bot.ts"; /** Delete a channel in your server. Bot needs MANAGE_CHANNEL permissions in the server. */ export async function deleteChannel(bot: Bot, channelId: bigint, reason?: string) { - const channel = await bot.cache.channels.get(channelId); - - if (channel?.guildId) { - const guild = await bot.cache.guilds.get(channel.guildId); - if (!guild) throw new Error(bot.constants.Errors.GUILD_NOT_FOUND); - - if (guild.rulesChannelId === channelId) { - throw new Error(bot.constants.Errors.RULES_CHANNEL_CANNOT_BE_DELETED); - } - - if (guild.publicUpdatesChannelId === channelId) { - throw new Error(bot.constants.Errors.UPDATES_CHANNEL_CANNOT_BE_DELETED); - } - - await bot.utils.requireBotGuildPermissions(bot, guild, ["MANAGE_CHANNELS"]); - } - return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.CHANNEL_BASE(channelId), { reason, }); diff --git a/src/helpers/channels/delete_stage_instance.ts b/src/helpers/channels/delete_stage_instance.ts index c8fb9e4c0..b2594e572 100644 --- a/src/helpers/channels/delete_stage_instance.ts +++ b/src/helpers/channels/delete_stage_instance.ts @@ -1,17 +1,6 @@ -import { ChannelTypes } from "../../types/channels/channel_types.ts"; import type { Bot } from "../../bot.ts"; /** Deletes the Stage instance. Requires the user to be a moderator of the Stage channel. */ export async function deleteStageInstance(bot: Bot, channelId: bigint) { - const channel = await bot.cache.channels.get(channelId); - - if (channel) { - if (channel.type !== ChannelTypes.GuildStageVoice) { - throw new Error(bot.constants.Errors.CHANNEL_NOT_STAGE_VOICE); - } - - await bot.utils.requireBotChannelPermissions(bot, channel, ["MUTE_MEMBERS", "MANAGE_CHANNELS", "MOVE_MEMBERS"]); - } - return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.STAGE_INSTANCE(channelId)); } diff --git a/src/helpers/channels/edit_channel.ts b/src/helpers/channels/edit_channel.ts index fa4d15f7b..2f1eba0d7 100644 --- a/src/helpers/channels/edit_channel.ts +++ b/src/helpers/channels/edit_channel.ts @@ -5,14 +5,6 @@ import { DiscordenoChannel } from "../../transformers/channel.ts"; /** Update a channel's settings. Requires the `MANAGE_CHANNELS` permission for the guild. */ export async function editChannel(bot: Bot, channelId: bigint, options: ModifyChannel, reason?: string) { - const channel = await bot.cache.channels.get(channelId); - - if (channel) { - if (options.permissionOverwrites && Array.isArray(options.permissionOverwrites)) { - await bot.utils.requireOverwritePermissions(bot, channel.guildId, options.permissionOverwrites); - } - } - if (options.name || options.topic) { const request = editChannelNameTopicQueue.get(channelId); if (!request) { diff --git a/src/helpers/channels/get_channel.ts b/src/helpers/channels/get_channel.ts index de94d5435..ea671e630 100644 --- a/src/helpers/channels/get_channel.ts +++ b/src/helpers/channels/get_channel.ts @@ -5,16 +5,11 @@ import type { Channel } from "../../types/channels/channel.ts"; * * ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.** */ -export async function getChannel(bot: Bot, channelId: bigint, addToCache = true) { +export async function getChannel(bot: Bot, channelId: bigint) { const result = await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.CHANNEL_BASE(channelId)); - const discordenoChannel = bot.transformers.channel(bot, { + return bot.transformers.channel(bot, { channel: result, guildId: result.guild_id ? bot.transformers.snowflake(result.guild_id) : undefined, }); - if (addToCache) { - await bot.cache.channels.set(discordenoChannel.id, discordenoChannel); - } - - return discordenoChannel; } diff --git a/src/helpers/channels/get_channels.ts b/src/helpers/channels/get_channels.ts index f95404943..518ef6eb9 100644 --- a/src/helpers/channels/get_channels.ts +++ b/src/helpers/channels/get_channels.ts @@ -6,21 +6,10 @@ import type { Bot } from "../../bot.ts"; * * ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.** */ -export async function getChannels(bot: Bot, guildId: bigint, addToCache = true) { +export async function getChannels(bot: Bot, guildId: bigint) { const result = await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.GUILD_CHANNELS(guildId)); return new Collection( - ( - await Promise.all( - result.map(async (res) => { - const channel = bot.transformers.channel(bot, { channel: res, guildId }); - if (addToCache) { - await bot.cache.channels.set(channel.id, channel); - } - - return channel; - }) - ) - ).map((c) => [c.id, c]) + result.map((res) => bot.transformers.channel(bot, { channel: res, guildId })).map((c) => [c.id, c]) ); } diff --git a/src/helpers/channels/get_stage_instance.ts b/src/helpers/channels/get_stage_instance.ts index a0affe3ce..2f72542de 100644 --- a/src/helpers/channels/get_stage_instance.ts +++ b/src/helpers/channels/get_stage_instance.ts @@ -1,16 +1,7 @@ -import { ChannelTypes } from "../../types/channels/channel_types.ts"; import type { StageInstance } from "../../types/channels/stage_instance.ts"; import type { Bot } from "../../bot.ts"; /** Gets the stage instance associated with the Stage channel, if it exists. */ export async function getStageInstance(bot: Bot, channelId: bigint) { - const channel = await bot.cache.channels.get(channelId); - - if (channel) { - if (channel.type !== ChannelTypes.GuildStageVoice) { - throw new Error(bot.constants.Errors.CHANNEL_NOT_STAGE_VOICE); - } - } - return await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.STAGE_INSTANCE(channelId)); } diff --git a/src/helpers/channels/is_channel_synced.ts b/src/helpers/channels/is_channel_synced.ts deleted file mode 100644 index 1f147d7c0..000000000 --- a/src/helpers/channels/is_channel_synced.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Bot } from "../../bot.ts"; -import { separate } from "../../transformers/channel.ts"; - -/** Checks whether a channel is synchronized with its parent/category channel or not. */ -export async function isChannelSynced(bot: Bot, channelId: bigint) { - const channel = await bot.cache.channels.get(channelId); - if (!channel?.parentId) return false; - - const parentChannel = await bot.cache.channels.get(channel.parentId); - if (!parentChannel) return false; - - return channel.permissionOverwrites?.every((overwrite) => { - const [type, id, allow, deny] = separate(overwrite); - - const permission = parentChannel.permissionOverwrites?.find((ow) => { - const [_, owID] = separate(ow); - return owID === id; - }); - - if (!permission) return false; - const [parentType, parentId, parentAllow, parentDeny] = separate(permission); - return !(allow !== parentAllow || deny !== parentDeny); - }); -} diff --git a/src/helpers/channels/start_typing.ts b/src/helpers/channels/start_typing.ts index 10fb2ce98..0c5d78b1a 100644 --- a/src/helpers/channels/start_typing.ts +++ b/src/helpers/channels/start_typing.ts @@ -7,28 +7,5 @@ import type { Bot } from "../../bot.ts"; * this endpoint may be called to let the user know that the bot is processing their message. */ export async function startTyping(bot: Bot, channelId: bigint) { - const channel = await bot.cache.channels.get(channelId); - // If the channel is cached, we can do extra checks/safety - if (channel) { - if ( - ![ - DiscordChannelTypes.DM, - DiscordChannelTypes.GuildNews, - DiscordChannelTypes.GuildText, - DiscordChannelTypes.GuildNewsThread, - DiscordChannelTypes.GuildPrivateThread, - DiscordChannelTypes.GuildPublicThread, - DiscordChannelTypes.GuildVoice, - ].includes(channel.type) - ) { - throw new Error(bot.constants.Errors.CHANNEL_NOT_TEXT_BASED); - } - - const hasSendMessagesPerm = await bot.utils.botHasChannelPermissions(bot, channelId, ["SEND_MESSAGES"]); - if (!hasSendMessagesPerm) { - throw new Error(bot.constants.Errors.MISSING_SEND_MESSAGES); - } - } - return await bot.rest.runMethod(bot.rest, "post", bot.constants.endpoints.CHANNEL_TYPING(channelId)); } diff --git a/src/helpers/channels/threads/add_to_thread.ts b/src/helpers/channels/threads/add_to_thread.ts index 7e6e7369d..05bc89af4 100644 --- a/src/helpers/channels/threads/add_to_thread.ts +++ b/src/helpers/channels/threads/add_to_thread.ts @@ -2,17 +2,5 @@ import type { Bot } from "../../../bot.ts"; /** Adds a user to a thread. Requires the ability to send messages in the thread. Requires the thread is not archived. */ export async function addToThread(bot: Bot, threadId: bigint, userId: bigint) { - // const thread = await bot.cache.threads.get(threadId); - // if (thread) { - // if (thread.archived) { - // throw new Error(bot.constants.Errors.CANNOT_ADD_USER_TO_ARCHIVED_THREADS); - // } - - // // If a user id is provided SEND_MESSAGES is required. - // const channel = await bot.cache.channels.get(thread.parentId); - // // TODO: does MANAGE_THREADS override this???? - // if (channel) await bot.utils.requireBotChannelPermissions(bot, channel, ["SEND_MESSAGES"]); - // } - return await bot.rest.runMethod(bot.rest, "put", bot.constants.endpoints.THREAD_USER(threadId, userId)); } diff --git a/src/helpers/channels/threads/delete_thread.ts b/src/helpers/channels/threads/delete_thread.ts index 1c476c9e8..d1876251f 100644 --- a/src/helpers/channels/threads/delete_thread.ts +++ b/src/helpers/channels/threads/delete_thread.ts @@ -2,13 +2,7 @@ import type { Bot } from "../../../bot.ts"; /** Delete a thread in your server. Bot needs MANAGE_THREADS permissions in the server. */ export async function deleteThread(bot: Bot, threadId: bigint, reason?: string) { - // const thread = await bot.cache.threads.get(threadId); - // if (thread) { - // const channel = await bot.cache.channels.get(thread?.parentId); - // if (channel?.guildId) await bot.utils.requireBotGuildPermissions(bot, channel.guildId, ["MANAGE_THREADS"]); - // } - - // return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.CHANNEL_BASE(threadId), { - // reason, - // }); + return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.CHANNEL_BASE(threadId), { + reason, + }); } diff --git a/src/helpers/channels/threads/get_thread_members.ts b/src/helpers/channels/threads/get_thread_members.ts index 4a65f5962..63380f934 100644 --- a/src/helpers/channels/threads/get_thread_members.ts +++ b/src/helpers/channels/threads/get_thread_members.ts @@ -6,24 +6,18 @@ import { Collection } from "../../../util/collection.ts"; /** Returns thread members objects that are members of the thread. */ export async function getThreadMembers(bot: Bot, threadId: bigint) { - // // Check if intents is not 0 as proxy ws won't set intents in other instances - // if ( - // bot.gateway.identifyPayload.intents && - // !(bot.gateway.identifyPayload.intents & DiscordGatewayIntents.GuildMembers) - // ) { - // throw new Error(bot.constants.Errors.MISSING_INTENT_GUILD_MEMBERS); - // } - // const thread = await bot.cache.threads.get(threadId); - // if (thread?.isPrivate) { - // const channel = await bot.cache.channels.get(thread.parentId); - // if (channel && !(await bot.utils.botHasChannelPermissions(bot, channel, ["MANAGE_THREADS"])) && !thread.botIsMember) - // throw new Error(bot.constants.Errors.CANNOT_GET_MEMBERS_OF_AN_UNJOINED_PRIVATE_THREAD); - // } - // const result = await bot.rest.runMethod( - // bot.rest, - // "get", - // bot.constants.endpoints.THREAD_MEMBERS(threadId) - // ); - // const members = result.map((member) => threadMemberModified(member)); - // return new Collection(members.map((member) => [member.id, member])); + const result = await bot.rest.runMethod( + bot.rest, + "get", + bot.constants.endpoints.THREAD_MEMBERS(threadId) + ); + return result; + + // return new Collection(result.map((res) => [bot.transformers.snowflake(result.userId), { + // id?: string; + // /** The id of the user */ + // userId?: string; + // /** The time the current user last joined the thread */ + // joinTimestamp: string; + // }])); } diff --git a/src/helpers/channels/threads/join_thread.ts b/src/helpers/channels/threads/join_thread.ts index 7adcc7704..0a8ec5967 100644 --- a/src/helpers/channels/threads/join_thread.ts +++ b/src/helpers/channels/threads/join_thread.ts @@ -2,10 +2,5 @@ import type { Bot } from "../../../bot.ts"; /** Adds the bot to the thread. Cannot join an archived thread. */ export async function joinThread(bot: Bot, threadId: bigint) { - // const thread = await bot.cache.threads.get(threadId); - // if (thread?.archived) { - // throw new Error(bot.constants.Errors.CANNOT_ADD_USER_TO_ARCHIVED_THREADS); - // } - - // return await bot.rest.runMethod(bot.rest, "put", bot.constants.endpoints.THREAD_ME(threadId)); + return await bot.rest.runMethod(bot.rest, "put", bot.constants.endpoints.THREAD_ME(threadId)); } diff --git a/src/helpers/channels/threads/leave_thread.ts b/src/helpers/channels/threads/leave_thread.ts index 2043cc266..6792dd31b 100644 --- a/src/helpers/channels/threads/leave_thread.ts +++ b/src/helpers/channels/threads/leave_thread.ts @@ -2,8 +2,5 @@ import type { Bot } from "../../../bot.ts"; /** Removes the bot from a thread. Requires the thread is not archived. */ export async function leaveThread(bot: Bot, threadId: bigint) { - // const thread = await bot.cache.threads.get(threadId); - // if (thread?.archived) throw new Error(bot.constants.Errors.CANNOT_LEAVE_ARCHIVED_THREAD); - - // return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.THREAD_ME(threadId)); + return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.THREAD_ME(threadId)); } diff --git a/src/helpers/channels/threads/remove_thread_member.ts b/src/helpers/channels/threads/remove_thread_member.ts index ee3bc2d93..1dc30c5e8 100644 --- a/src/helpers/channels/threads/remove_thread_member.ts +++ b/src/helpers/channels/threads/remove_thread_member.ts @@ -2,15 +2,5 @@ import type { Bot } from "../../../bot.ts"; /** Removes a user from a thread. Requires the MANAGE_THREADS permission or that you are the creator of the thread. Also requires the thread is not archived. */ export async function removeThreadMember(bot: Bot, threadId: bigint, userId: bigint) { - // const thread = await bot.cache.threads.get(threadId); - // if (thread) { - // if (thread.archived) throw new Error(bot.constants.Errors.CANNOT_REMOVE_FROM_ARCHIVED_THREAD); - - // if (thread.ownerId !== bot.id) { - // const channel = await bot.cache.channels.get(thread.parentId); - // if (channel) await bot.utils.requireBotChannelPermissions(bot, channel, ["MANAGE_THREADS"]); - // } - // } - - // return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.THREAD_USER(threadId, userId)); + return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.THREAD_USER(threadId, userId)); } diff --git a/src/helpers/channels/threads/startThreadWithMessage.ts b/src/helpers/channels/threads/startThreadWithMessage.ts index 7acba11e5..dcb7ddd13 100644 --- a/src/helpers/channels/threads/startThreadWithMessage.ts +++ b/src/helpers/channels/threads/startThreadWithMessage.ts @@ -9,22 +9,13 @@ export async function startThreadWithMessage( messageId: bigint, options: StartThreadWithMessage ) { - // const channel = await bot.cache.channels.get(channelId); - // if (channel) { - // if (!channel.isGuildTextBasedChannel) { - // throw new Error(bot.constants.Errors.INVALID_THREAD_PARENT_CHANNEL_TYPE); - // } - // await bot.utils.requireBotChannelPermissions(bot, channel, ["SEND_MESSAGES", "USE_PUBLIC_THREADS"]); - // } - // return channelToThread( - // await bot.rest.runMethod( - // bot.rest, - // "post", - // bot.constants.endpoints.THREAD_START_PUBLIC(channelId, messageId), - // { - // name: options.name, - // auto_archive_duration: options.autoArchiveDuration, - // } - // ) - // ); + return await bot.rest.runMethod( + bot.rest, + "post", + bot.constants.endpoints.THREAD_START_PUBLIC(channelId, messageId), + { + name: options.name, + auto_archive_duration: options.autoArchiveDuration, + } + ); } diff --git a/src/helpers/channels/threads/startThreadWithoutMessage.ts b/src/helpers/channels/threads/startThreadWithoutMessage.ts index 1fbc4ad86..824670ebe 100644 --- a/src/helpers/channels/threads/startThreadWithoutMessage.ts +++ b/src/helpers/channels/threads/startThreadWithoutMessage.ts @@ -4,17 +4,8 @@ import type { Bot } from "../../../bot.ts"; /** Creates a new private thread. Returns a thread channel. */ export async function startThreadWithoutMessage(bot: Bot, channelId: bigint, options: StartThreadWithoutMessage) { - // const channel = await bot.cache.channels.get(channelId); - // if (channel) { - // if (!channel.isGuildTextBasedChannel) throw new Error(bot.constants.Errors.INVALID_THREAD_PARENT_CHANNEL_TYPE); - // if (channel.isNewsChannel) throw new Error(bot.constants.Errors.GUILD_NEWS_CHANNEL_ONLY_SUPPORT_PUBLIC_THREADS); - // await bot.utils.requireBotChannelPermissions(bot, channel, ["SEND_MESSAGES", "USE_PRIVATE_THREADS"]); - // } - // if (options.invitable && options.type !== PRIVATETHREAD) throw new Error("Invitiable option requires private threads."); - // return channelToThread( - // await bot.rest.runMethod(bot.rest, "post", bot.constants.endpoints.THREAD_START_PRIVATE(channelId), { - // name: options.name, - // auto_archive_duration: options.autoArchiveDuration, - // }) - // ); + return await bot.rest.runMethod(bot.rest, "post", bot.constants.endpoints.THREAD_START_PRIVATE(channelId), { + name: options.name, + auto_archive_duration: options.autoArchiveDuration, + }); } diff --git a/src/helpers/channels/update_stage_instance.ts b/src/helpers/channels/update_stage_instance.ts index 37060b30d..a8216f89d 100644 --- a/src/helpers/channels/update_stage_instance.ts +++ b/src/helpers/channels/update_stage_instance.ts @@ -8,16 +8,6 @@ export async function updateStageInstance( channelId: bigint, data: Partial> = {} ) { - const channel = await bot.cache.channels.get(channelId); - - if (channel) { - if (channel.type !== ChannelTypes.GuildStageVoice) { - throw new Error(bot.constants.Errors.CHANNEL_NOT_STAGE_VOICE); - } - - await bot.utils.requireBotChannelPermissions(bot, channel, ["MOVE_MEMBERS", "MUTE_MEMBERS", "MANAGE_CHANNELS"]); - } - if ( data?.topic && !bot.utils.validateLength(data.topic, { diff --git a/src/helpers/emojis/get_emoji.ts b/src/helpers/emojis/get_emoji.ts index 5f0d5232c..4b7b66e64 100644 --- a/src/helpers/emojis/get_emoji.ts +++ b/src/helpers/emojis/get_emoji.ts @@ -8,14 +8,5 @@ import type { Bot } from "../../bot.ts"; * ⚠️ **If you need this, you are probably doing something wrong. Always use cache.guilds.get()?.emojis */ export async function getEmoji(bot: Bot, guildId: bigint, emojiId: bigint, addToCache = true) { - const result = await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.GUILD_EMOJI(guildId, emojiId)); - - if (addToCache) { - const guild = await bot.cache.guilds.get(guildId); - if (!guild) throw new Error(Errors.GUILD_NOT_FOUND); - guild.emojis.set(emojiId, result); - await bot.cache.guilds.set(guildId, guild); - } - - return result; + return await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.GUILD_EMOJI(guildId, emojiId)); } diff --git a/src/helpers/emojis/get_emojis.ts b/src/helpers/emojis/get_emojis.ts index a8c53753c..76cc379c7 100644 --- a/src/helpers/emojis/get_emojis.ts +++ b/src/helpers/emojis/get_emojis.ts @@ -11,17 +11,5 @@ import { Collection } from "../../util/collection.ts"; export async function getEmojis(bot: Bot, guildId: bigint, addToCache = true) { const result = await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.GUILD_EMOJIS(guildId)); - if (addToCache) { - const guild = await bot.cache.guilds.get(guildId); - if (!guild) throw new Error(Errors.GUILD_NOT_FOUND); - - result.forEach((emoji) => { - bot.events.debug(`Running forEach loop in get_emojis file.`); - guild.emojis.set(bot.transformers.snowflake(emoji.id!), emoji); - }); - - await bot.cache.guilds.set(guildId, guild); - } - - return new Collection(result.map((e) => [e.id!, e])); + return new Collection(result.map((e) => [bot.transformers.snowflake(e.id), bot.transformers.emoji(bot, e)])); } diff --git a/src/helpers/guilds/create_guild.ts b/src/helpers/guilds/create_guild.ts index ccf081588..f631ab4c0 100644 --- a/src/helpers/guilds/create_guild.ts +++ b/src/helpers/guilds/create_guild.ts @@ -18,11 +18,5 @@ export async function createGuild(bot: Bot, options: CreateGuild) { verification_level: options.verificationLevel, }); - const guild = bot.transformers.guild(bot, { guild: result, shardId: 0 }); - // MANUALLY CACHE THE GUILD - await bot.cache.guilds.set(guild.id, guild); - // MANUALLY CACHE THE BOT - await bot.helpers.getMember(guild.id, bot.id); - - return guild; + return bot.transformers.guild(bot, { guild: result, shardId: 0 }); } diff --git a/src/helpers/guilds/edit_guild.ts b/src/helpers/guilds/edit_guild.ts index 530530e95..7a4d0cccd 100644 --- a/src/helpers/guilds/edit_guild.ts +++ b/src/helpers/guilds/edit_guild.ts @@ -3,9 +3,7 @@ import type { Guild } from "../../types/guilds/guild.ts"; import type { ModifyGuild } from "../../types/guilds/modify_guild.ts"; /** Modify a guilds settings. Requires the MANAGE_GUILD permission. */ -export async function editGuild(bot: Bot, guildId: bigint, options: ModifyGuild) { - await bot.utils.requireBotGuildPermissions(bot, guildId, ["MANAGE_GUILD"]); - +export async function editGuild(bot: Bot, guildId: bigint, options: ModifyGuild, shardId: number) { if (options.icon && !options.icon.startsWith("data:image/")) { options.icon = await bot.utils.urlToBase64(options.icon); } @@ -18,11 +16,15 @@ export async function editGuild(bot: Bot, guildId: bigint, options: ModifyGuild) options.splash = await bot.utils.urlToBase64(options.splash); } - const result = await bot.rest.runMethod(bot.rest, "patch", bot.constants.endpoints.GUILDS_BASE(guildId), {}); + const result = await bot.rest.runMethod( + bot.rest, + "patch", + bot.constants.endpoints.GUILDS_BASE(guildId), + options + ); - const cached = await bot.cache.guilds.get(guildId); return bot.transformers.guild(bot, { guild: result, - shardId: cached?.shardId || bot.utils.calculateShardId(bot.gateway, guildId), + shardId, }); } diff --git a/src/helpers/guilds/get_guild.ts b/src/helpers/guilds/get_guild.ts index 7fc3adfb1..2ab3ac409 100644 --- a/src/helpers/guilds/get_guild.ts +++ b/src/helpers/guilds/get_guild.ts @@ -13,21 +13,16 @@ export async function getGuild( guildId: bigint, options: { counts?: boolean; addToCache?: boolean } = { counts: true, - addToCache: true, } ) { const result = await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.GUILDS_BASE(guildId), { with_counts: options.counts, }); - const guild = await bot.transformers.guild(bot, { + const guild = bot.transformers.guild(bot, { guild: result, shardId: bot.utils.calculateShardId(bot.gateway, guildId), }); - if (options.addToCache) { - await bot.cache.guilds.set(guild.id, guild); - } - return guild; } diff --git a/src/helpers/guilds/get_widget.ts b/src/helpers/guilds/get_widget.ts index 8c9db9d25..0581de5a8 100644 --- a/src/helpers/guilds/get_widget.ts +++ b/src/helpers/guilds/get_widget.ts @@ -2,13 +2,7 @@ import type { GuildWidgetDetails } from "../../types/guilds/guild_widget_details import type { Bot } from "../../bot.ts"; /** Returns the widget for the guild. */ -export async function getWidget(bot: Bot, guildId: bigint, options?: { force: boolean }) { - if (!options?.force) { - const guild = await bot.cache.guilds.get(guildId); - if (!guild) throw new Error(bot.constants.Errors.GUILD_NOT_FOUND); - if (!guild?.widgetEnabled) throw new Error(bot.constants.Errors.GUILD_WIDGET_NOT_ENABLED); - } - +export async function getWidget(bot: Bot, guildId: bigint) { return await bot.rest.runMethod( bot.rest, "get", diff --git a/src/helpers/guilds/get_widget_image_url.ts b/src/helpers/guilds/get_widget_image_url.ts index 454997a4e..0a1a79485 100644 --- a/src/helpers/guilds/get_widget_image_url.ts +++ b/src/helpers/guilds/get_widget_image_url.ts @@ -2,16 +2,6 @@ import type { Bot } from "../../bot.ts"; import type { GetGuildWidgetImageQuery } from "../../types/guilds/get_guild_widget_image.ts"; /** Returns the widget image URL for the guild. */ -export async function getWidgetImageURL( - bot: Bot, - guildId: bigint, - options?: GetGuildWidgetImageQuery & { force?: boolean } -) { - if (!options?.force) { - const guild = await bot.cache.guilds.get(guildId); - if (!guild) throw new Error(bot.constants.Errors.GUILD_NOT_FOUND); - if (!guild.widgetEnabled) throw new Error(bot.constants.Errors.GUILD_WIDGET_NOT_ENABLED); - } - +export async function getWidgetImageURL(bot: Bot, guildId: bigint, options?: GetGuildWidgetImageQuery) { return `${bot.constants.endpoints.GUILD_WIDGET(guildId)}.png?style=${options?.style ?? "shield"}`; } diff --git a/src/helpers/invites/delete_invite.ts b/src/helpers/invites/delete_invite.ts index ea366568e..5e807b2c4 100644 --- a/src/helpers/invites/delete_invite.ts +++ b/src/helpers/invites/delete_invite.ts @@ -1,21 +1,7 @@ import type { InviteMetadata } from "../../types/invites/invite_metadata.ts"; import type { Bot } from "../../bot.ts"; -import { SnakeCasedPropertiesDeep } from "../../types/util.ts"; /** Deletes an invite for the given code. Requires `MANAGE_CHANNELS` or `MANAGE_GUILD` permission */ -export async function deleteInvite(bot: Bot, channelId: bigint, inviteCode: string) { - const channel = await bot.cache.channels.get(channelId); - if (channel) { - const hasPerm = await bot.utils.botHasChannelPermissions(bot, channel, ["MANAGE_CHANNELS"]); - - if (!hasPerm) { - await bot.utils.requireBotGuildPermissions(bot, channel.guildId, ["MANAGE_GUILD"]); - } - } - - return await bot.rest.runMethod( - bot.rest, - "delete", - bot.constants.endpoints.INVITE(inviteCode) - ); +export async function deleteInvite(bot: Bot, inviteCode: string) { + return await bot.rest.runMethod(bot.rest, "delete", bot.constants.endpoints.INVITE(inviteCode)); } diff --git a/src/helpers/members/edit_member.ts b/src/helpers/members/edit_member.ts index f8bd68eef..a38b922c7 100644 --- a/src/helpers/members/edit_member.ts +++ b/src/helpers/members/edit_member.ts @@ -2,47 +2,9 @@ import type { ModifyGuildMember } from "../../types/guilds/modify_guild_member.t import type { GuildMemberWithUser } from "../../types/members/guild_member.ts"; import type { PermissionStrings } from "../../types/permissions/permission_strings.ts"; import type { Bot } from "../../bot.ts"; -import type { SnakeCasedPropertiesDeep } from "../../types/util.ts"; /** Edit the member */ export async function editMember(bot: Bot, guildId: bigint, memberId: bigint, options: ModifyGuildMember) { - const requiredPerms: Set = new Set(); - - if (options.nick) { - if (options.nick.length > 32) { - throw new Error(bot.constants.Errors.NICKNAMES_MAX_LENGTH); - } - requiredPerms.add("MANAGE_NICKNAMES"); - } - - if (options.roles) requiredPerms.add("MANAGE_ROLES"); - - if (options.mute !== undefined || options.deaf !== undefined || options.channelId !== undefined) { - const memberVoiceState = (await bot.cache.guilds.get(guildId))?.voiceStates.get(memberId); - - if (!memberVoiceState?.channelId) { - throw new Error(bot.constants.Errors.MEMBER_NOT_IN_VOICE_CHANNEL); - } - - if (options.mute !== undefined) { - requiredPerms.add("MUTE_MEMBERS"); - } - - if (options.deaf !== undefined) { - requiredPerms.add("DEAFEN_MEMBERS"); - } - - if (options.channelId) { - const requiredVoicePerms: Set = new Set(["CONNECT", "MOVE_MEMBERS"]); - if (memberVoiceState) { - await bot.utils.requireBotChannelPermissions(bot, memberVoiceState?.channelId, [...requiredVoicePerms]); - } - await bot.utils.requireBotChannelPermissions(bot, options.channelId, [...requiredVoicePerms]); - } - } - - await bot.utils.requireBotGuildPermissions(bot, guildId, [...requiredPerms]); - const result = await bot.rest.runMethod( bot.rest, "patch", diff --git a/src/helpers/members/fetchAndRetrieveMembers.ts b/src/helpers/members/fetchAndRetrieveMembers.ts deleted file mode 100644 index 1b09f3c16..000000000 --- a/src/helpers/members/fetchAndRetrieveMembers.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Bot } from "../../bot.ts"; -import { RequestGuildMembers } from "../../types/members/request_guild_members.ts"; - -export async function fetchAndRetrieveMembers(bot: Bot, shardId: number, options: RequestGuildMembers) { - await bot.helpers.fetchMembers(options.guildId, shardId, options); - return await bot.cache.execute("GET_ALL_MEMBERS", { guildId: options.guildId }); -} diff --git a/src/helpers/members/get_member.ts b/src/helpers/members/get_member.ts index 902d5b46e..90e7919af 100644 --- a/src/helpers/members/get_member.ts +++ b/src/helpers/members/get_member.ts @@ -5,18 +5,12 @@ import type { Bot } from "../../bot.ts"; * * ⚠️ **ADVANCED USE ONLY: Your members will be cached in your guild most likely. Only use this when you are absolutely sure the member is not cached.** */ -export async function getMember(bot: Bot, guildId: bigint, id: bigint, options?: { force?: boolean }) { - const guild = await bot.cache.guilds.get(guildId); - if (!guild && !options?.force) return; - +export async function getMember(bot: Bot, guildId: bigint, id: bigint) { const data = await bot.rest.runMethod( bot.rest, "get", bot.constants.endpoints.GUILD_MEMBER(guildId, id) ); - const discordenoMember = bot.transformers.member(bot, data, guildId, id); - await bot.cache.members.set(discordenoMember.id, discordenoMember); - - return discordenoMember; + return bot.transformers.member(bot, data, guildId, id); } diff --git a/src/helpers/members/get_members.ts b/src/helpers/members/get_members.ts index 81ff409ee..4867b53c5 100644 --- a/src/helpers/members/get_members.ts +++ b/src/helpers/members/get_members.ts @@ -13,20 +13,12 @@ import type { DiscordenoMember } from "../../transformers/member.ts"; * REST(this function): 50/s global(across all shards) rate limit with ALL requests this included * GW(fetchMembers): 120/m(PER shard) rate limit. Meaning if you have 8 shards your limit is 960/m. */ -export async function getMembers(bot: Bot, guildId: bigint, options?: ListGuildMembers & { addToCache?: boolean }) { - // Check if intents is not 0 as proxy ws won't set intents in other instances - if (bot.intents && !(bot.intents & DiscordGatewayIntents.GuildMembers)) { - throw new Error(bot.constants.Errors.MISSING_INTENT_GUILD_MEMBERS); - } - - const guild = await bot.cache.guilds.get(guildId); - if (!guild) throw new Error(bot.constants.Errors.GUILD_NOT_FOUND); - +export async function getMembers(bot: Bot, guildId: bigint, options: ListGuildMembers & { memberCount: number }) { const members = new Collection(); - let membersLeft = options?.limit ?? guild.memberCount; + let membersLeft = options?.limit ?? options.memberCount; let loops = 1; - while ((options?.limit ?? guild.memberCount) > members.size && membersLeft > 0) { + while ((options?.limit ?? options.memberCount) > members.size && membersLeft > 0) { bot.events.debug("Running while loop in getMembers function."); if (options?.limit && options.limit > 1000) { @@ -41,21 +33,8 @@ export async function getMembers(bot: Bot, guildId: bigint, options?: ListGuildM }` ); - const discordenoMembers = await Promise.all( - result.map(async (member) => { - const discordenoMember = bot.transformers.member( - bot, - member, - guildId, - bot.transformers.snowflake(member.user.id) - ); - - if (options?.addToCache !== false) { - await bot.cache.members.set(discordenoMember.id, discordenoMember); - } - - return discordenoMember; - }) + const discordenoMembers = result.map((member) => + bot.transformers.member(bot, member, guildId, bot.transformers.snowflake(member.user.id)) ); if (!discordenoMembers.length) break; @@ -68,6 +47,7 @@ export async function getMembers(bot: Bot, guildId: bigint, options?: ListGuildM options = { limit: options?.limit, after: discordenoMembers[discordenoMembers.length - 1].id.toString(), + memberCount: options.memberCount, }; membersLeft -= 1000; diff --git a/src/helpers/members/search_members.ts b/src/helpers/members/search_members.ts index 06f128138..a30053d04 100644 --- a/src/helpers/members/search_members.ts +++ b/src/helpers/members/search_members.ts @@ -2,8 +2,6 @@ import type { GuildMemberWithUser } from "../../types/members/guild_member.ts"; import type { SearchGuildMembers } from "../../types/members/search_guild_members.ts"; import { Collection } from "../../util/collection.ts"; import { Bot } from "../../bot.ts"; -import { DiscordenoMember } from "../../transformers/member.ts"; -import type { SnakeCasedPropertiesDeep } from "../../types/util.ts"; /** * ⚠️ BEGINNER DEVS!! YOU SHOULD ALMOST NEVER NEED THIS AND YOU CAN GET FROM cache.members.filter() @@ -35,21 +33,10 @@ export async function searchMembers( } ); - const members = await Promise.all( - result.map(async (member) => { - const discordenoMember = bot.transformers.member( - bot, - member, - guildId, - bot.transformers.snowflake(member.user.id) - ); - if (options?.cache) { - await bot.cache.members.set(discordenoMember.id, discordenoMember); - } - - return discordenoMember; + return new Collection( + result.map((member) => { + const m = bot.transformers.member(bot, member, guildId, bot.transformers.snowflake(member.user.id)); + return [m.id, m]; }) ); - - return new Collection(members.map((member) => [member.id, member])); } diff --git a/src/helpers/members/send_direct_message.ts b/src/helpers/members/send_direct_message.ts index 679b83182..ffca7562b 100644 --- a/src/helpers/members/send_direct_message.ts +++ b/src/helpers/members/send_direct_message.ts @@ -1,24 +1,13 @@ import type { Channel } from "../../types/channels/channel.ts"; import type { CreateMessage } from "../../types/messages/create_message.ts"; import type { Bot } from "../../bot.ts"; -import type { SnakeCasedPropertiesDeep } from "../../types/util.ts"; /** Send a message to a users DM. Note: this takes 2 API calls. 1 is to fetch the users dm channel. 2 is to send a message to that channel. */ -export async function sendDirectMessage(bot: Bot, memberId: bigint, content: string | CreateMessage) { +export async function getDmChannel(bot: Bot, memberId: bigint, content: string | CreateMessage) { if (memberId === bot.id) throw new Error(bot.constants.Errors.YOU_CAN_NOT_DM_THE_BOT_ITSELF); - let dmChannel = await bot.cache.channels.get(memberId); - if (!dmChannel) { - // If not available in cache create a new one. - const dmChannelData = await bot.rest.runMethod(bot.rest, "post", bot.constants.endpoints.USER_DM, { - recipient_id: memberId.toString(), - }); - const discordenoChannel = bot.transformers.channel(bot, { channel: dmChannelData }); - // Recreate the channel and add it under the users id - await bot.cache.channels.set(memberId, discordenoChannel); - dmChannel = discordenoChannel; - } - - // If it does exist try sending a message to this user - return await bot.helpers.sendMessage(dmChannel.id, content); + const dmChannelData = await bot.rest.runMethod(bot.rest, "post", bot.constants.endpoints.USER_DM, { + recipient_id: memberId.toString(), + }); + return bot.transformers.channel(bot, { channel: dmChannelData }); } diff --git a/src/helpers/messages/delete_message.ts b/src/helpers/messages/delete_message.ts index be50e3917..043361767 100644 --- a/src/helpers/messages/delete_message.ts +++ b/src/helpers/messages/delete_message.ts @@ -9,12 +9,6 @@ export async function deleteMessage( reason?: string, delayMilliseconds = 0 ) { - const message = await bot.cache.messages.get(messageId); - - if (message && message.authorId !== bot.id) { - await bot.utils.requireBotChannelPermissions(bot, message.channelId, ["MANAGE_MESSAGES"]); - } - if (delayMilliseconds) await bot.utils.delay(delayMilliseconds); return await bot.rest.runMethod( diff --git a/src/helpers/messages/edit_message.ts b/src/helpers/messages/edit_message.ts index b15c93708..eed9952ff 100644 --- a/src/helpers/messages/edit_message.ts +++ b/src/helpers/messages/edit_message.ts @@ -1,24 +1,10 @@ -// import { cacheHandlers } from "../../cache.ts"; import type { EditMessage } from "../../types/messages/edit_message.ts"; import type { Message } from "../../types/messages/message.ts"; -import type { PermissionStrings } from "../../types/permissions/permission_strings.ts"; import type { Bot } from "../../bot.ts"; -import type { SnakeCasedPropertiesDeep } from "../../types/util.ts"; import { DiscordMessageComponentTypes } from "../../types/messages/components/message_component_types.ts"; /** Edit the message. */ export async function editMessage(bot: Bot, channelId: bigint, messageId: bigint, content: string | EditMessage) { - const message = await bot.cache.messages.get(messageId); - - if (message) { - if (message.authorId !== bot.id) { - throw new Error("You can only edit a message that was sent by the bot."); - } - const requiredPerms: PermissionStrings[] = ["SEND_MESSAGES"]; - - await bot.utils.requireBotChannelPermissions(bot, message.channelId, requiredPerms); - } - if (typeof content === "string") content = { content }; if (content.components?.length) { diff --git a/src/helpers/messages/get_message.ts b/src/helpers/messages/get_message.ts index 77cce3e38..71aea5601 100644 --- a/src/helpers/messages/get_message.ts +++ b/src/helpers/messages/get_message.ts @@ -3,10 +3,6 @@ import type { Bot } from "../../bot.ts"; /** Fetch a single message from the server. Requires VIEW_CHANNEL and READ_MESSAGE_HISTORY */ export async function getMessage(bot: Bot, channelId: bigint, id: bigint) { - if (await bot.cache.channels.has(channelId)) { - await bot.utils.requireBotChannelPermissions(bot, channelId, ["VIEW_CHANNEL", "READ_MESSAGE_HISTORY"]); - } - const result = await bot.rest.runMethod( bot.rest, "get", diff --git a/src/helpers/messages/pin_message.ts b/src/helpers/messages/pin_message.ts index d0d18cd47..cf5eff916 100644 --- a/src/helpers/messages/pin_message.ts +++ b/src/helpers/messages/pin_message.ts @@ -1,32 +1,10 @@ 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) { - 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"]); - } - +export async function pinMessage(bot: Bot, channelId: bigint, messageId: bigint) { return await bot.rest.runMethod( bot.rest, "put", bot.constants.endpoints.CHANNEL_PIN(channelId, messageId) ); } - -// aliases -export { pin as pinMessage }; diff --git a/src/helpers/messages/send_message.ts b/src/helpers/messages/send_message.ts index d17f1efe4..f36b5763d 100644 --- a/src/helpers/messages/send_message.ts +++ b/src/helpers/messages/send_message.ts @@ -1,9 +1,6 @@ -import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; -import { Errors } from "../../types/discordeno/errors.ts"; import { DiscordAllowedMentionsTypes } from "../../types/messages/allowed_mentions_types.ts"; import type { CreateMessage } from "../../types/messages/create_message.ts"; import type { Message } from "../../types/messages/message.ts"; -import type { PermissionStrings } from "../../types/permissions/permission_strings.ts"; import type { Bot } from "../../bot.ts"; import { DiscordMessageComponentTypes } from "../../types/messages/components/message_component_types.ts"; @@ -11,37 +8,6 @@ import { DiscordMessageComponentTypes } from "../../types/messages/components/me export async function sendMessage(bot: Bot, channelId: bigint, content: string | CreateMessage) { if (typeof content === "string") content = { content }; - const channel = await bot.cache.channels.get(channelId); - if (channel) { - if ( - ![ - DiscordChannelTypes.DM, - DiscordChannelTypes.GuildNews, - DiscordChannelTypes.GuildText, - DiscordChannelTypes.GuildPublicThread, - DiscordChannelTypes.GuildPrivateThread, - DiscordChannelTypes.GuildNewsThread, - DiscordChannelTypes.GuildVoice, - ].includes(channel.type) - ) { - throw new Error(Errors.CHANNEL_NOT_TEXT_BASED); - } - - const requiredPerms: Set = new Set(["SEND_MESSAGES", "VIEW_CHANNEL"]); - - if (content.tts) requiredPerms.add("SEND_TTS_MESSAGES"); - if (content.embeds?.length) { - requiredPerms.add("EMBED_LINKS"); - content.embeds?.splice(10); - } - - if (content.messageReference?.messageId || content.allowedMentions?.repliedUser) { - requiredPerms.add("READ_MESSAGE_HISTORY"); - } - - await bot.utils.requireBotChannelPermissions(bot, channelId, [...requiredPerms]); - } - // Use ... for content length due to unicode characters and js .length handling if (content.content && !bot.utils.validateLength(content.content, { max: 2000 })) { throw new Error(bot.constants.Errors.MESSAGE_MAX_LENGTH); diff --git a/src/helpers/messages/suppress_embeds.ts b/src/helpers/messages/suppress_embeds.ts index d3d001c3f..b781f2379 100644 --- a/src/helpers/messages/suppress_embeds.ts +++ b/src/helpers/messages/suppress_embeds.ts @@ -1,14 +1,8 @@ import type { Bot } from "../../bot.ts"; -// import { cacheHandlers } from "../../cache.ts"; import type { Message } from "../../types/messages/message.ts"; -import type { SnakeCasedPropertiesDeep } from "../../types/util.ts"; /** Suppress all the embeds in this message */ export async function suppressEmbeds(bot: Bot, channelId: bigint, messageId: bigint) { - const message = await bot.cache.messages.get(messageId); - - await bot.utils.requireBotChannelPermissions(bot, channelId, message ? ["MANAGE_MESSAGES"] : ["SEND_MESSAGES"]); - const result = await bot.rest.runMethod( bot.rest, "patch", diff --git a/src/helpers/mod.ts b/src/helpers/mod.ts index dec183c71..6bad1c9d2 100644 --- a/src/helpers/mod.ts +++ b/src/helpers/mod.ts @@ -1,4 +1,3 @@ -import { categoryChildren } from "./channels/category_children.ts"; import { channelOverwriteHasPermission } from "./channels/channel_overwrite_has_permission.ts"; import { createChannel } from "./channels/create_channel.ts"; import { deleteChannel } from "./channels/delete_channel.ts"; @@ -164,7 +163,6 @@ export { ban, banMember, batchEditSlashCommandPermissions, - categoryChildren, channelOverwriteHasPermission, cloneChannel, connectToVoiceChannel, diff --git a/src/helpers/roles/create_role.ts b/src/helpers/roles/create_role.ts index 76836ae15..3f4966daf 100644 --- a/src/helpers/roles/create_role.ts +++ b/src/helpers/roles/create_role.ts @@ -1,7 +1,6 @@ import type { CreateGuildRole } from "../../types/guilds/create_guild_role.ts"; import type { Role } from "../../types/permissions/role.ts"; import type { Bot } from "../../bot.ts"; -import type { SnakeCasedPropertiesDeep } from "../../types/util.ts"; /** Create a new role for the guild. Requires the MANAGE_ROLES permission. */ export async function createRole(bot: Bot, guildId: bigint, options: CreateGuildRole, reason?: string) { @@ -25,12 +24,5 @@ export async function createRole(bot: Bot, guildId: bigint, options: CreateGuild guildId, }); - const guild = await bot.cache.guilds.get(guildId); - if (guild) { - guild.roles.set(role.id, role); - - await bot.cache.guilds.set(guildId, guild); - } - return role; } diff --git a/src/helpers/roles/get_roles.ts b/src/helpers/roles/get_roles.ts index fca30cec9..83bea7af7 100644 --- a/src/helpers/roles/get_roles.ts +++ b/src/helpers/roles/get_roles.ts @@ -7,22 +7,12 @@ import { DiscordenoRole } from "../../transformers/role.ts"; * * ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your roles will be cached in your guild.** */ -export async function getRoles(bot: Bot, guildId: bigint, addToCache = true) { +export async function getRoles(bot: Bot, guildId: bigint) { await bot.utils.requireBotGuildPermissions(bot, guildId, ["MANAGE_ROLES"]); const result = await bot.rest.runMethod(bot.rest, "get", bot.constants.endpoints.GUILD_ROLES(guildId)); const roleStructures = result.map((role) => bot.transformers.role(bot, { role, guildId })); - const roles = new Collection(roleStructures.map((role: DiscordenoRole) => [role.id, role])); - - if (addToCache) { - const guild = await bot.cache.guilds.get(guildId); - if (guild) { - guild.roles = roles; - await bot.cache.guilds.set(guild.id, guild); - } - } - - return roleStructures; + return new Collection(roleStructures.map((role: DiscordenoRole) => [role.id, role])); } diff --git a/src/helpers/templates/create_guild_from_template.ts b/src/helpers/templates/create_guild_from_template.ts index 9d3e6fbc2..7d6baa59b 100644 --- a/src/helpers/templates/create_guild_from_template.ts +++ b/src/helpers/templates/create_guild_from_template.ts @@ -7,10 +7,6 @@ import type { Bot } from "../../bot.ts"; * NOTE: This endpoint can be used only by bots in less than 10 guilds. */ export async function createGuildFromTemplate(bot: Bot, templateCode: string, data: CreateGuildFromTemplate) { - if ((await bot.cache.guilds.size()) >= 10) { - throw new Error("This function can only be used by bots in less than 10 guilds."); - } - if (data.icon) { data.icon = await bot.utils.urlToBase64(data.icon); } diff --git a/src/transformers/guild.ts b/src/transformers/guild.ts index fd772ee11..7dd617076 100644 --- a/src/transformers/guild.ts +++ b/src/transformers/guild.ts @@ -12,12 +12,6 @@ export function transformGuild( payload: { guild: SnakeCasedPropertiesDeep } & { shardId: number } ): DiscordenoGuild { const guildId = bot.transformers.snowflake(payload.guild.id); - const channels = payload.guild.channels || []; - - channels.forEach(async (channel) => { - const chnl = bot.transformers.channel(bot, { channel, guildId }); - await bot.cache.channels.set(chnl.id, chnl); - }); return { afkTimeout: payload.guild.afk_timeout, @@ -78,25 +72,11 @@ export function transformGuild( icon: payload.guild.icon ? iconHashToBigInt(payload.guild.icon) : undefined, banner: payload.guild.banner ? iconHashToBigInt(payload.guild.banner) : undefined, splash: payload.guild.splash ? iconHashToBigInt(payload.guild.splash) : undefined, - - // TRANSFORMED STUFF BELOW - // TODO: Handle channels/threads in a better way? - // channels: (payload.guild.channels || []).map((channel) => - // bot.transformers.channel(bot, { channel, guildId: bot.transformers.snowflake(payload.guild.id) }) - // ), - // threads: (payload.guild.threads || []).map((channel) => channelToThread(channel)), - roles: new Collection( (payload.guild.roles || []) .map((role) => bot.transformers.role(bot, { role, guildId: bot.transformers.snowflake(payload.guild.id) })) .map((role) => [role.id, role]) ), - // presences: new Collection( - // (payload.guild.presences || []).map((p) => [ - // bot.transformers.snowflake(p.user!.id), - // bot.transformers.presence(bot, p), - // ]) - // ), emojis: new Collection((payload.guild.emojis || []).map((emoji) => [bot.transformers.snowflake(emoji.id!), emoji])), voiceStates: new Collection( (payload.guild.voice_states || []) diff --git a/src/util/dispatch_requirements.ts b/src/util/dispatch_requirements.ts deleted file mode 100644 index 72b99bea6..000000000 --- a/src/util/dispatch_requirements.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Bot } from "../bot.ts"; -import type { DiscordGatewayPayload } from "../types/gateway/gateway_payload.ts"; -import type { Guild } from "../types/guilds/guild.ts"; -import { SnakeCasedPropertiesDeep } from "../types/util.ts"; - -const processing = new Set(); - -export async function dispatchRequirements(bot: Bot, data: DiscordGatewayPayload, shardId: number) { - if (!bot.isReady) return; - - // DELETE MEANS WE DONT NEED TO FETCH. CREATE SHOULD HAVE DATA TO CACHE - if (data.t && ["GUILD_CREATE", "GUILD_DELETE"].includes(data.t)) return; - - const id = bot.utils.snowflakeToBigint( - (data.t && ["GUILD_UPDATE"].includes(data.t) - ? // deno-lint-ignore no-explicit-any - (data.d as any)?.id - : // deno-lint-ignore no-explicit-any - (data.d as any)?.guild_id) ?? "" - ); - - if (!id || bot.activeGuildIds.has(id)) return; - - // If this guild is in cache, it has not been swept and we can cancel - if (await bot.cache.guilds.has(id)) { - bot.activeGuildIds.add(id); - return; - } - - if (processing.has(id)) { - bot.events.debug(`[DISPATCH] New Guild ID already being processed: ${id} in ${data.t} event`); - - let runs = 0; - do { - await bot.utils.delay(500); - runs++; - } while (processing.has(id) && runs < 40); - - if (!processing.has(id)) return; - - return bot.events.debug( - `[DISPATCH] Already processed guild was not successfully fetched: ${id} in ${data.t} event` - ); - } - - processing.add(id); - - // New guild id has appeared, fetch all relevant data - bot.events.debug(`[DISPATCH] New Guild ID has appeared: ${id} in ${data.t} event`); - - const rawGuild = (await bot.helpers - .getGuild(id, { - counts: true, - addToCache: false, - }) - .catch(console.log)) as SnakeCasedPropertiesDeep | undefined; - - if (!rawGuild) { - processing.delete(id); - return bot.events.debug(`[DISPATCH] Guild ID ${id} failed to fetch.`); - } - - bot.events.debug(`[DISPATCH] Guild ID ${id} has been found. ${rawGuild.name}`); - - const [channels, botMember] = await Promise.all([ - bot.helpers.getChannels(id, false), - bot.helpers.getMember(id, bot.id, { force: true }), - ]).catch((error) => { - bot.events.debug(error); - return []; - }); - - if (!botMember || !channels) { - processing.delete(id); - return bot.events.debug( - `[DISPATCH] Guild ID ${id} Name: ${rawGuild.name} failed. Unable to get botMember or channels` - ); - } - - const guild = bot.transformers.guild(bot, { - guild: { - ...rawGuild, - member_count: rawGuild.approximate_member_count, - }, - shardId, - }); - - // Add to cache - await bot.cache.guilds.set(id, guild); - bot.cache.dispatchedGuildIds.delete(id); - channels.forEach((channel) => { - bot.cache.dispatchedChannelIds.delete(channel.id); - bot.cache.channels.set(channel.id, channel); - }); - - processing.delete(id); - - bot.events.debug(`[DISPATCH] Guild ID ${id} Name: ${guild.name} completely loaded.`); -} diff --git a/tests/helpers/channels/categoryChannels.ts b/tests/helpers/channels/categoryChannels.ts index 28db31648..6f5ecaf71 100644 --- a/tests/helpers/channels/categoryChannels.ts +++ b/tests/helpers/channels/categoryChannels.ts @@ -33,7 +33,7 @@ export async function categoryChildrenTest(bot: Bot, guildId: bigint, t: Deno.Te throw new Error("The channels seemed to be created but it was not cached."); } - const ids = await bot.helpers.categoryChildren(category.id); + const ids = bot.cache.channels.filter((c) => c.parentId === category.id); if (ids.size !== channels.length || !channels.every((c) => ids.has(c.id))) { console.log("cccc 1", ids.size, channels.length); console.log( diff --git a/tests/helpers/emojis/create_emoji.ts b/tests/helpers/emojis/create_emoji.ts index 5ad7581a9..5ee1a2cf4 100644 --- a/tests/helpers/emojis/create_emoji.ts +++ b/tests/helpers/emojis/create_emoji.ts @@ -13,9 +13,9 @@ export async function createEmojiTest(bot: Bot, guildId: bigint, t: Deno.TestCon assertExists(emoji); // Delay the execution to allow event to be processed - await delayUntil(10000, async () => (await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)); + await delayUntil(10000, async () => bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)); - if (!(await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)) { + if (!bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)) { throw new Error("The emoji seemed to be created but it was not cached."); } } diff --git a/tests/helpers/emojis/delete_emoji.ts b/tests/helpers/emojis/delete_emoji.ts index 3cb3cdde5..b852cd0d7 100644 --- a/tests/helpers/emojis/delete_emoji.ts +++ b/tests/helpers/emojis/delete_emoji.ts @@ -13,17 +13,17 @@ export async function ifItFailsBlameWolf(bot: Bot, guildId: bigint, reason?: str assertExists(emoji); // Delay the execution to allow event to be processed - await delayUntil(10000, async () => (await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)); + await delayUntil(10000, async () => bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)); - if (!(await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)) { + if (!bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)) { throw new Error("The emoji seemed to be created but it was not cached."); } await bot.helpers.deleteEmoji(guildId, emoji.id, reason); - await delayUntil(10000, async () => !(await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)); + await delayUntil(10000, async () => !bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)); - if ((await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)) { + if (bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)) { throw new Error("The emoji seemed to be deleted but it's still cached."); } } diff --git a/tests/helpers/emojis/edit_emoji.ts b/tests/helpers/emojis/edit_emoji.ts index b0ecab94c..5f3824b74 100644 --- a/tests/helpers/emojis/edit_emoji.ts +++ b/tests/helpers/emojis/edit_emoji.ts @@ -13,9 +13,9 @@ export async function editEmojiTest(bot: Bot, guildId: bigint, t: Deno.TestConte assertExists(emoji); // Delay the execution to allow event to be processed - await delayUntil(10000, async () => (await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)); + await delayUntil(10000, async () => bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)); - if (!(await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)) { + if (!bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)) { throw new Error("The emoji seemed to be created but it was not cached."); } @@ -25,10 +25,10 @@ export async function editEmojiTest(bot: Bot, guildId: bigint, t: Deno.TestConte await delayUntil( 10000, - async () => (await bot.cache.guilds.get(guildId))?.emojis?.get(emoji.id)?.name === "blamewolf_infinite" + async () => bot.cache.guilds.get(guildId)?.emojis?.get(emoji.id)?.name === "blamewolf_infinite" ); - if ((await bot.cache.guilds.get(guildId))?.emojis?.get(emoji.id)?.name !== "blamewolf_infinite") { + if (bot.cache.guilds.get(guildId)?.emojis?.get(emoji.id)?.name !== "blamewolf_infinite") { throw new Error("The emoji seemed to be edited but the cache was not updated."); } } diff --git a/tests/helpers/emojis/get_emoji.ts b/tests/helpers/emojis/get_emoji.ts index ea94ad6a7..732f5c1af 100644 --- a/tests/helpers/emojis/get_emoji.ts +++ b/tests/helpers/emojis/get_emoji.ts @@ -13,13 +13,13 @@ export async function getEmojiTest(bot: Bot, guildId: bigint, t: Deno.TestContex assertExists(emoji); // Delay the execution to allow event to be processed - await delayUntil(10000, async () => (await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)); + await delayUntil(10000, async () => bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)); - if (!(await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)) { + if (!bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)) { throw new Error("The emoji seemed to be created but it was not cached."); } - (await bot.cache.guilds.get(guildId))?.emojis?.delete(emoji.id); + bot.cache.guilds.get(guildId)?.emojis?.delete(emoji.id); const getEmoji = await bot.helpers.getEmoji(guildId, emoji.id, true); @@ -27,9 +27,9 @@ export async function getEmojiTest(bot: Bot, guildId: bigint, t: Deno.TestContex assertExists(getEmoji); // Delay the execution to allow event to be processed - await delayUntil(10000, async () => (await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)); + await delayUntil(10000, async () => bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)); - if (!(await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)) { + if (!bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)) { throw new Error("The emoji didn't got added to cache after using the getEmoji function."); } } diff --git a/tests/helpers/emojis/get_emojis.ts b/tests/helpers/emojis/get_emojis.ts index b9e1a1bbc..51eb1b6a9 100644 --- a/tests/helpers/emojis/get_emojis.ts +++ b/tests/helpers/emojis/get_emojis.ts @@ -13,9 +13,9 @@ export async function getEmojisTest(bot: Bot, guildId: bigint, t: Deno.TestConte assertExists(emoji); // Delay the execution to allow event to be processed - await delayUntil(10000, async () => (await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)); + await delayUntil(10000, async () => bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)); - if (!(await bot.cache.guilds.get(guildId))?.emojis?.has(emoji.id)) { + if (!bot.cache.guilds.get(guildId)?.emojis?.has(emoji.id)) { throw new Error("The emoji seemed to be created but it was not cached."); } diff --git a/tests/helpers/guilds/editGuild.ts b/tests/helpers/guilds/editGuild.ts index e8b94cd40..b3e604f2d 100644 --- a/tests/helpers/guilds/editGuild.ts +++ b/tests/helpers/guilds/editGuild.ts @@ -13,7 +13,7 @@ export async function editGuildTests(bot: Bot, guildId: bigint, t: Deno.TestCont assertExists(guild); // Delay the execution to allow event to be processed - await delayUntil(10000, async () => (await bot.cache.guilds.get(guild.id))?.name === "Discordeno Test 1.0"); + await delayUntil(10000, async () => bot.cache.guilds.get(guild.id)?.name === "Discordeno Test 1.0"); if (!bot.cache.guilds.has(guild.id)) { throw new Error(`The guild seemed to be edited but the cache didn't got updated.`); diff --git a/tests/helpers/messages/edit_message.ts b/tests/helpers/messages/edit_message.ts index eb5d987f6..0e67f8e46 100644 --- a/tests/helpers/messages/edit_message.ts +++ b/tests/helpers/messages/edit_message.ts @@ -18,9 +18,9 @@ export async function editMessageTest(bot: Bot, channelId: bigint, t: Deno.TestC await bot.helpers.editMessage(channelId, message.id, "Goodbye World!"); // Wait to give it time for MESSAGE_UPDATE event - await delayUntil(10000, async () => (await bot.cache.messages.get(message.id))?.content === "Goodbye World!"); + await delayUntil(10000, async () => bot.cache.messages.get(message.id)?.content === "Goodbye World!"); // Make sure it was edited - if ((await bot.cache.messages.get(message.id))?.content !== "Goodbye World!") { + if (bot.cache.messages.get(message.id)?.content !== "Goodbye World!") { throw new Error("The message should have been edited but it was not."); } }