From 0f13cb4d5fe52d51bdeb77003f315526fe2fd59d Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 19 Feb 2023 04:53:07 +0000 Subject: [PATCH] fix: remove old pkg --- packages/old/client/.c8rc.json | 7 - packages/old/client/.mocharc.json | 10 - packages/old/client/.swcrc | 31 - packages/old/client/package.json | 48 -- packages/old/client/src/client.ts | 170 ----- packages/old/client/src/handlers.ts | 528 -------------- .../src/handlers/channels/CHANNEL_CREATE.ts | 13 - .../src/handlers/channels/CHANNEL_DELETE.ts | 20 - .../handlers/channels/CHANNEL_PINS_UPDATE.ts | 22 - .../src/handlers/channels/CHANNEL_UPDATE.ts | 12 - .../channels/STAGE_INSTANCE_CREATE.ts | 19 - .../channels/STAGE_INSTANCE_DELETE.ts | 19 - .../channels/STAGE_INSTANCE_UPDATE.ts | 19 - .../src/handlers/channels/THREAD_CREATE.ts | 14 - .../src/handlers/channels/THREAD_DELETE.ts | 13 - .../src/handlers/channels/THREAD_LIST_SYNC.ts | 40 -- .../channels/THREAD_MEMBERS_UPDATE.ts | 22 - .../handlers/channels/THREAD_MEMBER_UPDATE.ts | 19 - .../src/handlers/channels/THREAD_UPDATE.ts | 14 - .../old/client/src/handlers/channels/index.ts | 13 - .../handlers/emojis/GUILD_EMOJIS_UPDATE.ts | 23 - .../old/client/src/handlers/emojis/index.ts | 1 - .../src/handlers/guilds/GUILD_BAN_ADD.ts | 17 - .../src/handlers/guilds/GUILD_BAN_REMOVE.ts | 18 - .../src/handlers/guilds/GUILD_CREATE.ts | 14 - .../src/handlers/guilds/GUILD_DELETE.ts | 18 - .../guilds/GUILD_INTEGRATIONS_UPDATE.ts | 16 - .../handlers/guilds/GUILD_STICKERS_UPDATE.ts | 22 - .../src/handlers/guilds/GUILD_UPDATE.ts | 15 - .../AUTO_MODERATION_ACTION_EXECUTION.ts | 18 - .../automod/AUTO_MODERATION_RULE_CREATE.ts | 18 - .../automod/AUTO_MODERATION_RULE_DELETE.ts | 18 - .../automod/AUTO_MODERATION_RULE_UPDATE.ts | 18 - .../src/handlers/guilds/automod/index.ts | 4 - .../old/client/src/handlers/guilds/index.ts | 9 - .../GUILD_SCHEDULED_EVENT_CREATE.ts | 17 - .../GUILD_SCHEDULED_EVENT_DELETE.ts | 16 - .../GUILD_SCHEDULED_EVENT_UPDATE.ts | 16 - .../GUILD_SCHEDULED_EVENT_USER_ADD.ts | 20 - .../GUILD_SCHEDULED_EVENT_USER_REMOVE.ts | 20 - .../handlers/guilds/scheduledEvents/index.ts | 5 - packages/old/client/src/handlers/index.ts | 12 - .../integrations/INTEGRATION_CREATE.ts | 18 - .../integrations/INTEGRATION_DELETE.ts | 20 - .../integrations/INTEGRATION_UPDATE.ts | 18 - .../client/src/handlers/integrations/index.ts | 3 - .../interactions/INTERACTION_CREATE.ts | 18 - .../client/src/handlers/interactions/index.ts | 1 - .../src/handlers/invites/INVITE_CREATE.ts | 15 - .../src/handlers/invites/INVITE_DELETE.ts | 23 - .../old/client/src/handlers/invites/index.ts | 2 - .../handlers/members/GUILD_MEMBERS_CHUNK.ts | 71 -- .../src/handlers/members/GUILD_MEMBER_ADD.ts | 16 - .../handlers/members/GUILD_MEMBER_REMOVE.ts | 16 - .../handlers/members/GUILD_MEMBER_UPDATE.ts | 24 - .../old/client/src/handlers/members/index.ts | 4 - .../src/handlers/messages/MESSAGE_CREATE.ts | 14 - .../src/handlers/messages/MESSAGE_DELETE.ts | 20 - .../handlers/messages/MESSAGE_DELETE_BULK.ts | 23 - .../handlers/messages/MESSAGE_REACTION_ADD.ts | 31 - .../messages/MESSAGE_REACTION_REMOVE.ts | 22 - .../messages/MESSAGE_REACTION_REMOVE_ALL.ts | 20 - .../messages/MESSAGE_REACTION_REMOVE_EMOJI.ts | 21 - .../src/handlers/messages/MESSAGE_UPDATE.ts | 15 - .../old/client/src/handlers/messages/index.ts | 8 - .../APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts | 18 - .../src/handlers/misc/PRESENCE_UPDATE.ts | 15 - .../old/client/src/handlers/misc/READY.ts | 27 - .../client/src/handlers/misc/TYPING_START.ts | 28 - .../client/src/handlers/misc/USER_UPDATE.ts | 10 - .../old/client/src/handlers/misc/index.ts | 5 - .../src/handlers/roles/GUILD_ROLE_CREATE.ts | 19 - .../src/handlers/roles/GUILD_ROLE_DELETE.ts | 16 - .../src/handlers/roles/GUILD_ROLE_UPDATE.ts | 20 - .../old/client/src/handlers/roles/index.ts | 3 - .../src/handlers/voice/VOICE_SERVER_UPDATE.ts | 18 - .../src/handlers/voice/VOICE_STATE_UPDATE.ts | 20 - .../old/client/src/handlers/voice/index.ts | 2 - .../src/handlers/webhooks/WEBHOOKS_UPDATE.ts | 16 - .../old/client/src/handlers/webhooks/index.ts | 1 - packages/old/client/src/index.ts | 4 - packages/old/client/src/transformer.ts | 410 ----------- .../old/client/src/transformers/activity.ts | 45 -- .../client/src/transformers/application.ts | 47 -- .../src/transformers/applicationCommand.ts | 35 - .../transformers/applicationCommandOption.ts | 67 -- .../applicationCommandOptionChoice.ts | 24 - .../applicationCommandPermission.ts | 29 - .../old/client/src/transformers/attachment.ts | 25 - .../client/src/transformers/auditLogEntry.ts | 158 ----- .../transformers/automodActionExecution.ts | 44 -- .../client/src/transformers/automodRule.ts | 48 -- .../old/client/src/transformers/channel.ts | 103 --- .../old/client/src/transformers/component.ts | 99 --- packages/old/client/src/transformers/embed.ts | 59 -- packages/old/client/src/transformers/emoji.ts | 20 - .../old/client/src/transformers/gatewayBot.ts | 22 - packages/old/client/src/transformers/guild.ts | 149 ---- packages/old/client/src/transformers/index.ts | 37 - .../client/src/transformers/integration.ts | 54 -- .../client/src/transformers/interaction.ts | 204 ------ .../old/client/src/transformers/invite.ts | 48 -- .../old/client/src/transformers/member.ts | 65 -- .../old/client/src/transformers/message.ts | 157 ----- .../old/client/src/transformers/presence.ts | 39 -- .../src/transformers/reverse/activity.ts | 54 -- .../transformers/reverse/allowedMentions.ts | 17 - .../src/transformers/reverse/application.ts | 37 - .../reverse/applicationCommand.ts | 31 - .../reverse/applicationCommandOption.ts | 29 - .../reverse/applicationCommandOptionChoice.ts | 14 - .../reverse/applicationCommandPermission.ts | 21 - .../src/transformers/reverse/attachment.ts | 21 - .../src/transformers/reverse/auditLogEntry.ts | 176 ----- .../src/transformers/reverse/component.ts | 47 -- .../reverse/createApplicationCommand.ts | 38 - .../client/src/transformers/reverse/embed.ts | 60 -- .../client/src/transformers/reverse/emoji.ts | 25 - .../src/transformers/reverse/gatewayBot.ts | 16 - .../client/src/transformers/reverse/index.ts | 19 - .../reverse/interactionResponse.ts | 42 -- .../client/src/transformers/reverse/member.ts | 52 -- .../src/transformers/reverse/presence.ts | 31 - .../client/src/transformers/reverse/team.ts | 24 - .../transformers/reverse/widgetSettings.ts | 13 - packages/old/client/src/transformers/role.ts | 34 - .../client/src/transformers/scheduledEvent.ts | 45 -- .../client/src/transformers/stageInstance.ts | 23 - .../old/client/src/transformers/sticker.ts | 58 -- packages/old/client/src/transformers/team.ts | 27 - .../old/client/src/transformers/template.ts | 23 - .../client/src/transformers/threadMember.ts | 40 -- .../transformers/toggles/ToggleBitfield.ts | 49 -- .../client/src/transformers/toggles/emoji.ts | 72 -- .../client/src/transformers/toggles/guild.ts | 358 ---------- .../client/src/transformers/toggles/index.ts | 7 - .../client/src/transformers/toggles/member.ts | 65 -- .../client/src/transformers/toggles/role.ts | 84 --- .../client/src/transformers/toggles/user.ts | 72 -- .../client/src/transformers/toggles/voice.ts | 97 --- .../client/src/transformers/voiceRegion.ts | 22 - .../old/client/src/transformers/voiceState.ts | 34 - .../old/client/src/transformers/webhook.ts | 49 -- .../client/src/transformers/welcomeScreen.ts | 25 - .../old/client/src/transformers/widget.ts | 31 - .../client/src/transformers/widgetSettings.ts | 21 - packages/old/client/src/types.ts | 93 --- packages/old/client/tests/handlers.spec.ts | 131 ---- .../old/client/tests/transformers.spec.ts | 138 ---- packages/old/client/tsconfig.json | 16 - packages/old/client/tsconfig.test.json | 11 - packages/old/constant/.c8rc.json | 7 - packages/old/constant/.mocharc.json | 10 - packages/old/constant/.swcrc | 31 - packages/old/constant/package.json | 46 -- packages/old/constant/src/index.ts | 1 - packages/old/constant/src/rest.ts | 647 ------------------ packages/old/constant/tests/empty.spec.ts | 1 - packages/old/constant/tsconfig.json | 16 - packages/old/constant/tsconfig.test.json | 11 - packages/old/discordeno/.c8rc.json | 7 - packages/old/discordeno/.mocharc.json | 10 - packages/old/discordeno/.swcrc | 31 - .../oldTest/channels/createCategory.test.ts | 29 - .../oldTest/channels/createNews.test.ts | 29 - .../oldTest/channels/createText.test.ts | 26 - .../channels/createTextWithNsfw.test.ts | 29 - .../channels/createTextWithPerms.test.ts | 36 - .../channels/createTextWithRateLimit.test.ts | 29 - .../oldTest/channels/createVoice.test.ts | 29 - .../channels/createVoiceWithBitrate.test.ts | 30 - .../channels/createVoiceWithUserLimit.test.ts | 30 - .../oldTest/channels/deleteWithReason.test.ts | 23 - .../channels/deleteWithoutReason.test.ts | 24 - .../channels/editChannelWithReason.test.ts | 54 -- .../oldTest/channels/getChannel.test.ts | 21 - .../oldTest/channels/getChannels.test.ts | 23 - .../oldTest/channels/invites/invite.test.ts | 79 --- .../oldTest/channels/messages/message.test.ts | 286 -------- .../channels/messages/reactions.test.ts | 127 ---- .../deleteChannelOverwrite.test.ts | 37 - .../oldTest/channels/stageInstances.test.ts | 31 - .../channels/threads/deleteThread.test.ts | 26 - .../channels/threads/editThread.test.ts | 37 - .../channels/threads/getActiveThreads.test.ts | 27 - .../threads/getArchivedThreads.test.ts | 37 - .../threads/joinAndLeaveThread.test.ts | 32 - .../channels/threads/startThread.test.ts | 23 - packages/old/discordeno/oldTest/delay.test.ts | 13 - packages/old/discordeno/oldTest/deps.ts | 3 - .../discordeno/oldTest/guilds/automod.test.ts | 252 ------- .../oldTest/guilds/editGuildMfaLevel.test.ts | 17 - .../oldTest/guilds/events/events.test.ts | 290 -------- .../oldTest/guilds/getVoiceRegions.test.ts | 13 - .../discordeno/oldTest/guilds/guild.test.ts | 276 -------- .../oldTest/guilds/members/bans.test.ts | 87 --- .../oldTest/guilds/members/dms.test.ts | 16 - .../guilds/members/editBotNickname.test.ts | 19 - .../oldTest/guilds/members/members.test.ts | 25 - .../discordeno/oldTest/guilds/roles.test.ts | 142 ---- .../discordeno/oldTest/misc/benchmark.test.ts | 15 - .../oldTest/misc/gatewaybot.test.ts | 17 - .../oldTest/misc/getApplicationInfo.test.ts | 12 - .../discordeno/oldTest/misc/getUser.test.ts | 13 - .../discordeno/oldTest/misc/rateLimit.test.ts | 13 - .../discordeno/oldTest/misc/snowflake.test.ts | 11 - .../oldTest/misc/startTyping.test.ts | 13 - packages/old/discordeno/oldTest/mod.ts | 31 - packages/old/discordeno/oldTest/rest.ts | 109 --- .../stickers/createGuildSticker.test.ts | 35 - .../stickers/deleteGuildSticker.test.ts | 22 - .../oldTest/stickers/editGuildSticker.test.ts | 30 - .../oldTest/stickers/getGuildSticker.test.ts | 26 - .../oldTest/stickers/getGuildStickers.test.ts | 33 - .../oldTest/stickers/getSticker.test.ts | 12 - packages/old/discordeno/oldTest/utils.test.ts | 441 ------------ packages/old/discordeno/oldTest/utils.ts | 23 - .../oldTest/webhook/deleteWebhook.test.ts | 28 - .../webhook/deleteWebhookWithToken.test.ts | 25 - .../oldTest/webhook/messages.test.ts | 50 -- .../oldTest/webhook/webhook.test.ts | 66 -- packages/old/discordeno/package.json | 49 -- packages/old/discordeno/place/debug.rest.ts | 137 ---- packages/old/discordeno/place/mod.ts | 8 - packages/old/discordeno/src/bot.ts | 114 --- packages/old/discordeno/src/index.ts | 6 - packages/old/discordeno/tests/empty.spec.ts | 1 - packages/old/discordeno/tsconfig.json | 16 - packages/old/discordeno/tsconfig.test.json | 11 - packages/old/embeds/.c8rc.json | 7 - packages/old/embeds/.mocharc.json | 10 - packages/old/embeds/package.json | 29 - packages/old/embeds/src/index.ts | 306 --------- packages/old/embeds/tests/empty.spec.ts | 1 - packages/old/embeds/tsconfig.json | 6 - packages/old/embeds/tsconfig.test.json | 11 - .../old/eslint-config-discordeno/index.js | 29 - .../old/eslint-config-discordeno/package.json | 19 - packages/old/gateway/.c8rc.json | 7 - packages/old/gateway/.mocharc.json | 10 - packages/old/gateway/.swcrc | 31 - packages/old/gateway/README.md | 61 -- packages/old/gateway/package.json | 48 -- packages/old/gateway/src/index.ts | 2 - .../src/manager/calculateTotalShards.ts | 18 - .../gateway/src/manager/calculateWorkerId.ts | 16 - .../old/gateway/src/manager/gatewayManager.ts | 323 --------- packages/old/gateway/src/manager/index.ts | 8 - .../old/gateway/src/manager/prepareBuckets.ts | 55 -- packages/old/gateway/src/manager/resharder.ts | 288 -------- .../old/gateway/src/manager/shardManager.ts | 127 ---- .../old/gateway/src/manager/spawnShards.ts | 18 - packages/old/gateway/src/manager/stop.ts | 12 - .../src/manager/tellWorkerToIdentify.ts | 11 - .../guilds/voice/connectToVoiceChannel.ts | 60 -- .../guilds/voice/leaveVoiceChannel.ts | 44 -- .../noCheckHelpers/members/fetchMembers.ts | 96 --- .../src/noCheckHelpers/misc/editBotStatus.ts | 15 - .../noCheckHelpers/misc/editShardStatus.ts | 89 --- .../templates/createGuildFromTemplate.ts | 49 -- .../src/shard/calculateSafeRequests.ts | 10 - packages/old/gateway/src/shard/close.ts | 7 - packages/old/gateway/src/shard/connect.ts | 48 -- packages/old/gateway/src/shard/createShard.ts | 372 ---------- packages/old/gateway/src/shard/handleClose.ts | 70 -- .../old/gateway/src/shard/handleMessage.ts | 161 ----- packages/old/gateway/src/shard/identify.ts | 57 -- packages/old/gateway/src/shard/index.ts | 14 - packages/old/gateway/src/shard/isOpen.ts | 6 - packages/old/gateway/src/shard/resume.ts | 55 -- packages/old/gateway/src/shard/send.ts | 34 - packages/old/gateway/src/shard/shutdown.ts | 7 - .../gateway/src/shard/startHeartbeating.ts | 67 -- .../old/gateway/src/shard/stopHeartbeating.ts | 9 - packages/old/gateway/src/shard/types.ts | 147 ---- packages/old/gateway/tests/empty.spec.ts | 1 - packages/old/gateway/tsconfig.json | 16 - packages/old/gateway/tsconfig.test.json | 11 - packages/old/logger/package.json | 34 - packages/old/logger/src/index.ts | 110 --- packages/old/logger/tsconfig.json | 16 - packages/old/logger/tsconfig.test.json | 11 - packages/old/plugins/cache/.c8rc.json | 7 - packages/old/plugins/cache/.mocharc.json | 10 - packages/old/plugins/cache/.swcrc | 31 - packages/old/plugins/cache/README.md | 20 - packages/old/plugins/cache/package.json | 44 -- .../plugins/cache/src/addCacheCollections.ts | 52 -- .../plugins/cache/src/dispatchRequirements.ts | 103 --- packages/old/plugins/cache/src/index.ts | 166 ----- .../old/plugins/cache/src/setupCacheEdits.ts | 135 ---- .../plugins/cache/src/setupCacheRemovals.ts | 144 ---- packages/old/plugins/cache/src/sweepers.ts | 87 --- .../old/plugins/cache/tests/empty.spec.ts | 1 - packages/old/plugins/cache/tsconfig.json | 16 - packages/old/plugins/cache/tsconfig.test.json | 11 - packages/old/plugins/fileloader/.c8rc.json | 7 - packages/old/plugins/fileloader/.mocharc.json | 10 - packages/old/plugins/fileloader/.swcrc | 31 - packages/old/plugins/fileloader/README.md | 32 - packages/old/plugins/fileloader/package.json | 37 - packages/old/plugins/fileloader/src/index.ts | 100 --- .../plugins/fileloader/tests/empty.spec.ts | 1 - packages/old/plugins/fileloader/tsconfig.json | 16 - .../old/plugins/fileloader/tsconfig.test.json | 11 - packages/old/plugins/mod.ts | 6 - packages/old/plugins/permissions/.c8rc.json | 7 - .../old/plugins/permissions/.mocharc.json | 10 - packages/old/plugins/permissions/.swcrc | 31 - packages/old/plugins/permissions/README.md | 27 - packages/old/plugins/permissions/deps.ts | 3 - packages/old/plugins/permissions/mod.ts | 37 - packages/old/plugins/permissions/package.json | 37 - .../permissions/src/channels/createChannel.ts | 53 -- .../permissions/src/channels/deleteChannel.ts | 34 - .../deleteChannelPermissionOverride.ts | 22 - .../permissions/src/channels/editChannel.ts | 86 --- .../editChannelPermissionOverrides.ts | 21 - .../src/channels/followAnnouncementChannel.ts | 24 - .../src/channels/forums/createForumThread.ts | 18 - .../permissions/src/channels/forums/mod.ts | 6 - .../src/channels/getChannelWebhooks.ts | 20 - .../plugins/permissions/src/channels/mod.ts | 27 - .../channels/stages/createStageInstance.ts | 20 - .../channels/stages/deleteStageInstances.ts | 23 - .../src/channels/stages/editStageInstance.ts | 24 - .../permissions/src/channels/stages/mod.ts | 10 - .../permissions/src/channels/swapChannels.ts | 20 - .../src/channels/threads/addThreadMember.ts | 24 - .../threads/getPrivateArchivedThreads.ts | 26 - .../getPrivateJoinedArchivedThreads.ts | 21 - .../threads/getPublicArchivedThreads.ts | 21 - .../src/channels/threads/joinThread.ts | 23 - .../src/channels/threads/leaveThread.ts | 23 - .../permissions/src/channels/threads/mod.ts | 18 - .../channels/threads/removeThreadMember.ts | 26 - .../permissions/src/emojis/createEmoji.ts | 12 - .../permissions/src/emojis/deleteEmoji.ts | 12 - .../permissions/src/emojis/editEmoji.ts | 12 - .../old/plugins/permissions/src/emojis/mod.ts | 10 - .../src/guilds/automod/createAutomodRule.ts | 29 - .../src/guilds/automod/deleteAutomodRule.ts | 12 - .../src/guilds/automod/editAutomodRule.ts | 29 - .../src/guilds/automod/getAutomodRule.ts | 12 - .../src/guilds/automod/getAutomodRules.ts | 12 - .../permissions/src/guilds/automod/mod.ts | 14 - .../permissions/src/guilds/createGuild.ts | 11 - .../permissions/src/guilds/deleteGuild.ts | 12 - .../permissions/src/guilds/editGuild.ts | 15 - .../src/guilds/editGuildMfaLevel.ts | 11 - .../src/guilds/editWelcomeScreen.ts | 12 - .../src/guilds/events/createScheduledEvent.ts | 70 -- .../src/guilds/events/editScheduledEvent.ts | 70 -- .../permissions/src/guilds/events/mod.ts | 8 - .../permissions/src/guilds/getAuditLog.ts | 12 - .../plugins/permissions/src/guilds/getBan.ts | 12 - .../plugins/permissions/src/guilds/getBans.ts | 12 - .../permissions/src/guilds/getPruneCount.ts | 12 - .../permissions/src/guilds/getVanityUrl.ts | 12 - .../src/guilds/getWelcomeScreen.ts | 13 - .../src/guilds/invites/createInvite.ts | 12 - .../src/guilds/invites/getChannelInvites.ts | 12 - .../src/guilds/invites/getInvites.ts | 12 - .../old/plugins/permissions/src/guilds/mod.ts | 35 - .../guilds/voice/connectToVoiceChannels.ts | 42 -- .../permissions/src/guilds/voice/mod.ts | 6 - .../src/guilds/widgets/editWidgetSettings.ts | 12 - .../permissions/src/guilds/widgets/mod.ts | 6 - .../src/integrations/deleteIntegrations.ts | 12 - .../src/integrations/getIntegrations.ts | 12 - .../permissions/src/integrations/mod.ts | 8 - .../permissions/src/members/banMember.ts | 12 - .../permissions/src/members/editBotMember.ts | 12 - .../permissions/src/members/editMember.ts | 38 - .../permissions/src/members/kickMember.ts | 12 - .../plugins/permissions/src/members/mod.ts | 16 - .../permissions/src/members/pruneMembers.ts | 12 - .../permissions/src/members/unbanMember.ts | 12 - .../permissions/src/messages/deleteMessage.ts | 25 - .../src/messages/deleteMessages.ts | 20 - .../permissions/src/messages/editMessage.ts | 18 - .../permissions/src/messages/getMessage.ts | 13 - .../permissions/src/messages/getMessages.ts | 18 - .../plugins/permissions/src/messages/mod.ts | 20 - .../permissions/src/messages/pinMessage.ts | 17 - .../src/messages/publishMessage.ts | 18 - .../src/messages/reactions/addReaction.ts | 12 - .../src/messages/reactions/addReactions.ts | 12 - .../messages/reactions/deleteReactionsAll.ts | 12 - .../reactions/deleteReactionsEmoji.ts | 12 - .../reactions/deleteUserReaction.ts.ts | 12 - .../permissions/src/messages/reactions/mod.ts | 14 - .../permissions/src/messages/sendMessage.ts | 27 - .../permissions/src/messages/unpinMessage.ts | 12 - .../plugins/permissions/src/permissions.ts | 409 ----------- .../plugins/permissions/src/roles/addRole.ts | 26 - .../permissions/src/roles/createRole.ts | 16 - .../permissions/src/roles/deleteRole.ts | 12 - .../plugins/permissions/src/roles/editRole.ts | 34 - .../old/plugins/permissions/src/roles/mod.ts | 16 - .../src/roles/modifyRolePositions.ts | 12 - .../permissions/src/roles/removeRole.ts | 31 - .../src/stickers/createGuildSticker.ts | 10 - .../src/stickers/deleteGuildSticker.ts | 10 - .../src/stickers/editGuildSticker.ts | 10 - .../plugins/permissions/src/stickers/mod.ts | 10 - .../permissions/src/webhooks/createWebhook.ts | 12 - .../permissions/src/webhooks/deleteWebhook.ts | 12 - .../permissions/src/webhooks/editWebhook.ts | 18 - .../plugins/permissions/src/webhooks/mod.ts | 10 - .../plugins/permissions/tests/empty.spec.ts | 1 - .../old/plugins/permissions/tsconfig.json | 16 - .../plugins/permissions/tsconfig.test.json | 11 - packages/old/plugins/utils/.c8rc.json | 7 - packages/old/plugins/utils/.mocharc.json | 10 - packages/old/plugins/utils/.swcrc | 31 - packages/old/plugins/utils/README.md | 1 - packages/old/plugins/utils/index.ts | 170 ----- packages/old/plugins/utils/package.json | 43 -- packages/old/plugins/utils/src/channels.ts | 39 -- .../old/plugins/utils/src/disconnectMember.ts | 10 - .../utils/src/fetchAndRetrieveMembers.ts | 24 - .../plugins/utils/src/getMembersPaginated.ts | 71 -- packages/old/plugins/utils/src/moveMember.ts | 13 - .../utils/src/sendAutoCompleteChoices.ts | 20 - .../plugins/utils/src/sendDirectMessage.ts | 30 - .../src/sendPrivateInteractionResponse.ts | 12 - .../old/plugins/utils/src/sendTextMessage.ts | 11 - .../old/plugins/utils/src/suppressEmbeds.ts | 17 - packages/old/plugins/utils/src/threads.ts | 78 --- .../old/plugins/utils/tests/empty.spec.ts | 1 - packages/old/plugins/utils/tsconfig.json | 8 - packages/old/plugins/utils/tsconfig.test.json | 11 - packages/old/plugins/validations/.c8rc.json | 7 - .../old/plugins/validations/.mocharc.json | 10 - packages/old/plugins/validations/.swcrc | 31 - packages/old/plugins/validations/README.md | 18 - packages/old/plugins/validations/deps.ts | 1 - packages/old/plugins/validations/mod.ts | 59 -- packages/old/plugins/validations/package.json | 37 - .../src/applicationCommandLength.ts | 51 -- .../src/applicationCommandOptions.ts | 55 -- .../plugins/validations/src/attachments.ts | 9 - .../plugins/validations/src/channels/mod.ts | 15 - .../src/channels/threads/addThreadMember.ts | 11 - .../src/channels/threads/getThreadMember.ts | 12 - .../validations/src/channels/threads/mod.ts | 10 - .../channels/threads/removeThreadMember.ts | 11 - .../old/plugins/validations/src/components.ts | 236 ------- .../validations/src/guilds/createGuild.ts | 16 - .../src/guilds/events/createScheduledEvent.ts | 64 -- .../validations/src/guilds/events/mod.ts | 27 - .../old/plugins/validations/src/guilds/mod.ts | 40 -- .../createGlobalApplicationCommand.ts | 59 -- .../commands/createGuildApplicationCommand.ts | 45 -- .../src/interaction/commands/mod.ts | 8 - .../validations/src/interaction/mod.ts | 8 - .../responses/editFollowupMessage.ts | 36 - .../editOriginalInteractionResponse.ts | 36 - .../src/interaction/responses/mod.ts | 10 - .../responses/sendInteractionResponse.ts | 25 - .../validations/src/invites/createInvite.ts | 16 - .../plugins/validations/src/invites/mod.ts | 6 - .../validations/src/members/editMember.ts | 11 - .../plugins/validations/src/members/mod.ts | 29 - .../src/messages/deleteMessages.ts | 40 -- .../validations/src/messages/editMessage.ts | 61 -- .../plugins/validations/src/messages/mod.ts | 15 - .../validations/src/messages/sendMessage.ts | 69 -- .../validations/src/misc/editBotProfile.ts | 39 -- .../old/plugins/validations/src/misc/mod.ts | 6 - .../src/stickers/createGuildSticker.ts | 20 - .../src/stickers/editGuildSticker.ts | 23 - .../plugins/validations/src/stickers/mod.ts | 8 - .../validations/src/webhooks/createWebhook.ts | 19 - .../validations/src/webhooks/editWebhook.ts | 21 - .../src/webhooks/editWebhookMessage.ts | 41 -- .../plugins/validations/src/webhooks/mod.ts | 12 - .../src/webhooks/sendWebhookMessage.ts | 43 -- .../plugins/validations/tests/empty.spec.ts | 1 - .../old/plugins/validations/tsconfig.json | 16 - .../plugins/validations/tsconfig.test.json | 11 - packages/old/rest/.c8rc.json | 7 - packages/old/rest/.mocharc.json | 10 - packages/old/rest/.swcrc | 31 - packages/old/rest/README.md | 16 - packages/old/rest/package.json | 53 -- packages/old/rest/src/README.md | 16 - packages/old/rest/src/checkRateLimits.ts | 20 - packages/old/rest/src/cleanupQueues.ts | 39 -- packages/old/rest/src/convertRestError.ts | 9 - .../rest/src/createInvalidRequestBucket.ts | 140 ---- packages/old/rest/src/createQueueBucket.ts | 217 ------ packages/old/rest/src/createRequestBody.ts | 122 ---- .../followAnnouncementChannel.ts | 35 - .../helpers/channels/announcements/index.ts | 1 - .../src/helpers/channels/createChannel.ts | 137 ---- .../src/helpers/channels/deleteChannel.ts | 36 - .../deleteChannelPermissionOverride.ts | 30 - .../rest/src/helpers/channels/editChannel.ts | 249 ------- .../editChannelPermissionOverrides.ts | 46 -- .../helpers/channels/editChannelPositions.ts | 48 -- .../channels/forums/createForumThread.ts | 88 --- .../rest/src/helpers/channels/forums/index.ts | 1 - .../rest/src/helpers/channels/getChannel.ts | 29 - .../src/helpers/channels/getChannelInvites.ts | 39 -- .../rest/src/helpers/channels/getChannels.ts | 34 - .../old/rest/src/helpers/channels/index.ts | 14 - .../channels/stages/createStageInstance.ts | 48 -- .../channels/stages/deleteStageInstance.ts | 28 - .../channels/stages/editStageInstance.ts | 44 -- .../channels/stages/getStageInstance.ts | 29 - .../rest/src/helpers/channels/stages/index.ts | 4 - .../channels/threads/addThreadMember.ts | 29 - .../channels/threads/getActiveThreads.ts | 55 -- .../threads/getPrivateArchivedThreads.ts | 53 -- .../getPrivateJoinedArchivedThreads.ts | 52 -- .../threads/getPublicArchivedThreads.ts | 55 -- .../channels/threads/getThreadMember.ts | 31 - .../channels/threads/getThreadMembers.ts | 38 - .../src/helpers/channels/threads/index.ts | 12 - .../helpers/channels/threads/joinThread.ts | 26 - .../helpers/channels/threads/leaveThread.ts | 26 - .../channels/threads/removeThreadMember.ts | 31 - .../threads/startThreadWithMessage.ts | 59 -- .../threads/startThreadWithoutMessage.ts | 63 -- .../channels/triggerTypingIndicator.ts | 28 - .../rest/src/helpers/emojis/createEmoji.ts | 61 -- .../rest/src/helpers/emojis/deleteEmoji.ts | 32 - .../old/rest/src/helpers/emojis/editEmoji.ts | 56 -- .../old/rest/src/helpers/emojis/getEmoji.ts | 27 - .../rest/src/helpers/emojis/getEmojiUrl.ts | 19 - .../old/rest/src/helpers/emojis/getEmojis.ts | 31 - packages/old/rest/src/helpers/emojis/index.ts | 6 - .../guilds/automod/createAutomodRule.ts | 104 --- .../guilds/automod/deleteAutomodRule.ts | 30 - .../helpers/guilds/automod/editAutomodRule.ts | 103 --- .../helpers/guilds/automod/getAutomodRule.ts | 30 - .../helpers/guilds/automod/getAutomodRules.ts | 34 - .../rest/src/helpers/guilds/automod/index.ts | 5 - .../rest/src/helpers/guilds/createGuild.ts | 172 ----- .../rest/src/helpers/guilds/deleteGuild.ts | 27 - .../old/rest/src/helpers/guilds/editGuild.ts | 116 ---- .../src/helpers/guilds/editGuildMfaLevel.ts | 22 - .../src/helpers/guilds/editWelcomeScreen.ts | 64 -- .../guilds/events/createScheduledEvent.ts | 77 --- .../guilds/events/deleteScheduledEvent.ts | 29 - .../guilds/events/editScheduledEvent.ts | 84 --- .../guilds/events/getScheduledEvent.ts | 33 - .../guilds/events/getScheduledEventUsers.ts | 73 -- .../guilds/events/getScheduledEvents.ts | 41 -- .../rest/src/helpers/guilds/events/index.ts | 6 - .../rest/src/helpers/guilds/getAuditLog.ts | 35 - .../old/rest/src/helpers/guilds/getBan.ts | 35 - .../old/rest/src/helpers/guilds/getBans.ts | 49 -- .../old/rest/src/helpers/guilds/getGuild.ts | 29 - .../src/helpers/guilds/getGuildBannerUrl.ts | 37 - .../src/helpers/guilds/getGuildIconUrl.ts | 35 - .../src/helpers/guilds/getGuildPreview.ts | 50 -- .../src/helpers/guilds/getGuildSplashUrl.ts | 36 - .../rest/src/helpers/guilds/getPruneCount.ts | 34 - .../rest/src/helpers/guilds/getVanityUrl.ts | 35 - .../src/helpers/guilds/getWelcomeScreen.ts | 31 - packages/old/rest/src/helpers/guilds/index.ts | 23 - .../guilds/integrations/deleteIntegration.ts | 32 - .../guilds/integrations/getIntegrations.ts | 36 - .../src/helpers/guilds/integrations/index.ts | 2 - .../helpers/guilds/invites/createInvite.ts | 67 -- .../helpers/guilds/invites/deleteInvite.ts | 28 - .../src/helpers/guilds/invites/getInvite.ts | 27 - .../src/helpers/guilds/invites/getInvites.ts | 34 - .../rest/src/helpers/guilds/invites/index.ts | 4 - .../old/rest/src/helpers/guilds/leaveGuild.ts | 25 - .../helpers/guilds/voice/editVoiceState.ts | 95 --- .../guilds/voice/getAvailableVoiceRegions.ts | 29 - .../helpers/guilds/voice/getVoiceRegions.ts | 33 - .../rest/src/helpers/guilds/voice/index.ts | 3 - .../guilds/widget/editWidgetSettings.ts | 40 -- .../src/helpers/guilds/widget/getWidget.ts | 26 - .../guilds/widget/getWidgetImageUrl.ts | 33 - .../guilds/widget/getWidgetSettings.ts | 29 - .../rest/src/helpers/guilds/widget/index.ts | 4 - packages/old/rest/src/helpers/index.ts | 11 - .../createGlobalApplicationCommand.ts | 33 - .../commands/createGuildApplicationCommand.ts | 34 - .../deleteGlobalApplicationCommand.ts | 22 - .../commands/deleteGuildApplicationCommand.ts | 30 - .../editApplicationCommandPermissions.ts | 63 -- .../commands/editGlobalApplicationCommand.ts | 30 - .../commands/editGuildApplicationCommand.ts | 38 - .../getApplicationCommandPermission.ts | 36 - .../getApplicationCommandPermissions.ts | 40 -- .../commands/getGlobalApplicationCommand.ts | 26 - .../commands/getGlobalApplicationCommands.ts | 32 - .../commands/getGuildApplicationCommand.ts | 34 - .../commands/getGuildApplicationCommands.ts | 32 - .../helpers/interactions/commands/index.ts | 15 - .../upsertGlobalApplicationCommands.ts | 41 -- .../upsertGuildApplicationCommands.ts | 43 -- .../rest/src/helpers/interactions/index.ts | 2 - .../responses/deleteFollowupMessage.ts | 33 - .../deleteOriginalInteractionResponse.ts | 29 - .../responses/editFollowupMessage.ts | 47 -- .../editOriginalInteractionResponse.ts | 47 -- .../responses/getFollowupMessage.ts | 39 -- .../getOriginalInteractionResponse.ts | 36 - .../helpers/interactions/responses/index.ts | 8 - .../responses/sendFollowupMessage.ts | 48 -- .../responses/sendInteractionResponse.ts | 47 -- .../old/rest/src/helpers/members/banMember.ts | 41 -- .../rest/src/helpers/members/editBotMember.ts | 44 -- .../rest/src/helpers/members/editMember.ts | 66 -- .../rest/src/helpers/members/getAvatarUrl.ts | 37 - .../rest/src/helpers/members/getDmChannel.ts | 29 - .../old/rest/src/helpers/members/getMember.ts | 31 - .../rest/src/helpers/members/getMembers.ts | 51 -- .../old/rest/src/helpers/members/index.ts | 11 - .../rest/src/helpers/members/kickMember.ts | 33 - .../rest/src/helpers/members/pruneMembers.ts | 51 -- .../rest/src/helpers/members/searchMembers.ts | 43 -- .../rest/src/helpers/members/unbanMember.ts | 29 - .../src/helpers/messages/crosspostMessage.ts | 38 - .../src/helpers/messages/deleteMessage.ts | 38 - .../src/helpers/messages/deleteMessages.ts | 36 - .../rest/src/helpers/messages/editMessage.ts | 81 --- .../rest/src/helpers/messages/getMessage.ts | 34 - .../rest/src/helpers/messages/getMessages.ts | 40 -- .../src/helpers/messages/getPinnedMessages.ts | 38 - .../old/rest/src/helpers/messages/index.ts | 11 - .../rest/src/helpers/messages/pinMessage.ts | 35 - .../helpers/messages/reactions/addReaction.ts | 44 -- .../messages/reactions/addReactions.ts | 45 -- .../messages/reactions/deleteReaction.ts | 79 --- .../messages/reactions/deleteReactionsAll.ts | 31 - .../reactions/deleteReactionsEmoji.ts | 40 -- .../messages/reactions/getReactions.ts | 58 -- .../src/helpers/messages/reactions/index.ts | 6 - .../rest/src/helpers/messages/sendMessage.ts | 195 ------ .../rest/src/helpers/messages/unpinMessage.ts | 33 - .../rest/src/helpers/misc/editBotProfile.ts | 30 - .../src/helpers/misc/getApplicationInfo.ts | 17 - .../rest/src/helpers/misc/getGatewayBot.ts | 14 - .../src/helpers/misc/getNitroStickerPacks.ts | 30 - packages/old/rest/src/helpers/misc/getUser.ts | 18 - packages/old/rest/src/helpers/misc/index.ts | 5 - .../old/rest/src/helpers/roles/addRole.ts | 33 - .../old/rest/src/helpers/roles/createRole.ts | 67 -- .../old/rest/src/helpers/roles/deleteRole.ts | 29 - .../old/rest/src/helpers/roles/editRole.ts | 67 -- .../src/helpers/roles/editRolePositions.ts | 51 -- .../old/rest/src/helpers/roles/getRoles.ts | 34 - packages/old/rest/src/helpers/roles/index.ts | 7 - .../old/rest/src/helpers/roles/removeRole.ts | 33 - .../helpers/stickers/createGuildSticker.ts | 56 -- .../helpers/stickers/deleteGuildSticker.ts | 32 - .../src/helpers/stickers/editGuildSticker.ts | 52 -- .../src/helpers/stickers/getGuildSticker.ts | 28 - .../src/helpers/stickers/getGuildStickers.ts | 33 - .../rest/src/helpers/stickers/getSticker.ts | 25 - .../old/rest/src/helpers/stickers/index.ts | 6 - .../helpers/templates/createGuildTemplate.ts | 41 -- .../helpers/templates/deleteGuildTemplate.ts | 29 - .../helpers/templates/editGuildTemplate.ts | 51 -- .../src/helpers/templates/getGuildTemplate.ts | 29 - .../helpers/templates/getGuildTemplates.ts | 35 - .../old/rest/src/helpers/templates/index.ts | 6 - .../helpers/templates/syncGuildTemplate.ts | 32 - .../src/helpers/webhooks/createWebhook.ts | 53 -- .../src/helpers/webhooks/deleteWebhook.ts | 29 - .../helpers/webhooks/deleteWebhookMessage.ts | 36 - .../webhooks/deleteWebhookWithToken.ts | 27 - .../webhooks/editOriginalWebhookMessage.ts | 41 -- .../rest/src/helpers/webhooks/editWebhook.ts | 52 -- .../helpers/webhooks/editWebhookMessage.ts | 43 -- .../helpers/webhooks/editWebhookWithToken.ts | 38 - .../src/helpers/webhooks/executeWebhook.ts | 94 --- .../helpers/webhooks/getChannelWebhooks.ts | 34 - .../src/helpers/webhooks/getGuildWebhooks.ts | 34 - .../rest/src/helpers/webhooks/getWebhook.ts | 28 - .../src/helpers/webhooks/getWebhookMessage.ts | 35 - .../helpers/webhooks/getWebhookWithToken.ts | 27 - .../old/rest/src/helpers/webhooks/index.ts | 14 - packages/old/rest/src/index.ts | 14 - packages/old/rest/src/processGlobalQueue.ts | 38 - .../old/rest/src/processRateLimitedPaths.ts | 33 - packages/old/rest/src/processRequest.ts | 39 -- .../old/rest/src/processRequestHeaders.ts | 79 --- packages/old/rest/src/rest.ts | 31 - packages/old/rest/src/restManager.ts | 203 ------ packages/old/rest/src/runMethod.ts | 106 --- packages/old/rest/src/runProxyMethod.ts | 61 -- packages/old/rest/src/sendRequest.ts | 167 ----- packages/old/rest/src/simplifyUrl.ts | 25 - packages/old/rest/src/transformer.ts | 26 - packages/old/rest/src/types.ts | 10 - .../old/rest/tests/e2e/channel/thread.spec.ts | 144 ---- packages/old/rest/tests/e2e/emoji.spec.ts | 131 ---- packages/old/rest/tests/e2e/role.spec.ts | 217 ------ packages/old/rest/tests/e2e/utils.ts | 22 - .../tests/unit/RestRequestRejection.spec.ts | 17 - .../rest/tests/unit/checkRateLimits.spec.ts | 85 --- .../old/rest/tests/unit/cleanupQueues.spec.ts | 57 -- .../rest/tests/unit/createQueueBucket.spec.ts | 74 -- .../unit/processRateLimitedPaths.spec.ts | 88 --- .../tests/unit/processRequestHeaders.spec.ts | 183 ----- .../old/rest/tests/unit/simplifyUrl.spec.ts | 79 --- packages/old/rest/tsconfig.json | 16 - packages/old/rest/tsconfig.test.json | 11 - packages/old/toggles/ToggleBitfield.ts | 49 -- packages/old/toggles/emoji.ts | 72 -- packages/old/toggles/guild.ts | 358 ---------- packages/old/toggles/index.ts | 7 - packages/old/toggles/member.ts | 65 -- packages/old/toggles/role.ts | 84 --- packages/old/toggles/user.ts | 72 -- packages/old/toggles/voice.ts | 97 --- packages/old/transformer/.c8rc.json | 7 - packages/old/transformer/.mocharc.json | 10 - packages/old/transformer/.swcrc | 31 - packages/old/transformer/bench/index.ts | 145 ---- packages/old/transformer/package.json | 50 -- .../old/transformer/src/camel/activity.ts | 45 -- .../transformer/src/camel/allowedMentions.ts | 12 - .../old/transformer/src/camel/application.ts | 38 - .../src/camel/applicationCommand.ts | 24 - .../src/camel/applicationCommandOption.ts | 30 - .../camel/applicationCommandOptionChoice.ts | 14 - .../src/camel/applicationCommandPermission.ts | 19 - .../old/transformer/src/camel/attachment.ts | 18 - .../transformer/src/camel/auditLogEntry.ts | 19 - .../old/transformer/src/camel/auditlogs.ts | 19 - .../src/camel/automodActionExecution.ts | 28 - .../old/transformer/src/camel/automodRule.ts | 30 - packages/old/transformer/src/camel/channel.ts | 65 -- .../old/transformer/src/camel/component.ts | 26 - packages/old/transformer/src/camel/embed.ts | 47 -- packages/old/transformer/src/camel/emoji.ts | 15 - packages/old/transformer/src/camel/event.ts | 28 - .../transformer/src/camel/followedChannel.ts | 10 - .../old/transformer/src/camel/gatewayBot.ts | 16 - packages/old/transformer/src/camel/guild.ts | 48 -- packages/old/transformer/src/camel/index.ts | 32 - .../old/transformer/src/camel/integration.ts | 35 - packages/old/transformer/src/camel/invite.ts | 72 -- packages/old/transformer/src/camel/member.ts | 39 -- packages/old/transformer/src/camel/message.ts | 79 --- packages/old/transformer/src/camel/preview.ts | 18 - packages/old/transformer/src/camel/role.ts | 22 - packages/old/transformer/src/camel/sticker.ts | 38 - packages/old/transformer/src/camel/team.ts | 17 - packages/old/transformer/src/camel/voice.ts | 11 - packages/old/transformer/src/camel/webhook.ts | 26 - .../transformer/src/camel/welcomeScreen.ts | 15 - packages/old/transformer/src/camel/widget.ts | 25 - .../transformer/src/camel/widgetSettings.ts | 10 - packages/old/transformer/src/index.ts | 143 ---- .../old/transformer/src/modifiers/commands.ts | 22 - .../old/transformer/src/modifiers/index.ts | 1 - .../old/transformer/src/snake/activity.ts | 41 -- .../transformer/src/snake/allowedMentions.ts | 12 - .../old/transformer/src/snake/application.ts | 39 -- .../src/snake/applicationCommand.ts | 24 - .../src/snake/applicationCommandOption.ts | 27 - .../snake/applicationCommandOptionChoice.ts | 10 - .../src/snake/applicationCommandPermission.ts | 16 - .../old/transformer/src/snake/attachment.ts | 17 - .../src/snake/automodActionExecution.ts | 25 - .../old/transformer/src/snake/automodRule.ts | 32 - packages/old/transformer/src/snake/channel.ts | 71 -- .../old/transformer/src/snake/component.ts | 26 - packages/old/transformer/src/snake/embed.ts | 49 -- packages/old/transformer/src/snake/emoji.ts | 17 - .../old/transformer/src/snake/gatewayBot.ts | 16 - packages/old/transformer/src/snake/guild.ts | 49 -- packages/old/transformer/src/snake/index.ts | 26 - .../src/snake/interactionResponse.ts | 35 - packages/old/transformer/src/snake/member.ts | 42 -- packages/old/transformer/src/snake/message.ts | 85 --- packages/old/transformer/src/snake/role.ts | 23 - packages/old/transformer/src/snake/sticker.ts | 38 - packages/old/transformer/src/snake/team.ts | 21 - packages/old/transformer/src/snake/webhook.ts | 30 - .../transformer/src/snake/welcomeScreen.ts | 15 - packages/old/transformer/src/snake/widget.ts | 22 - .../transformer/src/snake/widgetSettings.ts | 9 - packages/old/transformer/tests/empty.spec.ts | 1 - packages/old/transformer/tsconfig.json | 16 - packages/old/transformer/tsconfig.test.json | 11 - packages/old/utils/.c8rc.json | 7 - packages/old/utils/.mocharc.json | 10 - packages/old/utils/.swcrc | 31 - packages/old/utils/README.md | 158 ----- packages/old/utils/package.json | 46 -- packages/old/utils/src/base64.ts | 274 -------- packages/old/utils/src/bigint.ts | 9 - packages/old/utils/src/bucket.ts | 182 ----- packages/old/utils/src/calculateShardId.ts | 5 - packages/old/utils/src/collection.ts | 151 ---- packages/old/utils/src/constants.ts | 26 - packages/old/utils/src/hash.ts | 19 - packages/old/utils/src/index.ts | 14 - packages/old/utils/src/permissions.ts | 27 - packages/old/utils/src/token.ts | 23 - packages/old/utils/src/typeguards.ts | 32 - packages/old/utils/src/urlToBase64.ts | 9 - packages/old/utils/src/utils.ts | 35 - packages/old/utils/src/validateLength.ts | 11 - packages/old/utils/src/verifySignature.ts | 26 - packages/old/utils/tests/base64.spec.ts | 54 -- packages/old/utils/tests/bigint.spec.ts | 21 - packages/old/utils/tests/collection.spec.ts | 146 ---- packages/old/utils/tests/hash.spec.ts | 25 - packages/old/utils/tests/token.spec.ts | 15 - packages/old/utils/tests/utils.spec.ts | 54 -- .../old/utils/tests/validateLength.spec.ts | 27 - .../old/utils/tests/verifySignature.spec.ts | 42 -- packages/old/utils/tsconfig.json | 16 - packages/old/utils/tsconfig.test.json | 11 - 818 files changed, 34177 deletions(-) delete mode 100644 packages/old/client/.c8rc.json delete mode 100644 packages/old/client/.mocharc.json delete mode 100644 packages/old/client/.swcrc delete mode 100644 packages/old/client/package.json delete mode 100644 packages/old/client/src/client.ts delete mode 100644 packages/old/client/src/handlers.ts delete mode 100644 packages/old/client/src/handlers/channels/CHANNEL_CREATE.ts delete mode 100644 packages/old/client/src/handlers/channels/CHANNEL_DELETE.ts delete mode 100644 packages/old/client/src/handlers/channels/CHANNEL_PINS_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/channels/CHANNEL_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/channels/STAGE_INSTANCE_CREATE.ts delete mode 100644 packages/old/client/src/handlers/channels/STAGE_INSTANCE_DELETE.ts delete mode 100644 packages/old/client/src/handlers/channels/STAGE_INSTANCE_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/channels/THREAD_CREATE.ts delete mode 100644 packages/old/client/src/handlers/channels/THREAD_DELETE.ts delete mode 100644 packages/old/client/src/handlers/channels/THREAD_LIST_SYNC.ts delete mode 100644 packages/old/client/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/channels/THREAD_MEMBER_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/channels/THREAD_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/channels/index.ts delete mode 100644 packages/old/client/src/handlers/emojis/GUILD_EMOJIS_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/emojis/index.ts delete mode 100644 packages/old/client/src/handlers/guilds/GUILD_BAN_ADD.ts delete mode 100644 packages/old/client/src/handlers/guilds/GUILD_BAN_REMOVE.ts delete mode 100644 packages/old/client/src/handlers/guilds/GUILD_CREATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/GUILD_DELETE.ts delete mode 100644 packages/old/client/src/handlers/guilds/GUILD_INTEGRATIONS_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/GUILD_STICKERS_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/GUILD_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_ACTION_EXECUTION.ts delete mode 100644 packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_CREATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_DELETE.ts delete mode 100644 packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/automod/index.ts delete mode 100644 packages/old/client/src/handlers/guilds/index.ts delete mode 100644 packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_CREATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_DELETE.ts delete mode 100644 packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_ADD.ts delete mode 100644 packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts delete mode 100644 packages/old/client/src/handlers/guilds/scheduledEvents/index.ts delete mode 100644 packages/old/client/src/handlers/index.ts delete mode 100644 packages/old/client/src/handlers/integrations/INTEGRATION_CREATE.ts delete mode 100644 packages/old/client/src/handlers/integrations/INTEGRATION_DELETE.ts delete mode 100644 packages/old/client/src/handlers/integrations/INTEGRATION_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/integrations/index.ts delete mode 100644 packages/old/client/src/handlers/interactions/INTERACTION_CREATE.ts delete mode 100644 packages/old/client/src/handlers/interactions/index.ts delete mode 100644 packages/old/client/src/handlers/invites/INVITE_CREATE.ts delete mode 100644 packages/old/client/src/handlers/invites/INVITE_DELETE.ts delete mode 100644 packages/old/client/src/handlers/invites/index.ts delete mode 100644 packages/old/client/src/handlers/members/GUILD_MEMBERS_CHUNK.ts delete mode 100644 packages/old/client/src/handlers/members/GUILD_MEMBER_ADD.ts delete mode 100644 packages/old/client/src/handlers/members/GUILD_MEMBER_REMOVE.ts delete mode 100644 packages/old/client/src/handlers/members/GUILD_MEMBER_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/members/index.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_CREATE.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_DELETE.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_DELETE_BULK.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_REACTION_ADD.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_ALL.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.ts delete mode 100644 packages/old/client/src/handlers/messages/MESSAGE_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/messages/index.ts delete mode 100644 packages/old/client/src/handlers/misc/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/misc/PRESENCE_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/misc/READY.ts delete mode 100644 packages/old/client/src/handlers/misc/TYPING_START.ts delete mode 100644 packages/old/client/src/handlers/misc/USER_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/misc/index.ts delete mode 100644 packages/old/client/src/handlers/roles/GUILD_ROLE_CREATE.ts delete mode 100644 packages/old/client/src/handlers/roles/GUILD_ROLE_DELETE.ts delete mode 100644 packages/old/client/src/handlers/roles/GUILD_ROLE_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/roles/index.ts delete mode 100644 packages/old/client/src/handlers/voice/VOICE_SERVER_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/voice/VOICE_STATE_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/voice/index.ts delete mode 100644 packages/old/client/src/handlers/webhooks/WEBHOOKS_UPDATE.ts delete mode 100644 packages/old/client/src/handlers/webhooks/index.ts delete mode 100644 packages/old/client/src/index.ts delete mode 100644 packages/old/client/src/transformer.ts delete mode 100644 packages/old/client/src/transformers/activity.ts delete mode 100644 packages/old/client/src/transformers/application.ts delete mode 100644 packages/old/client/src/transformers/applicationCommand.ts delete mode 100644 packages/old/client/src/transformers/applicationCommandOption.ts delete mode 100644 packages/old/client/src/transformers/applicationCommandOptionChoice.ts delete mode 100644 packages/old/client/src/transformers/applicationCommandPermission.ts delete mode 100644 packages/old/client/src/transformers/attachment.ts delete mode 100644 packages/old/client/src/transformers/auditLogEntry.ts delete mode 100644 packages/old/client/src/transformers/automodActionExecution.ts delete mode 100644 packages/old/client/src/transformers/automodRule.ts delete mode 100644 packages/old/client/src/transformers/channel.ts delete mode 100644 packages/old/client/src/transformers/component.ts delete mode 100644 packages/old/client/src/transformers/embed.ts delete mode 100644 packages/old/client/src/transformers/emoji.ts delete mode 100644 packages/old/client/src/transformers/gatewayBot.ts delete mode 100644 packages/old/client/src/transformers/guild.ts delete mode 100644 packages/old/client/src/transformers/index.ts delete mode 100644 packages/old/client/src/transformers/integration.ts delete mode 100644 packages/old/client/src/transformers/interaction.ts delete mode 100644 packages/old/client/src/transformers/invite.ts delete mode 100644 packages/old/client/src/transformers/member.ts delete mode 100644 packages/old/client/src/transformers/message.ts delete mode 100644 packages/old/client/src/transformers/presence.ts delete mode 100644 packages/old/client/src/transformers/reverse/activity.ts delete mode 100644 packages/old/client/src/transformers/reverse/allowedMentions.ts delete mode 100644 packages/old/client/src/transformers/reverse/application.ts delete mode 100644 packages/old/client/src/transformers/reverse/applicationCommand.ts delete mode 100644 packages/old/client/src/transformers/reverse/applicationCommandOption.ts delete mode 100644 packages/old/client/src/transformers/reverse/applicationCommandOptionChoice.ts delete mode 100644 packages/old/client/src/transformers/reverse/applicationCommandPermission.ts delete mode 100644 packages/old/client/src/transformers/reverse/attachment.ts delete mode 100644 packages/old/client/src/transformers/reverse/auditLogEntry.ts delete mode 100644 packages/old/client/src/transformers/reverse/component.ts delete mode 100644 packages/old/client/src/transformers/reverse/createApplicationCommand.ts delete mode 100644 packages/old/client/src/transformers/reverse/embed.ts delete mode 100644 packages/old/client/src/transformers/reverse/emoji.ts delete mode 100644 packages/old/client/src/transformers/reverse/gatewayBot.ts delete mode 100644 packages/old/client/src/transformers/reverse/index.ts delete mode 100644 packages/old/client/src/transformers/reverse/interactionResponse.ts delete mode 100644 packages/old/client/src/transformers/reverse/member.ts delete mode 100644 packages/old/client/src/transformers/reverse/presence.ts delete mode 100644 packages/old/client/src/transformers/reverse/team.ts delete mode 100644 packages/old/client/src/transformers/reverse/widgetSettings.ts delete mode 100644 packages/old/client/src/transformers/role.ts delete mode 100644 packages/old/client/src/transformers/scheduledEvent.ts delete mode 100644 packages/old/client/src/transformers/stageInstance.ts delete mode 100644 packages/old/client/src/transformers/sticker.ts delete mode 100644 packages/old/client/src/transformers/team.ts delete mode 100644 packages/old/client/src/transformers/template.ts delete mode 100644 packages/old/client/src/transformers/threadMember.ts delete mode 100644 packages/old/client/src/transformers/toggles/ToggleBitfield.ts delete mode 100644 packages/old/client/src/transformers/toggles/emoji.ts delete mode 100644 packages/old/client/src/transformers/toggles/guild.ts delete mode 100644 packages/old/client/src/transformers/toggles/index.ts delete mode 100644 packages/old/client/src/transformers/toggles/member.ts delete mode 100644 packages/old/client/src/transformers/toggles/role.ts delete mode 100644 packages/old/client/src/transformers/toggles/user.ts delete mode 100644 packages/old/client/src/transformers/toggles/voice.ts delete mode 100644 packages/old/client/src/transformers/voiceRegion.ts delete mode 100644 packages/old/client/src/transformers/voiceState.ts delete mode 100644 packages/old/client/src/transformers/webhook.ts delete mode 100644 packages/old/client/src/transformers/welcomeScreen.ts delete mode 100644 packages/old/client/src/transformers/widget.ts delete mode 100644 packages/old/client/src/transformers/widgetSettings.ts delete mode 100644 packages/old/client/src/types.ts delete mode 100644 packages/old/client/tests/handlers.spec.ts delete mode 100644 packages/old/client/tests/transformers.spec.ts delete mode 100644 packages/old/client/tsconfig.json delete mode 100644 packages/old/client/tsconfig.test.json delete mode 100644 packages/old/constant/.c8rc.json delete mode 100644 packages/old/constant/.mocharc.json delete mode 100644 packages/old/constant/.swcrc delete mode 100644 packages/old/constant/package.json delete mode 100644 packages/old/constant/src/index.ts delete mode 100644 packages/old/constant/src/rest.ts delete mode 100644 packages/old/constant/tests/empty.spec.ts delete mode 100644 packages/old/constant/tsconfig.json delete mode 100644 packages/old/constant/tsconfig.test.json delete mode 100644 packages/old/discordeno/.c8rc.json delete mode 100644 packages/old/discordeno/.mocharc.json delete mode 100644 packages/old/discordeno/.swcrc delete mode 100644 packages/old/discordeno/oldTest/channels/createCategory.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createNews.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createText.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createTextWithNsfw.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createTextWithPerms.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createTextWithRateLimit.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createVoice.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createVoiceWithBitrate.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/createVoiceWithUserLimit.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/deleteWithReason.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/deleteWithoutReason.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/editChannelWithReason.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/getChannel.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/getChannels.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/invites/invite.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/messages/message.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/messages/reactions.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/permissions/deleteChannelOverwrite.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/stageInstances.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/threads/deleteThread.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/threads/editThread.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/threads/getActiveThreads.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/threads/getArchivedThreads.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/threads/joinAndLeaveThread.test.ts delete mode 100644 packages/old/discordeno/oldTest/channels/threads/startThread.test.ts delete mode 100644 packages/old/discordeno/oldTest/delay.test.ts delete mode 100644 packages/old/discordeno/oldTest/deps.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/automod.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/editGuildMfaLevel.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/events/events.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/getVoiceRegions.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/guild.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/members/bans.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/members/dms.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/members/editBotNickname.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/members/members.test.ts delete mode 100644 packages/old/discordeno/oldTest/guilds/roles.test.ts delete mode 100644 packages/old/discordeno/oldTest/misc/benchmark.test.ts delete mode 100644 packages/old/discordeno/oldTest/misc/gatewaybot.test.ts delete mode 100644 packages/old/discordeno/oldTest/misc/getApplicationInfo.test.ts delete mode 100644 packages/old/discordeno/oldTest/misc/getUser.test.ts delete mode 100644 packages/old/discordeno/oldTest/misc/rateLimit.test.ts delete mode 100644 packages/old/discordeno/oldTest/misc/snowflake.test.ts delete mode 100644 packages/old/discordeno/oldTest/misc/startTyping.test.ts delete mode 100644 packages/old/discordeno/oldTest/mod.ts delete mode 100644 packages/old/discordeno/oldTest/rest.ts delete mode 100644 packages/old/discordeno/oldTest/stickers/createGuildSticker.test.ts delete mode 100644 packages/old/discordeno/oldTest/stickers/deleteGuildSticker.test.ts delete mode 100644 packages/old/discordeno/oldTest/stickers/editGuildSticker.test.ts delete mode 100644 packages/old/discordeno/oldTest/stickers/getGuildSticker.test.ts delete mode 100644 packages/old/discordeno/oldTest/stickers/getGuildStickers.test.ts delete mode 100644 packages/old/discordeno/oldTest/stickers/getSticker.test.ts delete mode 100644 packages/old/discordeno/oldTest/utils.test.ts delete mode 100644 packages/old/discordeno/oldTest/utils.ts delete mode 100644 packages/old/discordeno/oldTest/webhook/deleteWebhook.test.ts delete mode 100644 packages/old/discordeno/oldTest/webhook/deleteWebhookWithToken.test.ts delete mode 100644 packages/old/discordeno/oldTest/webhook/messages.test.ts delete mode 100644 packages/old/discordeno/oldTest/webhook/webhook.test.ts delete mode 100644 packages/old/discordeno/package.json delete mode 100644 packages/old/discordeno/place/debug.rest.ts delete mode 100644 packages/old/discordeno/place/mod.ts delete mode 100644 packages/old/discordeno/src/bot.ts delete mode 100644 packages/old/discordeno/src/index.ts delete mode 100644 packages/old/discordeno/tests/empty.spec.ts delete mode 100644 packages/old/discordeno/tsconfig.json delete mode 100644 packages/old/discordeno/tsconfig.test.json delete mode 100644 packages/old/embeds/.c8rc.json delete mode 100644 packages/old/embeds/.mocharc.json delete mode 100644 packages/old/embeds/package.json delete mode 100644 packages/old/embeds/src/index.ts delete mode 100644 packages/old/embeds/tests/empty.spec.ts delete mode 100644 packages/old/embeds/tsconfig.json delete mode 100644 packages/old/embeds/tsconfig.test.json delete mode 100644 packages/old/eslint-config-discordeno/index.js delete mode 100644 packages/old/eslint-config-discordeno/package.json delete mode 100644 packages/old/gateway/.c8rc.json delete mode 100644 packages/old/gateway/.mocharc.json delete mode 100644 packages/old/gateway/.swcrc delete mode 100644 packages/old/gateway/README.md delete mode 100644 packages/old/gateway/package.json delete mode 100644 packages/old/gateway/src/index.ts delete mode 100644 packages/old/gateway/src/manager/calculateTotalShards.ts delete mode 100644 packages/old/gateway/src/manager/calculateWorkerId.ts delete mode 100644 packages/old/gateway/src/manager/gatewayManager.ts delete mode 100644 packages/old/gateway/src/manager/index.ts delete mode 100644 packages/old/gateway/src/manager/prepareBuckets.ts delete mode 100644 packages/old/gateway/src/manager/resharder.ts delete mode 100644 packages/old/gateway/src/manager/shardManager.ts delete mode 100644 packages/old/gateway/src/manager/spawnShards.ts delete mode 100644 packages/old/gateway/src/manager/stop.ts delete mode 100644 packages/old/gateway/src/manager/tellWorkerToIdentify.ts delete mode 100644 packages/old/gateway/src/noCheckHelpers/guilds/voice/connectToVoiceChannel.ts delete mode 100644 packages/old/gateway/src/noCheckHelpers/guilds/voice/leaveVoiceChannel.ts delete mode 100644 packages/old/gateway/src/noCheckHelpers/members/fetchMembers.ts delete mode 100644 packages/old/gateway/src/noCheckHelpers/misc/editBotStatus.ts delete mode 100644 packages/old/gateway/src/noCheckHelpers/misc/editShardStatus.ts delete mode 100644 packages/old/gateway/src/noCheckHelpers/templates/createGuildFromTemplate.ts delete mode 100644 packages/old/gateway/src/shard/calculateSafeRequests.ts delete mode 100644 packages/old/gateway/src/shard/close.ts delete mode 100644 packages/old/gateway/src/shard/connect.ts delete mode 100644 packages/old/gateway/src/shard/createShard.ts delete mode 100644 packages/old/gateway/src/shard/handleClose.ts delete mode 100644 packages/old/gateway/src/shard/handleMessage.ts delete mode 100644 packages/old/gateway/src/shard/identify.ts delete mode 100644 packages/old/gateway/src/shard/index.ts delete mode 100644 packages/old/gateway/src/shard/isOpen.ts delete mode 100644 packages/old/gateway/src/shard/resume.ts delete mode 100644 packages/old/gateway/src/shard/send.ts delete mode 100644 packages/old/gateway/src/shard/shutdown.ts delete mode 100644 packages/old/gateway/src/shard/startHeartbeating.ts delete mode 100644 packages/old/gateway/src/shard/stopHeartbeating.ts delete mode 100644 packages/old/gateway/src/shard/types.ts delete mode 100644 packages/old/gateway/tests/empty.spec.ts delete mode 100644 packages/old/gateway/tsconfig.json delete mode 100644 packages/old/gateway/tsconfig.test.json delete mode 100644 packages/old/logger/package.json delete mode 100644 packages/old/logger/src/index.ts delete mode 100644 packages/old/logger/tsconfig.json delete mode 100644 packages/old/logger/tsconfig.test.json delete mode 100644 packages/old/plugins/cache/.c8rc.json delete mode 100644 packages/old/plugins/cache/.mocharc.json delete mode 100644 packages/old/plugins/cache/.swcrc delete mode 100644 packages/old/plugins/cache/README.md delete mode 100644 packages/old/plugins/cache/package.json delete mode 100644 packages/old/plugins/cache/src/addCacheCollections.ts delete mode 100644 packages/old/plugins/cache/src/dispatchRequirements.ts delete mode 100644 packages/old/plugins/cache/src/index.ts delete mode 100644 packages/old/plugins/cache/src/setupCacheEdits.ts delete mode 100644 packages/old/plugins/cache/src/setupCacheRemovals.ts delete mode 100644 packages/old/plugins/cache/src/sweepers.ts delete mode 100644 packages/old/plugins/cache/tests/empty.spec.ts delete mode 100644 packages/old/plugins/cache/tsconfig.json delete mode 100644 packages/old/plugins/cache/tsconfig.test.json delete mode 100644 packages/old/plugins/fileloader/.c8rc.json delete mode 100644 packages/old/plugins/fileloader/.mocharc.json delete mode 100644 packages/old/plugins/fileloader/.swcrc delete mode 100644 packages/old/plugins/fileloader/README.md delete mode 100644 packages/old/plugins/fileloader/package.json delete mode 100644 packages/old/plugins/fileloader/src/index.ts delete mode 100644 packages/old/plugins/fileloader/tests/empty.spec.ts delete mode 100644 packages/old/plugins/fileloader/tsconfig.json delete mode 100644 packages/old/plugins/fileloader/tsconfig.test.json delete mode 100644 packages/old/plugins/mod.ts delete mode 100644 packages/old/plugins/permissions/.c8rc.json delete mode 100644 packages/old/plugins/permissions/.mocharc.json delete mode 100644 packages/old/plugins/permissions/.swcrc delete mode 100644 packages/old/plugins/permissions/README.md delete mode 100644 packages/old/plugins/permissions/deps.ts delete mode 100644 packages/old/plugins/permissions/mod.ts delete mode 100644 packages/old/plugins/permissions/package.json delete mode 100644 packages/old/plugins/permissions/src/channels/createChannel.ts delete mode 100644 packages/old/plugins/permissions/src/channels/deleteChannel.ts delete mode 100644 packages/old/plugins/permissions/src/channels/deleteChannelPermissionOverride.ts delete mode 100644 packages/old/plugins/permissions/src/channels/editChannel.ts delete mode 100644 packages/old/plugins/permissions/src/channels/editChannelPermissionOverrides.ts delete mode 100644 packages/old/plugins/permissions/src/channels/followAnnouncementChannel.ts delete mode 100644 packages/old/plugins/permissions/src/channels/forums/createForumThread.ts delete mode 100644 packages/old/plugins/permissions/src/channels/forums/mod.ts delete mode 100644 packages/old/plugins/permissions/src/channels/getChannelWebhooks.ts delete mode 100644 packages/old/plugins/permissions/src/channels/mod.ts delete mode 100644 packages/old/plugins/permissions/src/channels/stages/createStageInstance.ts delete mode 100644 packages/old/plugins/permissions/src/channels/stages/deleteStageInstances.ts delete mode 100644 packages/old/plugins/permissions/src/channels/stages/editStageInstance.ts delete mode 100644 packages/old/plugins/permissions/src/channels/stages/mod.ts delete mode 100644 packages/old/plugins/permissions/src/channels/swapChannels.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/addThreadMember.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/getPrivateArchivedThreads.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/getPrivateJoinedArchivedThreads.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/getPublicArchivedThreads.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/joinThread.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/leaveThread.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/mod.ts delete mode 100644 packages/old/plugins/permissions/src/channels/threads/removeThreadMember.ts delete mode 100644 packages/old/plugins/permissions/src/emojis/createEmoji.ts delete mode 100644 packages/old/plugins/permissions/src/emojis/deleteEmoji.ts delete mode 100644 packages/old/plugins/permissions/src/emojis/editEmoji.ts delete mode 100644 packages/old/plugins/permissions/src/emojis/mod.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/automod/createAutomodRule.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/automod/deleteAutomodRule.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/automod/editAutomodRule.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/automod/getAutomodRule.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/automod/getAutomodRules.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/automod/mod.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/createGuild.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/deleteGuild.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/editGuild.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/editGuildMfaLevel.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/editWelcomeScreen.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/events/createScheduledEvent.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/events/editScheduledEvent.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/events/mod.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/getAuditLog.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/getBan.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/getBans.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/getPruneCount.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/getVanityUrl.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/getWelcomeScreen.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/invites/createInvite.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/invites/getChannelInvites.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/invites/getInvites.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/mod.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/voice/connectToVoiceChannels.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/voice/mod.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/widgets/editWidgetSettings.ts delete mode 100644 packages/old/plugins/permissions/src/guilds/widgets/mod.ts delete mode 100644 packages/old/plugins/permissions/src/integrations/deleteIntegrations.ts delete mode 100644 packages/old/plugins/permissions/src/integrations/getIntegrations.ts delete mode 100644 packages/old/plugins/permissions/src/integrations/mod.ts delete mode 100644 packages/old/plugins/permissions/src/members/banMember.ts delete mode 100644 packages/old/plugins/permissions/src/members/editBotMember.ts delete mode 100644 packages/old/plugins/permissions/src/members/editMember.ts delete mode 100644 packages/old/plugins/permissions/src/members/kickMember.ts delete mode 100644 packages/old/plugins/permissions/src/members/mod.ts delete mode 100644 packages/old/plugins/permissions/src/members/pruneMembers.ts delete mode 100644 packages/old/plugins/permissions/src/members/unbanMember.ts delete mode 100644 packages/old/plugins/permissions/src/messages/deleteMessage.ts delete mode 100644 packages/old/plugins/permissions/src/messages/deleteMessages.ts delete mode 100644 packages/old/plugins/permissions/src/messages/editMessage.ts delete mode 100644 packages/old/plugins/permissions/src/messages/getMessage.ts delete mode 100644 packages/old/plugins/permissions/src/messages/getMessages.ts delete mode 100644 packages/old/plugins/permissions/src/messages/mod.ts delete mode 100644 packages/old/plugins/permissions/src/messages/pinMessage.ts delete mode 100644 packages/old/plugins/permissions/src/messages/publishMessage.ts delete mode 100644 packages/old/plugins/permissions/src/messages/reactions/addReaction.ts delete mode 100644 packages/old/plugins/permissions/src/messages/reactions/addReactions.ts delete mode 100644 packages/old/plugins/permissions/src/messages/reactions/deleteReactionsAll.ts delete mode 100644 packages/old/plugins/permissions/src/messages/reactions/deleteReactionsEmoji.ts delete mode 100644 packages/old/plugins/permissions/src/messages/reactions/deleteUserReaction.ts.ts delete mode 100644 packages/old/plugins/permissions/src/messages/reactions/mod.ts delete mode 100644 packages/old/plugins/permissions/src/messages/sendMessage.ts delete mode 100644 packages/old/plugins/permissions/src/messages/unpinMessage.ts delete mode 100644 packages/old/plugins/permissions/src/permissions.ts delete mode 100644 packages/old/plugins/permissions/src/roles/addRole.ts delete mode 100644 packages/old/plugins/permissions/src/roles/createRole.ts delete mode 100644 packages/old/plugins/permissions/src/roles/deleteRole.ts delete mode 100644 packages/old/plugins/permissions/src/roles/editRole.ts delete mode 100644 packages/old/plugins/permissions/src/roles/mod.ts delete mode 100644 packages/old/plugins/permissions/src/roles/modifyRolePositions.ts delete mode 100644 packages/old/plugins/permissions/src/roles/removeRole.ts delete mode 100644 packages/old/plugins/permissions/src/stickers/createGuildSticker.ts delete mode 100644 packages/old/plugins/permissions/src/stickers/deleteGuildSticker.ts delete mode 100644 packages/old/plugins/permissions/src/stickers/editGuildSticker.ts delete mode 100644 packages/old/plugins/permissions/src/stickers/mod.ts delete mode 100644 packages/old/plugins/permissions/src/webhooks/createWebhook.ts delete mode 100644 packages/old/plugins/permissions/src/webhooks/deleteWebhook.ts delete mode 100644 packages/old/plugins/permissions/src/webhooks/editWebhook.ts delete mode 100644 packages/old/plugins/permissions/src/webhooks/mod.ts delete mode 100644 packages/old/plugins/permissions/tests/empty.spec.ts delete mode 100644 packages/old/plugins/permissions/tsconfig.json delete mode 100644 packages/old/plugins/permissions/tsconfig.test.json delete mode 100644 packages/old/plugins/utils/.c8rc.json delete mode 100644 packages/old/plugins/utils/.mocharc.json delete mode 100644 packages/old/plugins/utils/.swcrc delete mode 100644 packages/old/plugins/utils/README.md delete mode 100644 packages/old/plugins/utils/index.ts delete mode 100644 packages/old/plugins/utils/package.json delete mode 100644 packages/old/plugins/utils/src/channels.ts delete mode 100644 packages/old/plugins/utils/src/disconnectMember.ts delete mode 100644 packages/old/plugins/utils/src/fetchAndRetrieveMembers.ts delete mode 100644 packages/old/plugins/utils/src/getMembersPaginated.ts delete mode 100644 packages/old/plugins/utils/src/moveMember.ts delete mode 100644 packages/old/plugins/utils/src/sendAutoCompleteChoices.ts delete mode 100644 packages/old/plugins/utils/src/sendDirectMessage.ts delete mode 100644 packages/old/plugins/utils/src/sendPrivateInteractionResponse.ts delete mode 100644 packages/old/plugins/utils/src/sendTextMessage.ts delete mode 100644 packages/old/plugins/utils/src/suppressEmbeds.ts delete mode 100644 packages/old/plugins/utils/src/threads.ts delete mode 100644 packages/old/plugins/utils/tests/empty.spec.ts delete mode 100644 packages/old/plugins/utils/tsconfig.json delete mode 100644 packages/old/plugins/utils/tsconfig.test.json delete mode 100644 packages/old/plugins/validations/.c8rc.json delete mode 100644 packages/old/plugins/validations/.mocharc.json delete mode 100644 packages/old/plugins/validations/.swcrc delete mode 100644 packages/old/plugins/validations/README.md delete mode 100644 packages/old/plugins/validations/deps.ts delete mode 100644 packages/old/plugins/validations/mod.ts delete mode 100644 packages/old/plugins/validations/package.json delete mode 100644 packages/old/plugins/validations/src/applicationCommandLength.ts delete mode 100644 packages/old/plugins/validations/src/applicationCommandOptions.ts delete mode 100644 packages/old/plugins/validations/src/attachments.ts delete mode 100644 packages/old/plugins/validations/src/channels/mod.ts delete mode 100644 packages/old/plugins/validations/src/channels/threads/addThreadMember.ts delete mode 100644 packages/old/plugins/validations/src/channels/threads/getThreadMember.ts delete mode 100644 packages/old/plugins/validations/src/channels/threads/mod.ts delete mode 100644 packages/old/plugins/validations/src/channels/threads/removeThreadMember.ts delete mode 100644 packages/old/plugins/validations/src/components.ts delete mode 100644 packages/old/plugins/validations/src/guilds/createGuild.ts delete mode 100644 packages/old/plugins/validations/src/guilds/events/createScheduledEvent.ts delete mode 100644 packages/old/plugins/validations/src/guilds/events/mod.ts delete mode 100644 packages/old/plugins/validations/src/guilds/mod.ts delete mode 100644 packages/old/plugins/validations/src/interaction/commands/createGlobalApplicationCommand.ts delete mode 100644 packages/old/plugins/validations/src/interaction/commands/createGuildApplicationCommand.ts delete mode 100644 packages/old/plugins/validations/src/interaction/commands/mod.ts delete mode 100644 packages/old/plugins/validations/src/interaction/mod.ts delete mode 100644 packages/old/plugins/validations/src/interaction/responses/editFollowupMessage.ts delete mode 100644 packages/old/plugins/validations/src/interaction/responses/editOriginalInteractionResponse.ts delete mode 100644 packages/old/plugins/validations/src/interaction/responses/mod.ts delete mode 100644 packages/old/plugins/validations/src/interaction/responses/sendInteractionResponse.ts delete mode 100644 packages/old/plugins/validations/src/invites/createInvite.ts delete mode 100644 packages/old/plugins/validations/src/invites/mod.ts delete mode 100644 packages/old/plugins/validations/src/members/editMember.ts delete mode 100644 packages/old/plugins/validations/src/members/mod.ts delete mode 100644 packages/old/plugins/validations/src/messages/deleteMessages.ts delete mode 100644 packages/old/plugins/validations/src/messages/editMessage.ts delete mode 100644 packages/old/plugins/validations/src/messages/mod.ts delete mode 100644 packages/old/plugins/validations/src/messages/sendMessage.ts delete mode 100644 packages/old/plugins/validations/src/misc/editBotProfile.ts delete mode 100644 packages/old/plugins/validations/src/misc/mod.ts delete mode 100644 packages/old/plugins/validations/src/stickers/createGuildSticker.ts delete mode 100644 packages/old/plugins/validations/src/stickers/editGuildSticker.ts delete mode 100644 packages/old/plugins/validations/src/stickers/mod.ts delete mode 100644 packages/old/plugins/validations/src/webhooks/createWebhook.ts delete mode 100644 packages/old/plugins/validations/src/webhooks/editWebhook.ts delete mode 100644 packages/old/plugins/validations/src/webhooks/editWebhookMessage.ts delete mode 100644 packages/old/plugins/validations/src/webhooks/mod.ts delete mode 100644 packages/old/plugins/validations/src/webhooks/sendWebhookMessage.ts delete mode 100644 packages/old/plugins/validations/tests/empty.spec.ts delete mode 100644 packages/old/plugins/validations/tsconfig.json delete mode 100644 packages/old/plugins/validations/tsconfig.test.json delete mode 100644 packages/old/rest/.c8rc.json delete mode 100644 packages/old/rest/.mocharc.json delete mode 100644 packages/old/rest/.swcrc delete mode 100644 packages/old/rest/README.md delete mode 100644 packages/old/rest/package.json delete mode 100644 packages/old/rest/src/README.md delete mode 100644 packages/old/rest/src/checkRateLimits.ts delete mode 100644 packages/old/rest/src/cleanupQueues.ts delete mode 100644 packages/old/rest/src/convertRestError.ts delete mode 100644 packages/old/rest/src/createInvalidRequestBucket.ts delete mode 100644 packages/old/rest/src/createQueueBucket.ts delete mode 100644 packages/old/rest/src/createRequestBody.ts delete mode 100644 packages/old/rest/src/helpers/channels/announcements/followAnnouncementChannel.ts delete mode 100644 packages/old/rest/src/helpers/channels/announcements/index.ts delete mode 100644 packages/old/rest/src/helpers/channels/createChannel.ts delete mode 100644 packages/old/rest/src/helpers/channels/deleteChannel.ts delete mode 100644 packages/old/rest/src/helpers/channels/deleteChannelPermissionOverride.ts delete mode 100644 packages/old/rest/src/helpers/channels/editChannel.ts delete mode 100644 packages/old/rest/src/helpers/channels/editChannelPermissionOverrides.ts delete mode 100644 packages/old/rest/src/helpers/channels/editChannelPositions.ts delete mode 100644 packages/old/rest/src/helpers/channels/forums/createForumThread.ts delete mode 100644 packages/old/rest/src/helpers/channels/forums/index.ts delete mode 100644 packages/old/rest/src/helpers/channels/getChannel.ts delete mode 100644 packages/old/rest/src/helpers/channels/getChannelInvites.ts delete mode 100644 packages/old/rest/src/helpers/channels/getChannels.ts delete mode 100644 packages/old/rest/src/helpers/channels/index.ts delete mode 100644 packages/old/rest/src/helpers/channels/stages/createStageInstance.ts delete mode 100644 packages/old/rest/src/helpers/channels/stages/deleteStageInstance.ts delete mode 100644 packages/old/rest/src/helpers/channels/stages/editStageInstance.ts delete mode 100644 packages/old/rest/src/helpers/channels/stages/getStageInstance.ts delete mode 100644 packages/old/rest/src/helpers/channels/stages/index.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/addThreadMember.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/getActiveThreads.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/getPrivateArchivedThreads.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/getPrivateJoinedArchivedThreads.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/getPublicArchivedThreads.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/getThreadMember.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/getThreadMembers.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/index.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/joinThread.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/leaveThread.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/removeThreadMember.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/startThreadWithMessage.ts delete mode 100644 packages/old/rest/src/helpers/channels/threads/startThreadWithoutMessage.ts delete mode 100644 packages/old/rest/src/helpers/channels/triggerTypingIndicator.ts delete mode 100644 packages/old/rest/src/helpers/emojis/createEmoji.ts delete mode 100644 packages/old/rest/src/helpers/emojis/deleteEmoji.ts delete mode 100644 packages/old/rest/src/helpers/emojis/editEmoji.ts delete mode 100644 packages/old/rest/src/helpers/emojis/getEmoji.ts delete mode 100644 packages/old/rest/src/helpers/emojis/getEmojiUrl.ts delete mode 100644 packages/old/rest/src/helpers/emojis/getEmojis.ts delete mode 100644 packages/old/rest/src/helpers/emojis/index.ts delete mode 100644 packages/old/rest/src/helpers/guilds/automod/createAutomodRule.ts delete mode 100644 packages/old/rest/src/helpers/guilds/automod/deleteAutomodRule.ts delete mode 100644 packages/old/rest/src/helpers/guilds/automod/editAutomodRule.ts delete mode 100644 packages/old/rest/src/helpers/guilds/automod/getAutomodRule.ts delete mode 100644 packages/old/rest/src/helpers/guilds/automod/getAutomodRules.ts delete mode 100644 packages/old/rest/src/helpers/guilds/automod/index.ts delete mode 100644 packages/old/rest/src/helpers/guilds/createGuild.ts delete mode 100644 packages/old/rest/src/helpers/guilds/deleteGuild.ts delete mode 100644 packages/old/rest/src/helpers/guilds/editGuild.ts delete mode 100644 packages/old/rest/src/helpers/guilds/editGuildMfaLevel.ts delete mode 100644 packages/old/rest/src/helpers/guilds/editWelcomeScreen.ts delete mode 100644 packages/old/rest/src/helpers/guilds/events/createScheduledEvent.ts delete mode 100644 packages/old/rest/src/helpers/guilds/events/deleteScheduledEvent.ts delete mode 100644 packages/old/rest/src/helpers/guilds/events/editScheduledEvent.ts delete mode 100644 packages/old/rest/src/helpers/guilds/events/getScheduledEvent.ts delete mode 100644 packages/old/rest/src/helpers/guilds/events/getScheduledEventUsers.ts delete mode 100644 packages/old/rest/src/helpers/guilds/events/getScheduledEvents.ts delete mode 100644 packages/old/rest/src/helpers/guilds/events/index.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getAuditLog.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getBan.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getBans.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getGuild.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getGuildBannerUrl.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getGuildIconUrl.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getGuildPreview.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getGuildSplashUrl.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getPruneCount.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getVanityUrl.ts delete mode 100644 packages/old/rest/src/helpers/guilds/getWelcomeScreen.ts delete mode 100644 packages/old/rest/src/helpers/guilds/index.ts delete mode 100644 packages/old/rest/src/helpers/guilds/integrations/deleteIntegration.ts delete mode 100644 packages/old/rest/src/helpers/guilds/integrations/getIntegrations.ts delete mode 100644 packages/old/rest/src/helpers/guilds/integrations/index.ts delete mode 100644 packages/old/rest/src/helpers/guilds/invites/createInvite.ts delete mode 100644 packages/old/rest/src/helpers/guilds/invites/deleteInvite.ts delete mode 100644 packages/old/rest/src/helpers/guilds/invites/getInvite.ts delete mode 100644 packages/old/rest/src/helpers/guilds/invites/getInvites.ts delete mode 100644 packages/old/rest/src/helpers/guilds/invites/index.ts delete mode 100644 packages/old/rest/src/helpers/guilds/leaveGuild.ts delete mode 100644 packages/old/rest/src/helpers/guilds/voice/editVoiceState.ts delete mode 100644 packages/old/rest/src/helpers/guilds/voice/getAvailableVoiceRegions.ts delete mode 100644 packages/old/rest/src/helpers/guilds/voice/getVoiceRegions.ts delete mode 100644 packages/old/rest/src/helpers/guilds/voice/index.ts delete mode 100644 packages/old/rest/src/helpers/guilds/widget/editWidgetSettings.ts delete mode 100644 packages/old/rest/src/helpers/guilds/widget/getWidget.ts delete mode 100644 packages/old/rest/src/helpers/guilds/widget/getWidgetImageUrl.ts delete mode 100644 packages/old/rest/src/helpers/guilds/widget/getWidgetSettings.ts delete mode 100644 packages/old/rest/src/helpers/guilds/widget/index.ts delete mode 100644 packages/old/rest/src/helpers/index.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/createGlobalApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/createGuildApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/deleteGlobalApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/deleteGuildApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/editApplicationCommandPermissions.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/editGlobalApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/editGuildApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermission.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermissions.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommands.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommand.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommands.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/index.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/upsertGlobalApplicationCommands.ts delete mode 100644 packages/old/rest/src/helpers/interactions/commands/upsertGuildApplicationCommands.ts delete mode 100644 packages/old/rest/src/helpers/interactions/index.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/deleteFollowupMessage.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/deleteOriginalInteractionResponse.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/editFollowupMessage.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/editOriginalInteractionResponse.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/getFollowupMessage.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/getOriginalInteractionResponse.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/index.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/sendFollowupMessage.ts delete mode 100644 packages/old/rest/src/helpers/interactions/responses/sendInteractionResponse.ts delete mode 100644 packages/old/rest/src/helpers/members/banMember.ts delete mode 100644 packages/old/rest/src/helpers/members/editBotMember.ts delete mode 100644 packages/old/rest/src/helpers/members/editMember.ts delete mode 100644 packages/old/rest/src/helpers/members/getAvatarUrl.ts delete mode 100644 packages/old/rest/src/helpers/members/getDmChannel.ts delete mode 100644 packages/old/rest/src/helpers/members/getMember.ts delete mode 100644 packages/old/rest/src/helpers/members/getMembers.ts delete mode 100644 packages/old/rest/src/helpers/members/index.ts delete mode 100644 packages/old/rest/src/helpers/members/kickMember.ts delete mode 100644 packages/old/rest/src/helpers/members/pruneMembers.ts delete mode 100644 packages/old/rest/src/helpers/members/searchMembers.ts delete mode 100644 packages/old/rest/src/helpers/members/unbanMember.ts delete mode 100644 packages/old/rest/src/helpers/messages/crosspostMessage.ts delete mode 100644 packages/old/rest/src/helpers/messages/deleteMessage.ts delete mode 100644 packages/old/rest/src/helpers/messages/deleteMessages.ts delete mode 100644 packages/old/rest/src/helpers/messages/editMessage.ts delete mode 100644 packages/old/rest/src/helpers/messages/getMessage.ts delete mode 100644 packages/old/rest/src/helpers/messages/getMessages.ts delete mode 100644 packages/old/rest/src/helpers/messages/getPinnedMessages.ts delete mode 100644 packages/old/rest/src/helpers/messages/index.ts delete mode 100644 packages/old/rest/src/helpers/messages/pinMessage.ts delete mode 100644 packages/old/rest/src/helpers/messages/reactions/addReaction.ts delete mode 100644 packages/old/rest/src/helpers/messages/reactions/addReactions.ts delete mode 100644 packages/old/rest/src/helpers/messages/reactions/deleteReaction.ts delete mode 100644 packages/old/rest/src/helpers/messages/reactions/deleteReactionsAll.ts delete mode 100644 packages/old/rest/src/helpers/messages/reactions/deleteReactionsEmoji.ts delete mode 100644 packages/old/rest/src/helpers/messages/reactions/getReactions.ts delete mode 100644 packages/old/rest/src/helpers/messages/reactions/index.ts delete mode 100644 packages/old/rest/src/helpers/messages/sendMessage.ts delete mode 100644 packages/old/rest/src/helpers/messages/unpinMessage.ts delete mode 100644 packages/old/rest/src/helpers/misc/editBotProfile.ts delete mode 100644 packages/old/rest/src/helpers/misc/getApplicationInfo.ts delete mode 100644 packages/old/rest/src/helpers/misc/getGatewayBot.ts delete mode 100644 packages/old/rest/src/helpers/misc/getNitroStickerPacks.ts delete mode 100644 packages/old/rest/src/helpers/misc/getUser.ts delete mode 100644 packages/old/rest/src/helpers/misc/index.ts delete mode 100644 packages/old/rest/src/helpers/roles/addRole.ts delete mode 100644 packages/old/rest/src/helpers/roles/createRole.ts delete mode 100644 packages/old/rest/src/helpers/roles/deleteRole.ts delete mode 100644 packages/old/rest/src/helpers/roles/editRole.ts delete mode 100644 packages/old/rest/src/helpers/roles/editRolePositions.ts delete mode 100644 packages/old/rest/src/helpers/roles/getRoles.ts delete mode 100644 packages/old/rest/src/helpers/roles/index.ts delete mode 100644 packages/old/rest/src/helpers/roles/removeRole.ts delete mode 100644 packages/old/rest/src/helpers/stickers/createGuildSticker.ts delete mode 100644 packages/old/rest/src/helpers/stickers/deleteGuildSticker.ts delete mode 100644 packages/old/rest/src/helpers/stickers/editGuildSticker.ts delete mode 100644 packages/old/rest/src/helpers/stickers/getGuildSticker.ts delete mode 100644 packages/old/rest/src/helpers/stickers/getGuildStickers.ts delete mode 100644 packages/old/rest/src/helpers/stickers/getSticker.ts delete mode 100644 packages/old/rest/src/helpers/stickers/index.ts delete mode 100644 packages/old/rest/src/helpers/templates/createGuildTemplate.ts delete mode 100644 packages/old/rest/src/helpers/templates/deleteGuildTemplate.ts delete mode 100644 packages/old/rest/src/helpers/templates/editGuildTemplate.ts delete mode 100644 packages/old/rest/src/helpers/templates/getGuildTemplate.ts delete mode 100644 packages/old/rest/src/helpers/templates/getGuildTemplates.ts delete mode 100644 packages/old/rest/src/helpers/templates/index.ts delete mode 100644 packages/old/rest/src/helpers/templates/syncGuildTemplate.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/createWebhook.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/deleteWebhook.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/deleteWebhookMessage.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/deleteWebhookWithToken.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/editOriginalWebhookMessage.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/editWebhook.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/editWebhookMessage.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/editWebhookWithToken.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/executeWebhook.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/getChannelWebhooks.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/getGuildWebhooks.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/getWebhook.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/getWebhookMessage.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/getWebhookWithToken.ts delete mode 100644 packages/old/rest/src/helpers/webhooks/index.ts delete mode 100644 packages/old/rest/src/index.ts delete mode 100644 packages/old/rest/src/processGlobalQueue.ts delete mode 100644 packages/old/rest/src/processRateLimitedPaths.ts delete mode 100644 packages/old/rest/src/processRequest.ts delete mode 100644 packages/old/rest/src/processRequestHeaders.ts delete mode 100644 packages/old/rest/src/rest.ts delete mode 100644 packages/old/rest/src/restManager.ts delete mode 100644 packages/old/rest/src/runMethod.ts delete mode 100644 packages/old/rest/src/runProxyMethod.ts delete mode 100644 packages/old/rest/src/sendRequest.ts delete mode 100644 packages/old/rest/src/simplifyUrl.ts delete mode 100644 packages/old/rest/src/transformer.ts delete mode 100644 packages/old/rest/src/types.ts delete mode 100644 packages/old/rest/tests/e2e/channel/thread.spec.ts delete mode 100644 packages/old/rest/tests/e2e/emoji.spec.ts delete mode 100644 packages/old/rest/tests/e2e/role.spec.ts delete mode 100644 packages/old/rest/tests/e2e/utils.ts delete mode 100644 packages/old/rest/tests/unit/RestRequestRejection.spec.ts delete mode 100644 packages/old/rest/tests/unit/checkRateLimits.spec.ts delete mode 100644 packages/old/rest/tests/unit/cleanupQueues.spec.ts delete mode 100644 packages/old/rest/tests/unit/createQueueBucket.spec.ts delete mode 100644 packages/old/rest/tests/unit/processRateLimitedPaths.spec.ts delete mode 100644 packages/old/rest/tests/unit/processRequestHeaders.spec.ts delete mode 100644 packages/old/rest/tests/unit/simplifyUrl.spec.ts delete mode 100644 packages/old/rest/tsconfig.json delete mode 100644 packages/old/rest/tsconfig.test.json delete mode 100644 packages/old/toggles/ToggleBitfield.ts delete mode 100644 packages/old/toggles/emoji.ts delete mode 100644 packages/old/toggles/guild.ts delete mode 100644 packages/old/toggles/index.ts delete mode 100644 packages/old/toggles/member.ts delete mode 100644 packages/old/toggles/role.ts delete mode 100644 packages/old/toggles/user.ts delete mode 100644 packages/old/toggles/voice.ts delete mode 100644 packages/old/transformer/.c8rc.json delete mode 100644 packages/old/transformer/.mocharc.json delete mode 100644 packages/old/transformer/.swcrc delete mode 100644 packages/old/transformer/bench/index.ts delete mode 100644 packages/old/transformer/package.json delete mode 100644 packages/old/transformer/src/camel/activity.ts delete mode 100644 packages/old/transformer/src/camel/allowedMentions.ts delete mode 100644 packages/old/transformer/src/camel/application.ts delete mode 100644 packages/old/transformer/src/camel/applicationCommand.ts delete mode 100644 packages/old/transformer/src/camel/applicationCommandOption.ts delete mode 100644 packages/old/transformer/src/camel/applicationCommandOptionChoice.ts delete mode 100644 packages/old/transformer/src/camel/applicationCommandPermission.ts delete mode 100644 packages/old/transformer/src/camel/attachment.ts delete mode 100644 packages/old/transformer/src/camel/auditLogEntry.ts delete mode 100644 packages/old/transformer/src/camel/auditlogs.ts delete mode 100644 packages/old/transformer/src/camel/automodActionExecution.ts delete mode 100644 packages/old/transformer/src/camel/automodRule.ts delete mode 100644 packages/old/transformer/src/camel/channel.ts delete mode 100644 packages/old/transformer/src/camel/component.ts delete mode 100644 packages/old/transformer/src/camel/embed.ts delete mode 100644 packages/old/transformer/src/camel/emoji.ts delete mode 100644 packages/old/transformer/src/camel/event.ts delete mode 100644 packages/old/transformer/src/camel/followedChannel.ts delete mode 100644 packages/old/transformer/src/camel/gatewayBot.ts delete mode 100644 packages/old/transformer/src/camel/guild.ts delete mode 100644 packages/old/transformer/src/camel/index.ts delete mode 100644 packages/old/transformer/src/camel/integration.ts delete mode 100644 packages/old/transformer/src/camel/invite.ts delete mode 100644 packages/old/transformer/src/camel/member.ts delete mode 100644 packages/old/transformer/src/camel/message.ts delete mode 100644 packages/old/transformer/src/camel/preview.ts delete mode 100644 packages/old/transformer/src/camel/role.ts delete mode 100644 packages/old/transformer/src/camel/sticker.ts delete mode 100644 packages/old/transformer/src/camel/team.ts delete mode 100644 packages/old/transformer/src/camel/voice.ts delete mode 100644 packages/old/transformer/src/camel/webhook.ts delete mode 100644 packages/old/transformer/src/camel/welcomeScreen.ts delete mode 100644 packages/old/transformer/src/camel/widget.ts delete mode 100644 packages/old/transformer/src/camel/widgetSettings.ts delete mode 100644 packages/old/transformer/src/index.ts delete mode 100644 packages/old/transformer/src/modifiers/commands.ts delete mode 100644 packages/old/transformer/src/modifiers/index.ts delete mode 100644 packages/old/transformer/src/snake/activity.ts delete mode 100644 packages/old/transformer/src/snake/allowedMentions.ts delete mode 100644 packages/old/transformer/src/snake/application.ts delete mode 100644 packages/old/transformer/src/snake/applicationCommand.ts delete mode 100644 packages/old/transformer/src/snake/applicationCommandOption.ts delete mode 100644 packages/old/transformer/src/snake/applicationCommandOptionChoice.ts delete mode 100644 packages/old/transformer/src/snake/applicationCommandPermission.ts delete mode 100644 packages/old/transformer/src/snake/attachment.ts delete mode 100644 packages/old/transformer/src/snake/automodActionExecution.ts delete mode 100644 packages/old/transformer/src/snake/automodRule.ts delete mode 100644 packages/old/transformer/src/snake/channel.ts delete mode 100644 packages/old/transformer/src/snake/component.ts delete mode 100644 packages/old/transformer/src/snake/embed.ts delete mode 100644 packages/old/transformer/src/snake/emoji.ts delete mode 100644 packages/old/transformer/src/snake/gatewayBot.ts delete mode 100644 packages/old/transformer/src/snake/guild.ts delete mode 100644 packages/old/transformer/src/snake/index.ts delete mode 100644 packages/old/transformer/src/snake/interactionResponse.ts delete mode 100644 packages/old/transformer/src/snake/member.ts delete mode 100644 packages/old/transformer/src/snake/message.ts delete mode 100644 packages/old/transformer/src/snake/role.ts delete mode 100644 packages/old/transformer/src/snake/sticker.ts delete mode 100644 packages/old/transformer/src/snake/team.ts delete mode 100644 packages/old/transformer/src/snake/webhook.ts delete mode 100644 packages/old/transformer/src/snake/welcomeScreen.ts delete mode 100644 packages/old/transformer/src/snake/widget.ts delete mode 100644 packages/old/transformer/src/snake/widgetSettings.ts delete mode 100644 packages/old/transformer/tests/empty.spec.ts delete mode 100644 packages/old/transformer/tsconfig.json delete mode 100644 packages/old/transformer/tsconfig.test.json delete mode 100644 packages/old/utils/.c8rc.json delete mode 100644 packages/old/utils/.mocharc.json delete mode 100644 packages/old/utils/.swcrc delete mode 100644 packages/old/utils/README.md delete mode 100644 packages/old/utils/package.json delete mode 100644 packages/old/utils/src/base64.ts delete mode 100644 packages/old/utils/src/bigint.ts delete mode 100644 packages/old/utils/src/bucket.ts delete mode 100644 packages/old/utils/src/calculateShardId.ts delete mode 100644 packages/old/utils/src/collection.ts delete mode 100644 packages/old/utils/src/constants.ts delete mode 100644 packages/old/utils/src/hash.ts delete mode 100644 packages/old/utils/src/index.ts delete mode 100644 packages/old/utils/src/permissions.ts delete mode 100644 packages/old/utils/src/token.ts delete mode 100644 packages/old/utils/src/typeguards.ts delete mode 100644 packages/old/utils/src/urlToBase64.ts delete mode 100644 packages/old/utils/src/utils.ts delete mode 100644 packages/old/utils/src/validateLength.ts delete mode 100644 packages/old/utils/src/verifySignature.ts delete mode 100644 packages/old/utils/tests/base64.spec.ts delete mode 100644 packages/old/utils/tests/bigint.spec.ts delete mode 100644 packages/old/utils/tests/collection.spec.ts delete mode 100644 packages/old/utils/tests/hash.spec.ts delete mode 100644 packages/old/utils/tests/token.spec.ts delete mode 100644 packages/old/utils/tests/utils.spec.ts delete mode 100644 packages/old/utils/tests/validateLength.spec.ts delete mode 100644 packages/old/utils/tests/verifySignature.spec.ts delete mode 100644 packages/old/utils/tsconfig.json delete mode 100644 packages/old/utils/tsconfig.test.json diff --git a/packages/old/client/.c8rc.json b/packages/old/client/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/client/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/client/.mocharc.json b/packages/old/client/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/client/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/client/.swcrc b/packages/old/client/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/client/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/client/package.json b/packages/old/client/package.json deleted file mode 100644 index 989481856..000000000 --- a/packages/old/client/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@discordeno/client", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js client", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "dependencies": { - "@discordeno/gateway": "18.0.0-alpha.1", - "@discordeno/rest": "18.0.0-alpha.1", - "@discordeno/utils": "18.0.0-alpha.1" - }, - "devDependencies": { - "@discordeno/types": "18.0.0-alpha.1", - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/chai": "^4", - "@types/mocha": "^10", - "@types/node": "^18.11.9", - "@types/sinon": "^10.0.13", - "c8": "^7.12.0", - "chai": "^4.3.7", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - } -} \ No newline at end of file diff --git a/packages/old/client/src/client.ts b/packages/old/client/src/client.ts deleted file mode 100644 index 3767632f7..000000000 --- a/packages/old/client/src/client.ts +++ /dev/null @@ -1,170 +0,0 @@ -import type { CreateShardManager, GatewayManager } from '@discordeno/gateway' -import type { CreateRestManagerOptions } from '@discordeno/rest' -import type { - DiscordGatewayPayload, - GatewayDispatchEventNames, - GatewayIntents, - GetGatewayBot -} from '@discordeno/types' -import { Errors } from '@discordeno/types' -import { - baseEndpoints, - bigintToSnowflake, - calculateBits, - calculatePermissions, - calculateShardId, - CHANNEL_MENTION_REGEX, - CONTEXT_MENU_COMMANDS_NAME_REGEX, - delay, - DISCORDENO_VERSION, - DISCORD_SNOWFLAKE_REGEX, - formatImageURL, - getBotIdFromToken, - iconBigintToHash, - iconHashToBigInt, - removeTokenPrefix, - SLASH_COMMANDS_NAME_REGEX, - snowflakeToBigint, - urlToBase64, - USER_AGENT, - validateLength -} from '@discordeno/utils' -import { - createClientGatewayHandlers, - createEventHandlers, - type EventHandlers -} from './handlers.js' -import type { Transformers } from './transformer.js' -import { createTransformers } from './transformer.js' - -export function createClient (options: CreateClientOptions): Client { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - const client = { - id: options.botId ?? getBotIdFromToken(options.token), - applicationId: - options.applicationId ?? - options.botId ?? - getBotIdFromToken(options.token), - token: removeTokenPrefix(options.token), - events: createEventHandlers(options.events ?? {}), - intents: options.intents, - activeGuildIds: new Set(), - constants: createClientConstants(), - handlers: createClientGatewayHandlers({}), - utils: createUtils(options.utils ?? {}), - transformers: createTransformers(options.transformers ?? {}), - enabledPlugins: new Set(), - handleDiscordPayload: - options.handleDiscordPayload ?? - async function (shard, data: DiscordGatewayPayload) { - // TRIGGER RAW EVENT - client.events.raw(client, data, shard.id) - - if (!data.t) return - - // RUN DISPATCH CHECK - await client.events.dispatchRequirements(client, data, shard.id) - client.handlers[data.t as GatewayDispatchEventNames]?.( - client, - data, - shard.id - ) - }, - cache: { - unrepliedInteractions: new Set(), - fetchAllMembersProcessingRequests: new Map() - } - } as Client - - return client -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function createUtils (options: Partial) { - return { - snowflakeToBigint, - bigintToSnowflake, - calculateShardId: (gateway: GatewayManager, guildId: bigint) => - calculateShardId(gateway.manager.totalShards, guildId), - delay, - iconHashToBigInt, - iconBigintToHash, - validateLength, - urlToBase64, - formatImageURL, - calculateBits, - calculatePermissions - } -} - -export interface HelperUtils { - snowflakeToBigint: typeof snowflakeToBigint - bigintToSnowflake: typeof bigintToSnowflake - calculateShardId: ( - gateway: GatewayManager, - guildId: bigint - ) => ReturnType - delay: typeof delay - iconHashToBigInt: typeof iconHashToBigInt - iconBigintToHash: typeof iconBigintToHash - validateLength: typeof validateLength - urlToBase64: typeof urlToBase64 - formatImageURL: typeof formatImageURL - calculateBits: typeof calculateBits - calculatePermissions: typeof calculatePermissions -} - -export interface CreateClientOptions { - token: string - botId?: bigint - applicationId?: bigint - secretKey?: string - events?: Partial - intents?: GatewayIntents - botGatewayData?: GetGatewayBot - rest?: Omit - handleDiscordPayload?: CreateShardManager['handleMessage'] - utils?: Partial> - transformers?: Partial> -} - -export type UnPromise> = T extends Promise - ? K - : never - -export interface Client { - id: bigint - applicationId: bigint - token: string - intents: GatewayIntents - urlWSS: string - utils: ReturnType - transformers: Transformers - events: EventHandlers - handlers: ReturnType - activeGuildIds: Set - constants: ReturnType - cache: { - unrepliedInteractions: Set - fetchAllMembersProcessingRequests: Map - } - enabledPlugins: Set - handleDiscordPayload?: CreateShardManager['handleMessage'] -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function createClientConstants () { - return { - DISCORDENO_VERSION, - USER_AGENT, - BASE_URL: baseEndpoints.BASE_URL, - CDN_URL: baseEndpoints.CDN_URL, - regexes: { - SLASH_COMMANDS_NAME_REGEX, - CONTEXT_MENU_COMMANDS_NAME_REGEX, - CHANNEL_MENTION_REGEX, - DISCORD_SNOWFLAKE_REGEX - }, - Errors - } -} diff --git a/packages/old/client/src/handlers.ts b/packages/old/client/src/handlers.ts deleted file mode 100644 index 6f8d06786..000000000 --- a/packages/old/client/src/handlers.ts +++ /dev/null @@ -1,528 +0,0 @@ -import type { - DiscordEmoji, - DiscordGatewayPayload, - DiscordReady, - DiscordSticker, - GatewayDispatchEventNames -} from '@discordeno/types' -import type { Collection } from '@discordeno/utils' -import type { Client } from './client.js' -import * as handlers from './handlers/index.js' -import type { - ApplicationCommandPermission, - AutoModerationActionExecution, - AutoModerationRule, - Channel, - Emoji, - Guild, - Integration, - Interaction, - Invite, - Member, - Message, - PresenceUpdate, - Role, - ScheduledEvent, - ThreadMember, - User, - VoiceState -} from './transformer.js' - -export function createEventHandlers ( - events: Partial -): EventHandlers { - function ignore (): void {} - - return { - debug: events.debug ?? ignore, - automodRuleCreate: events.automodRuleCreate ?? ignore, - automodRuleUpdate: events.automodRuleUpdate ?? ignore, - automodRuleDelete: events.automodRuleDelete ?? ignore, - automodActionExecution: events.automodActionExecution ?? ignore, - threadCreate: events.threadCreate ?? ignore, - threadDelete: events.threadDelete ?? ignore, - threadMemberUpdate: events.threadMemberUpdate ?? ignore, - threadMembersUpdate: events.threadMembersUpdate ?? ignore, - threadUpdate: events.threadUpdate ?? ignore, - scheduledEventCreate: events.scheduledEventCreate ?? ignore, - scheduledEventUpdate: events.scheduledEventUpdate ?? ignore, - scheduledEventDelete: events.scheduledEventDelete ?? ignore, - scheduledEventUserAdd: events.scheduledEventUserAdd ?? ignore, - scheduledEventUserRemove: events.scheduledEventUserRemove ?? ignore, - ready: events.ready ?? ignore, - dispatchRequirements: events.dispatchRequirements ?? ignore, - integrationCreate: events.integrationCreate ?? ignore, - integrationDelete: events.integrationDelete ?? ignore, - integrationUpdate: events.integrationUpdate ?? ignore, - interactionCreate: events.interactionCreate ?? ignore, - inviteCreate: events.inviteCreate ?? ignore, - inviteDelete: events.inviteDelete ?? ignore, - guildMemberAdd: events.guildMemberAdd ?? ignore, - guildMemberRemove: events.guildMemberRemove ?? ignore, - guildMemberUpdate: events.guildMemberUpdate ?? ignore, - messageCreate: events.messageCreate ?? ignore, - messageDelete: events.messageDelete ?? ignore, - messageDeleteBulk: events.messageDeleteBulk ?? ignore, - messageUpdate: events.messageUpdate ?? ignore, - reactionAdd: events.reactionAdd ?? ignore, - reactionRemove: events.reactionRemove ?? ignore, - reactionRemoveAll: events.reactionRemoveAll ?? ignore, - reactionRemoveEmoji: events.reactionRemoveEmoji ?? ignore, - presenceUpdate: events.presenceUpdate ?? ignore, - voiceServerUpdate: events.voiceServerUpdate ?? ignore, - voiceStateUpdate: events.voiceStateUpdate ?? ignore, - channelCreate: events.channelCreate ?? ignore, - channelDelete: events.channelDelete ?? ignore, - channelPinsUpdate: events.channelPinsUpdate ?? ignore, - channelUpdate: events.channelUpdate ?? ignore, - guildEmojisUpdate: events.guildEmojisUpdate ?? ignore, - guildStickersUpdate: events.guildStickersUpdate ?? ignore, - guildBanAdd: events.guildBanAdd ?? ignore, - guildBanRemove: events.guildBanRemove ?? ignore, - guildCreate: events.guildCreate ?? ignore, - guildDelete: events.guildDelete ?? ignore, - guildUpdate: events.guildUpdate ?? ignore, - raw: events.raw ?? ignore, - stageInstanceCreate: events.stageInstanceCreate ?? ignore, - stageInstanceDelete: events.stageInstanceDelete ?? ignore, - stageInstanceUpdate: events.stageInstanceUpdate ?? ignore, - roleCreate: events.roleCreate ?? ignore, - roleDelete: events.roleDelete ?? ignore, - roleUpdate: events.roleUpdate ?? ignore, - webhooksUpdate: events.webhooksUpdate ?? ignore, - botUpdate: events.botUpdate ?? ignore, - typingStart: events.typingStart ?? ignore, - applicationCommandPermissionsUpdate: - events.applicationCommandPermissionsUpdate ?? ignore - } -} - -export interface EventHandlers { - debug: (text: string, ...args: any[]) => unknown - applicationCommandPermissionsUpdate: ( - client: Client, - command: ApplicationCommandPermission - ) => unknown - automodRuleCreate: (client: Client, rule: AutoModerationRule) => unknown - automodRuleUpdate: (client: Client, rule: AutoModerationRule) => unknown - automodRuleDelete: (client: Client, rule: AutoModerationRule) => unknown - automodActionExecution: ( - client: Client, - payload: AutoModerationActionExecution - ) => unknown - threadCreate: (client: Client, thread: Channel) => unknown - threadDelete: (client: Client, thread: Channel) => unknown - threadMemberUpdate: ( - client: Client, - payload: { - id: bigint - guildId: bigint - joinedAt: number - flags: number - } - ) => unknown - threadMembersUpdate: ( - client: Client, - payload: { - id: bigint - guildId: bigint - addedMembers?: ThreadMember[] - removedMemberIds?: bigint[] - } - ) => unknown - threadUpdate: (client: Client, thread: Channel) => unknown - scheduledEventCreate: (client: Client, event: ScheduledEvent) => unknown - scheduledEventUpdate: (client: Client, event: ScheduledEvent) => unknown - scheduledEventDelete: (client: Client, event: ScheduledEvent) => unknown - /** Sent when a user has subscribed to a guild scheduled event. EXPERIMENTAL! */ - scheduledEventUserAdd: ( - client: Client, - payload: { - guildScheduledEventId: bigint - guildId: bigint - userId: bigint - } - ) => unknown - /** Sent when a user has unsubscribed to a guild scheduled event. EXPERIMENTAL! */ - scheduledEventUserRemove: ( - client: Client, - payload: { - guildScheduledEventId: bigint - guildId: bigint - userId: bigint - } - ) => unknown - ready: ( - client: Client, - payload: { - shardId: number - v: number - user: User - guilds: bigint[] - sessionId: string - shard?: number[] - applicationId: bigint - }, - rawPayload: DiscordReady - ) => unknown - interactionCreate: (client: Client, interaction: Interaction) => unknown - integrationCreate: (client: Client, integration: Integration) => unknown - integrationDelete: ( - client: Client, - payload: { id: bigint, guildId: bigint, applicationId?: bigint } - ) => unknown - integrationUpdate: (client: Client, payload: { guildId: bigint }) => unknown - inviteCreate: (client: Client, invite: Invite) => unknown - inviteDelete: ( - client: Client, - payload: { - channelId: bigint - guildId?: bigint - code: string - } - ) => unknown - guildMemberAdd: (client: Client, member: Member, user: User) => unknown - guildMemberRemove: (client: Client, user: User, guildId: bigint) => unknown - guildMemberUpdate: (client: Client, member: Member, user: User) => unknown - messageCreate: (client: Client, message: Message) => unknown - messageDelete: ( - client: Client, - payload: { id: bigint, channelId: bigint, guildId?: bigint }, - message?: Message - ) => unknown - messageDeleteBulk: ( - client: Client, - payload: { ids: bigint[], channelId: bigint, guildId?: bigint } - ) => unknown - messageUpdate: ( - client: Client, - message: Message, - oldMessage?: Message - ) => unknown - reactionAdd: ( - client: Client, - payload: { - userId: bigint - channelId: bigint - messageId: bigint - guildId?: bigint - member?: Member - user?: User - emoji: Emoji - } - ) => unknown - reactionRemove: ( - client: Client, - payload: { - userId: bigint - channelId: bigint - messageId: bigint - guildId?: bigint - emoji: Emoji - } - ) => unknown - reactionRemoveEmoji: ( - client: Client, - payload: { - channelId: bigint - messageId: bigint - guildId?: bigint - emoji: Emoji - } - ) => unknown - reactionRemoveAll: ( - client: Client, - payload: { - channelId: bigint - messageId: bigint - guildId?: bigint - } - ) => unknown - presenceUpdate: ( - client: Client, - presence: PresenceUpdate, - oldPresence?: PresenceUpdate - ) => unknown - voiceServerUpdate: ( - client: Client, - payload: { token: string, endpoint?: string, guildId: bigint } - ) => unknown - voiceStateUpdate: (client: Client, voiceState: VoiceState) => unknown - channelCreate: (client: Client, channel: Channel) => unknown - dispatchRequirements: ( - client: Client, - data: DiscordGatewayPayload, - shardId: number - ) => unknown - channelDelete: (client: Client, channel: Channel) => unknown - channelPinsUpdate: ( - client: Client, - data: { guildId?: bigint, channelId: bigint, lastPinTimestamp?: number } - ) => unknown - channelUpdate: (client: Client, channel: Channel) => unknown - stageInstanceCreate: ( - client: Client, - data: { - id: bigint - guildId: bigint - channelId: bigint - topic: string - } - ) => unknown - stageInstanceDelete: ( - client: Client, - data: { - id: bigint - guildId: bigint - channelId: bigint - topic: string - } - ) => unknown - stageInstanceUpdate: ( - client: Client, - data: { - id: bigint - guildId: bigint - channelId: bigint - topic: string - } - ) => unknown - guildEmojisUpdate: ( - client: Client, - payload: { - guildId: bigint - emojis: Collection - } - ) => unknown - guildStickersUpdate: ( - client: Client, - payload: { - guildId: bigint - stickers: Collection - } - ) => unknown - guildBanAdd: (client: Client, user: User, guildId: bigint) => unknown - guildBanRemove: (client: Client, user: User, guildId: bigint) => unknown - guildCreate: (client: Client, guild: Guild) => unknown - guildDelete: (client: Client, id: bigint, shardId: number) => unknown - guildUpdate: (client: Client, guild: Guild) => unknown - raw: ( - client: Client, - data: DiscordGatewayPayload, - shardId: number - ) => unknown - roleCreate: (client: Client, role: Role) => unknown - roleDelete: ( - client: Client, - payload: { guildId: bigint, roleId: bigint } - ) => unknown - roleUpdate: (client: Client, role: Role) => unknown - webhooksUpdate: ( - client: Client, - payload: { channelId: bigint, guildId: bigint } - ) => unknown - botUpdate: (client: Client, user: User) => unknown - typingStart: ( - client: Client, - payload: { - guildId: bigint | undefined - channelId: bigint - userId: bigint - timestamp: number - member: Member | undefined - } - ) => unknown -} - -export interface ClientGatewayHandlerOptions { - READY: typeof handlers.handleReady - APPLICATION_COMMAND_PERMISSIONS_UPDATE: typeof handlers.handleApplicationCommandPermissionsUpdate - AUTO_MODERATION_RULE_CREATE: typeof handlers.handleAutoModerationRuleCreate - AUTO_MODERATION_RULE_UPDATE: typeof handlers.handleAutoModerationRuleUpdate - AUTO_MODERATION_RULE_DELETE: typeof handlers.handleAutoModerationRuleDelete - AUTO_MODERATION_ACTION_EXECUTION: typeof handlers.handleAutoModerationActionExecution - CHANNEL_CREATE: typeof handlers.handleChannelCreate - CHANNEL_UPDATE: typeof handlers.handleChannelUpdate - CHANNEL_DELETE: typeof handlers.handleChannelDelete - CHANNEL_PINS_UPDATE: typeof handlers.handleChannelPinsUpdate - THREAD_CREATE: typeof handlers.handleThreadCreate - THREAD_UPDATE: typeof handlers.handleThreadUpdate - THREAD_DELETE: typeof handlers.handleThreadDelete - THREAD_LIST_SYNC: typeof handlers.handleThreadListSync - THREAD_MEMBER_UPDATE: typeof handlers.handleThreadMemberUpdate - THREAD_MEMBERS_UPDATE: typeof handlers.handleThreadMembersUpdate - GUILD_CREATE: typeof handlers.handleGuildCreate - GUILD_UPDATE: typeof handlers.handleGuildUpdate - GUILD_DELETE: typeof handlers.handleGuildDelete - GUILD_BAN_ADD: typeof handlers.handleGuildBanAdd - GUILD_BAN_REMOVE: typeof handlers.handleGuildBanRemove - GUILD_EMOJIS_UPDATE: typeof handlers.handleGuildEmojisUpdate - GUILD_STICKERS_UPDATE: typeof handlers.handleGuildStickersUpdate - GUILD_INTEGRATIONS_UPDATE: typeof handlers.handleGuildIntegrationsUpdate - GUILD_MEMBER_ADD: typeof handlers.handleGuildMemberAdd - GUILD_MEMBER_REMOVE: typeof handlers.handleGuildMemberRemove - GUILD_MEMBER_UPDATE: typeof handlers.handleGuildMemberUpdate - GUILD_MEMBERS_CHUNK: typeof handlers.handleGuildMembersChunk - GUILD_ROLE_CREATE: typeof handlers.handleGuildRoleCreate - GUILD_ROLE_UPDATE: typeof handlers.handleGuildRoleUpdate - GUILD_ROLE_DELETE: typeof handlers.handleGuildRoleDelete - GUILD_SCHEDULED_EVENT_CREATE: typeof handlers.handleGuildScheduledEventCreate - GUILD_SCHEDULED_EVENT_UPDATE: typeof handlers.handleGuildScheduledEventUpdate - GUILD_SCHEDULED_EVENT_DELETE: typeof handlers.handleGuildScheduledEventDelete - GUILD_SCHEDULED_EVENT_USER_ADD: typeof handlers.handleGuildScheduledEventUserAdd - GUILD_SCHEDULED_EVENT_USER_REMOVE: typeof handlers.handleGuildScheduledEventUserRemove - INTEGRATION_CREATE: typeof handlers.handleIntegrationCreate - INTEGRATION_UPDATE: typeof handlers.handleIntegrationUpdate - INTEGRATION_DELETE: typeof handlers.handleIntegrationDelete - INTERACTION_CREATE: typeof handlers.handleInteractionCreate - INVITE_CREATE: typeof handlers.handleInviteCreate - INVITE_DELETE: typeof handlers.handleInviteCreate - MESSAGE_CREATE: typeof handlers.handleMessageCreate - MESSAGE_UPDATE: typeof handlers.handleMessageUpdate - MESSAGE_DELETE: typeof handlers.handleMessageDelete - MESSAGE_DELETE_BULK: typeof handlers.handleMessageDeleteBulk - MESSAGE_REACTION_ADD: typeof handlers.handleMessageReactionAdd - MESSAGE_REACTION_REMOVE: typeof handlers.handleMessageReactionRemove - MESSAGE_REACTION_REMOVE_ALL: typeof handlers.handleMessageReactionRemoveAll - MESSAGE_REACTION_REMOVE_EMOJI: typeof handlers.handleMessageReactionRemoveEmoji - PRESENCE_UPDATE: typeof handlers.handlePresenceUpdate - STAGE_INSTANCE_CREATE: typeof handlers.handleStageInstanceCreate - STAGE_INSTANCE_UPDATE: typeof handlers.handleStageInstanceUpdate - STAGE_INSTANCE_DELETE: typeof handlers.handleStageInstanceDelete - TYPING_START: typeof handlers.handleTypingStart - USER_UPDATE: typeof handlers.handleUserUpdate - VOICE_STATE_UPDATE: typeof handlers.handleVoiceStateUpdate - VOICE_SERVER_UPDATE: typeof handlers.handleVoiceServerUpdate - WEBHOOKS_UPDATE: typeof handlers.handleWebhooksUpdate -} - -export function createClientGatewayHandlers ( - options: Partial -): Record< - GatewayDispatchEventNames, - (client: Client, data: DiscordGatewayPayload, shardId: number) => any - > { - return { - // misc - READY: options.READY ?? handlers.handleReady, - // command - APPLICATION_COMMAND_PERMISSIONS_UPDATE: - options.APPLICATION_COMMAND_PERMISSIONS_UPDATE ?? - handlers.handleApplicationCommandPermissionsUpdate, - // automod - AUTO_MODERATION_RULE_CREATE: - options.AUTO_MODERATION_RULE_CREATE ?? - handlers.handleAutoModerationRuleCreate, - AUTO_MODERATION_RULE_UPDATE: - options.AUTO_MODERATION_RULE_UPDATE ?? - handlers.handleAutoModerationRuleUpdate, - AUTO_MODERATION_RULE_DELETE: - options.AUTO_MODERATION_RULE_DELETE ?? - handlers.handleAutoModerationRuleDelete, - AUTO_MODERATION_ACTION_EXECUTION: - options.AUTO_MODERATION_ACTION_EXECUTION ?? - handlers.handleAutoModerationActionExecution, - // channels - CHANNEL_CREATE: options.CHANNEL_CREATE ?? handlers.handleChannelCreate, - CHANNEL_DELETE: options.CHANNEL_DELETE ?? handlers.handleChannelDelete, - CHANNEL_PINS_UPDATE: - options.CHANNEL_PINS_UPDATE ?? handlers.handleChannelPinsUpdate, - CHANNEL_UPDATE: options.CHANNEL_UPDATE ?? handlers.handleChannelUpdate, - THREAD_CREATE: options.THREAD_CREATE ?? handlers.handleThreadCreate, - THREAD_UPDATE: options.THREAD_UPDATE ?? handlers.handleThreadUpdate, - THREAD_DELETE: options.THREAD_DELETE ?? handlers.handleThreadDelete, - THREAD_LIST_SYNC: options.THREAD_LIST_SYNC ?? handlers.handleThreadListSync, - THREAD_MEMBER_UPDATE: - options.THREAD_MEMBER_UPDATE ?? handlers.handleThreadMembersUpdate, - THREAD_MEMBERS_UPDATE: - options.THREAD_MEMBERS_UPDATE ?? handlers.handleThreadMembersUpdate, - STAGE_INSTANCE_CREATE: - options.STAGE_INSTANCE_CREATE ?? handlers.handleStageInstanceCreate, - STAGE_INSTANCE_UPDATE: - options.STAGE_INSTANCE_UPDATE ?? handlers.handleStageInstanceUpdate, - STAGE_INSTANCE_DELETE: - options.STAGE_INSTANCE_DELETE ?? handlers.handleStageInstanceDelete, - // guilds - GUILD_BAN_ADD: options.GUILD_BAN_ADD ?? handlers.handleGuildBanAdd, - GUILD_BAN_REMOVE: options.GUILD_BAN_REMOVE ?? handlers.handleGuildBanRemove, - GUILD_CREATE: options.GUILD_CREATE ?? handlers.handleGuildCreate, - GUILD_DELETE: options.GUILD_DELETE ?? handlers.handleGuildDelete, - GUILD_EMOJIS_UPDATE: - options.GUILD_EMOJIS_UPDATE ?? handlers.handleGuildEmojisUpdate, - GUILD_INTEGRATIONS_UPDATE: - options.GUILD_INTEGRATIONS_UPDATE ?? - handlers.handleGuildIntegrationsUpdate, - GUILD_MEMBER_ADD: options.GUILD_MEMBER_ADD ?? handlers.handleGuildMemberAdd, - GUILD_MEMBER_REMOVE: - options.GUILD_MEMBER_REMOVE ?? handlers.handleGuildMemberRemove, - GUILD_MEMBER_UPDATE: - options.GUILD_MEMBER_UPDATE ?? handlers.handleGuildMemberUpdate, - GUILD_MEMBERS_CHUNK: - options.GUILD_MEMBERS_CHUNK ?? handlers.handleGuildMembersChunk, - GUILD_ROLE_CREATE: - options.GUILD_ROLE_CREATE ?? handlers.handleGuildRoleCreate, - GUILD_ROLE_DELETE: - options.GUILD_ROLE_DELETE ?? handlers.handleGuildRoleDelete, - GUILD_ROLE_UPDATE: - options.GUILD_ROLE_UPDATE ?? handlers.handleGuildRoleUpdate, - GUILD_UPDATE: options.GUILD_UPDATE ?? handlers.handleGuildUpdate, - GUILD_STICKERS_UPDATE: - options.GUILD_STICKERS_UPDATE ?? handlers.handleGuildStickersUpdate, - // guild events - GUILD_SCHEDULED_EVENT_CREATE: - options.GUILD_SCHEDULED_EVENT_CREATE ?? - handlers.handleGuildScheduledEventCreate, - GUILD_SCHEDULED_EVENT_DELETE: - options.GUILD_SCHEDULED_EVENT_DELETE ?? - handlers.handleGuildScheduledEventDelete, - GUILD_SCHEDULED_EVENT_UPDATE: - options.GUILD_SCHEDULED_EVENT_UPDATE ?? - handlers.handleGuildScheduledEventUpdate, - GUILD_SCHEDULED_EVENT_USER_ADD: - options.GUILD_SCHEDULED_EVENT_USER_ADD ?? - handlers.handleGuildScheduledEventUserAdd, - GUILD_SCHEDULED_EVENT_USER_REMOVE: - options.GUILD_SCHEDULED_EVENT_USER_REMOVE ?? - handlers.handleGuildScheduledEventUserRemove, - // interactions - INTERACTION_CREATE: - options.INTERACTION_CREATE ?? handlers.handleInteractionCreate, - // invites - INVITE_CREATE: options.INVITE_CREATE ?? handlers.handleInviteCreate, - INVITE_DELETE: options.INVITE_DELETE ?? handlers.handleInviteCreate, - // messages - MESSAGE_CREATE: options.MESSAGE_CREATE ?? handlers.handleMessageCreate, - MESSAGE_DELETE_BULK: - options.MESSAGE_DELETE_BULK ?? handlers.handleMessageDeleteBulk, - MESSAGE_DELETE: options.MESSAGE_DELETE ?? handlers.handleMessageDelete, - MESSAGE_REACTION_ADD: - options.MESSAGE_REACTION_ADD ?? handlers.handleMessageReactionAdd, - MESSAGE_REACTION_REMOVE_ALL: - options.MESSAGE_REACTION_REMOVE_ALL ?? - handlers.handleMessageReactionRemoveAll, - MESSAGE_REACTION_REMOVE_EMOJI: - options.MESSAGE_REACTION_REMOVE_EMOJI ?? - handlers.handleMessageReactionRemoveEmoji, - MESSAGE_REACTION_REMOVE: - options.MESSAGE_REACTION_REMOVE ?? handlers.handleMessageReactionRemove, - MESSAGE_UPDATE: options.MESSAGE_UPDATE ?? handlers.handleMessageUpdate, - // presence - PRESENCE_UPDATE: options.PRESENCE_UPDATE ?? handlers.handlePresenceUpdate, - TYPING_START: options.TYPING_START ?? handlers.handleTypingStart, - USER_UPDATE: options.USER_UPDATE ?? handlers.handleUserUpdate, - // voice - VOICE_SERVER_UPDATE: - options.VOICE_SERVER_UPDATE ?? handlers.handleVoiceServerUpdate, - VOICE_STATE_UPDATE: - options.VOICE_STATE_UPDATE ?? handlers.handleVoiceStateUpdate, - // webhooks - WEBHOOKS_UPDATE: options.WEBHOOKS_UPDATE ?? handlers.handleWebhooksUpdate, - // integrations - INTEGRATION_CREATE: - options.INTEGRATION_CREATE ?? handlers.handleIntegrationCreate, - INTEGRATION_UPDATE: - options.INTEGRATION_UPDATE ?? handlers.handleIntegrationUpdate, - INTEGRATION_DELETE: - options.INTEGRATION_DELETE ?? handlers.handleIntegrationDelete - } -} diff --git a/packages/old/client/src/handlers/channels/CHANNEL_CREATE.ts b/packages/old/client/src/handlers/channels/CHANNEL_CREATE.ts deleted file mode 100644 index c1cd20cd8..000000000 --- a/packages/old/client/src/handlers/channels/CHANNEL_CREATE.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { DiscordChannel, DiscordGatewayPayload } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleChannelCreate ( - client: Client, - payload: DiscordGatewayPayload -): Promise { - const channel = client.transformers.channel(client, { - channel: payload.d as DiscordChannel - }) - - client.events.channelCreate(client, channel) -} diff --git a/packages/old/client/src/handlers/channels/CHANNEL_DELETE.ts b/packages/old/client/src/handlers/channels/CHANNEL_DELETE.ts deleted file mode 100644 index a42c32c43..000000000 --- a/packages/old/client/src/handlers/channels/CHANNEL_DELETE.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { DiscordChannel, DiscordGatewayPayload } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleChannelDelete ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordChannel - if (!payload.guild_id) return - - client.events.channelDelete( - client, - client.transformers.channel(client, { - channel: payload, - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - }) - ) -} diff --git a/packages/old/client/src/handlers/channels/CHANNEL_PINS_UPDATE.ts b/packages/old/client/src/handlers/channels/CHANNEL_PINS_UPDATE.ts deleted file mode 100644 index cd001f493..000000000 --- a/packages/old/client/src/handlers/channels/CHANNEL_PINS_UPDATE.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { - DiscordChannelPinsUpdate, - DiscordGatewayPayload -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleChannelPinsUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordChannelPinsUpdate - - client.events.channelPinsUpdate(client, { - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined, - channelId: client.transformers.snowflake(payload.channel_id), - lastPinTimestamp: payload.last_pin_timestamp - ? Date.parse(payload.last_pin_timestamp) - : undefined - }) -} diff --git a/packages/old/client/src/handlers/channels/CHANNEL_UPDATE.ts b/packages/old/client/src/handlers/channels/CHANNEL_UPDATE.ts deleted file mode 100644 index 8bcbbe587..000000000 --- a/packages/old/client/src/handlers/channels/CHANNEL_UPDATE.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { DiscordChannel, DiscordGatewayPayload } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleChannelUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordChannel - const channel = client.transformers.channel(client, { channel: payload }) - - client.events.channelUpdate(client, channel) -} diff --git a/packages/old/client/src/handlers/channels/STAGE_INSTANCE_CREATE.ts b/packages/old/client/src/handlers/channels/STAGE_INSTANCE_CREATE.ts deleted file mode 100644 index 06d5ef365..000000000 --- a/packages/old/client/src/handlers/channels/STAGE_INSTANCE_CREATE.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordStageInstance -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleStageInstanceCreate ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordStageInstance - - client.events.stageInstanceCreate(client, { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - channelId: client.transformers.snowflake(payload.channel_id), - topic: payload.topic - }) -} diff --git a/packages/old/client/src/handlers/channels/STAGE_INSTANCE_DELETE.ts b/packages/old/client/src/handlers/channels/STAGE_INSTANCE_DELETE.ts deleted file mode 100644 index 3a7146ca1..000000000 --- a/packages/old/client/src/handlers/channels/STAGE_INSTANCE_DELETE.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordStageInstance -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleStageInstanceDelete ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordStageInstance - - client.events.stageInstanceDelete(client, { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - channelId: client.transformers.snowflake(payload.channel_id), - topic: payload.topic - }) -} diff --git a/packages/old/client/src/handlers/channels/STAGE_INSTANCE_UPDATE.ts b/packages/old/client/src/handlers/channels/STAGE_INSTANCE_UPDATE.ts deleted file mode 100644 index 1fee5f68b..000000000 --- a/packages/old/client/src/handlers/channels/STAGE_INSTANCE_UPDATE.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordStageInstance -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleStageInstanceUpdate ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordStageInstance - - client.events.stageInstanceUpdate(client, { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - channelId: client.transformers.snowflake(payload.channel_id), - topic: payload.topic - }) -} diff --git a/packages/old/client/src/handlers/channels/THREAD_CREATE.ts b/packages/old/client/src/handlers/channels/THREAD_CREATE.ts deleted file mode 100644 index 971e35e1f..000000000 --- a/packages/old/client/src/handlers/channels/THREAD_CREATE.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { DiscordChannel, DiscordGatewayPayload } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleThreadCreate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordChannel - - client.events.threadCreate( - client, - client.transformers.channel(client, { channel: payload }) - ) -} diff --git a/packages/old/client/src/handlers/channels/THREAD_DELETE.ts b/packages/old/client/src/handlers/channels/THREAD_DELETE.ts deleted file mode 100644 index 67e88ce0f..000000000 --- a/packages/old/client/src/handlers/channels/THREAD_DELETE.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { DiscordChannel, DiscordGatewayPayload } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleThreadDelete ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordChannel - client.events.threadDelete( - client, - client.transformers.channel(client, { channel: payload }) - ) -} diff --git a/packages/old/client/src/handlers/channels/THREAD_LIST_SYNC.ts b/packages/old/client/src/handlers/channels/THREAD_LIST_SYNC.ts deleted file mode 100644 index aa0fdf3b7..000000000 --- a/packages/old/client/src/handlers/channels/THREAD_LIST_SYNC.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordThreadListSync -} from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Channel } from '../../transformers/index.js' - -export async function handleThreadListSync ( - client: Client, - data: DiscordGatewayPayload -): Promise<{ - guildId: bigint - channelIds: bigint[] | undefined - threads: Channel[] - members: Array<{ - id: bigint | undefined - userId: bigint | undefined - joinTimestamp: number - }> - }> { - const payload = data.d as DiscordThreadListSync - - const guildId = client.transformers.snowflake(payload.guild_id) - return { - guildId, - channelIds: payload.channel_ids?.map((id) => - client.transformers.snowflake(id) - ), - threads: payload.threads.map((thread) => - client.transformers.channel(client, { channel: thread, guildId }) - ), - members: payload.members.map((member) => ({ - id: member.id ? client.transformers.snowflake(member.id) : undefined, - userId: member.user_id - ? client.transformers.snowflake(member.user_id) - : undefined, - joinTimestamp: Date.parse(member.join_timestamp) - })) - } -} diff --git a/packages/old/client/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts b/packages/old/client/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts deleted file mode 100644 index dff87dd88..000000000 --- a/packages/old/client/src/handlers/channels/THREAD_MEMBERS_UPDATE.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordThreadMembersUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleThreadMembersUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordThreadMembersUpdate - client.events.threadMembersUpdate(client, { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - addedMembers: payload.added_members?.map((member) => - client.transformers.threadMember(client, member) - ), - removedMemberIds: payload.removed_member_ids?.map((id) => - client.transformers.snowflake(id) - ) - }) -} diff --git a/packages/old/client/src/handlers/channels/THREAD_MEMBER_UPDATE.ts b/packages/old/client/src/handlers/channels/THREAD_MEMBER_UPDATE.ts deleted file mode 100644 index 0dfea951d..000000000 --- a/packages/old/client/src/handlers/channels/THREAD_MEMBER_UPDATE.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordThreadMemberUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleThreadMemberUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordThreadMemberUpdate - - client.events.threadMemberUpdate(client, { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - joinedAt: Date.parse(payload.joined_at), - flags: payload.flags - }) -} diff --git a/packages/old/client/src/handlers/channels/THREAD_UPDATE.ts b/packages/old/client/src/handlers/channels/THREAD_UPDATE.ts deleted file mode 100644 index 8fe6465ae..000000000 --- a/packages/old/client/src/handlers/channels/THREAD_UPDATE.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { DiscordChannel, DiscordGatewayPayload } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleThreadUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordChannel - - client.events.threadUpdate( - client, - client.transformers.channel(client, { channel: payload }) - ) -} diff --git a/packages/old/client/src/handlers/channels/index.ts b/packages/old/client/src/handlers/channels/index.ts deleted file mode 100644 index 710589054..000000000 --- a/packages/old/client/src/handlers/channels/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './CHANNEL_CREATE.js' -export * from './CHANNEL_DELETE.js' -export * from './CHANNEL_PINS_UPDATE.js' -export * from './CHANNEL_UPDATE.js' -export * from './STAGE_INSTANCE_CREATE.js' -export * from './STAGE_INSTANCE_DELETE.js' -export * from './STAGE_INSTANCE_UPDATE.js' -export * from './THREAD_CREATE.js' -export * from './THREAD_DELETE.js' -export * from './THREAD_LIST_SYNC.js' -export * from './THREAD_MEMBERS_UPDATE.js' -export * from './THREAD_MEMBER_UPDATE.js' -export * from './THREAD_UPDATE.js' diff --git a/packages/old/client/src/handlers/emojis/GUILD_EMOJIS_UPDATE.ts b/packages/old/client/src/handlers/emojis/GUILD_EMOJIS_UPDATE.ts deleted file mode 100644 index 60f0499e9..000000000 --- a/packages/old/client/src/handlers/emojis/GUILD_EMOJIS_UPDATE.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildEmojisUpdate -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { Client } from '../../client.js' - -export async function handleGuildEmojisUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildEmojisUpdate - - client.events.guildEmojisUpdate(client, { - guildId: client.transformers.snowflake(payload.guild_id), - emojis: new Collection( - payload.emojis.map((emoji) => [ - client.transformers.snowflake(emoji.id!), - emoji - ]) - ) - }) -} diff --git a/packages/old/client/src/handlers/emojis/index.ts b/packages/old/client/src/handlers/emojis/index.ts deleted file mode 100644 index f98466c7d..000000000 --- a/packages/old/client/src/handlers/emojis/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './GUILD_EMOJIS_UPDATE.js' diff --git a/packages/old/client/src/handlers/guilds/GUILD_BAN_ADD.ts b/packages/old/client/src/handlers/guilds/GUILD_BAN_ADD.ts deleted file mode 100644 index fede848ef..000000000 --- a/packages/old/client/src/handlers/guilds/GUILD_BAN_ADD.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildBanAddRemove -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildBanAdd ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildBanAddRemove - client.events.guildBanAdd( - client, - client.transformers.user(client, payload.user), - client.transformers.snowflake(payload.guild_id) - ) -} diff --git a/packages/old/client/src/handlers/guilds/GUILD_BAN_REMOVE.ts b/packages/old/client/src/handlers/guilds/GUILD_BAN_REMOVE.ts deleted file mode 100644 index 931742868..000000000 --- a/packages/old/client/src/handlers/guilds/GUILD_BAN_REMOVE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildBanAddRemove -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildBanRemove ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildBanAddRemove - - await client.events.guildBanRemove( - client, - client.transformers.user(client, payload.user), - client.transformers.snowflake(payload.guild_id) - ) -} diff --git a/packages/old/client/src/handlers/guilds/GUILD_CREATE.ts b/packages/old/client/src/handlers/guilds/GUILD_CREATE.ts deleted file mode 100644 index cc3e344af..000000000 --- a/packages/old/client/src/handlers/guilds/GUILD_CREATE.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { DiscordGatewayPayload, DiscordGuild } from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleGuildCreate ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordGuild - client.events.guildCreate( - client, - client.transformers.guild(client, { guild: payload, shardId }) - ) -} diff --git a/packages/old/client/src/handlers/guilds/GUILD_DELETE.ts b/packages/old/client/src/handlers/guilds/GUILD_DELETE.ts deleted file mode 100644 index 73dc58c48..000000000 --- a/packages/old/client/src/handlers/guilds/GUILD_DELETE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordUnavailableGuild -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildDelete ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): Promise { - const payload = data.d as DiscordUnavailableGuild - client.events.guildDelete( - client, - client.transformers.snowflake(payload.id), - shardId - ) -} diff --git a/packages/old/client/src/handlers/guilds/GUILD_INTEGRATIONS_UPDATE.ts b/packages/old/client/src/handlers/guilds/GUILD_INTEGRATIONS_UPDATE.ts deleted file mode 100644 index f97cff525..000000000 --- a/packages/old/client/src/handlers/guilds/GUILD_INTEGRATIONS_UPDATE.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildIntegrationsUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildIntegrationsUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildIntegrationsUpdate - - client.events.integrationUpdate(client, { - guildId: client.transformers.snowflake(payload.guild_id) - }) -} diff --git a/packages/old/client/src/handlers/guilds/GUILD_STICKERS_UPDATE.ts b/packages/old/client/src/handlers/guilds/GUILD_STICKERS_UPDATE.ts deleted file mode 100644 index 3a9b63b47..000000000 --- a/packages/old/client/src/handlers/guilds/GUILD_STICKERS_UPDATE.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildStickersUpdate -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { Client } from '../../client.js' - -export async function handleGuildStickersUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildStickersUpdate - client.events.guildStickersUpdate(client, { - guildId: client.transformers.snowflake(payload.guild_id), - stickers: new Collection( - payload.stickers.map((sticker) => [ - client.transformers.snowflake(sticker.id), - sticker - ]) - ) - }) -} diff --git a/packages/old/client/src/handlers/guilds/GUILD_UPDATE.ts b/packages/old/client/src/handlers/guilds/GUILD_UPDATE.ts deleted file mode 100644 index 5a6c12dce..000000000 --- a/packages/old/client/src/handlers/guilds/GUILD_UPDATE.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { DiscordGatewayPayload, DiscordGuild } from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleGuildUpdate ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordGuild - - client.events.guildUpdate( - client, - client.transformers.guild(client, { guild: payload, shardId }) - ) -} diff --git a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_ACTION_EXECUTION.ts b/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_ACTION_EXECUTION.ts deleted file mode 100644 index 82d172a36..000000000 --- a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_ACTION_EXECUTION.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordAutoModerationActionExecution, - DiscordGatewayPayload -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -/** Requires the MANAGE_GUILD permission. */ -export function handleAutoModerationActionExecution ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordAutoModerationActionExecution - client.events.automodActionExecution( - client, - client.transformers.automodActionExecution(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_CREATE.ts b/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_CREATE.ts deleted file mode 100644 index d209d4521..000000000 --- a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_CREATE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordAutoModerationRule, - DiscordGatewayPayload -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -/** Requires the MANAGE_GUILD permission. */ -export function handleAutoModerationRuleCreate ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordAutoModerationRule - client.events.automodRuleCreate( - client, - client.transformers.automodRule(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_DELETE.ts b/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_DELETE.ts deleted file mode 100644 index e460d9695..000000000 --- a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_DELETE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordAutoModerationRule, - DiscordGatewayPayload -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -/** Requires the MANAGE_GUILD permission. */ -export function handleAutoModerationRuleDelete ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordAutoModerationRule - client.events.automodRuleDelete( - client, - client.transformers.automodRule(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_UPDATE.ts b/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_UPDATE.ts deleted file mode 100644 index 8a3363989..000000000 --- a/packages/old/client/src/handlers/guilds/automod/AUTO_MODERATION_RULE_UPDATE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordAutoModerationRule, - DiscordGatewayPayload -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -/** Requires the MANAGE_GUILD permission. */ -export function handleAutoModerationRuleUpdate ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordAutoModerationRule - client.events.automodRuleUpdate( - client, - client.transformers.automodRule(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/guilds/automod/index.ts b/packages/old/client/src/handlers/guilds/automod/index.ts deleted file mode 100644 index c47db435f..000000000 --- a/packages/old/client/src/handlers/guilds/automod/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './AUTO_MODERATION_ACTION_EXECUTION.js' -export * from './AUTO_MODERATION_RULE_CREATE.js' -export * from './AUTO_MODERATION_RULE_DELETE.js' -export * from './AUTO_MODERATION_RULE_UPDATE.js' diff --git a/packages/old/client/src/handlers/guilds/index.ts b/packages/old/client/src/handlers/guilds/index.ts deleted file mode 100644 index 4f705ee94..000000000 --- a/packages/old/client/src/handlers/guilds/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './automod/index.js' -export * from './GUILD_BAN_ADD.js' -export * from './GUILD_BAN_REMOVE.js' -export * from './GUILD_CREATE.js' -export * from './GUILD_DELETE.js' -export * from './GUILD_INTEGRATIONS_UPDATE.js' -export * from './GUILD_STICKERS_UPDATE.js' -export * from './GUILD_UPDATE.js' -export * from './scheduledEvents/index.js' diff --git a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_CREATE.ts b/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_CREATE.ts deleted file mode 100644 index c7c9a6146..000000000 --- a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_CREATE.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordScheduledEvent -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -export function handleGuildScheduledEventCreate ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordScheduledEvent - client.events.scheduledEventCreate( - client, - client.transformers.scheduledEvent(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_DELETE.ts b/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_DELETE.ts deleted file mode 100644 index 78b6ebb61..000000000 --- a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_DELETE.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordScheduledEvent -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -export function handleGuildScheduledEventDelete ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordScheduledEvent - client.events.scheduledEventDelete( - client, - client.transformers.scheduledEvent(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_UPDATE.ts b/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_UPDATE.ts deleted file mode 100644 index b90d070d3..000000000 --- a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_UPDATE.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordScheduledEvent -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -export function handleGuildScheduledEventUpdate ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordScheduledEvent - client.events.scheduledEventUpdate( - client, - client.transformers.scheduledEvent(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_ADD.ts b/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_ADD.ts deleted file mode 100644 index 856685ca4..000000000 --- a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_ADD.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordScheduledEventUserAdd -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -export function handleGuildScheduledEventUserAdd ( - client: Client, - data: DiscordGatewayPayload -): unknown { - const payload = data.d as DiscordScheduledEventUserAdd - - return client.events.scheduledEventUserAdd(client, { - guildScheduledEventId: client.transformers.snowflake( - payload.guild_scheduled_event_id - ), - userId: client.transformers.snowflake(payload.user_id), - guildId: client.transformers.snowflake(payload.guild_id) - }) -} diff --git a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts b/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts deleted file mode 100644 index 562c6ca07..000000000 --- a/packages/old/client/src/handlers/guilds/scheduledEvents/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordScheduledEventUserRemove -} from '@discordeno/types' -import type { Client } from '../../../client.js' - -export function handleGuildScheduledEventUserRemove ( - client: Client, - data: DiscordGatewayPayload -): unknown { - const payload = data.d as DiscordScheduledEventUserRemove - - return client.events.scheduledEventUserRemove(client, { - guildScheduledEventId: client.transformers.snowflake( - payload.guild_scheduled_event_id - ), - userId: client.transformers.snowflake(payload.user_id), - guildId: client.transformers.snowflake(payload.guild_id) - }) -} diff --git a/packages/old/client/src/handlers/guilds/scheduledEvents/index.ts b/packages/old/client/src/handlers/guilds/scheduledEvents/index.ts deleted file mode 100644 index 7c4d5397a..000000000 --- a/packages/old/client/src/handlers/guilds/scheduledEvents/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './GUILD_SCHEDULED_EVENT_CREATE.js' -export * from './GUILD_SCHEDULED_EVENT_DELETE.js' -export * from './GUILD_SCHEDULED_EVENT_UPDATE.js' -export * from './GUILD_SCHEDULED_EVENT_USER_ADD.js' -export * from './GUILD_SCHEDULED_EVENT_USER_REMOVE.js' diff --git a/packages/old/client/src/handlers/index.ts b/packages/old/client/src/handlers/index.ts deleted file mode 100644 index 243289d18..000000000 --- a/packages/old/client/src/handlers/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from './channels/index.js' -export * from './emojis/index.js' -export * from './guilds/index.js' -export * from './integrations/index.js' -export * from './interactions/index.js' -export * from './invites/index.js' -export * from './members/index.js' -export * from './messages/index.js' -export * from './misc/index.js' -export * from './roles/index.js' -export * from './voice/index.js' -export * from './webhooks/index.js' diff --git a/packages/old/client/src/handlers/integrations/INTEGRATION_CREATE.ts b/packages/old/client/src/handlers/integrations/INTEGRATION_CREATE.ts deleted file mode 100644 index 4a059119b..000000000 --- a/packages/old/client/src/handlers/integrations/INTEGRATION_CREATE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordIntegrationCreateUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleIntegrationCreate ( - client: Client, - data: DiscordGatewayPayload -): void { - client.events.integrationCreate( - client, - client.transformers.integration( - client, - data.d as DiscordIntegrationCreateUpdate - ) - ) -} diff --git a/packages/old/client/src/handlers/integrations/INTEGRATION_DELETE.ts b/packages/old/client/src/handlers/integrations/INTEGRATION_DELETE.ts deleted file mode 100644 index e27c74160..000000000 --- a/packages/old/client/src/handlers/integrations/INTEGRATION_DELETE.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordIntegrationDelete -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleIntegrationDelete ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordIntegrationDelete - - client.events.integrationDelete(client, { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - applicationId: payload.application_id - ? client.transformers.snowflake(payload.application_id) - : undefined - }) -} diff --git a/packages/old/client/src/handlers/integrations/INTEGRATION_UPDATE.ts b/packages/old/client/src/handlers/integrations/INTEGRATION_UPDATE.ts deleted file mode 100644 index 8a1bc7a1c..000000000 --- a/packages/old/client/src/handlers/integrations/INTEGRATION_UPDATE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordIntegrationCreateUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleIntegrationUpdate ( - client: Client, - data: DiscordGatewayPayload -): void { - client.events.integrationUpdate( - client, - client.transformers.integration( - client, - data.d as DiscordIntegrationCreateUpdate - ) - ) -} diff --git a/packages/old/client/src/handlers/integrations/index.ts b/packages/old/client/src/handlers/integrations/index.ts deleted file mode 100644 index 9cffc13bd..000000000 --- a/packages/old/client/src/handlers/integrations/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './INTEGRATION_CREATE.js' -export * from './INTEGRATION_DELETE.js' -export * from './INTEGRATION_UPDATE.js' diff --git a/packages/old/client/src/handlers/interactions/INTERACTION_CREATE.ts b/packages/old/client/src/handlers/interactions/INTERACTION_CREATE.ts deleted file mode 100644 index 549496028..000000000 --- a/packages/old/client/src/handlers/interactions/INTERACTION_CREATE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordInteraction -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleInteractionCreate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - client.cache.unrepliedInteractions.add( - client.transformers.snowflake((data.d as DiscordInteraction).id) - ) - client.events.interactionCreate( - client, - client.transformers.interaction(client, data.d as DiscordInteraction) - ) -} diff --git a/packages/old/client/src/handlers/interactions/index.ts b/packages/old/client/src/handlers/interactions/index.ts deleted file mode 100644 index b765a36e7..000000000 --- a/packages/old/client/src/handlers/interactions/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './INTERACTION_CREATE.js' diff --git a/packages/old/client/src/handlers/invites/INVITE_CREATE.ts b/packages/old/client/src/handlers/invites/INVITE_CREATE.ts deleted file mode 100644 index 167c3edd3..000000000 --- a/packages/old/client/src/handlers/invites/INVITE_CREATE.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordInviteCreate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleInviteCreate ( - client: Client, - data: DiscordGatewayPayload -): void { - client.events.inviteCreate( - client, - client.transformers.invite(client, data.d as DiscordInviteCreate) - ) -} diff --git a/packages/old/client/src/handlers/invites/INVITE_DELETE.ts b/packages/old/client/src/handlers/invites/INVITE_DELETE.ts deleted file mode 100644 index c3ab88a14..000000000 --- a/packages/old/client/src/handlers/invites/INVITE_DELETE.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordInviteDelete -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleInviteDelete ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordInviteDelete - - client.events.inviteDelete(client, { - /** The channel of the invite */ - channelId: client.transformers.snowflake(payload.channel_id), - /** The guild of the invite */ - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined, - /** The unique invite code */ - code: payload.code - }) -} diff --git a/packages/old/client/src/handlers/invites/index.ts b/packages/old/client/src/handlers/invites/index.ts deleted file mode 100644 index 34e4fb5df..000000000 --- a/packages/old/client/src/handlers/invites/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './INVITE_CREATE.js' -export * from './INVITE_DELETE.js' diff --git a/packages/old/client/src/handlers/members/GUILD_MEMBERS_CHUNK.ts b/packages/old/client/src/handlers/members/GUILD_MEMBERS_CHUNK.ts deleted file mode 100644 index 199e06500..000000000 --- a/packages/old/client/src/handlers/members/GUILD_MEMBERS_CHUNK.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildMembersChunk -} from '@discordeno/types' -import { PresenceStatus } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Activity, Member, User } from '../../transformers/index.js' - -export async function handleGuildMembersChunk ( - client: Client, - data: DiscordGatewayPayload -): Promise<{ - guildId: bigint - members: Member[] - chunkIndex: number - chunkCount: number - notFound: bigint[] | undefined - presences: - | Array<{ - user: User - guildId: bigint - status: PresenceStatus - activities: Activity[] - clientStatus: { - desktop?: string - mobile?: string - web?: string - } - }> - | undefined - nonce: string | undefined - }> { - const payload = data.d as DiscordGuildMembersChunk - - const guildId = client.transformers.snowflake(payload.guild_id) - - if (payload.nonce && payload.chunk_index >= payload.chunk_count - 1) { - client.cache.fetchAllMembersProcessingRequests.get(payload.nonce)?.( - `Member fetching complete. Nonce: ${payload.nonce}` - ) - } - - return { - guildId, - members: payload.members.map((m) => - client.transformers.member( - client, - m, - guildId, - client.transformers.snowflake(m.user.id) - ) - ), - chunkIndex: payload.chunk_index, - chunkCount: payload.chunk_count, - notFound: payload.not_found?.map((id) => client.transformers.snowflake(id)), - presences: payload.presences?.map((presence) => ({ - user: client.transformers.user(client, presence.user), - guildId, - status: PresenceStatus[presence.status], - activities: presence.activities.map((activity) => - client.transformers.activity(client, activity) - ), - clientStatus: { - desktop: presence.client_status.desktop, - mobile: presence.client_status.mobile, - web: presence.client_status.web - } - })), - nonce: payload.nonce - } -} diff --git a/packages/old/client/src/handlers/members/GUILD_MEMBER_ADD.ts b/packages/old/client/src/handlers/members/GUILD_MEMBER_ADD.ts deleted file mode 100644 index f784becb6..000000000 --- a/packages/old/client/src/handlers/members/GUILD_MEMBER_ADD.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildMemberAdd -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildMemberAdd ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildMemberAdd - const guildId = client.transformers.snowflake(payload.guild_id) - const user = client.transformers.user(client, payload.user) - const member = client.transformers.member(client, payload, guildId, user.id) - client.events.guildMemberAdd(client, member, user) -} diff --git a/packages/old/client/src/handlers/members/GUILD_MEMBER_REMOVE.ts b/packages/old/client/src/handlers/members/GUILD_MEMBER_REMOVE.ts deleted file mode 100644 index 8811d0371..000000000 --- a/packages/old/client/src/handlers/members/GUILD_MEMBER_REMOVE.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildMemberRemove -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildMemberRemove ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildMemberRemove - const guildId = client.transformers.snowflake(payload.guild_id) - const user = client.transformers.user(client, payload.user) - - client.events.guildMemberRemove(client, user, guildId) -} diff --git a/packages/old/client/src/handlers/members/GUILD_MEMBER_UPDATE.ts b/packages/old/client/src/handlers/members/GUILD_MEMBER_UPDATE.ts deleted file mode 100644 index 9bc253411..000000000 --- a/packages/old/client/src/handlers/members/GUILD_MEMBER_UPDATE.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildMemberUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildMemberUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildMemberUpdate - - const user = client.transformers.user(client, payload.user) - client.events.guildMemberUpdate( - client, - client.transformers.member( - client, - payload, - client.transformers.snowflake(payload.guild_id), - user.id - ), - user - ) -} diff --git a/packages/old/client/src/handlers/members/index.ts b/packages/old/client/src/handlers/members/index.ts deleted file mode 100644 index c05ffdaa3..000000000 --- a/packages/old/client/src/handlers/members/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './GUILD_MEMBERS_CHUNK.js' -export * from './GUILD_MEMBER_ADD.js' -export * from './GUILD_MEMBER_REMOVE.js' -export * from './GUILD_MEMBER_UPDATE.js' diff --git a/packages/old/client/src/handlers/messages/MESSAGE_CREATE.ts b/packages/old/client/src/handlers/messages/MESSAGE_CREATE.ts deleted file mode 100644 index f4c804d21..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_CREATE.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { DiscordGatewayPayload, DiscordMessage } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageCreate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessage - - client.events.messageCreate( - client, - client.transformers.message(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/messages/MESSAGE_DELETE.ts b/packages/old/client/src/handlers/messages/MESSAGE_DELETE.ts deleted file mode 100644 index f91ca0f29..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_DELETE.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordMessageDelete -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageDelete ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessageDelete - - client.events.messageDelete(client, { - id: client.transformers.snowflake(payload.id), - channelId: client.transformers.snowflake(payload.channel_id), - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - }) -} diff --git a/packages/old/client/src/handlers/messages/MESSAGE_DELETE_BULK.ts b/packages/old/client/src/handlers/messages/MESSAGE_DELETE_BULK.ts deleted file mode 100644 index 11b6701a8..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_DELETE_BULK.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordMessageDeleteBulk -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageDeleteBulk ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessageDeleteBulk - - const channelId = client.transformers.snowflake(payload.channel_id) - const guildId = payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - - client.events.messageDeleteBulk(client, { - ids: payload.ids.map((id) => client.transformers.snowflake(id)), - channelId, - guildId - }) -} diff --git a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_ADD.ts b/packages/old/client/src/handlers/messages/MESSAGE_REACTION_ADD.ts deleted file mode 100644 index 70e6669d7..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_ADD.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordMessageReactionAdd -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageReactionAdd ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessageReactionAdd - - const guildId = payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - const userId = client.transformers.snowflake(payload.user_id) - client.events.reactionAdd(client, { - userId, - channelId: client.transformers.snowflake(payload.channel_id), - messageId: client.transformers.snowflake(payload.message_id), - guildId, - member: - payload.member && guildId - ? client.transformers.member(client, payload.member, guildId, userId) - : undefined, - user: payload.member - ? client.transformers.user(client, payload.member.user) - : undefined, - emoji: client.transformers.emoji(client, payload.emoji) - }) -} diff --git a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE.ts b/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE.ts deleted file mode 100644 index b79e996c6..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordMessageReactionRemove -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageReactionRemove ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessageReactionRemove - - client.events.reactionRemove(client, { - userId: client.transformers.snowflake(payload.user_id), - channelId: client.transformers.snowflake(payload.channel_id), - messageId: client.transformers.snowflake(payload.message_id), - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined, - emoji: client.transformers.emoji(client, payload.emoji) - }) -} diff --git a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_ALL.ts b/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_ALL.ts deleted file mode 100644 index fad4e8a85..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_ALL.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordMessageReactionRemoveAll -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageReactionRemoveAll ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessageReactionRemoveAll - - client.events.reactionRemoveAll(client, { - channelId: client.transformers.snowflake(payload.channel_id), - messageId: client.transformers.snowflake(payload.message_id), - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - }) -} diff --git a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.ts b/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.ts deleted file mode 100644 index 5526d0f47..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordMessageReactionRemoveEmoji -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageReactionRemoveEmoji ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessageReactionRemoveEmoji - - client.events.reactionRemoveEmoji(client, { - channelId: client.transformers.snowflake(payload.channel_id), - messageId: client.transformers.snowflake(payload.message_id), - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined, - emoji: client.transformers.emoji(client, payload.emoji) - }) -} diff --git a/packages/old/client/src/handlers/messages/MESSAGE_UPDATE.ts b/packages/old/client/src/handlers/messages/MESSAGE_UPDATE.ts deleted file mode 100644 index 8b3ad2873..000000000 --- a/packages/old/client/src/handlers/messages/MESSAGE_UPDATE.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { DiscordGatewayPayload, DiscordMessage } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleMessageUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordMessage - if (!payload.edited_timestamp) return - - client.events.messageUpdate( - client, - client.transformers.message(client, payload) - ) -} diff --git a/packages/old/client/src/handlers/messages/index.ts b/packages/old/client/src/handlers/messages/index.ts deleted file mode 100644 index 4668f7827..000000000 --- a/packages/old/client/src/handlers/messages/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './MESSAGE_CREATE.js' -export * from './MESSAGE_DELETE.js' -export * from './MESSAGE_DELETE_BULK.js' -export * from './MESSAGE_REACTION_ADD.js' -export * from './MESSAGE_REACTION_REMOVE.js' -export * from './MESSAGE_REACTION_REMOVE_ALL.js' -export * from './MESSAGE_REACTION_REMOVE_EMOJI.js' -export * from './MESSAGE_UPDATE.js' diff --git a/packages/old/client/src/handlers/misc/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts b/packages/old/client/src/handlers/misc/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts deleted file mode 100644 index a522b1340..000000000 --- a/packages/old/client/src/handlers/misc/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildApplicationCommandPermissions -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleApplicationCommandPermissionsUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - client.events.applicationCommandPermissionsUpdate( - client, - client.transformers.applicationCommandPermission( - client, - data.d as DiscordGuildApplicationCommandPermissions - ) - ) -} diff --git a/packages/old/client/src/handlers/misc/PRESENCE_UPDATE.ts b/packages/old/client/src/handlers/misc/PRESENCE_UPDATE.ts deleted file mode 100644 index 3fce78d99..000000000 --- a/packages/old/client/src/handlers/misc/PRESENCE_UPDATE.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordPresenceUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handlePresenceUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - client.events.presenceUpdate( - client, - client.transformers.presence(client, data.d as DiscordPresenceUpdate) - ) -} diff --git a/packages/old/client/src/handlers/misc/READY.ts b/packages/old/client/src/handlers/misc/READY.ts deleted file mode 100644 index da47396ec..000000000 --- a/packages/old/client/src/handlers/misc/READY.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { DiscordGatewayPayload, DiscordReady } from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleReady ( - client: Client, - data: DiscordGatewayPayload, - shardId: number -): void { - const payload = data.d as DiscordReady - // Triggered on each shard - client.events.ready( - client, - { - shardId, - v: payload.v, - user: client.transformers.user(client, payload.user), - guilds: payload.guilds.map((p) => client.transformers.snowflake(p.id)), - sessionId: payload.session_id, - shard: payload.shard, - applicationId: client.transformers.snowflake(payload.application.id) - }, - payload - ) - - client.id = client.transformers.snowflake(payload.user.id) - client.applicationId = client.transformers.snowflake(payload.application.id) -} diff --git a/packages/old/client/src/handlers/misc/TYPING_START.ts b/packages/old/client/src/handlers/misc/TYPING_START.ts deleted file mode 100644 index a0958a626..000000000 --- a/packages/old/client/src/handlers/misc/TYPING_START.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordTypingStart -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleTypingStart ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordTypingStart - - const guildId = payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - const userId = client.transformers.snowflake(payload.user_id) - - client.events.typingStart(client, { - guildId, - channelId: client.transformers.snowflake(payload.channel_id), - userId, - timestamp: payload.timestamp, - member: - payload.member && guildId - ? client.transformers.member(client, payload.member, guildId, userId) - : undefined - }) -} diff --git a/packages/old/client/src/handlers/misc/USER_UPDATE.ts b/packages/old/client/src/handlers/misc/USER_UPDATE.ts deleted file mode 100644 index 46c96ce50..000000000 --- a/packages/old/client/src/handlers/misc/USER_UPDATE.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { DiscordGatewayPayload, DiscordUser } from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleUserUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordUser - client.events.botUpdate(client, client.transformers.user(client, payload)) -} diff --git a/packages/old/client/src/handlers/misc/index.ts b/packages/old/client/src/handlers/misc/index.ts deleted file mode 100644 index 669b6cca8..000000000 --- a/packages/old/client/src/handlers/misc/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './APPLICATION_COMMAND_PERMISSIONS_UPDATE.js' -export * from './PRESENCE_UPDATE.js' -export * from './READY.js' -export * from './TYPING_START.js' -export * from './USER_UPDATE.js' diff --git a/packages/old/client/src/handlers/roles/GUILD_ROLE_CREATE.ts b/packages/old/client/src/handlers/roles/GUILD_ROLE_CREATE.ts deleted file mode 100644 index ba96ade99..000000000 --- a/packages/old/client/src/handlers/roles/GUILD_ROLE_CREATE.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildRoleCreate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildRoleCreate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildRoleCreate - client.events.roleCreate( - client, - client.transformers.role(client, { - role: payload.role, - guildId: client.transformers.snowflake(payload.guild_id) - }) - ) -} diff --git a/packages/old/client/src/handlers/roles/GUILD_ROLE_DELETE.ts b/packages/old/client/src/handlers/roles/GUILD_ROLE_DELETE.ts deleted file mode 100644 index fcbc75a50..000000000 --- a/packages/old/client/src/handlers/roles/GUILD_ROLE_DELETE.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildRoleDelete -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildRoleDelete ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildRoleDelete - client.events.roleDelete(client, { - roleId: client.transformers.snowflake(payload.role_id), - guildId: client.transformers.snowflake(payload.guild_id) - }) -} diff --git a/packages/old/client/src/handlers/roles/GUILD_ROLE_UPDATE.ts b/packages/old/client/src/handlers/roles/GUILD_ROLE_UPDATE.ts deleted file mode 100644 index 48ef3e0d8..000000000 --- a/packages/old/client/src/handlers/roles/GUILD_ROLE_UPDATE.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordGuildRoleUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleGuildRoleUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordGuildRoleUpdate - - client.events.roleUpdate( - client, - client.transformers.role(client, { - role: payload.role, - guildId: client.transformers.snowflake(payload.guild_id) - }) - ) -} diff --git a/packages/old/client/src/handlers/roles/index.ts b/packages/old/client/src/handlers/roles/index.ts deleted file mode 100644 index 9e369134f..000000000 --- a/packages/old/client/src/handlers/roles/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './GUILD_ROLE_CREATE.js' -export * from './GUILD_ROLE_DELETE.js' -export * from './GUILD_ROLE_UPDATE.js' diff --git a/packages/old/client/src/handlers/voice/VOICE_SERVER_UPDATE.ts b/packages/old/client/src/handlers/voice/VOICE_SERVER_UPDATE.ts deleted file mode 100644 index b92f07c60..000000000 --- a/packages/old/client/src/handlers/voice/VOICE_SERVER_UPDATE.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordVoiceServerUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleVoiceServerUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordVoiceServerUpdate - - client.events.voiceServerUpdate(client, { - token: payload.token, - guildId: client.transformers.snowflake(payload.guild_id), - endpoint: payload.endpoint ?? undefined - }) -} diff --git a/packages/old/client/src/handlers/voice/VOICE_STATE_UPDATE.ts b/packages/old/client/src/handlers/voice/VOICE_STATE_UPDATE.ts deleted file mode 100644 index 38fabea27..000000000 --- a/packages/old/client/src/handlers/voice/VOICE_STATE_UPDATE.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordVoiceState -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export async function handleVoiceStateUpdate ( - client: Client, - data: DiscordGatewayPayload -): Promise { - const payload = data.d as DiscordVoiceState - if (!payload.guild_id) return - - const guildId = client.transformers.snowflake(payload.guild_id) - - client.events.voiceStateUpdate( - client, - client.transformers.voiceState(client, { voiceState: payload, guildId }) - ) -} diff --git a/packages/old/client/src/handlers/voice/index.ts b/packages/old/client/src/handlers/voice/index.ts deleted file mode 100644 index 6302f4659..000000000 --- a/packages/old/client/src/handlers/voice/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './VOICE_SERVER_UPDATE.js' -export * from './VOICE_STATE_UPDATE.js' diff --git a/packages/old/client/src/handlers/webhooks/WEBHOOKS_UPDATE.ts b/packages/old/client/src/handlers/webhooks/WEBHOOKS_UPDATE.ts deleted file mode 100644 index f38c5e4c0..000000000 --- a/packages/old/client/src/handlers/webhooks/WEBHOOKS_UPDATE.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordWebhookUpdate -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function handleWebhooksUpdate ( - client: Client, - data: DiscordGatewayPayload -): void { - const payload = data.d as DiscordWebhookUpdate - client.events.webhooksUpdate(client, { - channelId: client.transformers.snowflake(payload.channel_id), - guildId: client.transformers.snowflake(payload.guild_id) - }) -} diff --git a/packages/old/client/src/handlers/webhooks/index.ts b/packages/old/client/src/handlers/webhooks/index.ts deleted file mode 100644 index baf5f8d4d..000000000 --- a/packages/old/client/src/handlers/webhooks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './WEBHOOKS_UPDATE.js' diff --git a/packages/old/client/src/index.ts b/packages/old/client/src/index.ts deleted file mode 100644 index 8b7c628b9..000000000 --- a/packages/old/client/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './client.js' -export * from './handlers/index.js' -export * from './transformer.js' -export * from './types.js' diff --git a/packages/old/client/src/transformer.ts b/packages/old/client/src/transformer.ts deleted file mode 100644 index 130dab6f9..000000000 --- a/packages/old/client/src/transformer.ts +++ /dev/null @@ -1,410 +0,0 @@ -import type { - AllowedMentions, - BigString, - DiscordActivity, - DiscordAllowedMentions, - DiscordApplication, - DiscordApplicationCommand, - DiscordApplicationCommandOption, - DiscordApplicationCommandOptionChoice, - DiscordAttachment, - DiscordAuditLogEntry, - DiscordAutoModerationActionExecution, - DiscordAutoModerationRule, - DiscordChannel, - DiscordComponent, - DiscordCreateApplicationCommand, - DiscordEmbed, - DiscordEmoji, - DiscordGetGatewayBot, - DiscordGuild, - DiscordGuildApplicationCommandPermissions, - DiscordGuildWidget, - DiscordGuildWidgetSettings, - DiscordIntegrationCreateUpdate, - DiscordInteraction, - DiscordInteractionDataOption, - DiscordInteractionDataResolved, - DiscordInteractionResponse, - DiscordInviteCreate, - DiscordMember, - DiscordMessage, - DiscordPresenceUpdate, - DiscordRole, - DiscordScheduledEvent, - DiscordStageInstance, - DiscordSticker, - DiscordStickerPack, - DiscordTeam, - DiscordTemplate, - DiscordThreadMember, - DiscordUser, - DiscordVoiceRegion, - DiscordVoiceState, - DiscordWebhook, - DiscordWelcomeScreen, - GetGatewayBot -} from '@discordeno/types' -import { bigintToSnowflake, snowflakeToBigint } from '@discordeno/utils' -import type { Client } from './client.js' -import type { - Activity, - Application, - ApplicationCommand, - ApplicationCommandOption, - ApplicationCommandOptionChoice, - ApplicationCommandPermission, - Attachment, - AuditLogEntry, - AutoModerationActionExecution, - AutoModerationRule, - Channel, - Component, - Embed, - Emoji, - Guild, - GuildWidget, - GuildWidgetSettings, - Integration, - Interaction, - InteractionDataOption, - InteractionDataResolved, - Invite, - Member, - Message, - PresenceUpdate, - Role, - ScheduledEvent, - StageInstance, - Sticker, - StickerPack, - Team, - Template, - ThreadMember, - User, - VoiceRegions, - VoiceState, - Webhook, - WelcomeScreen -} from './transformers/index.js' -import { - transformActivity, - transformActivityToDiscordActivity, - transformAllowedMentionsToDiscordAllowedMentions, - transformApplication, - transformApplicationCommand, - transformApplicationCommandOption, - transformApplicationCommandOptionChoice, - transformApplicationCommandOptionChoiceToDiscordApplicationCommandOptionChoice, - transformApplicationCommandOptionToDiscordApplicationCommandOption, - transformApplicationCommandPermission, - transformApplicationCommandPermissionToDiscordApplicationCommandPermission, - transformApplicationCommandToDiscordApplicationCommand, - transformApplicationToDiscordApplication, - transformAttachment, - transformAttachmentToDiscordAttachment, - transformAuditLogEntry, - transformAuditLogEntryToDiscordAuditLogEntry, - transformAutoModerationActionExecution, - transformAutoModerationRule, - transformChannel, - transformComponent, - transformComponentToDiscordComponent, - transformCreateApplicationCommandToDiscordCreateApplicationCommand, - transformEmbed, - transformEmbedToDiscordEmbed, - transformEmoji, - transformEmojiToDiscordEmoji, - transformGatewayBot, - transformGatewayBotToDiscordGatewayBot, - transformGuild, - transformIntegration, - transformInteraction, - transformInteractionDataOption, - transformInteractionDataResolved, - transformInteractionResponseToDiscordInteractionResponse, - transformInvite, - transformMember, - transformMemberToDiscordMember, - transformMessage, - transformPresence, - transformPresenceToDiscordPresence, - transformRole, - transformScheduledEvent, - transformStageInstance, - transformSticker, - transformStickerPack, - transformTeam, - transformTeamToDiscordTeam, - transformTemplate, - transformThreadMember, - transformUser, - transformUserToDiscordUser, - transformVoiceRegion, - transformVoiceState, - transformWebhook, - transformWelcomeScreen, - transformWidget, - transformWidgetSettings, - transformWidgetSettingsToDiscordWidgetSettings -} from './transformers/index.js' -import type { CreateApplicationCommand, InteractionResponse } from './types.js' - -export interface Transformers { - reverse: { - allowedMentions: ( - client: Client, - payload: AllowedMentions - ) => DiscordAllowedMentions - embed: (client: Client, payload: Embed) => DiscordEmbed - component: (client: Client, payload: Component) => DiscordComponent - activity: (client: Client, payload: Activity) => DiscordActivity - member: (client: Client, payload: Member) => DiscordMember - user: (client: Client, payload: User) => DiscordUser - team: (client: Client, payload: Team) => DiscordTeam - application: (client: Client, payload: Application) => DiscordApplication - snowflake: (snowflake: BigString) => string - createApplicationCommand: ( - client: Client, - payload: CreateApplicationCommand - ) => DiscordCreateApplicationCommand - applicationCommand: ( - client: Client, - payload: ApplicationCommand - ) => DiscordApplicationCommand - applicationCommandOption: ( - client: Client, - payload: ApplicationCommandOption - ) => DiscordApplicationCommandOption - applicationCommandOptionChoice: ( - client: Client, - payload: ApplicationCommandOptionChoice - ) => DiscordApplicationCommandOptionChoice - interactionResponse: ( - client: Client, - payload: InteractionResponse - ) => DiscordInteractionResponse - attachment: (client: Client, payload: Attachment) => DiscordAttachment - applicationCommandPermission: ( - client: Client, - payload: ApplicationCommandPermission - ) => DiscordGuildApplicationCommandPermissions - auditLogEntry: ( - client: Client, - payload: AuditLogEntry - ) => DiscordAuditLogEntry - emoji: (client: Client, payload: Emoji) => DiscordEmoji - gatewayBot: (payload: GetGatewayBot) => DiscordGetGatewayBot - presence: ( - client: Client, - payload: PresenceUpdate - ) => DiscordPresenceUpdate - widgetSettings: ( - client: Client, - payload: GuildWidgetSettings - ) => DiscordGuildWidgetSettings - } - snowflake: (snowflake: BigString) => bigint - gatewayBot: (payload: DiscordGetGatewayBot) => GetGatewayBot - automodRule: ( - client: Client, - payload: DiscordAutoModerationRule - ) => AutoModerationRule - automodActionExecution: ( - client: Client, - payload: DiscordAutoModerationActionExecution - ) => AutoModerationActionExecution - channel: ( - client: Client, - payload: { channel: DiscordChannel } & { guildId?: bigint } - ) => Channel - guild: ( - client: Client, - payload: { guild: DiscordGuild } & { shardId: number } - ) => Guild - user: (client: Client, payload: DiscordUser) => User - member: ( - client: Client, - payload: DiscordMember, - guildId: bigint, - userId: bigint - ) => Member - message: (client: Client, payload: DiscordMessage) => Message - role: ( - client: Client, - payload: { role: DiscordRole } & { guildId: bigint } - ) => Role - voiceState: ( - client: Client, - payload: { voiceState: DiscordVoiceState } & { guildId: bigint } - ) => VoiceState - interaction: (client: Client, payload: DiscordInteraction) => Interaction - interactionDataOption: ( - client: Client, - payload: DiscordInteractionDataOption - ) => InteractionDataOption - interactionDataResolved: ( - client: Client, - payload: DiscordInteractionDataResolved - ) => InteractionDataResolved - integration: ( - client: Client, - payload: DiscordIntegrationCreateUpdate - ) => Integration - invite: (client: Client, invite: DiscordInviteCreate) => Invite - application: (client: Client, payload: DiscordApplication) => Application - team: (client: Client, payload: DiscordTeam) => Team - emoji: (client: Client, payload: DiscordEmoji) => Emoji - activity: (client: Client, payload: DiscordActivity) => Activity - presence: (client: Client, payload: DiscordPresenceUpdate) => PresenceUpdate - attachment: (client: Client, payload: DiscordAttachment) => Attachment - embed: (client: Client, payload: DiscordEmbed) => Embed - component: (client: Client, payload: DiscordComponent) => Component - webhook: (client: Client, payload: DiscordWebhook) => Webhook - auditLogEntry: ( - client: Client, - payload: DiscordAuditLogEntry - ) => AuditLogEntry - applicationCommand: ( - client: Client, - payload: DiscordApplicationCommand - ) => ApplicationCommand - applicationCommandOption: ( - client: Client, - payload: DiscordApplicationCommandOption - ) => ApplicationCommandOption - applicationCommandPermission: ( - client: Client, - payload: DiscordGuildApplicationCommandPermissions - ) => ApplicationCommandPermission - scheduledEvent: ( - client: Client, - payload: DiscordScheduledEvent - ) => ScheduledEvent - threadMember: (client: Client, payload: DiscordThreadMember) => ThreadMember - welcomeScreen: ( - client: Client, - payload: DiscordWelcomeScreen - ) => WelcomeScreen - voiceRegion: (client: Client, payload: DiscordVoiceRegion) => VoiceRegions - widget: (client: Client, payload: DiscordGuildWidget) => GuildWidget - widgetSettings: ( - client: Client, - payload: DiscordGuildWidgetSettings - ) => GuildWidgetSettings - stageInstance: ( - client: Client, - payload: DiscordStageInstance - ) => StageInstance - sticker: (client: Client, payload: DiscordSticker) => Sticker - stickerPack: (client: Client, payload: DiscordStickerPack) => StickerPack - applicationCommandOptionChoice: ( - client: Client, - payload: DiscordApplicationCommandOptionChoice - ) => ApplicationCommandOptionChoice - template: (client: Client, payload: DiscordTemplate) => Template -} - -export function createTransformers ( - options: Partial -): Transformers { - return { - reverse: { - allowedMentions: - options.reverse?.allowedMentions ?? - transformAllowedMentionsToDiscordAllowedMentions, - embed: options.reverse?.embed ?? transformEmbedToDiscordEmbed, - component: - options.reverse?.component ?? transformComponentToDiscordComponent, - activity: options.reverse?.activity ?? transformActivityToDiscordActivity, - member: options.reverse?.member ?? transformMemberToDiscordMember, - user: options.reverse?.user ?? transformUserToDiscordUser, - team: options.reverse?.team ?? transformTeamToDiscordTeam, - application: - options.reverse?.application ?? - transformApplicationToDiscordApplication, - snowflake: options.reverse?.snowflake ?? bigintToSnowflake, - createApplicationCommand: - options.reverse?.createApplicationCommand ?? - transformCreateApplicationCommandToDiscordCreateApplicationCommand, - applicationCommand: - options.reverse?.applicationCommand ?? - transformApplicationCommandToDiscordApplicationCommand, - applicationCommandOption: - options.reverse?.applicationCommandOption ?? - transformApplicationCommandOptionToDiscordApplicationCommandOption, - applicationCommandOptionChoice: - options.reverse?.applicationCommandOptionChoice ?? - transformApplicationCommandOptionChoiceToDiscordApplicationCommandOptionChoice, - interactionResponse: - options.reverse?.interactionResponse ?? - transformInteractionResponseToDiscordInteractionResponse, - attachment: - options.reverse?.attachment ?? transformAttachmentToDiscordAttachment, - applicationCommandPermission: - options.reverse?.applicationCommandPermission ?? - transformApplicationCommandPermissionToDiscordApplicationCommandPermission, - auditLogEntry: - options.reverse?.auditLogEntry ?? - transformAuditLogEntryToDiscordAuditLogEntry, - emoji: options.reverse?.emoji ?? transformEmojiToDiscordEmoji, - gatewayBot: - options.reverse?.gatewayBot ?? transformGatewayBotToDiscordGatewayBot, - presence: options.reverse?.presence ?? transformPresenceToDiscordPresence, - widgetSettings: - options.reverse?.widgetSettings ?? - transformWidgetSettingsToDiscordWidgetSettings - }, - automodRule: options.automodRule ?? transformAutoModerationRule, - automodActionExecution: - options.automodActionExecution ?? transformAutoModerationActionExecution, - activity: options.activity ?? transformActivity, - application: options.application ?? transformApplication, - attachment: options.attachment ?? transformAttachment, - channel: options.channel ?? transformChannel, - component: options.component ?? transformComponent, - embed: options.embed ?? transformEmbed, - emoji: options.emoji ?? transformEmoji, - guild: options.guild ?? transformGuild, - integration: options.integration ?? transformIntegration, - interaction: options.interaction ?? transformInteraction, - interactionDataOption: - options.interactionDataOption ?? transformInteractionDataOption, - interactionDataResolved: - options.interactionDataResolved ?? transformInteractionDataResolved, - invite: options.invite ?? transformInvite, - member: options.member ?? transformMember, - message: options.message ?? transformMessage, - presence: options.presence ?? transformPresence, - role: options.role ?? transformRole, - user: options.user ?? transformUser, - team: options.team ?? transformTeam, - voiceState: options.voiceState ?? transformVoiceState, - snowflake: options.snowflake ?? snowflakeToBigint, - webhook: options.webhook ?? transformWebhook, - auditLogEntry: options.auditLogEntry ?? transformAuditLogEntry, - applicationCommand: - options.applicationCommand ?? transformApplicationCommand, - applicationCommandOption: - options.applicationCommandOption ?? transformApplicationCommandOption, - applicationCommandPermission: - options.applicationCommandPermission ?? - transformApplicationCommandPermission, - scheduledEvent: options.scheduledEvent ?? transformScheduledEvent, - threadMember: options.threadMember ?? transformThreadMember, - welcomeScreen: options.welcomeScreen ?? transformWelcomeScreen, - voiceRegion: options.voiceRegion ?? transformVoiceRegion, - widget: options.widget ?? transformWidget, - widgetSettings: options.widgetSettings ?? transformWidgetSettings, - stageInstance: options.stageInstance ?? transformStageInstance, - sticker: options.sticker ?? transformSticker, - stickerPack: options.stickerPack ?? transformStickerPack, - gatewayBot: options.gatewayBot ?? transformGatewayBot, - applicationCommandOptionChoice: - options.applicationCommandOptionChoice ?? - transformApplicationCommandOptionChoice, - template: options.template ?? transformTemplate - } -} - -export * from './transformers/index.js' diff --git a/packages/old/client/src/transformers/activity.ts b/packages/old/client/src/transformers/activity.ts deleted file mode 100644 index a6bc69ba7..000000000 --- a/packages/old/client/src/transformers/activity.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { DiscordActivity, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformActivity (client: Client, payload: DiscordActivity) { - const activity = { - name: payload.name, - type: payload.type, - url: payload.url ?? undefined, - createdAt: payload.created_at, - startedAt: payload.timestamps?.start, - endedAt: payload.timestamps?.end, - applicationId: payload.application_id - ? client.transformers.snowflake(payload.application_id) - : undefined, - details: payload.details ?? undefined, - state: payload.state ?? undefined, - emoji: payload.emoji - ? { - name: payload.emoji.name, - animated: payload.emoji.animated, - id: payload.emoji.id - ? client.transformers.snowflake(payload.emoji.id) - : undefined - } - : undefined, - partyId: payload.party?.id, - partyCurrentSize: payload.party?.size?.[0], - partyMaxSize: payload.party?.size?.[1], - largeImage: payload.assets?.large_image, - largeText: payload.assets?.large_text, - smallImage: payload.assets?.small_image, - smallText: payload.assets?.small_text, - join: payload.secrets?.join, - spectate: payload.secrets?.spectate, - match: payload.secrets?.match, - instance: payload.instance, - flags: payload.flags, - buttons: payload.buttons - } - - return activity as Optionalize -} - -export interface Activity extends ReturnType {} diff --git a/packages/old/client/src/transformers/application.ts b/packages/old/client/src/transformers/application.ts deleted file mode 100644 index fd2d83553..000000000 --- a/packages/old/client/src/transformers/application.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { - DiscordApplication, - DiscordUser, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformApplication ( - client: Client, - payload: DiscordApplication -) { - const application = { - name: payload.name, - description: payload.description, - rpcOrigins: payload.rpc_origins, - botPublic: payload.bot_public, - botRequireCodeGrant: payload.bot_require_code_grant, - termsOfServiceUrl: payload.terms_of_service_url, - privacyPolicyUrl: payload.privacy_policy_url, - verifyKey: payload.verify_key, - primarySkuId: payload.primary_sku_id, - slug: payload.slug, - coverImage: payload.cover_image - ? client.utils.iconHashToBigInt(payload.cover_image) - : undefined, - flags: payload.flags, - - id: client.transformers.snowflake(payload.id), - icon: payload.icon - ? client.utils.iconHashToBigInt(payload.icon) - : undefined, - owner: payload.owner - ? client.transformers.user(client, payload.owner as DiscordUser) - : undefined, - team: payload.team - ? client.transformers.team(client, payload.team) - : undefined, - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - } - - return application as Optionalize -} - -export interface Application extends ReturnType {} diff --git a/packages/old/client/src/transformers/applicationCommand.ts b/packages/old/client/src/transformers/applicationCommand.ts deleted file mode 100644 index 3955479ee..000000000 --- a/packages/old/client/src/transformers/applicationCommand.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { DiscordApplicationCommand, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformApplicationCommand ( - client: Client, - payload: DiscordApplicationCommand -) { - const applicationCommand = { - id: client.transformers.snowflake(payload.id), - applicationId: client.transformers.snowflake(payload.application_id), - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined, - name: payload.name, - nameLocalizations: payload.name_localizations ?? undefined, - description: payload.description, - descriptionLocalizations: payload.description_localizations ?? undefined, - defaultMemberPermissions: payload.default_member_permissions - ? client.transformers.snowflake(payload.default_member_permissions) - : undefined, - dmPermission: payload.dm_permission ?? false, - type: payload.type, - version: payload.version, - - options: payload.options?.map((option) => - client.transformers.applicationCommandOption(client, option) - ) - } - - return applicationCommand as Optionalize -} - -export interface ApplicationCommand - extends ReturnType {} diff --git a/packages/old/client/src/transformers/applicationCommandOption.ts b/packages/old/client/src/transformers/applicationCommandOption.ts deleted file mode 100644 index 550842ed3..000000000 --- a/packages/old/client/src/transformers/applicationCommandOption.ts +++ /dev/null @@ -1,67 +0,0 @@ -import type { - ApplicationCommandOptionTypes, - ChannelTypes, - DiscordApplicationCommandOption, - Localization -} from '@discordeno/types' -import type { Client } from '../client.js' -import type { ApplicationCommandOptionChoice } from './applicationCommandOptionChoice.js' - -export function transformApplicationCommandOption ( - client: Client, - payload: DiscordApplicationCommandOption -): ApplicationCommandOption { - return { - type: payload.type, - name: payload.name, - nameLocalizations: payload.name_localizations ?? undefined, - description: payload.description, - descriptionLocalizations: payload.description_localizations ?? undefined, - required: payload.required ?? false, - choices: payload.choices?.map((choice) => - client.transformers.applicationCommandOptionChoice(client, choice) - ), - autocomplete: payload.autocomplete, - channelTypes: payload.channel_types, - minValue: payload.min_value, - maxValue: payload.max_value, - minLength: payload.min_length, - maxLength: payload.max_length, - options: payload.options?.map((option) => - client.transformers.applicationCommandOption(client, option) - ) - } -} - -// THIS TRANSFORMER HAS A CIRCULAR REFERENCE TO CALL ITSELF FOR OPTIONS SO AN AUTOMATED TYPE CAN NOT BE CREATED! - -export interface ApplicationCommandOption { - /** Value of Application Command Option Type */ - type: ApplicationCommandOptionTypes - /** 1-32 character name matching lowercase `^[\w-]{1,32}$` */ - name: string - /** Localization object for the `name` field. Values follow the same restrictions as `name` */ - nameLocalizations?: Localization - /** 1-100 character description */ - description: string - /** Localization object for the `description` field. Values follow the same restrictions as `description` */ - descriptionLocalizations?: Localization - /** If the parameter is required or optional--default `false` */ - required?: boolean - /** Choices for `string` and `int` types for the user to pick from */ - choices?: ApplicationCommandOptionChoice[] - /** If the option is a subcommand or subcommand group type, this nested options will be the parameters */ - options?: ApplicationCommandOption[] - /** If the option is a channel type, the channels shown will be restricted to these types */ - channelTypes?: ChannelTypes[] - /** Minimum number desired. */ - minValue?: number - /** Maximum number desired. */ - maxValue?: number - /** Minimum length desired. */ - minLength?: number - /** Maximum length desired. */ - maxLength?: number - /** if autocomplete interactions are enabled for this `String`, `Integer`, or `Number` type option */ - autocomplete?: boolean -} diff --git a/packages/old/client/src/transformers/applicationCommandOptionChoice.ts b/packages/old/client/src/transformers/applicationCommandOptionChoice.ts deleted file mode 100644 index e8e42716b..000000000 --- a/packages/old/client/src/transformers/applicationCommandOptionChoice.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { - DiscordApplicationCommandOptionChoice, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformApplicationCommandOptionChoice ( - client: Client, - payload: DiscordApplicationCommandOptionChoice -) { - const applicationCommandChoice = { - name: payload.name, - nameLocalizations: payload.name_localizations ?? undefined, - value: payload.value - } - - return applicationCommandChoice as Optionalize< - typeof applicationCommandChoice - > -} - -export interface ApplicationCommandOptionChoice - extends ReturnType {} diff --git a/packages/old/client/src/transformers/applicationCommandPermission.ts b/packages/old/client/src/transformers/applicationCommandPermission.ts deleted file mode 100644 index e77d3458d..000000000 --- a/packages/old/client/src/transformers/applicationCommandPermission.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { - DiscordGuildApplicationCommandPermissions, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformApplicationCommandPermission ( - client: Client, - payload: DiscordGuildApplicationCommandPermissions -) { - const applicationCommandPermission = { - id: client.transformers.snowflake(payload.id), - applicationId: client.transformers.snowflake(payload.application_id), - guildId: client.transformers.snowflake(payload.guild_id), - permissions: payload.permissions.map((perm) => ({ - id: client.transformers.snowflake(perm.id), - type: perm.type, - permission: perm.permission - })) - } - - return applicationCommandPermission as Optionalize< - typeof applicationCommandPermission - > -} - -export interface ApplicationCommandPermission - extends ReturnType {} diff --git a/packages/old/client/src/transformers/attachment.ts b/packages/old/client/src/transformers/attachment.ts deleted file mode 100644 index 81f305c71..000000000 --- a/packages/old/client/src/transformers/attachment.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { DiscordAttachment, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformAttachment ( - client: Client, - payload: DiscordAttachment -) { - const attachment = { - id: client.transformers.snowflake(payload.id), - filename: payload.filename, - contentType: payload.content_type, - size: payload.size, - url: payload.url, - proxyUrl: payload.proxy_url, - height: payload.height ?? undefined, - width: payload.width ?? undefined, - ephemeral: payload.ephemeral, - description: payload.description - } - - return attachment as Optionalize -} - -export interface Attachment extends ReturnType {} diff --git a/packages/old/client/src/transformers/auditLogEntry.ts b/packages/old/client/src/transformers/auditLogEntry.ts deleted file mode 100644 index c93dbee91..000000000 --- a/packages/old/client/src/transformers/auditLogEntry.ts +++ /dev/null @@ -1,158 +0,0 @@ -import type { DiscordAuditLogEntry, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformAuditLogEntry ( - client: Client, - payload: DiscordAuditLogEntry -) { - const auditLogEntry = { - id: client.transformers.snowflake(payload.id), - changes: payload.changes?.map((change) => { - switch (change.key) { - case '$add': - case '$remove': - return { - key: change.key, - new: change.new_value?.map((val) => ({ - id: val.id ? client.transformers.snowflake(val.id) : undefined, - name: val.name - })), - old: change.old_value?.map((val) => ({ - id: val?.id ? client.transformers.snowflake(val.id) : undefined, - name: val?.name - })) - } - case 'discovery_splash_hash': - case 'banner_hash': - case 'rules_channel_id': - case 'public_updates_channel_id': - case 'icon_hash': - case 'image_hash': - case 'splash_hash': - case 'owner_id': - case 'widget_channel_id': - case 'system_channel_id': - case 'application_id': - case 'permissions': - case 'allow': - case 'deny': - case 'channel_id': - case 'inviter_id': - case 'avatar_hash': - case 'id': - return { - key: change.key, - old: change.old_value - ? client.transformers.snowflake(change.old_value) - : undefined, - new: change.new_value - ? client.transformers.snowflake(change.new_value) - : undefined - } - case 'name': - case 'description': - case 'preferred_locale': - case 'region': - case 'afk_channel_id': - case 'vanity_url_code': - case 'topic': - case 'code': - case 'nick': - case 'location': - return { - key: change.key, - old: change.old_value, - new: change.new_value - } - case 'afk_timeout': - case 'mfa_level': - case 'verification_level': - case 'explicit_content_filter': - case 'default_message_notifications': - case 'prune_delete_days': - case 'position': - case 'bitrate': - case 'rate_limit_per_user': - case 'color': - case 'max_uses': - case 'uses': - case 'max_age': - case 'expire_behavior': - case 'expire_grace_period': - case 'user_limit': - case 'privacy_level': - case 'entity_type': - case 'status': - return { - key: change.key, - old: change.old_value ? Number(change.old_value) : undefined, - new: change.new_value ? Number(change.new_value) : undefined - } - case 'widget_enabled': - case 'nsfw': - case 'hoist': - case 'mentionable': - case 'temporary': - case 'deaf': - case 'mute': - case 'enable_emoticons': - return { - key: change.key, - old: change.old_value ?? false, - new: change.new_value ?? false - } - case 'permission_overwrites': - return { - key: change.key, - old: change.old_value, - new: change.new_value - } - default: - return { - key: change.key, - old: change.old_value, - new: change.new_value - } - } - }), - userId: payload.user_id - ? client.transformers.snowflake(payload.user_id) - : undefined, - targetId: payload.target_id - ? client.transformers.snowflake(payload.target_id) - : undefined, - actionType: payload.action_type, - options: payload.options - ? { - autoModerationRuleName: payload.options.auto_moderation_rule_name, - autoModerationRuleTriggerType: - payload.options.auto_moderation_rule_trigger_type, - deleteMemberDays: payload.options.delete_member_days - ? Number(payload.options.delete_member_days) - : 0, - membersRemoved: payload.options.members_removed - ? Number(payload.options.members_removed) - : 0, - channelId: payload.options.channel_id - ? client.transformers.snowflake(payload.options.channel_id) - : undefined, - messageId: payload.options.message_id - ? client.transformers.snowflake(payload.options.message_id) - : undefined, - count: payload.options.count ? Number(payload.options.count) : 0, - id: payload.options.id - ? client.transformers.snowflake(payload.options.id) - : undefined, - type: Number(payload.options.type), - roleName: payload.options.role_name - } - : undefined, - reason: payload.reason - } - - return auditLogEntry as Optionalize -} - -export interface AuditLogEntry - extends ReturnType {} diff --git a/packages/old/client/src/transformers/automodActionExecution.ts b/packages/old/client/src/transformers/automodActionExecution.ts deleted file mode 100644 index cdfe2c536..000000000 --- a/packages/old/client/src/transformers/automodActionExecution.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { - DiscordAutoModerationActionExecution, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformAutoModerationActionExecution ( - client: Client, - payload: DiscordAutoModerationActionExecution -) { - const rule = { - content: payload.content, - ruleTriggerType: payload.rule_trigger_type, - guildId: client.transformers.snowflake(payload.guild_id), - ruleId: client.transformers.snowflake(payload.rule_id), - userId: client.transformers.snowflake(payload.user_id), - channelId: payload.channel_id - ? client.transformers.snowflake(payload.channel_id) - : undefined, - messageId: payload.message_id - ? client.transformers.snowflake(payload.message_id) - : undefined, - alertSystemMessageId: payload.alert_system_message_id - ? client.transformers.snowflake(payload.alert_system_message_id) - : undefined, - matchedKeyword: payload.matched_keyword ?? '', - matchedContent: payload.matched_content ?? '', - action: { - type: payload.action.type, - metadata: { - durationSeconds: payload.action.metadata.duration_seconds, - channelId: payload.action.metadata.channel_id - ? client.transformers.snowflake(payload.action.metadata.channel_id) - : undefined - } - } - } - - return rule as Optionalize -} - -export interface AutoModerationActionExecution - extends ReturnType {} diff --git a/packages/old/client/src/transformers/automodRule.ts b/packages/old/client/src/transformers/automodRule.ts deleted file mode 100644 index e25aa4240..000000000 --- a/packages/old/client/src/transformers/automodRule.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { DiscordAutoModerationRule, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformAutoModerationRule ( - client: Client, - payload: DiscordAutoModerationRule -) { - const rule = { - name: payload.name, - eventType: payload.event_type, - triggerType: payload.trigger_type, - enabled: payload.enabled, - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - creatorId: client.transformers.snowflake(payload.creator_id), - exemptRoles: payload.exempt_roles.map((id) => - client.transformers.snowflake(id) - ), - exemptChannels: payload.exempt_channels.map((id) => - client.transformers.snowflake(id) - ), - triggerMetadata: payload.trigger_metadata - ? { - keywordFilter: payload.trigger_metadata.keyword_filter, - presets: payload.trigger_metadata.presets, - allowList: payload.trigger_metadata.allow_list, - mentionTotalLimit: payload.trigger_metadata.mention_total_limit - } - : undefined, - actions: payload.actions.map((action) => ({ - type: action.type, - metadata: action.metadata - ? { - channelId: action.metadata.channel_id - ? client.transformers.snowflake(action.metadata.channel_id) - : undefined, - durationSeconds: action.metadata.duration_seconds - } - : undefined - })) - } - - return rule as Optionalize -} - -export interface AutoModerationRule - extends ReturnType {} diff --git a/packages/old/client/src/transformers/channel.ts b/packages/old/client/src/transformers/channel.ts deleted file mode 100644 index 0dc83d02a..000000000 --- a/packages/old/client/src/transformers/channel.ts +++ /dev/null @@ -1,103 +0,0 @@ -import type { DiscordChannel, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -const Mask = (1n << 64n) - 1n - -export function packOverwrites ( - allow: string, - deny: string, - id: string, - type: number -): bigint { - return pack64(allow, 0) | pack64(deny, 1) | pack64(id, 2) | pack64(type, 3) -} -function unpack64 (v: bigint, shift: number): bigint { - return (v >> BigInt(shift * 64)) & Mask -} -function pack64 (v: string | number, shift: number): bigint { - const b = BigInt(v) - if (b < 0 || b > Mask) { - throw new Error(`should have been a 64 bit unsigned integer: ${v}`) - } - return b << BigInt(shift * 64) -} -export function separateOverwrites ( - v: bigint -): [number, bigint, bigint, bigint] { - return [ - Number(unpack64(v, 3)), - unpack64(v, 2), - unpack64(v, 0), - unpack64(v, 1) - ] as [number, bigint, bigint, bigint] -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformChannel ( - client: Client, - payload: { channel: DiscordChannel } & { guildId?: bigint } -) { - const channel = { - // UNTRANSFORMED STUFF HERE - type: payload.channel.type, - position: payload.channel.position, - name: payload.channel.name, - topic: payload.channel.topic ?? undefined, - nsfw: payload.channel.nsfw, - bitrate: payload.channel.bitrate, - userLimit: payload.channel.user_limit, - rateLimitPerUser: payload.channel.rate_limit_per_user, - // recipients: payload.channel.recipients?.map((r) => client.transformers.user(client, r)), - rtcRegion: payload.channel.rtc_region ?? undefined, - videoQualityMode: payload.channel.video_quality_mode, - guildId: - payload.guildId ?? - (payload.channel.guild_id - ? client.transformers.snowflake(payload.channel.guild_id) - : 0n), - lastPinTimestamp: payload.channel.last_pin_timestamp - ? Date.parse(payload.channel.last_pin_timestamp) - : undefined, - permissionOverwrites: payload.channel.permission_overwrites - ? payload.channel.permission_overwrites.map((o) => - packOverwrites(o.allow ?? '0', o.deny ?? '0', o.id, o.type) - ) - : [], - - id: client.transformers.snowflake(payload.channel.id), - permissions: payload.channel.permissions - ? client.transformers.snowflake(payload.channel.permissions) - : undefined, - lastMessageId: payload.channel.last_message_id - ? client.transformers.snowflake(payload.channel.last_message_id) - : undefined, - ownerId: payload.channel.owner_id - ? client.transformers.snowflake(payload.channel.owner_id) - : undefined, - applicationId: payload.channel.application_id - ? client.transformers.snowflake(payload.channel.application_id) - : undefined, - parentId: payload.channel.parent_id - ? client.transformers.snowflake(payload.channel.parent_id) - : undefined, - memberCount: payload.channel.member_count, - messageCount: payload.channel.message_count, - archiveTimestamp: payload.channel.thread_metadata?.archive_timestamp - ? Date.parse(payload.channel.thread_metadata.archive_timestamp) - : undefined, - autoArchiveDuration: payload.channel.thread_metadata?.auto_archive_duration, - botIsMember: Boolean(payload.channel.member), - archived: payload.channel.thread_metadata?.archived, - locked: payload.channel.thread_metadata?.locked, - invitable: payload.channel.thread_metadata?.invitable, - createTimestamp: payload.channel.thread_metadata?.create_timestamp - ? Date.parse(payload.channel.thread_metadata.create_timestamp) - : undefined, - newlyCreated: payload.channel.newly_created, - flags: payload.channel.flags - } - - return channel as Optionalize -} - -export interface Channel extends ReturnType {} diff --git a/packages/old/client/src/transformers/component.ts b/packages/old/client/src/transformers/component.ts deleted file mode 100644 index 51f0f36e6..000000000 --- a/packages/old/client/src/transformers/component.ts +++ /dev/null @@ -1,99 +0,0 @@ -import type { - ButtonStyles, - DiscordComponent, - MessageComponentTypes, - SelectOption, - TextStyles -} from '@discordeno/types' -import type { Client } from '../client.js' - -export function transformComponent ( - client: Client, - payload: DiscordComponent -): Component { - return { - type: payload.type, - customId: payload.custom_id, - disabled: payload.disabled, - style: payload.style, - label: payload.label, - emoji: payload.emoji - ? { - id: payload.emoji.id - ? client.transformers.snowflake(payload.emoji.id) - : undefined, - name: payload.emoji.name, - animated: payload.emoji.animated - } - : undefined, - url: payload.url, - options: payload.options?.map((option) => ({ - label: option.label, - value: option.value, - description: option.description, - emoji: option.emoji - ? { - id: option.emoji.id - ? client.transformers.snowflake(option.emoji.id) - : undefined, - name: option.emoji.name, - animated: option.emoji.animated - } - : undefined, - default: option.default - })), - placeholder: payload.placeholder, - minValues: payload.min_values, - maxValues: payload.max_values, - minLength: payload.min_length, - maxLength: payload.max_length, - value: payload.value, - components: payload.components?.map((component) => - client.transformers.component(client, component) - ) - } -} - -// THIS TRANSFORMER HAS A CIRCULAR REFERENCE TO CALL ITSELF FOR COMPONENTS SO AN AUTOMATED TYPE CAN NOT BE CREATED! - -export interface Component { - /** component type */ - type: MessageComponentTypes - /** a developer-defined identifier for the component, max 100 characters */ - customId?: string - /** whether this component is required to be filled, default true */ - required?: boolean - /** whether the component is disabled, default false */ - disabled?: boolean - /** For different styles/colors of the buttons */ - style?: ButtonStyles | TextStyles - /** text that appears on the button (max 80 characters) */ - label?: string - /** the dev-define value of the option, max 100 characters for select or 4000 for input. */ - value?: string - /** Emoji object that includes fields of name, id, and animated supporting unicode and custom emojis. */ - emoji?: { - /** Emoji id */ - id?: bigint - /** Emoji name */ - name?: string - /** Whether this emoji is animated */ - animated?: boolean - } - /** optional url for link-style buttons that can navigate a user to the web. Only type 5 Link buttons can have a url */ - url?: string - /** The choices! Maximum of 25 items. */ - options?: SelectOption[] - /** A custom placeholder text if nothing is selected. Maximum 150 characters. */ - placeholder?: string - /** The minimum number of items that must be selected. Default 1. Between 1-25. */ - minValues?: number - /** The maximum number of items that can be selected. Default 1. Between 1-25. */ - maxValues?: number - /** The minimum input length for a text input. Between 0-4000. */ - minLength?: number - /** The maximum input length for a text input. Between 1-4000. */ - maxLength?: number - /** a list of child components */ - components?: Component[] -} diff --git a/packages/old/client/src/transformers/embed.ts b/packages/old/client/src/transformers/embed.ts deleted file mode 100644 index f29e7fe24..000000000 --- a/packages/old/client/src/transformers/embed.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { DiscordEmbed, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformEmbed (client: Client, payload: DiscordEmbed) { - const embed = { - title: payload.title, - type: payload.type, - description: payload.description, - url: payload.url, - timestamp: payload.timestamp ? Date.parse(payload.timestamp) : undefined, - color: payload.color, - footer: payload.footer - ? { - text: payload.footer.text, - iconUrl: payload.footer.icon_url, - proxyIconUrl: payload.footer.proxy_icon_url - } - : undefined, - image: payload.image - ? { - url: payload.image.url, - proxyUrl: payload.image.proxy_url, - height: payload.image.height, - width: payload.image.width - } - : undefined, - thumbnail: payload.thumbnail - ? { - url: payload.thumbnail.url, - proxyUrl: payload.thumbnail.proxy_url, - height: payload.thumbnail.height, - width: payload.thumbnail.width - } - : undefined, - video: payload.video - ? { - url: payload.video.url, - proxyUrl: payload.video.proxy_url, - height: payload.video.height, - width: payload.video.width - } - : undefined, - provider: payload.provider, - author: payload.author - ? { - name: payload.author.name, - url: payload.author.url, - iconUrl: payload.author.icon_url, - proxyIconUrl: payload.author.proxy_icon_url - } - : undefined, - fields: payload.fields - } - - return embed as Optionalize -} - -export interface Embed extends ReturnType {} diff --git a/packages/old/client/src/transformers/emoji.ts b/packages/old/client/src/transformers/emoji.ts deleted file mode 100644 index 4d7160da6..000000000 --- a/packages/old/client/src/transformers/emoji.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { DiscordEmoji, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' -import { EmojiToggles } from './toggles/emoji.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformEmoji (client: Client, payload: DiscordEmoji) { - const emoji = { - id: payload.id ? client.transformers.snowflake(payload.id) : undefined, - name: payload.name, - roles: payload.roles?.map((id) => client.transformers.snowflake(id)), - user: payload.user - ? client.transformers.user(client, payload.user) - : undefined, - toggles: new EmojiToggles(payload) - } - - return emoji as Optionalize -} - -export interface Emoji extends ReturnType {} diff --git a/packages/old/client/src/transformers/gatewayBot.ts b/packages/old/client/src/transformers/gatewayBot.ts deleted file mode 100644 index bed97f993..000000000 --- a/packages/old/client/src/transformers/gatewayBot.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { - DiscordGetGatewayBot, - GetGatewayBot, - Optionalize -} from '@discordeno/types' - -export function transformGatewayBot ( - payload: DiscordGetGatewayBot -): GetGatewayBot { - const gatewayClient = { - url: payload.url, - shards: payload.shards, - sessionStartLimit: { - total: payload.session_start_limit.total, - remaining: payload.session_start_limit.remaining, - resetAfter: payload.session_start_limit.reset_after, - maxConcurrency: payload.session_start_limit.max_concurrency - } - } - - return gatewayClient as Optionalize -} diff --git a/packages/old/client/src/transformers/guild.ts b/packages/old/client/src/transformers/guild.ts deleted file mode 100644 index fc4289011..000000000 --- a/packages/old/client/src/transformers/guild.ts +++ /dev/null @@ -1,149 +0,0 @@ -import type { DiscordGuild, Optionalize } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { Client } from '../client.js' -import type { Emoji } from '../transformers/emoji.js' -import { GuildToggles } from './toggles/guild.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformGuild ( - client: Client, - payload: { guild: DiscordGuild } & { shardId: number } -) { - const guildId = client.transformers.snowflake(payload.guild.id) - - const guild = { - afkTimeout: payload.guild.afk_timeout, - approximateMemberCount: payload.guild.approximate_member_count, - approximatePresenceCount: payload.guild.approximate_presence_count, - defaultMessageNotifications: payload.guild.default_message_notifications, - description: payload.guild.description, - explicitContentFilter: payload.guild.explicit_content_filter, - toggles: new GuildToggles(payload.guild), - maxMembers: payload.guild.max_members, - maxPresences: payload.guild.max_presences ?? undefined, - maxVideoChannelUsers: payload.guild.max_video_channel_users, - mfaLevel: payload.guild.mfa_level, - name: payload.guild.name, - nsfwLevel: payload.guild.nsfw_level, - preferredLocale: payload.guild.preferred_locale, - premiumSubscriptionCount: payload.guild.premium_subscription_count, - premiumTier: payload.guild.premium_tier, - stageInstances: payload.guild.stage_instances?.map((si) => ({ - /** The id of this Stage instance */ - id: client.transformers.snowflake(si.id), - /** The guild id of the associated Stage channel */ - guildId, - /** The id of the associated Stage channel */ - channelId: client.transformers.snowflake(si.channel_id), - /** The topic of the Stage instance (1-120 characters) */ - topic: si.topic - })), - systemChannelFlags: payload.guild.system_channel_flags, - vanityUrlCode: payload.guild.vanity_url_code, - verificationLevel: payload.guild.verification_level, - welcomeScreen: payload.guild.welcome_screen - ? { - description: payload.guild.welcome_screen.description ?? undefined, - welcomeChannels: payload.guild.welcome_screen.welcome_channels.map( - (wc) => ({ - channelId: client.transformers.snowflake(wc.channel_id), - description: wc.description, - emojiId: wc.emoji_id - ? client.transformers.snowflake(wc.emoji_id) - : undefined, - emojiName: wc.emoji_name ?? undefined - }) - ) - } - : undefined, - discoverySplash: payload.guild.discovery_splash - ? client.utils.iconHashToBigInt(payload.guild.discovery_splash) - : undefined, - - joinedAt: payload.guild.joined_at - ? Date.parse(payload.guild.joined_at) - : undefined, - memberCount: payload.guild.member_count ?? 0, - shardId: payload.shardId, - icon: payload.guild.icon - ? client.utils.iconHashToBigInt(payload.guild.icon) - : undefined, - banner: payload.guild.banner - ? client.utils.iconHashToBigInt(payload.guild.banner) - : undefined, - splash: payload.guild.splash - ? client.utils.iconHashToBigInt(payload.guild.splash) - : undefined, - channels: new Collection( - payload.guild.channels?.map((channel) => { - const result = client.transformers.channel(client, { - channel, - guildId - }) - return [result.id, result] - }) - ), - members: new Collection( - payload.guild.members?.map((member) => { - const result = client.transformers.member( - client, - member, - guildId, - client.transformers.snowflake(member.user!.id) - ) - return [result.id, result] - }) - ), - roles: new Collection( - payload.guild.roles?.map((role) => { - const result = client.transformers.role(client, { role, guildId }) - return [result.id, result] - }) - ), - emojis: new Collection( - (payload.guild.emojis ?? []).map((emoji) => { - const em: Emoji = client.transformers.emoji(client, emoji) - return [em.id!, em] - }) - ), - voiceStates: new Collection( - (payload.guild.voice_states ?? []) - .map((vs) => - client.transformers.voiceState(client, { voiceState: vs, guildId }) - ) - .map((vs) => [vs.userId, vs]) - ), - - id: guildId, - // WEIRD EDGE CASE WITH BOT CREATED SERVERS - ownerId: payload.guild.owner_id - ? client.transformers.snowflake(payload.guild.owner_id) - : 0n, - permissions: payload.guild.permissions - ? client.transformers.snowflake(payload.guild.permissions) - : 0n, - afkChannelId: payload.guild.afk_channel_id - ? client.transformers.snowflake(payload.guild.afk_channel_id) - : undefined, - widgetChannelId: payload.guild.widget_channel_id - ? client.transformers.snowflake(payload.guild.widget_channel_id) - : undefined, - applicationId: payload.guild.application_id - ? client.transformers.snowflake(payload.guild.application_id) - : undefined, - systemChannelId: payload.guild.system_channel_id - ? client.transformers.snowflake(payload.guild.system_channel_id) - : undefined, - rulesChannelId: payload.guild.rules_channel_id - ? client.transformers.snowflake(payload.guild.rules_channel_id) - : undefined, - publicUpdatesChannelId: payload.guild.public_updates_channel_id - ? client.transformers.snowflake(payload.guild.public_updates_channel_id) - : undefined, - premiumProgressBarEnabled: payload.guild.premium_progress_bar_enabled - } - - return guild as Optionalize -} - -export interface Guild extends ReturnType {} diff --git a/packages/old/client/src/transformers/index.ts b/packages/old/client/src/transformers/index.ts deleted file mode 100644 index ecc68e01f..000000000 --- a/packages/old/client/src/transformers/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -export * from './activity.js' -export * from './application.js' -export * from './applicationCommand.js' -export * from './applicationCommandOption.js' -export * from './applicationCommandOptionChoice.js' -export * from './applicationCommandPermission.js' -export * from './attachment.js' -export * from './auditLogEntry.js' -export * from './automodActionExecution.js' -export * from './automodRule.js' -export * from './channel.js' -export * from './component.js' -export * from './embed.js' -export * from './emoji.js' -export * from './gatewayBot.js' -export * from './guild.js' -export * from './integration.js' -export * from './interaction.js' -export * from './invite.js' -export * from './member.js' -export * from './message.js' -export * from './presence.js' -export * from './reverse/index.js' -export * from './role.js' -export * from './scheduledEvent.js' -export * from './stageInstance.js' -export * from './sticker.js' -export * from './team.js' -export * from './template.js' -export * from './threadMember.js' -export * from './toggles/index.js' -export * from './voiceRegion.js' -export * from './voiceState.js' -export * from './webhook.js' -export * from './welcomeScreen.js' -export * from './widget.js' -export * from './widgetSettings.js' diff --git a/packages/old/client/src/transformers/integration.ts b/packages/old/client/src/transformers/integration.ts deleted file mode 100644 index 0889de49e..000000000 --- a/packages/old/client/src/transformers/integration.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { - DiscordIntegrationCreateUpdate, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformIntegration ( - client: Client, - payload: DiscordIntegrationCreateUpdate -) { - const integration = { - guildId: client.transformers.snowflake(payload.guild_id), - id: client.transformers.snowflake(payload.id), - name: payload.name, - type: payload.type, - enabled: payload.enabled, - syncing: payload.syncing, - roleId: payload.role_id - ? client.transformers.snowflake(payload.role_id) - : undefined, - enableEmoticons: payload.enable_emoticons, - expireBehavior: payload.expire_behavior, - expireGracePeriod: payload.expire_grace_period, - user: payload.user - ? client.transformers.user(client, payload.user) - : undefined, - account: { - id: client.transformers.snowflake(payload.account.id), - name: payload.account.name - }, - syncedAt: payload.synced_at ? Date.parse(payload.synced_at) : undefined, - subscriberCount: payload.subscriber_count, - revoked: payload.revoked, - application: payload.application - ? { - id: client.transformers.snowflake(payload.application.id), - name: payload.application.name, - icon: payload.application.icon - ? client.utils.iconHashToBigInt(payload.application.icon) - : undefined, - description: payload.application.description, - client: payload.application.bot - ? client.transformers.user(client, payload.application.bot) - : undefined - } - : undefined, - scopes: payload.scopes - } - - return integration as Optionalize -} - -export interface Integration extends ReturnType {} diff --git a/packages/old/client/src/transformers/interaction.ts b/packages/old/client/src/transformers/interaction.ts deleted file mode 100644 index 04b9e144a..000000000 --- a/packages/old/client/src/transformers/interaction.ts +++ /dev/null @@ -1,204 +0,0 @@ -import type { - ChannelTypes, - DiscordInteraction, - DiscordInteractionDataOption, - DiscordInteractionDataResolved, - Optionalize -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { Client } from '../client.js' -import type { Attachment } from './attachment.js' -import type { Member, User } from './member.js' -import type { Message } from './message.js' -import type { Role } from './role.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformInteraction ( - client: Client, - payload: DiscordInteraction -) { - const guildId = payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - const user = client.transformers.user( - client, - payload.member?.user ?? payload.user! - ) - - const interaction = { - // UNTRANSFORMED STUFF HERE - type: payload.type, - token: payload.token, - version: payload.version, - locale: payload.locale, - guildLocale: payload.guild_locale, - - // TRANSFORMED STUFF BELOW - guildId, - user, - id: client.transformers.snowflake(payload.id), - applicationId: client.transformers.snowflake(payload.application_id), - appPermissions: payload.app_permissions - ? client.transformers.snowflake(payload.app_permissions) - : undefined, - message: payload.message - ? client.transformers.message(client, payload.message) - : undefined, - channelId: payload.channel_id - ? client.transformers.snowflake(payload.channel_id) - : undefined, - member: - payload.member && guildId - ? client.transformers.member(client, payload.member, guildId, user.id) - : undefined, - - data: payload.data - ? { - componentType: payload.data.component_type, - customId: payload.data.custom_id, - components: payload.data.components?.map((component) => - client.transformers.component(client, component) - ), - values: payload.data.values, - id: payload.data.id - ? client.transformers.snowflake(payload.data.id) - : undefined, - name: payload.data.name, - resolved: payload.data.resolved - ? transformInteractionDataResolved( - client, - payload.data.resolved, - guildId - ) - : undefined, - options: payload.data.options?.map((opt) => - client.transformers.interactionDataOption(client, opt) - ), - targetId: payload.data.target_id - ? client.transformers.snowflake(payload.data.target_id) - : undefined, - guildId: payload.data.guild_id - ? client.transformers.snowflake(payload.data.guild_id) - : undefined - } - : undefined - } - - return interaction -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformInteractionDataOption ( - client: Client, - option: DiscordInteractionDataOption -) { - const opt = { - name: option.name, - type: option.type, - value: option.value, - options: option.options, - focused: option.focused - } - - return opt as Optionalize -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformInteractionDataResolved ( - client: Client, - resolved: DiscordInteractionDataResolved, - guildId?: bigint -) { - const transformed: { - messages?: Collection - users?: Collection - members?: Collection - roles?: Collection - channels?: Collection< - bigint, - { id: bigint, name: string, type: ChannelTypes, permissions: bigint } - > - attachments?: Collection - } = {} - - if (resolved.messages) { - transformed.messages = new Collection( - Object.entries(resolved.messages).map(([id, value]) => { - const message: Message = client.transformers.message(client, value) - return [message.id, message] - }) - ) - } - - if (resolved.users) { - transformed.users = new Collection( - Object.entries(resolved.users).map(([id, value]) => { - const user = client.transformers.user(client, value) - return [user.id, user] - }) - ) - } - - if (guildId && resolved.members) { - transformed.members = new Collection( - Object.entries(resolved.members).map(([id, value]) => { - const member: Member = client.transformers.member( - client, - value, - guildId, - client.transformers.snowflake(id) - ) - return [member.id, member] - }) - ) - } - - if (guildId && resolved.roles) { - transformed.roles = new Collection( - Object.entries(resolved.roles).map(([id, value]) => { - const role = client.transformers.role(client, { role: value, guildId }) - return [role.id, role] - }) - ) - } - - if (resolved.channels) { - transformed.channels = new Collection( - Object.entries(resolved.channels).map(([key, value]) => { - const id = client.transformers.snowflake(key) - const channel = value as { - id: string - name: string - type: ChannelTypes - permissions: string - } - return [ - id, - { - id, - name: channel.name, - type: channel.type, - permissions: client.transformers.snowflake(channel.permissions) - } - ] - }) - ) - } - - if (resolved.attachments) { - transformed.attachments = new Collection( - Object.entries(resolved.attachments).map(([key, value]) => { - const id = client.transformers.snowflake(key) - return [id, client.transformers.attachment(client, value)] - }) - ) - } - - return transformed -} - -export interface Interaction extends ReturnType {} -export interface InteractionDataResolved - extends ReturnType {} -export interface InteractionDataOption - extends ReturnType {} diff --git a/packages/old/client/src/transformers/invite.ts b/packages/old/client/src/transformers/invite.ts deleted file mode 100644 index 723a99c9b..000000000 --- a/packages/old/client/src/transformers/invite.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { DiscordInviteCreate, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformInvite (client: Client, invite: DiscordInviteCreate) { - const transformedInvite = { - /** The channel the invite is for */ - channelId: client.transformers.snowflake(invite.channel_id), - /** The unique invite code */ - code: invite.code, - /** The time at which the invite was created */ - createdAt: Date.parse(invite.created_at), - /** The guild of the invite */ - guildId: invite.guild_id - ? client.transformers.snowflake(invite.guild_id) - : undefined, - /** The user that created the invite */ - inviter: invite.inviter - ? client.transformers.user(client, invite.inviter) - : undefined, - /** How long the invite is valid for (in seconds) */ - maxAge: invite.max_age, - /** The maximum number of times the invite can be used */ - maxUses: invite.max_uses, - /** The type of target for this voice channel invite */ - targetType: invite.target_type, - /** The target user for this invite */ - targetUser: invite.target_user - ? client.transformers.user(client, invite.target_user) - : undefined, - /** The embedded application to open for this voice channel embedded application invite */ - targetApplication: invite.target_application - ? client.transformers.application( - client, - // @ts-expect-error should not break anything even though its partial. if it does blame wolf :) - invite.target_application - ) - : undefined, - /** Whether or not the invite is temporary (invited users will be kicked on disconnect unless they're assigned a role) */ - temporary: invite.temporary, - /** How many times the invite has been used (always will be 0) */ - uses: invite.uses - } - - return transformedInvite as Optionalize -} - -export interface Invite extends ReturnType {} diff --git a/packages/old/client/src/transformers/member.ts b/packages/old/client/src/transformers/member.ts deleted file mode 100644 index 675399da7..000000000 --- a/packages/old/client/src/transformers/member.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { - DiscordMember, - DiscordUser, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' -import { MemberToggles } from './toggles/member.js' -import { UserToggles } from './toggles/user.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformUser (client: Client, payload: DiscordUser) { - const user = { - id: client.transformers.snowflake(payload.id || ''), - username: payload.username, - discriminator: payload.discriminator, - avatar: payload.avatar - ? client.utils.iconHashToBigInt(payload.avatar) - : undefined, - locale: payload.locale, - email: payload.email ?? undefined, - flags: payload.flags, - premiumType: payload.premium_type, - publicFlags: payload.public_flags, - toggles: new UserToggles(payload) - } - - return user as Optionalize -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformMember ( - client: Client, - payload: DiscordMember, - guildId: bigint, - userId: bigint -) { - const member = { - id: userId, - guildId, - user: payload.user - ? client.transformers.user(client, payload.user) - : undefined, - nick: payload.nick ?? undefined, - roles: payload.roles.map((id) => client.transformers.snowflake(id)), - joinedAt: Date.parse(payload.joined_at), - premiumSince: payload.premium_since - ? Date.parse(payload.premium_since) - : undefined, - avatar: payload.avatar - ? client.utils.iconHashToBigInt(payload.avatar) - : undefined, - permissions: payload.permissions - ? client.transformers.snowflake(payload.permissions) - : undefined, - communicationDisabledUntil: payload.communication_disabled_until - ? Date.parse(payload.communication_disabled_until) - : undefined, - toggles: new MemberToggles(payload) - } - - return member as Optionalize -} - -export interface Member extends ReturnType {} -export interface User extends ReturnType {} diff --git a/packages/old/client/src/transformers/message.ts b/packages/old/client/src/transformers/message.ts deleted file mode 100644 index c739718ee..000000000 --- a/packages/old/client/src/transformers/message.ts +++ /dev/null @@ -1,157 +0,0 @@ -import type { DiscordMessage, Optionalize } from '@discordeno/types' -import { CHANNEL_MENTION_REGEX } from '@discordeno/utils' -import type { Client } from '../client.js' -import { MemberToggles } from './toggles/member.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformMessage (client: Client, payload: DiscordMessage) { - const guildId = payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined - const userId = client.transformers.snowflake(payload.author.id) - - const message = { - // UNTRANSFORMED STUFF HERE - content: payload.content ?? '', - isFromClient: payload.author.bot ?? false, - tag: `${payload.author.username}#${payload.author.discriminator}`, - timestamp: Date.parse(payload.timestamp), - editedTimestamp: payload.edited_timestamp - ? Date.parse(payload.edited_timestamp) - : undefined, - bitfield: - (payload.tts ? 1n : 0n) | - (payload.mention_everyone ? 2n : 0n) | - (payload.pinned ? 4n : 0n), - attachments: payload.attachments?.map((attachment) => - client.transformers.attachment(client, attachment) - ), - embeds: payload.embeds?.map((embed) => - client.transformers.embed(client, embed) - ), - reactions: payload.reactions?.map((reaction) => ({ - me: reaction.me, - count: reaction.count, - emoji: client.transformers.emoji(client, reaction.emoji) - })), - type: payload.type, - activity: payload.activity - ? { - type: payload.activity.type, - partyId: payload.activity.party_id - } - : undefined, - application: payload.application, - flags: payload.flags, - interaction: payload.interaction - ? { - id: client.transformers.snowflake(payload.interaction.id), - type: payload.interaction.type, - name: payload.interaction.name, - user: client.transformers.user(client, payload.interaction.user), - member: payload.interaction.member - ? { - id: userId, - guildId, - nick: payload.interaction.member.nick ?? undefined, - roles: payload.interaction.member.roles?.map((id) => - client.transformers.snowflake(id) - ), - joinedAt: payload.interaction.member.joined_at - ? Date.parse(payload.interaction.member.joined_at) - : undefined, - premiumSince: payload.interaction.member.premium_since - ? Date.parse(payload.interaction.member.premium_since) - : undefined, - toggles: new MemberToggles(payload.interaction.member), - avatar: payload.interaction.member.avatar - ? client.utils.iconHashToBigInt( - payload.interaction.member.avatar - ) - : undefined, - permissions: payload.interaction.member.permissions - ? client.transformers.snowflake( - payload.interaction.member.permissions - ) - : undefined, - communicationDisabledUntil: payload.interaction.member - .communication_disabled_until - ? Date.parse( - payload.interaction.member.communication_disabled_until - ) - : undefined - } - : undefined - } - : undefined, - thread: payload.thread - ? client.transformers.channel(client, { - channel: payload.thread, - guildId - }) - : undefined, - components: payload.components?.map((component) => - client.transformers.component(client, component) - ), - stickerItems: payload.sticker_items?.map((sticker) => ({ - id: client.transformers.snowflake(sticker.id), - name: sticker.name, - formatType: sticker.format_type - })), - - // TRANSFORMED STUFF BELOW - id: client.transformers.snowflake(payload.id), - guildId, - channelId: client.transformers.snowflake(payload.channel_id), - webhookId: payload.webhook_id - ? client.transformers.snowflake(payload.webhook_id) - : undefined, - authorId: userId, - applicationId: payload.application_id - ? client.transformers.snowflake(payload.application_id) - : undefined, - messageReference: payload.message_reference - ? { - messageId: payload.message_reference.message_id - ? client.transformers.snowflake( - payload.message_reference.message_id - ) - : undefined, - channelId: payload.message_reference.channel_id - ? client.transformers.snowflake( - payload.message_reference.channel_id - ) - : undefined, - guildId: payload.message_reference.guild_id - ? client.transformers.snowflake(payload.message_reference.guild_id) - : undefined - } - : undefined, - mentionedUserIds: payload.mentions - ? payload.mentions.map((m) => client.transformers.snowflake(m.id)) - : [], - mentionedRoleIds: payload.mention_roles - ? payload.mention_roles.map((id) => client.transformers.snowflake(id)) - : [], - mentionedChannelIds: [ - // Keep any ids tht discord sends - ...(payload.mention_channels ?? []).map((m) => - client.transformers.snowflake(m.id) - ), - // Add any other ids that can be validated in a channel mention format - ...(payload.content?.match(CHANNEL_MENTION_REGEX) ?? []).map((text) => - // converts the <#123> into 123 - client.transformers.snowflake(text.substring(2, text.length - 1)) - ) - ], - member: - payload.member && guildId - ? client.transformers.member(client, payload.member, guildId, userId) - : undefined, - nonce: payload.nonce - } - - return message as Optionalize -} - -export interface Message extends ReturnType {} diff --git a/packages/old/client/src/transformers/presence.ts b/packages/old/client/src/transformers/presence.ts deleted file mode 100644 index b0b22ba98..000000000 --- a/packages/old/client/src/transformers/presence.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { DiscordPresenceUpdate, Optionalize } from '@discordeno/types' -import { PresenceStatus } from '@discordeno/types' -import type { Client } from '../client.js' -import { UserToggles } from './toggles/user.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformPresence ( - client: Client, - payload: DiscordPresenceUpdate -) { - const presence = { - user: { - id: client.transformers.snowflake(payload.user.id || ''), - username: payload.user.username ?? undefined, - discriminator: payload.user.discriminator ?? undefined, - avatar: payload.user.avatar - ? client.utils.iconHashToBigInt(payload.user.avatar) - : undefined, - locale: payload.user.locale ?? undefined, - email: payload.user.email ?? undefined, - flags: payload.user.flags ?? undefined, - premiumType: payload.user.premium_type ?? undefined, - publicFlags: payload.user.public_flags ?? undefined, - toggles: new UserToggles(payload.user) - }, - guildId: client.transformers.snowflake(payload.guild_id), - status: PresenceStatus[payload.status], - activities: payload.activities.map((activity) => - client.transformers.activity(client, activity) - ), - desktop: payload.client_status.desktop, - mobile: payload.client_status.mobile, - web: payload.client_status.web - } - - return presence as Optionalize -} - -export interface PresenceUpdate extends ReturnType {} diff --git a/packages/old/client/src/transformers/reverse/activity.ts b/packages/old/client/src/transformers/reverse/activity.ts deleted file mode 100644 index 0c8ab5028..000000000 --- a/packages/old/client/src/transformers/reverse/activity.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { DiscordActivity } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Activity } from '../activity.js' - -export function transformActivityToDiscordActivity ( - client: Client, - payload: Activity -): DiscordActivity { - return { - name: payload.name, - type: payload.type, - url: payload.url ?? undefined, - created_at: payload.createdAt, - timestamps: { - start: payload.startedAt, - end: payload.endedAt - }, - application_id: payload.applicationId - ? client.utils.bigintToSnowflake(payload.applicationId) - : undefined, - details: payload.details ?? undefined, - state: payload.state ?? undefined, - emoji: payload.emoji - ? { - name: payload.emoji.name, - animated: payload.emoji.animated, - id: payload.emoji.id - ? client.utils.bigintToSnowflake(payload.emoji.id) - : undefined - } - : undefined, - party: { - id: payload.partyId, - size: - payload.partyCurrentSize && payload.partyMaxSize - ? [payload.partyCurrentSize, payload.partyMaxSize] - : undefined - }, - assets: { - large_image: payload.largeImage, - large_text: payload.largeText, - small_image: payload.largeImage, - small_text: payload.largeText - }, - secrets: { - join: payload.join, - spectate: payload.spectate, - match: payload.match - }, - instance: payload.instance, - flags: payload.flags, - buttons: payload.buttons - } -} diff --git a/packages/old/client/src/transformers/reverse/allowedMentions.ts b/packages/old/client/src/transformers/reverse/allowedMentions.ts deleted file mode 100644 index 4d84163f6..000000000 --- a/packages/old/client/src/transformers/reverse/allowedMentions.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { - AllowedMentions, - DiscordAllowedMentions -} from '@discordeno/types' -import type { Client } from '../../client.js' - -export function transformAllowedMentionsToDiscordAllowedMentions ( - client: Client, - mentions: AllowedMentions -): DiscordAllowedMentions { - return { - parse: mentions.parse, - replied_user: mentions.repliedUser, - users: mentions.users?.map((id) => id.toString()), - roles: mentions.roles?.map((id) => id.toString()) - } -} diff --git a/packages/old/client/src/transformers/reverse/application.ts b/packages/old/client/src/transformers/reverse/application.ts deleted file mode 100644 index 6614f947c..000000000 --- a/packages/old/client/src/transformers/reverse/application.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { DiscordApplication } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Application } from '../application.js' - -export function transformApplicationToDiscordApplication ( - client: Client, - payload: Application -): DiscordApplication { - return { - name: payload.name, - description: payload.description, - rpc_origins: payload.rpcOrigins, - bot_public: payload.botPublic, - bot_require_code_grant: payload.botRequireCodeGrant, - terms_of_service_url: payload.termsOfServiceUrl, - privacy_policy_url: payload.privacyPolicyUrl, - verify_key: payload.verifyKey, - primary_sku_id: payload.primarySkuId, - slug: payload.slug, - cover_image: payload.coverImage - ? client.utils.iconBigintToHash(payload.coverImage) - : undefined, - flags: payload.flags, - - id: client.utils.bigintToSnowflake(payload.id), - icon: payload.icon ? client.utils.iconBigintToHash(payload.icon) : null, - owner: payload.owner - ? client.transformers.reverse.user(client, payload.owner) - : undefined, - team: payload.team - ? client.transformers.reverse.team(client, payload.team) - : null, - guild_id: payload.guildId - ? client.utils.bigintToSnowflake(payload.guildId) - : undefined - } -} diff --git a/packages/old/client/src/transformers/reverse/applicationCommand.ts b/packages/old/client/src/transformers/reverse/applicationCommand.ts deleted file mode 100644 index cd7b2e7e9..000000000 --- a/packages/old/client/src/transformers/reverse/applicationCommand.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { DiscordApplicationCommand } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { ApplicationCommand } from '../applicationCommand.js' - -export function transformApplicationCommandToDiscordApplicationCommand ( - client: Client, - payload: ApplicationCommand -): DiscordApplicationCommand { - return { - id: client.transformers.reverse.snowflake(payload.id), - type: payload.type, - application_id: client.transformers.reverse.snowflake( - payload.applicationId - ), - guild_id: payload.guildId - ? client.transformers.reverse.snowflake(payload.guildId) - : undefined, - name: payload.name, - name_localizations: payload.nameLocalizations, - description: payload.description, - description_localizations: payload.descriptionLocalizations, - options: payload.options?.map((option) => - client.transformers.applicationCommandOption(client, option) - ), - default_member_permissions: payload.defaultMemberPermissions - ? client.transformers.reverse.snowflake(payload.defaultMemberPermissions) - : null, - dm_permission: payload.dmPermission, - version: payload.version - } -} diff --git a/packages/old/client/src/transformers/reverse/applicationCommandOption.ts b/packages/old/client/src/transformers/reverse/applicationCommandOption.ts deleted file mode 100644 index c0b3b58b8..000000000 --- a/packages/old/client/src/transformers/reverse/applicationCommandOption.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { DiscordApplicationCommandOption } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { ApplicationCommandOption } from '../applicationCommandOption.js' - -export function transformApplicationCommandOptionToDiscordApplicationCommandOption ( - client: Client, - payload: ApplicationCommandOption -): DiscordApplicationCommandOption { - return { - type: payload.type, - name: payload.name, - name_localizations: payload.nameLocalizations, - description: payload.description, - description_localizations: payload.descriptionLocalizations, - required: payload.required, - choices: payload.choices?.map((choice) => - client.transformers.reverse.applicationCommandOptionChoice(client, choice) - ), - options: payload.options?.map((option) => - client.transformers.reverse.applicationCommandOption(client, option) - ), - channel_types: payload.channelTypes, - min_value: payload.minValue, - max_value: payload.maxValue, - min_length: payload.minLength, - max_length: payload.maxLength, - autocomplete: payload.autocomplete - } -} diff --git a/packages/old/client/src/transformers/reverse/applicationCommandOptionChoice.ts b/packages/old/client/src/transformers/reverse/applicationCommandOptionChoice.ts deleted file mode 100644 index 030be7bcb..000000000 --- a/packages/old/client/src/transformers/reverse/applicationCommandOptionChoice.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { DiscordApplicationCommandOptionChoice } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { ApplicationCommandOptionChoice } from '../applicationCommandOptionChoice.js' - -export function transformApplicationCommandOptionChoiceToDiscordApplicationCommandOptionChoice ( - client: Client, - payload: ApplicationCommandOptionChoice -): DiscordApplicationCommandOptionChoice { - return { - name: payload.name, - name_localizations: payload.nameLocalizations, - value: payload.value - } -} diff --git a/packages/old/client/src/transformers/reverse/applicationCommandPermission.ts b/packages/old/client/src/transformers/reverse/applicationCommandPermission.ts deleted file mode 100644 index d88457f9f..000000000 --- a/packages/old/client/src/transformers/reverse/applicationCommandPermission.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { DiscordGuildApplicationCommandPermissions } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { ApplicationCommandPermission } from '../applicationCommandPermission.js' - -export function transformApplicationCommandPermissionToDiscordApplicationCommandPermission ( - client: Client, - payload: ApplicationCommandPermission -): DiscordGuildApplicationCommandPermissions { - return { - id: client.transformers.reverse.snowflake(payload.id), - application_id: client.transformers.reverse.snowflake( - payload.applicationId - ), - guild_id: client.transformers.reverse.snowflake(payload.guildId), - permissions: payload.permissions.map((perm) => ({ - id: client.transformers.reverse.snowflake(perm.id), - type: perm.type, - permission: perm.permission - })) - } -} diff --git a/packages/old/client/src/transformers/reverse/attachment.ts b/packages/old/client/src/transformers/reverse/attachment.ts deleted file mode 100644 index 46a5ac96e..000000000 --- a/packages/old/client/src/transformers/reverse/attachment.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { DiscordAttachment } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Attachment } from '../attachment.js' - -export function transformAttachmentToDiscordAttachment ( - client: Client, - payload: Attachment -): DiscordAttachment { - return { - id: client.transformers.reverse.snowflake(payload.id), - filename: payload.filename, - content_type: payload.contentType, - size: payload.size, - url: payload.url, - proxy_url: payload.proxyUrl, - height: payload.height, - width: payload.width, - ephemeral: payload.ephemeral, - description: payload.description - } -} diff --git a/packages/old/client/src/transformers/reverse/auditLogEntry.ts b/packages/old/client/src/transformers/reverse/auditLogEntry.ts deleted file mode 100644 index c3fddda74..000000000 --- a/packages/old/client/src/transformers/reverse/auditLogEntry.ts +++ /dev/null @@ -1,176 +0,0 @@ -import type { DiscordAuditLogEntry } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { AuditLogEntry } from '../auditLogEntry.js' - -export function transformAuditLogEntryToDiscordAuditLogEntry ( - client: Client, - payload: AuditLogEntry -): DiscordAuditLogEntry { - return { - id: client.transformers.reverse.snowflake(payload.id), - // @ts-expect-error: ts can't identify return type of switch case - changes: payload.changes?.map((change) => { - switch (change.key) { - case '$add': - case '$remove': - return { - key: change.key, - new_value: ( - change.new as Array<{ - id: bigint | undefined - name: string | undefined - }> - )?.map((val) => ({ - id: val.id - ? client.transformers.reverse.snowflake(val.id) - : undefined, - name: val.name - })), - old_value: ( - change.old as - | Array<{ - id: bigint | undefined - name: string | undefined - }> - | undefined - )?.map((val) => ({ - id: val?.id - ? client.transformers.reverse.snowflake(val.id) - : undefined, - name: val?.name - })) - } - case 'discovery_splash_hash': - case 'banner_hash': - case 'rules_channel_id': - case 'public_updates_channel_id': - case 'icon_hash': - case 'image_hash': - case 'splash_hash': - case 'owner_id': - case 'widget_channel_id': - case 'system_channel_id': - case 'application_id': - case 'permissions': - case 'allow': - case 'deny': - case 'channel_id': - case 'inviter_id': - case 'avatar_hash': - case 'id': - return { - key: change.key, - old_value: change.old - ? client.transformers.reverse.snowflake(change.old as bigint) - : '', - new_value: change.new - ? client.transformers.reverse.snowflake(change.new as bigint) - : '' - } - case 'name': - case 'description': - case 'preferred_locale': - case 'region': - case 'afk_channel_id': - case 'vanity_url_code': - case 'topic': - case 'code': - case 'nick': - case 'location': - return { - key: change.key, - old_value: change.old, - new_value: change.new - } - case 'afk_timeout': - case 'mfa_level': - case 'verification_level': - case 'explicit_content_filter': - case 'default_message_notifications': - case 'prune_delete_days': - case 'position': - case 'bitrate': - case 'rate_limit_per_user': - case 'color': - case 'max_uses': - case 'uses': - case 'max_age': - case 'expire_behavior': - case 'expire_grace_period': - case 'user_limit': - case 'privacy_level': - case 'entity_type': - case 'status': - return { - key: change.key, - old_value: change.old ? Number(change.old) : '', - new_value: change.new ? Number(change.new) : '' - } - case 'widget_enabled': - case 'nsfw': - case 'hoist': - case 'mentionable': - case 'temporary': - case 'deaf': - case 'mute': - case 'enable_emoticons': - return { - key: change.key, - old_value: change.old, - new_value: change.new - } - case 'permission_overwrites': - return { - key: change.key, - old_value: change.old, - new_value: change.new - } - default: - return { - key: change.key, - old_value: change.old, - new_value: change.new - } - } - }), - user_id: payload.userId - ? client.transformers.reverse.snowflake(payload.userId) - : null, - target_id: payload.targetId - ? client.transformers.reverse.snowflake(payload.targetId) - : null, - action_type: payload.actionType, - options: payload.options - ? { - // respect transformer as reference than type - auto_moderation_rule_name: payload.options.autoModerationRuleName, - auto_moderation_rule_trigger_type: - payload.options.autoModerationRuleTriggerType, - delete_member_days: - payload.options.deleteMemberDays === 0 - ? payload.options.deleteMemberDays.toString() - : '', - members_removed: - payload.options.membersRemoved === 0 - ? payload.options.membersRemoved.toString() - : '', - channel_id: payload.options.channelId - ? client.transformers.reverse.snowflake(payload.options.channelId) - : '', - message_id: payload.options.messageId - ? client.transformers.reverse.snowflake(payload.options.messageId) - : '', - count: - payload.options.count === 0 ? payload.options.count.toString() : '', - id: payload.options.id - ? client.transformers.reverse.snowflake(payload.options.id) - : '', - type: payload.options.type.toString(), - role_name: payload.options.roleName, - // make up value to make ts shut up, the orginal value do not persevere in transformer - application_id: '' - } - : undefined, - reason: payload.reason - } -} diff --git a/packages/old/client/src/transformers/reverse/component.ts b/packages/old/client/src/transformers/reverse/component.ts deleted file mode 100644 index 2ea77f9ad..000000000 --- a/packages/old/client/src/transformers/reverse/component.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { DiscordComponent } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Component } from '../component.js' - -export function transformComponentToDiscordComponent ( - client: Client, - payload: Component -): DiscordComponent { - return { - type: payload.type, - custom_id: payload.customId, - disabled: payload.disabled, - required: payload.required, - style: payload.style, - label: payload.label, - emoji: payload.emoji - ? { - id: payload.emoji.id?.toString(), - name: payload.emoji.name, - animated: payload.emoji.animated - } - : undefined, - url: payload.url, - options: payload.options?.map((option) => ({ - label: option.label, - value: option.value, - description: option.description, - emoji: option.emoji - ? { - id: option.emoji.id?.toString(), - name: option.emoji.name, - animated: option.emoji.animated - } - : undefined, - default: option.default - })), - placeholder: payload.placeholder, - min_values: payload.minValues, - max_values: payload.maxValues, - min_length: payload.minLength, - max_length: payload.maxLength, - value: payload.value, - components: payload.components?.map((component) => - client.transformers.reverse.component(client, component) - ) - } -} diff --git a/packages/old/client/src/transformers/reverse/createApplicationCommand.ts b/packages/old/client/src/transformers/reverse/createApplicationCommand.ts deleted file mode 100644 index ce9b3d68f..000000000 --- a/packages/old/client/src/transformers/reverse/createApplicationCommand.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { DiscordCreateApplicationCommand } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { CreateApplicationCommand } from '../../types.js' -import { isContextApplicationCommand } from '../../types.js' - -export function transformCreateApplicationCommandToDiscordCreateApplicationCommand ( - client: Client, - payload: CreateApplicationCommand -): DiscordCreateApplicationCommand { - if (isContextApplicationCommand(payload)) { - return { - name: payload.name, - name_localizations: payload.nameLocalizations, - description: '', - description_localizations: {}, - type: payload.type, - default_member_permissions: payload.defaultMemberPermissions - ? client.utils.calculateBits(payload.defaultMemberPermissions) - : null, - dm_permission: payload.dmPermission - } - } - - return { - name: payload.name, - name_localizations: payload.nameLocalizations, - description: payload.description, - description_localizations: payload.descriptionLocalizations, - type: payload.type, - options: payload.options?.map((option) => - client.transformers.reverse.applicationCommandOption(client, option) - ), - default_member_permissions: payload.defaultMemberPermissions - ? client.utils.calculateBits(payload.defaultMemberPermissions) - : null, - dm_permission: payload.dmPermission - } -} diff --git a/packages/old/client/src/transformers/reverse/embed.ts b/packages/old/client/src/transformers/reverse/embed.ts deleted file mode 100644 index 32969fdff..000000000 --- a/packages/old/client/src/transformers/reverse/embed.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { DiscordEmbed } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Embed } from '../embed.js' - -export function transformEmbedToDiscordEmbed ( - client: Client, - payload: Embed -): DiscordEmbed { - return { - title: payload.title, - type: payload.type, - description: payload.description, - url: payload.url, - timestamp: payload.timestamp - ? new Date(payload.timestamp).toISOString() - : undefined, - color: payload.color, - footer: payload.footer - ? { - text: payload.footer.text, - icon_url: payload.footer.iconUrl, - proxy_icon_url: payload.footer.proxyIconUrl - } - : undefined, - image: payload.image - ? { - url: payload.image.url, - proxy_url: payload.image.proxyUrl, - height: payload.image.height, - width: payload.image.width - } - : undefined, - thumbnail: payload.thumbnail - ? { - url: payload.thumbnail.url, - proxy_url: payload.thumbnail.proxyUrl, - height: payload.thumbnail.height, - width: payload.thumbnail.width - } - : undefined, - video: payload.video - ? { - url: payload.video.url, - proxy_url: payload.video.proxyUrl, - height: payload.video.height, - width: payload.video.width - } - : undefined, - provider: payload.provider, - author: payload.author - ? { - name: payload.author.name, - url: payload.author.url, - icon_url: payload.author.iconUrl, - proxy_icon_url: payload.author.proxyIconUrl - } - : undefined, - fields: payload.fields - } -} diff --git a/packages/old/client/src/transformers/reverse/emoji.ts b/packages/old/client/src/transformers/reverse/emoji.ts deleted file mode 100644 index e99f4a140..000000000 --- a/packages/old/client/src/transformers/reverse/emoji.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { DiscordEmoji } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Emoji } from '../emoji.js' - -export function transformEmojiToDiscordEmoji ( - client: Client, - payload: Emoji -): DiscordEmoji { - return { - id: payload.id - ? client.transformers.reverse.snowflake(payload.id) - : undefined, - name: payload.name, - roles: payload.roles?.map((id) => - client.transformers.reverse.snowflake(id) - ), - user: payload.user - ? client.transformers.reverse.user(client, payload.user) - : undefined, - require_colons: payload.toggles.requireColons, - managed: payload.toggles.managed, - animated: payload.toggles.animated, - available: payload.toggles.available - } -} diff --git a/packages/old/client/src/transformers/reverse/gatewayBot.ts b/packages/old/client/src/transformers/reverse/gatewayBot.ts deleted file mode 100644 index 6b478cda1..000000000 --- a/packages/old/client/src/transformers/reverse/gatewayBot.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { DiscordGetGatewayBot, GetGatewayBot } from '@discordeno/types' - -export function transformGatewayBotToDiscordGatewayBot ( - payload: GetGatewayBot -): DiscordGetGatewayBot { - return { - url: payload.url, - shards: payload.shards, - session_start_limit: { - total: payload.sessionStartLimit.total, - remaining: payload.sessionStartLimit.remaining, - reset_after: payload.sessionStartLimit.resetAfter, - max_concurrency: payload.sessionStartLimit.maxConcurrency - } - } -} diff --git a/packages/old/client/src/transformers/reverse/index.ts b/packages/old/client/src/transformers/reverse/index.ts deleted file mode 100644 index f6e9be5a3..000000000 --- a/packages/old/client/src/transformers/reverse/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -export * from './activity.js' -export * from './allowedMentions.js' -export * from './application.js' -export * from './applicationCommand.js' -export * from './applicationCommandOption.js' -export * from './applicationCommandOptionChoice.js' -export * from './applicationCommandPermission.js' -export * from './attachment.js' -export * from './auditLogEntry.js' -export * from './component.js' -export * from './createApplicationCommand.js' -export * from './embed.js' -export * from './emoji.js' -export * from './gatewayBot.js' -export * from './interactionResponse.js' -export * from './member.js' -export * from './presence.js' -export * from './team.js' -export * from './widgetSettings.js' diff --git a/packages/old/client/src/transformers/reverse/interactionResponse.ts b/packages/old/client/src/transformers/reverse/interactionResponse.ts deleted file mode 100644 index 3e3bc5bac..000000000 --- a/packages/old/client/src/transformers/reverse/interactionResponse.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { DiscordInteractionResponse } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { InteractionResponse } from '../../types.js' - -export function transformInteractionResponseToDiscordInteractionResponse ( - client: Client, - payload: InteractionResponse -): DiscordInteractionResponse { - // If no mentions are provided, force disable mentions - if (payload.data && payload.data?.allowedMentions == null) { - payload.data.allowedMentions = { parse: [] } - } - - return { - type: payload.type, - data: payload.data - ? { - tts: payload.data.tts, - title: payload.data.title, - flags: payload.data.flags, - content: payload.data.content, - choices: payload.data.choices?.map((choice) => - client.transformers.reverse.applicationCommandOptionChoice( - client, - choice - ) - ), - custom_id: payload.data.customId, - embeds: payload.data.embeds?.map((embed) => - client.transformers.reverse.embed(client, embed) - ), - allowed_mentions: client.transformers.reverse.allowedMentions( - client, - payload.data.allowedMentions - ), - components: payload.data.components?.map((component) => - client.transformers.reverse.component(client, component) - ) - } - : undefined - } -} diff --git a/packages/old/client/src/transformers/reverse/member.ts b/packages/old/client/src/transformers/reverse/member.ts deleted file mode 100644 index c6823f140..000000000 --- a/packages/old/client/src/transformers/reverse/member.ts +++ /dev/null @@ -1,52 +0,0 @@ -import type { DiscordMember, DiscordUser } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Member, User } from '../member.js' - -export function transformUserToDiscordUser ( - client: Client, - payload: User -): DiscordUser { - return { - id: client.utils.bigintToSnowflake(payload.id), - username: payload.username, - discriminator: payload.discriminator, - avatar: payload.avatar - ? client.utils.iconBigintToHash(payload.avatar) - : null, - locale: payload.locale, - email: payload.email ?? undefined, - flags: payload.flags, - premium_type: payload.premiumType, - public_flags: payload.publicFlags, - bot: payload.toggles.bot, - system: payload.toggles.system, - mfa_enabled: payload.toggles.mfaEnabled, - verified: payload.toggles.verified - } -} - -export function transformMemberToDiscordMember ( - client: Client, - payload: Member -): DiscordMember { - return { - nick: payload.nick ?? undefined, - roles: payload.roles.map((id) => client.utils.bigintToSnowflake(id)), - joined_at: new Date(payload.joinedAt).toISOString(), - premium_since: payload.premiumSince - ? new Date(payload.premiumSince).toISOString() - : undefined, - avatar: payload.avatar - ? client.utils.iconBigintToHash(payload.avatar) - : undefined, - permissions: payload.permissions - ? client.utils.bigintToSnowflake(payload.permissions) - : undefined, - communication_disabled_until: payload.communicationDisabledUntil - ? new Date(payload.communicationDisabledUntil).toISOString() - : undefined, - deaf: payload.toggles.deaf, - mute: payload.toggles.mute, - pending: payload.toggles.pending - } -} diff --git a/packages/old/client/src/transformers/reverse/presence.ts b/packages/old/client/src/transformers/reverse/presence.ts deleted file mode 100644 index f22b850d6..000000000 --- a/packages/old/client/src/transformers/reverse/presence.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { DiscordPresenceUpdate } from '@discordeno/types' -import { PresenceStatus } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { PresenceUpdate } from '../presence.js' - -export const reverseStatusTypes = Object.freeze({ - 0: 'online', - 1: 'dnd', - 2: 'idle', - 4: 'offline' -} as const) - -export function transformPresenceToDiscordPresence ( - client: Client, - payload: PresenceUpdate -): DiscordPresenceUpdate { - return { - user: client.transformers.reverse.user(client, payload.user), - guild_id: client.transformers.reverse.snowflake(payload.guildId), - // TODO: find better way - status: (PresenceStatus[payload.status] ?? 'offline') as 'offline', - activities: payload.activities.map((activity) => - client.transformers.reverse.activity(client, activity) - ), - client_status: { - desktop: payload.desktop, - mobile: payload.mobile, - web: payload.web - } - } -} diff --git a/packages/old/client/src/transformers/reverse/team.ts b/packages/old/client/src/transformers/reverse/team.ts deleted file mode 100644 index 1bd1336a5..000000000 --- a/packages/old/client/src/transformers/reverse/team.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { DiscordTeam } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { Team } from '../team.js' - -export function transformTeamToDiscordTeam ( - client: Client, - payload: Team -): DiscordTeam { - const id = client.utils.bigintToSnowflake(payload.id) - - return { - name: payload.name, - - id, - icon: payload.icon ? client.utils.iconBigintToHash(payload.icon) : null, - owner_user_id: client.utils.bigintToSnowflake(payload.ownerUserId), - members: payload.members.map((member) => ({ - membership_state: member.membershipState, - permissions: member.permissions, - team_id: id, - user: client.transformers.reverse.user(client, member.user) - })) - } -} diff --git a/packages/old/client/src/transformers/reverse/widgetSettings.ts b/packages/old/client/src/transformers/reverse/widgetSettings.ts deleted file mode 100644 index 576c566cd..000000000 --- a/packages/old/client/src/transformers/reverse/widgetSettings.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { DiscordGuildWidgetSettings } from '@discordeno/types' -import type { Client } from '../../client.js' -import type { GuildWidgetSettings } from '../widgetSettings.js' - -export function transformWidgetSettingsToDiscordWidgetSettings ( - client: Client, - payload: GuildWidgetSettings -): DiscordGuildWidgetSettings { - return { - enabled: payload.enabled, - channel_id: payload.channelId ?? null - } -} diff --git a/packages/old/client/src/transformers/role.ts b/packages/old/client/src/transformers/role.ts deleted file mode 100644 index e582584b0..000000000 --- a/packages/old/client/src/transformers/role.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { DiscordRole, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' -import { RoleToggles } from './toggles/role.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformRole ( - client: Client, - payload: { role: DiscordRole } & { guildId: bigint } -) { - const role = { - name: payload.role.name, - guildId: payload.guildId, - position: payload.role.position, - color: payload.role.color, - toggles: new RoleToggles(payload.role), - - id: client.transformers.snowflake(payload.role.id), - botId: payload.role.tags?.bot_id - ? client.transformers.snowflake(payload.role.tags.bot_id) - : undefined, - integrationId: payload.role.tags?.integration_id - ? client.transformers.snowflake(payload.role.tags.integration_id) - : undefined, - permissions: client.transformers.snowflake(payload.role.permissions), - icon: payload.role.icon - ? client.utils.iconHashToBigInt(payload.role.icon) - : undefined, - unicodeEmoji: payload.role.unicode_emoji - } - - return role as Optionalize -} - -export interface Role extends ReturnType {} diff --git a/packages/old/client/src/transformers/scheduledEvent.ts b/packages/old/client/src/transformers/scheduledEvent.ts deleted file mode 100644 index 10d1688b9..000000000 --- a/packages/old/client/src/transformers/scheduledEvent.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { DiscordScheduledEvent, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformScheduledEvent ( - client: Client, - payload: DiscordScheduledEvent -) { - const scheduledEvent = { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - channelId: payload.channel_id - ? client.transformers.snowflake(payload.channel_id) - : undefined, - creatorId: payload.creator_id - ? client.transformers.snowflake(payload.creator_id) - : 0n, - scheduledStartTime: Date.parse(payload.scheduled_start_time), - scheduledEndTime: payload.scheduled_end_time - ? Date.parse(payload.scheduled_end_time) - : undefined, - entityId: payload.entity_id - ? client.transformers.snowflake(payload.entity_id) - : undefined, - creator: payload.creator - ? client.transformers.user(client, payload.creator) - : undefined, - - name: payload.name, - description: payload.description, - privacyLevel: payload.privacy_level, - status: payload.status, - entityType: payload.entity_type, - userCount: payload.user_count ?? 0, - location: payload.entity_metadata?.location, - image: payload.image - ? client.utils.iconHashToBigInt(payload.image) - : undefined - } - - return scheduledEvent as Optionalize -} - -export interface ScheduledEvent - extends ReturnType {} diff --git a/packages/old/client/src/transformers/stageInstance.ts b/packages/old/client/src/transformers/stageInstance.ts deleted file mode 100644 index f3e62193a..000000000 --- a/packages/old/client/src/transformers/stageInstance.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { DiscordStageInstance, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformStageInstance ( - client: Client, - payload: DiscordStageInstance -) { - const stageInstance = { - id: client.transformers.snowflake(payload.id), - guildId: client.transformers.snowflake(payload.guild_id), - channelId: client.transformers.snowflake(payload.channel_id), - topic: payload.topic, - guildScheduledEventId: payload.guild_scheduled_event_id - ? client.transformers.snowflake(payload.guild_scheduled_event_id) - : undefined - } - - return stageInstance as Optionalize -} - -export interface StageInstance - extends ReturnType {} diff --git a/packages/old/client/src/transformers/sticker.ts b/packages/old/client/src/transformers/sticker.ts deleted file mode 100644 index 7781aa6ba..000000000 --- a/packages/old/client/src/transformers/sticker.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { - DiscordSticker, - DiscordStickerPack, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformSticker (client: Client, payload: DiscordSticker) { - const sticker = { - id: client.utils.snowflakeToBigint(payload.id), - packId: payload.pack_id - ? client.utils.snowflakeToBigint(payload.pack_id) - : undefined, - name: payload.name, - description: payload.description, - tags: payload.tags, - type: payload.type, - formatType: payload.format_type, - available: payload.available, - guildId: payload.guild_id - ? client.utils.snowflakeToBigint(payload.guild_id) - : undefined, - user: payload.user - ? client.transformers.user(client, payload.user) - : undefined, - sortValue: payload.sort_value - } - - return sticker as Optionalize -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformStickerPack ( - client: Client, - payload: DiscordStickerPack -) { - const pack = { - id: client.transformers.snowflake(payload.id), - stickers: payload.stickers.map((sticker) => - client.transformers.sticker(client, sticker) - ), - name: payload.name, - skuId: client.transformers.snowflake(payload.sku_id), - coverStickerId: payload.cover_sticker_id - ? client.transformers.snowflake(payload.cover_sticker_id) - : undefined, - description: payload.description, - bannerAssetId: payload.banner_asset_id - ? client.transformers.snowflake(payload.banner_asset_id) - : undefined - } - - return pack as Optionalize -} - -export interface Sticker extends ReturnType {} -export interface StickerPack extends ReturnType {} diff --git a/packages/old/client/src/transformers/team.ts b/packages/old/client/src/transformers/team.ts deleted file mode 100644 index 044edf1f8..000000000 --- a/packages/old/client/src/transformers/team.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { DiscordTeam, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformTeam (client: Client, payload: DiscordTeam) { - const id = client.transformers.snowflake(payload.id) - - const team = { - name: payload.name, - - id, - icon: payload.icon - ? client.utils.iconHashToBigInt(payload.icon) - : undefined, - ownerUserId: client.transformers.snowflake(payload.owner_user_id), - members: payload.members.map((member) => ({ - membershipState: member.membership_state, - permissions: member.permissions, - teamId: id, - user: client.transformers.user(client, member.user) - })) - } - - return team as Optionalize -} - -export interface Team extends ReturnType {} diff --git a/packages/old/client/src/transformers/template.ts b/packages/old/client/src/transformers/template.ts deleted file mode 100644 index fcfdea385..000000000 --- a/packages/old/client/src/transformers/template.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { DiscordTemplate, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformTemplate (client: Client, payload: DiscordTemplate) { - const template = { - code: payload.code, - name: payload.name, - description: payload.description, - usageCount: payload.usage_count, - creatorId: client.transformers.snowflake(payload.creator_id), - creator: client.transformers.user(client, payload.creator), - createdAt: Date.parse(payload.created_at), - updatedAt: Date.parse(payload.updated_at), - sourceGuildId: client.transformers.snowflake(payload.source_guild_id), - serializedSourceGuild: payload.serialized_source_guild, - isDirty: payload.is_dirty ?? undefined - } - - return template as Optionalize -} - -export interface Template extends ReturnType {} diff --git a/packages/old/client/src/transformers/threadMember.ts b/packages/old/client/src/transformers/threadMember.ts deleted file mode 100644 index ac53a9607..000000000 --- a/packages/old/client/src/transformers/threadMember.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { - DiscordThreadMember, - DiscordThreadMemberGuildCreate, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformThreadMember ( - client: Client, - payload: DiscordThreadMember -) { - const threadMember = { - id: payload.id ? client.transformers.snowflake(payload.id) : undefined, - userId: payload.user_id - ? client.transformers.snowflake(payload.user_id) - : undefined, - joinTimestamp: Date.parse(payload.join_timestamp), - flags: payload.flags - } - - return threadMember as Optionalize -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformThreadMemberGuildCreate ( - client: Client, - payload: DiscordThreadMemberGuildCreate -) { - const threadMember = { - joinTimestamp: Date.parse(payload.join_timestamp) - } - - return threadMember as Optionalize -} - -export interface ThreadMember - extends ReturnType {} -export interface ThreadMemberGuildCreate - extends ReturnType {} diff --git a/packages/old/client/src/transformers/toggles/ToggleBitfield.ts b/packages/old/client/src/transformers/toggles/ToggleBitfield.ts deleted file mode 100644 index 1463ade96..000000000 --- a/packages/old/client/src/transformers/toggles/ToggleBitfield.ts +++ /dev/null @@ -1,49 +0,0 @@ -export class ToggleBitfield { - bitfield = 0 - - constructor (bitfield?: number) { - if (bitfield) this.bitfield = bitfield - } - - /** Tests whether or not this bitfield has the permission requested. */ - contains (bits: number): boolean { - return Boolean(this.bitfield & bits) - } - - /** Adds some bits to the bitfield. */ - add (bits: number): this { - this.bitfield |= bits - return this - } - - /** Removes some bits from the bitfield. */ - remove (bits: number): this { - this.bitfield &= ~bits - return this - } -} - -export class ToggleBitfieldBigint { - bitfield = 0n - - constructor (bitfield?: bigint) { - if (bitfield) this.bitfield = bitfield - } - - /** Tests whether or not this bitfield has the permission requested. */ - contains (bits: bigint): boolean { - return Boolean(this.bitfield & bits) - } - - /** Adds some bits to the bitfield. */ - add (bits: bigint): this { - this.bitfield |= bits - return this - } - - /** Removes some bits from the bitfield. */ - remove (bits: bigint): this { - this.bitfield &= ~bits - return this - } -} diff --git a/packages/old/client/src/transformers/toggles/emoji.ts b/packages/old/client/src/transformers/toggles/emoji.ts deleted file mode 100644 index db4653670..000000000 --- a/packages/old/client/src/transformers/toggles/emoji.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { DiscordEmoji } from '@discordeno/types' -import { ToggleBitfield } from './ToggleBitfield.js' - -export const EmojiToggle = { - /** Whether this emoji must be wrapped in colons */ - requireColons: 1 << 0, - /** Whether this emoji is managed */ - managed: 1 << 1, - /** Whether this emoji is animated */ - animated: 1 << 2, - /** Whether this emoji can be used, may be false due to loss of Server Boosts */ - available: 1 << 3 -} - -export class EmojiToggles extends ToggleBitfield { - constructor (roleOrTogglesInt: DiscordEmoji | number) { - super() - - if (typeof roleOrTogglesInt === 'number') this.bitfield = roleOrTogglesInt - else { - const role = roleOrTogglesInt - - if (role.require_colons) this.add(EmojiToggle.requireColons) - if (role.managed) this.add(EmojiToggle.managed) - if (role.animated) this.add(EmojiToggle.animated) - if (role.available) this.add(EmojiToggle.available) - } - } - - /** Whether this emoji must be wrapped in colons */ - get requireColons (): boolean { - return this.has('requireColons') - } - - /** Whether this emoji is managed */ - get managed (): boolean { - return this.has('managed') - } - - /** Whether this emoji is animated */ - get animated (): boolean { - return this.has('animated') - } - - /** Whether this emoji can be used, may be false due to loss of Server Boosts */ - get available (): boolean { - return this.has('available') - } - - /** Checks whether or not the permissions exist in this */ - has (permissions: EmojiToggleKeys | EmojiToggleKeys[]): boolean { - if (!Array.isArray(permissions)) { - return super.contains(EmojiToggle[permissions]) - } - - return super.contains( - permissions.reduce((a, b) => (a |= EmojiToggle[b]), 0) - ) - } - - /** Lists all the toggles for the role and whether or not each is true or false. */ - list (): Record { - const json: Record = {} - for (const [key, value] of Object.entries(EmojiToggle)) { - json[key] = super.contains(value) - } - - return json - } -} - -export type EmojiToggleKeys = keyof typeof EmojiToggle diff --git a/packages/old/client/src/transformers/toggles/guild.ts b/packages/old/client/src/transformers/toggles/guild.ts deleted file mode 100644 index 72563c1cc..000000000 --- a/packages/old/client/src/transformers/toggles/guild.ts +++ /dev/null @@ -1,358 +0,0 @@ -import type { DiscordGuild } from '@discordeno/types' -import { GuildFeatures } from '@discordeno/types' -import { ToggleBitfieldBigint } from './ToggleBitfield.js' - -const featureNames = [ - 'inviteSplash', - 'vipRegions', - 'vanityUrl', - 'verified', - 'partnered', - 'community', - 'developerSupportServer', - 'news', - 'discoverable', - 'featurable', - 'animatedIcon', - 'banner', - 'welcomeScreenEnabled', - 'memberVerificationGateEnabled', - 'previewEnabled', - 'ticketedEventsEnabled', - 'monetizationEnabled', - 'moreStickers', - 'privateThreads', - 'roleIcons', - 'autoModeration', - 'invitesDisabled', - 'animatedBanner' -] - -export const GuildToggle = { - /** Whether the client is the owner of the guild */ - owner: 1n << 0n, - /** Whether the server widget is enabled */ - widgetEnabled: 1n << 1n, - /** Whether this is considered a large guild */ - large: 1n << 2n, - /** Whether this guild is unavailable due to an outage */ - unavailable: 1n << 3n, - /** Whether the guild has the boost progress bar enabled */ - premiumProgressBarEnabled: 1n << 4n, - - // GUILD FEATURES ARE BELOW THIS - - /** Whether the guild has access to set an invite splash background */ - inviteSplash: 1n << 5n, - /** Whether the guild has access to set 384 kbps bitrate in voice (previously VIP voice servers) */ - vipRegions: 1n << 6n, - /** Whether the guild has access to set a vanity URL */ - vanityUrl: 1n << 7n, - /** Whether the guild is verified */ - verified: 1n << 8n, - /** Whether the guild is partnered */ - partnered: 1n << 9n, - /** Whether the guild can enable welcome screen, Membership Screening, stage channels and discovery, and receives community updates */ - community: 1n << 10n, - /** Whether the guild has access to set an animated guild banner image */ - animatedBanner: 1n << 11n, - /** Whether the guild has access to create news channels */ - news: 1n << 12n, - /** Whether the guild is able to be discovered in the directory */ - discoverable: 1n << 13n, - /** Whether the guild is able to be featured in the directory */ - featurable: 1n << 15n, - /** Whether the guild has access to set an animated guild icon */ - animatedIcon: 1n << 16n, - /** Whether the guild has access to set a guild banner image */ - banner: 1n << 17n, - /** Whether the guild has enabled the welcome screen */ - welcomeScreenEnabled: 1n << 18n, - /** Whether the guild has enabled [Membership Screening](https://discord.com/developers/docs/resources/guild#membership-screening-object) */ - memberVerificationGateEnabled: 1n << 19n, - /** Whether the guild can be previewed before joining via Membership Screening or the directory */ - previewEnabled: 1n << 20n, - /** Whether the guild has enabled ticketed events */ - ticketedEventsEnabled: 1n << 21n, - /** Whether the guild has enabled monetization */ - monetizationEnabled: 1n << 22n, - /** Whether the guild has increased custom sticker slots */ - moreStickers: 1n << 23n, - /** Whether the guild has access to create private threads */ - privateThreads: 1n << 26n, - /** Whether the guild is able to set role icons */ - roleIcons: 1n << 27n, - /** Whether the guild has set up auto moderation rules */ - autoModeration: 1n << 28n, - /** Whether the guild has paused invites, preventing new users from joining */ - invitesDisabled: 1n << 29n, - /** Whether the guild has been set as a support server on the App Directory */ - developerSupportServer: 1n << 30n -} - -export class GuildToggles extends ToggleBitfieldBigint { - constructor (guildOrTogglesBigint: DiscordGuild | bigint) { - super() - - if (typeof guildOrTogglesBigint === 'bigint') { - this.bitfield = guildOrTogglesBigint - } else { - const guild = guildOrTogglesBigint - - if (guild.owner) this.add(GuildToggle.owner) - if (guild.widget_enabled) this.add(GuildToggle.widgetEnabled) - if (guild.large) this.add(GuildToggle.large) - if (guild.unavailable) this.add(GuildToggle.unavailable) - if (guild.premium_progress_bar_enabled) { - this.add(GuildToggle.premiumProgressBarEnabled) - } - - if (guild.features.includes(GuildFeatures.InviteSplash)) { - this.add(GuildToggle.inviteSplash) - } - if (guild.features.includes(GuildFeatures.VipRegions)) { - this.add(GuildToggle.vipRegions) - } - if (guild.features.includes(GuildFeatures.VanityUrl)) { - this.add(GuildToggle.vanityUrl) - } - if (guild.features.includes(GuildFeatures.Verified)) { - this.add(GuildToggle.verified) - } - if (guild.features.includes(GuildFeatures.Partnered)) { - this.add(GuildToggle.partnered) - } - if (guild.features.includes(GuildFeatures.Community)) { - this.add(GuildToggle.community) - } - if (guild.features.includes(GuildFeatures.DeveloperSupportServer)) { - this.add(GuildToggle.developerSupportServer) - } - if (guild.features.includes(GuildFeatures.AnimatedBanner)) { - this.add(GuildToggle.animatedBanner) - } - if (guild.features.includes(GuildFeatures.News)) { - this.add(GuildToggle.news) - } - if (guild.features.includes(GuildFeatures.Discoverable)) { - this.add(GuildToggle.discoverable) - } - if (guild.features.includes(GuildFeatures.Featurable)) { - this.add(GuildToggle.featurable) - } - if (guild.features.includes(GuildFeatures.AnimatedIcon)) { - this.add(GuildToggle.animatedIcon) - } - if (guild.features.includes(GuildFeatures.Banner)) { - this.add(GuildToggle.banner) - } - if (guild.features.includes(GuildFeatures.WelcomeScreenEnabled)) { - this.add(GuildToggle.welcomeScreenEnabled) - } - if ( - guild.features.includes(GuildFeatures.MemberVerificationGateEnabled) - ) { - this.add(GuildToggle.memberVerificationGateEnabled) - } - if (guild.features.includes(GuildFeatures.PreviewEnabled)) { - this.add(GuildToggle.previewEnabled) - } - if (guild.features.includes(GuildFeatures.TicketedEventsEnabled)) { - this.add(GuildToggle.ticketedEventsEnabled) - } - if (guild.features.includes(GuildFeatures.MonetizationEnabled)) { - this.add(GuildToggle.monetizationEnabled) - } - if (guild.features.includes(GuildFeatures.MoreStickers)) { - this.add(GuildToggle.moreStickers) - } - if (guild.features.includes(GuildFeatures.PrivateThreads)) { - this.add(GuildToggle.privateThreads) - } - if (guild.features.includes(GuildFeatures.RoleIcons)) { - this.add(GuildToggle.roleIcons) - } - if (guild.features.includes(GuildFeatures.AutoModeration)) { - this.add(GuildToggle.autoModeration) - } - if (guild.features.includes(GuildFeatures.InvitesDisabled)) { - this.add(GuildToggle.invitesDisabled) - } - } - } - - get features (): GuildToggleKeys[] { - const features: GuildToggleKeys[] = [] - for (const key of Object.keys(GuildToggle)) { - if (!featureNames.includes(key)) continue - if (!super.contains(GuildToggle[key as GuildToggleKeys])) continue - - features.push(key as GuildToggleKeys) - } - - return features - } - - /** Whether the client is the owner of the guild */ - get owner (): boolean { - return this.has('owner') - } - - /** Whether the server widget is enabled */ - get widgetEnabled (): boolean { - return this.has('widgetEnabled') - } - - /** Whether this is considered a large guild */ - get large (): boolean { - return this.has('large') - } - - /** Whether this guild is unavailable due to an outage */ - get unavailable (): boolean { - return this.has('unavailable') - } - - /** Whether the guild has the boost progress bar enabled */ - get premiumProgressBarEnabled (): boolean { - return this.has('premiumProgressBarEnabled') - } - - /** Whether the guild has access to set an invite splash background */ - get inviteSplash (): boolean { - return this.has('inviteSplash') - } - - /** Whether the guild has access to set 384 kbps bitrate in voice (previously VIP voice servers) */ - get vipRegions (): boolean { - return this.has('vipRegions') - } - - /** Whether the guild has access to set a vanity URL */ - get vanityUrl (): boolean { - return this.has('vanityUrl') - } - - /** Whether the guild is verified */ - get verified (): boolean { - return this.has('verified') - } - - /** Whether the guild is partnered */ - get partnered (): boolean { - return this.has('partnered') - } - - /** Whether the guild can enable welcome screen, Membership Screening, stage channels and discovery, and receives community updates */ - get community (): boolean { - return this.has('community') - } - - /** Whether the Guild has been set as a support server on the App Directory */ - get developerSupportServer (): boolean { - return this.has('developerSupportServer') - } - - /** Whether the guild has access to set an animated guild banner image */ - get animatedBanner (): boolean { - return this.has('animatedBanner') - } - - /** Whether the guild has access to create news channels */ - get news (): boolean { - return this.has('news') - } - - /** Whether the guild is able to be discovered in the directory */ - get discoverable (): boolean { - return this.has('discoverable') - } - - /** Whether the guild is able to be featured in the directory */ - get featurable (): boolean { - return this.has('featurable') - } - - /** Whether the guild has access to set an animated guild icon */ - get animatedIcon (): boolean { - return this.has('animatedIcon') - } - - /** Whether the guild has access to set a guild banner image */ - get banner (): boolean { - return this.has('banner') - } - - /** Whether the guild has enabled the welcome screen */ - get welcomeScreenEnabled (): boolean { - return this.has('welcomeScreenEnabled') - } - - /** Whether the guild has enabled [Membership Screening](https://discord.com/developers/docs/resources/guild#membership-screening-object) */ - get memberVerificationGateEnabled (): boolean { - return this.has('memberVerificationGateEnabled') - } - - /** Whether the guild can be previewed before joining via Membership Screening or the directory */ - get previewEnabled (): boolean { - return this.has('previewEnabled') - } - - /** Whether the guild has enabled ticketed events */ - get ticketedEventsEnabled (): boolean { - return this.has('ticketedEventsEnabled') - } - - /** Whether the guild has enabled monetization */ - get monetizationEnabled (): boolean { - return this.has('monetizationEnabled') - } - - /** Whether the guild has increased custom sticker slots */ - get moreStickers (): boolean { - return this.has('moreStickers') - } - - /** Whether the guild has access to create private threads */ - get privateThreads (): boolean { - return this.has('privateThreads') - } - - /** Whether the guild is able to set role icons */ - get roleIcons (): boolean { - return this.has('roleIcons') - } - - /** Whether the guild has set up auto moderation rules */ - get autoModeration (): boolean { - return this.has('autoModeration') - } - - /** Whether the guild has paused invites, preventing new users from joining */ - get invitesDisabled (): boolean { - return this.has('invitesDisabled') - } - - /** Checks whether or not the permissions exist in this */ - has (permissions: GuildToggleKeys | GuildToggleKeys[]): boolean { - if (!Array.isArray(permissions)) { - return super.contains(GuildToggle[permissions]) - } - - return super.contains( - permissions.reduce((a, b) => (a |= GuildToggle[b]), 0n) - ) - } - - /** Lists all the toggles for the role and whether or not each is true or false. */ - list (): Record { - const json: Record = {} - for (const [key, value] of Object.entries(GuildToggle)) { - json[key] = super.contains(value) - } - - return json - } -} - -export type GuildToggleKeys = keyof typeof GuildToggle diff --git a/packages/old/client/src/transformers/toggles/index.ts b/packages/old/client/src/transformers/toggles/index.ts deleted file mode 100644 index a5783110c..000000000 --- a/packages/old/client/src/transformers/toggles/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './emoji.js' -export * from './guild.js' -export * from './member.js' -export * from './role.js' -export * from './ToggleBitfield.js' -export * from './user.js' -export * from './voice.js' diff --git a/packages/old/client/src/transformers/toggles/member.ts b/packages/old/client/src/transformers/toggles/member.ts deleted file mode 100644 index 2ceb1694a..000000000 --- a/packages/old/client/src/transformers/toggles/member.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { DiscordMember } from '@discordeno/types' -import { ToggleBitfield } from './ToggleBitfield.js' - -export const MemberToggle = { - /** Whether the user is deafened in voice channels */ - deaf: 1 << 0, - /** Whether the user is muted in voice channels */ - mute: 1 << 1, - /** Whether the user has not yet passed the guild's Membership Screening requirements */ - pending: 1 << 2 -} - -export class MemberToggles extends ToggleBitfield { - constructor (memberOrTogglesInt: Partial | number) { - super() - - if (typeof memberOrTogglesInt === 'number') { - this.bitfield = memberOrTogglesInt - } else { - const member = memberOrTogglesInt - - if (member.deaf) this.add(MemberToggle.deaf) - if (member.mute) this.add(MemberToggle.mute) - if (member.pending) this.add(MemberToggle.pending) - } - } - - /** Whether the user belongs to an OAuth2 application */ - get deaf (): boolean { - return this.has('deaf') - } - - /** Whether the user is muted in voice channels */ - get mute (): boolean { - return this.has('mute') - } - - /** Whether the user has not yet passed the guild's Membership Screening requirements */ - get pending (): boolean { - return this.has('pending') - } - - /** Checks whether or not the permissions exist in this */ - has (permissions: MemberToggleKeys | MemberToggleKeys[]): boolean { - if (!Array.isArray(permissions)) { - return super.contains(MemberToggle[permissions]) - } - - return super.contains( - permissions.reduce((a, b) => (a |= MemberToggle[b]), 0) - ) - } - - /** Lists all the toggles for the role and whether or not each is true or false. */ - list (): Record { - const json: Record = {} - for (const [key, value] of Object.entries(MemberToggle)) { - json[key] = super.contains(value) - } - - return json - } -} - -export type MemberToggleKeys = keyof typeof MemberToggle diff --git a/packages/old/client/src/transformers/toggles/role.ts b/packages/old/client/src/transformers/toggles/role.ts deleted file mode 100644 index 126decc4a..000000000 --- a/packages/old/client/src/transformers/toggles/role.ts +++ /dev/null @@ -1,84 +0,0 @@ -import type { DiscordRole } from '@discordeno/types' -import { ToggleBitfield } from './ToggleBitfield.js' - -export const RoleToggle = { - /** If this role is showed separately in the user listing */ - hoist: 1 << 0, - /** Whether this role is managed by an integration */ - managed: 1 << 1, - /** Whether this role is mentionable */ - mentionable: 1 << 2, - /** Whether this is the guild's premium subscriber role */ - premiumSubscriber: 1 << 3, - /** Whether this role is a guild's linked role */ - guildConnections: 1 << 4 -} - -export class RoleToggles extends ToggleBitfield { - constructor (roleOrTogglesInt: DiscordRole | number) { - super() - - if (typeof roleOrTogglesInt === 'number') this.bitfield = roleOrTogglesInt - else { - const role = roleOrTogglesInt - - if (role.hoist) this.add(RoleToggle.hoist) - if (role.managed) this.add(RoleToggle.managed) - if (role.mentionable) this.add(RoleToggle.mentionable) - if (role.tags?.premium_subscriber === null) { - this.add(RoleToggle.premiumSubscriber) - } - if (role.tags?.guild_connections === null) { - this.add(RoleToggle.guildConnections) - } - } - } - - /** If this role is showed separately in the user listing */ - get hoist (): boolean { - return this.has('hoist') - } - - /** Whether this role is managed by an integration */ - get managed (): boolean { - return this.has('managed') - } - - /** Whether this role is mentionable */ - get mentionable (): boolean { - return this.has('mentionable') - } - - /** Whether this is the guilds premium subscriber role */ - get premiumSubscriber (): boolean { - return this.has('premiumSubscriber') - } - - /** Whether this role is a guild's linked role */ - get guildConnections (): boolean { - return this.has('guildConnections') - } - - /** Checks whether or not the permissions exist in this */ - has (permissions: RoleToggleKeys | RoleToggleKeys[]): boolean { - if (!Array.isArray(permissions)) { - return super.contains(RoleToggle[permissions]) - } - - return super.contains( - permissions.reduce((a, b) => (a |= RoleToggle[b]), 0) - ) - } - - /** Lists all the toggles for the role and whether or not each is true or false. */ - list (): Record { - const json: Record = {} - for (const [key, value] of Object.entries(RoleToggle)) { - json[key] = super.contains(value) - } - - return json - } -} - -export type RoleToggleKeys = keyof typeof RoleToggle diff --git a/packages/old/client/src/transformers/toggles/user.ts b/packages/old/client/src/transformers/toggles/user.ts deleted file mode 100644 index a177fa36c..000000000 --- a/packages/old/client/src/transformers/toggles/user.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { DiscordUser } from '@discordeno/types' -import { ToggleBitfield } from './ToggleBitfield.js' - -export const UserToggle = { - /** Whether the user belongs to an OAuth2 application */ - bot: 1 << 0, - /** Whether the user is an Official Discord System user (part of the urgent message system) */ - system: 1 << 1, - /** Whether the user has two factor enabled on their account */ - mfaEnabled: 1 << 2, - /** Whether the email on this account has been verified */ - verified: 1 << 3 -} - -export class UserToggles extends ToggleBitfield { - constructor (userOrTogglesInt: DiscordUser | number) { - super() - - if (typeof userOrTogglesInt === 'number') this.bitfield = userOrTogglesInt - else { - const user = userOrTogglesInt - - if (user.bot) this.add(UserToggle.bot) - if (user.system) this.add(UserToggle.system) - if (user.mfa_enabled) this.add(UserToggle.mfaEnabled) - if (user.verified) this.add(UserToggle.verified) - } - } - - /** Whether the user belongs to an OAuth2 application */ - get bot (): boolean { - return this.has('bot') - } - - /** Whether the user is an Official Discord System user (part of the urgent message system) */ - get system (): boolean { - return this.has('system') - } - - /** Whether the user has two factor enabled on their account */ - get mfaEnabled (): boolean { - return this.has('mfaEnabled') - } - - /** Whether the email on this account has been verified */ - get verified (): boolean { - return this.has('verified') - } - - /** Checks whether or not the permissions exist in this */ - has (permissions: UserToggleKeys | UserToggleKeys[]): boolean { - if (!Array.isArray(permissions)) { - return super.contains(UserToggle[permissions]) - } - - return super.contains( - permissions.reduce((a, b) => (a |= UserToggle[b]), 0) - ) - } - - /** Lists all the toggles for the role and whether or not each is true or false. */ - list (): Record { - const json: Record = {} - for (const [key, value] of Object.entries(UserToggle)) { - json[key] = super.contains(value) - } - - return json - } -} - -export type UserToggleKeys = keyof typeof UserToggle diff --git a/packages/old/client/src/transformers/toggles/voice.ts b/packages/old/client/src/transformers/toggles/voice.ts deleted file mode 100644 index aadfe5255..000000000 --- a/packages/old/client/src/transformers/toggles/voice.ts +++ /dev/null @@ -1,97 +0,0 @@ -import type { DiscordVoiceState } from '@discordeno/types' -import { ToggleBitfield } from './ToggleBitfield.js' - -export const VoiceStateToggle = { - /** Whether this user is deafened by the server */ - deaf: 1 << 0, - /** Whether this user is muted by the server */ - mute: 1 << 1, - /** Whether this user is locally deafened */ - selfDeaf: 1 << 2, - /** Whether this user is locally muted */ - selfMute: 1 << 3, - /** Whether this user is streaming using "Go Live" */ - selfStream: 1 << 4, - /** Whether this user's camera is enabled */ - selfVideo: 1 << 5, - /** Whether this user is muted by the current user */ - suppress: 1 << 6 -} - -export class VoiceStateToggles extends ToggleBitfield { - constructor (voiceOrTogglesInt: DiscordVoiceState | number) { - super() - - if (typeof voiceOrTogglesInt === 'number') { - this.bitfield = voiceOrTogglesInt - } else { - const voice = voiceOrTogglesInt - - if (voice.deaf) this.add(VoiceStateToggle.deaf) - if (voice.mute) this.add(VoiceStateToggle.mute) - if (voice.self_deaf) this.add(VoiceStateToggle.selfDeaf) - if (voice.self_mute) this.add(VoiceStateToggle.selfMute) - if (voice.self_stream) this.add(VoiceStateToggle.selfStream) - if (voice.self_video) this.add(VoiceStateToggle.selfVideo) - if (voice.suppress) this.add(VoiceStateToggle.suppress) - } - } - - /** Whether this user is deafened by the server */ - get deaf (): boolean { - return this.has('deaf') - } - - /** Whether this user is muted by the server */ - get mute (): boolean { - return this.has('mute') - } - - /** Whether this user is locally deafened */ - get selfDeaf (): boolean { - return this.has('selfDeaf') - } - - /** Whether this user is locally muted */ - get selfMute (): boolean { - return this.has('selfMute') - } - - /** Whether this user is streaming using "Go Live" */ - get selfStream (): boolean { - return this.has('selfStream') - } - - /** Whether this user's camera is enabled */ - get selfVideo (): boolean { - return this.has('selfVideo') - } - - /** Whether this user is muted by the current user */ - get suppress (): boolean { - return this.has('suppress') - } - - /** Checks whether or not the permissions exist in this */ - has (permissions: VoiceStateToggleKeys | VoiceStateToggleKeys[]): boolean { - if (!Array.isArray(permissions)) { - return super.contains(VoiceStateToggle[permissions]) - } - - return super.contains( - permissions.reduce((a, b) => (a |= VoiceStateToggle[b]), 0) - ) - } - - /** Lists all the toggles for the role and whether or not each is true or false. */ - list (): Record { - const json: Record = {} - for (const [key, value] of Object.entries(VoiceStateToggle)) { - json[key] = super.contains(value) - } - - return json - } -} - -export type VoiceStateToggleKeys = keyof typeof VoiceStateToggle diff --git a/packages/old/client/src/transformers/voiceRegion.ts b/packages/old/client/src/transformers/voiceRegion.ts deleted file mode 100644 index ce0454d7c..000000000 --- a/packages/old/client/src/transformers/voiceRegion.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { DiscordVoiceRegion, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// TODO: Rename `VoiceRegions` to `VoiceRegion`. - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformVoiceRegion ( - client: Client, - payload: DiscordVoiceRegion -) { - const voiceRegion = { - id: payload.id, - name: payload.name, - optimal: payload.optimal, - deprecated: payload.deprecated, - custom: payload.custom - } - - return voiceRegion as Optionalize -} - -export interface VoiceRegions extends ReturnType {} diff --git a/packages/old/client/src/transformers/voiceState.ts b/packages/old/client/src/transformers/voiceState.ts deleted file mode 100644 index c9745ae8b..000000000 --- a/packages/old/client/src/transformers/voiceState.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { DiscordVoiceState, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' -import { VoiceStateToggles } from './toggles/voice.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformVoiceState ( - client: Client, - payload: { voiceState: DiscordVoiceState } & { guildId: bigint } -) { - const voiceState = { - toggles: new VoiceStateToggles(payload.voiceState), - - requestToSpeakTimestamp: payload.voiceState.request_to_speak_timestamp - ? Date.parse(payload.voiceState.request_to_speak_timestamp) - : undefined, - sessionId: payload.voiceState.session_id, - - channelId: payload.voiceState.channel_id - ? client.transformers.snowflake(payload.voiceState.channel_id) - : undefined, - guildId: - payload.guildId || - (payload.voiceState.guild_id - ? client.transformers.snowflake(payload.voiceState.guild_id) - : 0n), - userId: payload.voiceState.user_id - ? client.transformers.snowflake(payload.voiceState.user_id) - : 0n - } - - return voiceState as Optionalize -} - -export interface VoiceState extends ReturnType {} diff --git a/packages/old/client/src/transformers/webhook.ts b/packages/old/client/src/transformers/webhook.ts deleted file mode 100644 index 3434075ac..000000000 --- a/packages/old/client/src/transformers/webhook.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { DiscordWebhook, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformWebhook (client: Client, payload: DiscordWebhook) { - const webhook = { - id: client.transformers.snowflake(payload.id), - type: payload.type, - guildId: payload.guild_id - ? client.transformers.snowflake(payload.guild_id) - : undefined, - channelId: payload.channel_id - ? client.transformers.snowflake(payload.channel_id) - : undefined, - user: payload.user - ? client.transformers.user(client, payload.user) - : undefined, - name: payload.name ?? '', - avatar: payload.avatar - ? client.utils.iconHashToBigInt(payload.avatar) - : undefined, - token: payload.token, - applicationId: payload.application_id - ? client.transformers.snowflake(payload.application_id) - : undefined, - sourceGuild: payload.source_guild - ? { - id: client.transformers.snowflake(payload.source_guild.id!), - name: payload.source_guild.name!, - icon: payload.source_guild.icon - ? client.utils.iconHashToBigInt(payload.source_guild.icon) - : undefined - } - : undefined, - /** The channel that this webhook is following (returned for Channel Follower Webhooks) */ - sourceChannel: payload.source_channel - ? { - id: client.transformers.snowflake(payload.source_channel.id!), - name: payload.source_channel.name ?? '' - } - : undefined, - /** The url used for executing the webhook (returned by the webhooks OAuth2 flow) */ - url: payload.url - } - - return webhook as Optionalize -} - -export interface Webhook extends ReturnType {} diff --git a/packages/old/client/src/transformers/welcomeScreen.ts b/packages/old/client/src/transformers/welcomeScreen.ts deleted file mode 100644 index dffdfd12c..000000000 --- a/packages/old/client/src/transformers/welcomeScreen.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { DiscordWelcomeScreen, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformWelcomeScreen ( - client: Client, - payload: DiscordWelcomeScreen -) { - const welcomeScreen = { - description: payload.description ?? undefined, - welcomeChannels: payload.welcome_channels.map((channel) => ({ - channelId: client.transformers.snowflake(channel.channel_id), - description: channel.description, - emojiId: channel.emoji_id - ? client.transformers.snowflake(channel.emoji_id) - : undefined, - emojiName: channel.emoji_name ?? undefined - })) - } - - return welcomeScreen as Optionalize -} - -export interface WelcomeScreen - extends ReturnType {} diff --git a/packages/old/client/src/transformers/widget.ts b/packages/old/client/src/transformers/widget.ts deleted file mode 100644 index 1746c3829..000000000 --- a/packages/old/client/src/transformers/widget.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { DiscordGuildWidget, Optionalize } from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformWidget (client: Client, payload: DiscordGuildWidget) { - const widget = { - id: client.transformers.snowflake(payload.id), - name: payload.name, - instant_invite: payload.instant_invite, - channels: payload.channels.map((channel) => ({ - id: client.transformers.snowflake(channel.id), - name: channel.name, - position: channel.position - })), - members: payload.members.map((member) => ({ - id: client.transformers.snowflake(member.id), - username: member.username, - discriminator: member.discriminator, - avatar: member.avatar - ? client.utils.iconHashToBigInt(member.avatar) - : undefined, - status: member.status, - avatarUrl: member.avatar_url - })), - presenceCount: payload.presence_count - } - - return widget as Optionalize -} - -export interface GuildWidget extends ReturnType {} diff --git a/packages/old/client/src/transformers/widgetSettings.ts b/packages/old/client/src/transformers/widgetSettings.ts deleted file mode 100644 index 0c240428d..000000000 --- a/packages/old/client/src/transformers/widgetSettings.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { - DiscordGuildWidgetSettings, - Optionalize -} from '@discordeno/types' -import type { Client } from '../client.js' - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function transformWidgetSettings ( - client: Client, - payload: DiscordGuildWidgetSettings -) { - const widget = { - enabled: payload.enabled, - channelId: payload.channel_id ?? undefined - } - - return widget as Optionalize -} - -export interface GuildWidgetSettings - extends ReturnType {} diff --git a/packages/old/client/src/types.ts b/packages/old/client/src/types.ts deleted file mode 100644 index dd5ceefa9..000000000 --- a/packages/old/client/src/types.ts +++ /dev/null @@ -1,93 +0,0 @@ -import type { - AllowedMentions, - FileContent, - InteractionResponseTypes, - Localization, - MessageComponents, - PermissionStrings -} from '@discordeno/types' -import { ApplicationCommandTypes } from '@discordeno/types' -import type { ApplicationCommandOption } from './transformers/applicationCommandOption.js' -import type { ApplicationCommandOptionChoice } from './transformers/applicationCommandOptionChoice.js' -import type { Embed } from './transformers/embed.js' - -export type CreateApplicationCommand = - | CreateSlashApplicationCommand - | CreateContextApplicationCommand - -/** https://discord.com/developers/docs/interactions/application-commands#endpoints-json-params */ -export interface CreateSlashApplicationCommand { - /** - * Name of command, 1-32 characters. - * `ApplicationCommandTypes.ChatInput` command names must match the following regex `^[-_\p{L}\p{N}\p{sc=Deva}\p{sc=Thai}]{1,32}$` with the unicode flag set. - * If there is a lowercase variant of any letters used, you must use those. - * Characters with no lowercase variants and/or uncased letters are still allowed. - * ApplicationCommandTypes.User` and `ApplicationCommandTypes.Message` commands may be mixed case and can include spaces. - */ - name: string - /** Localization object for the `name` field. Values follow the same restrictions as `name` */ - nameLocalizations?: Localization - /** 1-100 character description */ - description: string - /** Localization object for the `description` field. Values follow the same restrictions as `description` */ - descriptionLocalizations?: Localization - /** Type of command, defaults `ApplicationCommandTypes.ChatInput` if not set */ - type?: ApplicationCommandTypes - /** Parameters for the command */ - options?: ApplicationCommandOption[] - /** Set of permissions represented as a bit set */ - defaultMemberPermissions?: PermissionStrings[] - /** Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible. */ - dmPermission?: boolean -} - -/** https://discord.com/developers/docs/interactions/application-commands#endpoints-json-params */ -export interface CreateContextApplicationCommand - extends Omit< - CreateSlashApplicationCommand, - 'options' | 'description' | 'descriptionLocalizations' - > { - /** The type of the command */ - type: ApplicationCommandTypes.Message | ApplicationCommandTypes.User -} - -export function isContextApplicationCommand ( - command: CreateApplicationCommand -): command is CreateContextApplicationCommand { - return ( - command.type === ApplicationCommandTypes.Message || - command.type === ApplicationCommandTypes.User - ) -} - -/** https://discord.com/developers/docs/interactions/slash-commands#interaction-response-interactionapplicationcommandcallbackdata */ -export interface InteractionCallbackData { - /** The message contents (up to 2000 characters) */ - content?: string - /** True if this is a TTS message */ - tts?: boolean - /** Embedded `rich` content (up to 6000 characters) */ - embeds?: Embed[] - /** Allowed mentions for the message */ - allowedMentions?: AllowedMentions - /** The contents of the file being sent */ - file?: FileContent | FileContent[] - /** The customId you want to use for this modal response. */ - customId?: string - /** The title you want to use for this modal response. */ - title?: string - /** The components you would like to have sent in this message */ - components?: MessageComponents - /** Message flags combined as a bit field (only SUPPRESS_EMBEDS and EPHEMERAL can be set) */ - flags?: number - /** Autocomplete choices (max of 25 choices) */ - choices?: ApplicationCommandOptionChoice[] -} - -/** https://discord.com/developers/docs/interactions/slash-commands#interaction-response */ -export interface InteractionResponse { - /** The type of response */ - type: InteractionResponseTypes - /** An optional response message */ - data?: InteractionCallbackData -} diff --git a/packages/old/client/tests/handlers.spec.ts b/packages/old/client/tests/handlers.spec.ts deleted file mode 100644 index 81b18f50b..000000000 --- a/packages/old/client/tests/handlers.spec.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { expect } from 'chai' -import { describe, it } from 'mocha' -import fs from 'node:fs' -import { - createClientGatewayHandlers, - createEventHandlers -} from '../src/handlers.js' -import * as handlers from '../src/handlers/index.js' - -describe('Handler', () => { - it('src/transformers/index.ts should export every file in src/transformers', async () => { - const handlerNames = Object.keys(handlers) - const missingExportHandlers: string[] = [] - const dirs = [''] - for await (const dir of dirs) { - await Promise.all( - fs - .readdirSync(`src/handlers${dir}`) - .filter((file) => file !== 'index.ts') - .map(async (file) => { - if (!file.endsWith('.ts')) { - dirs.push(`${dir}/${file}`) - return - } - Object.keys(await import(`../src/handlers${dir}/${file}`)).forEach( - (transformer) => { - const index = handlerNames.indexOf(transformer) - if (index !== -1) { - handlerNames.splice(index, 1) - return - } - missingExportHandlers.push( - `File: src/handlers${dir}/${file}\nFunction: ${transformer}` - ) - } - ) - }) - ) - } - expect( - missingExportHandlers, - `\nThere is/are handlers(s) defined in src/handlers, but no export in src/handlers/index.js --------------------------------------------------------------------------------------------- -handlers found in src/handlers without export in src/handlers/index.js: - -${ - missingExportHandlers.length !== 0 - ? missingExportHandlers.join('\n\n') - : 'None' -} -` - ).to.empty - }) - - it('Event in createEventHandlers() should have matching gateway event in createClientGatewayHandlers()', () => { - const gatewayHandlers: Array = [] - Object.keys(createClientGatewayHandlers({})).forEach((gatewayHandler) => { - let name = gatewayHandler - if (gatewayHandler.startsWith('MESSAGE_REACTION')) { - name = name.slice('MESSAGE_'.length) - } - if (gatewayHandler.startsWith('GUILD_SCHEDULED_EVENT_')) { - name = name.slice('GUILD_'.length) - } - if (gatewayHandler.startsWith('GUILD_ROLE_')) { - name = name.slice('GUILD_'.length) - } - name = name - .split('_') - .map( - (name, index) => - name.slice(0, index === 0 ? 0 : 1) + - name.slice(index === 0 ? 0 : 1).toLowerCase() - ) - .join('') - gatewayHandlers.push(name) - }) - const missingGatewayEventEventHandlers: string[] = [] - Object.keys(createEventHandlers({})).forEach((eventHandler) => { - if (['debug', 'raw', 'dispatchRequirements'].includes(eventHandler)) { - return - } - if (eventHandler === 'botUpdate') eventHandler = 'userUpdate' - const index = gatewayHandlers.indexOf( - eventHandler.replace('automod', 'autoModeration') - ) - if (index !== -1) { - gatewayHandlers[index] = undefined - return - } - missingGatewayEventEventHandlers.push(eventHandler) - }) - const missingClientEventEventHandlers = gatewayHandlers - .map((gatewayHandler, index) => { - if (!gatewayHandler) return gatewayHandler - return Object.keys(createClientGatewayHandlers({}))[index] - }) - .filter((gatewayHandler) => gatewayHandler !== undefined) - .filter( - (gatewayHandler) => - ![ - 'GUILD_MEMBERS_CHUNK', - 'THREAD_LIST_SYNC', - 'GUILD_INTEGRATIONS_UPDATE' - ].includes(gatewayHandler as string) - ) - - const getErrorMessage = (): string => ` -The following event(s) in createEventHandlers() missing a matching gateway event in createClientGatewayHandlers(): - -${ - missingGatewayEventEventHandlers.length !== 0 - ? missingGatewayEventEventHandlers.join('\n') - : 'None' -} - --------------------------------------------------------------------------------------------- -The following gateway event(s) in createClientGatewayHandlers() missing a matching event in createEventHandlers(): - -${ - missingClientEventEventHandlers.length !== 0 - ? missingClientEventEventHandlers.join('\n') - : 'None' -} - -` - - expect(missingClientEventEventHandlers, getErrorMessage()).to.be.empty - expect(missingGatewayEventEventHandlers, getErrorMessage()).to.be.empty - }) -}) diff --git a/packages/old/client/tests/transformers.spec.ts b/packages/old/client/tests/transformers.spec.ts deleted file mode 100644 index ac40eb444..000000000 --- a/packages/old/client/tests/transformers.spec.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { expect } from 'chai' -import fs from 'node:fs' -import { createTransformers } from '../src/transformer.js' -// import { createTransformers } from '../src/transformer.js' -import { describe, it } from 'mocha' -import * as transformers from '../src/transformers/index.js' - -describe('Transformers', () => { - it('src/transformers/index.ts should export every file in src/transformers', async () => { - const transformerNames = Object.keys(transformers) - const missingExportTransformers: string[] = [] - const dirs = ['', '/reverse', '/toggles'] - for await (const dir of dirs) { - await Promise.all( - fs - .readdirSync(`src/transformers${dir}`) - .filter((file) => file.endsWith('.ts') && file !== 'index.ts') - .map(async (file) => { - Object.keys( - await import(`../src/transformers${dir}/${file}`) - ).forEach((transformer) => { - const index = transformerNames.indexOf(transformer) - if (index !== -1) { - transformerNames.splice(index, 1) - return - } - missingExportTransformers.push( - `File: src/transformers${dir}/${file}\nFunction: ${transformer}` - ) - }) - }) - ) - } - expect( - missingExportTransformers, - `\nThere is/are transformer(s) defined in src/transformers, but no export in src/transformers/index.js --------------------------------------------------------------------------------------------- -Transformers found in src/transformers without export in src/transformers/index.js: - -${ - missingExportTransformers.length !== 0 - ? missingExportTransformers.join('\n\n') - : 'None' -} -` - ).to.empty - }) - - it('Transformers in src/transformers should be in createTransformers()', async () => { - const transformerNames = Object.keys(createTransformers({})) - const reverseTransformerNames = Object.keys(createTransformers({}).reverse) - transformerNames.splice(transformerNames.indexOf('reverse'), 1) - transformerNames.splice(transformerNames.indexOf('snowflake'), 1) - reverseTransformerNames.splice( - reverseTransformerNames.indexOf('snowflake'), - 1 - ) - const missingExportTransformers: string[] = [] - await Promise.all( - fs - .readdirSync('src/transformers') - .filter((file) => file.endsWith('.ts') && file !== 'index.ts') - .map(async (file) => { - Object.keys(await import(`../src/transformers/${file}`)) - .filter((transformer) => transformer.startsWith('transform')) - .forEach((transformer) => { - const index = transformerNames.indexOf( - `${transformer.slice(9, 10).toLowerCase()}${transformer - .replace('AutoModeration', 'Automod') - .slice(10)}` - ) - if (index !== -1) { - transformerNames.splice(index, 1) - return - } - if (['transformThreadMemberGuildCreate'].includes(transformer)) { - return - } - missingExportTransformers.push( - `File: src/transformers/${file}\nFunction: ${transformer}` - ) - }) - }) - ) - await Promise.all( - fs - .readdirSync('src/transformers/reverse') - .filter((file) => file.endsWith('.ts') && file !== 'index.ts') - .map(async (file) => { - Object.keys(await import(`../src/transformers/reverse/${file}`)) - .filter((transformer) => transformer.startsWith('transform')) - .forEach((transformer) => { - const index = reverseTransformerNames.indexOf( - `${transformer.slice(9, 10).toLowerCase()}${transformer - .replace('AutoModeration', 'Automod') - .split('To')[0] - .slice(10)}` - ) - if (index !== -1) { - reverseTransformerNames.splice(index, 1) - return - } - missingExportTransformers.push( - `File: src/transformers/reverse/${file}\nFunction: ${transformer}` - ) - }) - }) - ) - expect( - missingExportTransformers, - `\nThere is/are transformer(s) defined in src/transformers, but not found in createTransformers() function at src/transformers.ts --------------------------------------------------------------------------------------------- -Transformers found in src/transformers without matching transformer in createTransformers(): - -${ - missingExportTransformers.length !== 0 - ? missingExportTransformers.join('\n\n') - : 'None' -} - --------------------------------------------------------------------------------------------- -Transformers found in createTransformers() without matching transformer: - -${transformerNames.length !== 0 ? transformerNames.join('\n') : 'None'} - --------------------------------------------------------------------------------------------- -Reverse transformers found in createTransformers() without matching transformer: - -${ - reverseTransformerNames.length !== 0 - ? reverseTransformerNames.join('\n') - : 'None' -} - -` - ).to.empty - }) -}) diff --git a/packages/old/client/tsconfig.json b/packages/old/client/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/client/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/client/tsconfig.test.json b/packages/old/client/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/client/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/constant/.c8rc.json b/packages/old/constant/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/constant/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/constant/.mocharc.json b/packages/old/constant/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/constant/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/constant/.swcrc b/packages/old/constant/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/constant/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/constant/package.json b/packages/old/constant/package.json deleted file mode 100644 index dbc06c829..000000000 --- a/packages/old/constant/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@discordeno/constant", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts'", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "dependencies": { - "@discordeno/utils": "18.0.0-alpha.1" - }, - "devDependencies": { - "@discordeno/types": "18.0.0-alpha.1", - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/chai": "^4", - "@types/mocha": "^10", - "@types/node": "^18.11.9", - "@types/sinon": "^10.0.13", - "c8": "^7.12.0", - "chai": "^4.3.7", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - } -} \ No newline at end of file diff --git a/packages/old/constant/src/index.ts b/packages/old/constant/src/index.ts deleted file mode 100644 index 045637c28..000000000 --- a/packages/old/constant/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './rest.js' diff --git a/packages/old/constant/src/rest.ts b/packages/old/constant/src/rest.ts deleted file mode 100644 index 56cb635dd..000000000 --- a/packages/old/constant/src/rest.ts +++ /dev/null @@ -1,647 +0,0 @@ -import type { - BigString, - GetBans, - GetGuildAuditLog, - GetGuildPruneCountQuery, - GetInvite, - GetMessagesOptions, - GetReactions, - GetScheduledEventUsers, - ListArchivedThreads, - ListGuildMembers -} from '@discordeno/types' -import { - baseEndpoints, - isGetMessagesAfter, - isGetMessagesAround, - isGetMessagesBefore, - isGetMessagesLimit -} from '@discordeno/utils' - -export const routes = { - GATEWAY_BOT: () => { - return '/gateway/bot' - }, - - // Automod Endpoints - AUTOMOD_RULES: (guildId: BigString) => { - return `/guilds/${guildId}/auto-moderation/rules` - }, - AUTOMOD_RULE: (guildId: BigString, ruleId: BigString) => { - return `/guilds/${guildId}/auto-moderation/rules/${ruleId}` - }, - - // Channel Endpoints - CHANNEL: (channelId: BigString) => { - return `/channels/${channelId}` - }, - CHANNEL_MESSAGE: (channelId: BigString, messageId: BigString) => { - return `/channels/${channelId}/messages/${messageId}` - }, - CHANNEL_MESSAGES: (channelId: BigString, options?: GetMessagesOptions) => { - let url = `/channels/${channelId}/messages?` - - if (options) { - if (isGetMessagesAfter(options) && options.after) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `after=${options.after}` - } - if (isGetMessagesBefore(options) && options.before) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&before=${options.before}` - } - if (isGetMessagesAround(options) && options.around) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&around=${options.around}` - } - if (isGetMessagesLimit(options) && options.limit) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&limit=${options.limit}` - } - } - - return url - }, - CHANNEL_PIN: (channelId: BigString, messageId: BigString) => { - return `/channels/${channelId}/pins/${messageId}` - }, - CHANNEL_PINS: (channelId: BigString) => { - return `/channels/${channelId}/pins` - }, - CHANNEL_BULK_DELETE: (channelId: BigString) => { - return `/channels/${channelId}/messages/bulk-delete` - }, - CHANNEL_INVITES: (channelId: BigString) => { - return `/channels/${channelId}/invites` - }, - CHANNEL_WEBHOOKS: (channelId: BigString) => { - return `/channels/${channelId}/webhooks` - }, - CHANNEL_MESSAGE_REACTION_ME: ( - channelId: BigString, - messageId: BigString, - emoji: string - ) => { - return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent( - emoji - )}/@me` - }, - CHANNEL_MESSAGE_REACTION_USER: ( - channelId: BigString, - messageId: BigString, - emoji: string, - userId: BigString - ) => { - return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent( - emoji - )}/${userId}` - }, - CHANNEL_MESSAGE_REACTIONS: (channelId: BigString, messageId: BigString) => { - return `/channels/${channelId}/messages/${messageId}/reactions` - }, - CHANNEL_MESSAGE_REACTION: ( - channelId: BigString, - messageId: BigString, - emoji: string, - options?: GetReactions - ) => { - let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent( - emoji - )}?` - - if (options) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.after) url += `after=${options.after}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit) url += `&limit=${options.limit}` - } - - return url - }, - CHANNEL_FOLLOW: (channelId: BigString) => { - return `/channels/${channelId}/followers` - }, - CHANNEL_MESSAGE_CROSSPOST: (channelId: BigString, messageId: BigString) => { - return `/channels/${channelId}/messages/${messageId}/crosspost` - }, - CHANNEL_OVERWRITE: (channelId: BigString, overwriteId: BigString) => { - return `/channels/${channelId}/permissions/${overwriteId}` - }, - // Bots SHALL NOT use this endpoint but they can - CHANNEL_TYPING: (channelId: BigString) => { - return `/channels/${channelId}/typing` - }, - - // Thread Endpoints - THREAD_START_PUBLIC: (channelId: BigString, messageId: BigString) => { - return `/channels/${channelId}/messages/${messageId}/threads` - }, - THREAD_START_PRIVATE: (channelId: BigString) => { - return `/channels/${channelId}/threads` - }, - THREAD_ACTIVE: (guildId: BigString) => { - return `/guilds/${guildId}/threads/active` - }, - THREAD_MEMBERS: (channelId: BigString) => { - return `/channels/${channelId}/thread-members` - }, - THREAD_ME: (channelId: BigString) => { - return `/channels/${channelId}/thread-members/@me` - }, - THREAD_USER: (channelId: BigString, userId: BigString) => { - return `/channels/${channelId}/thread-members/${userId}` - }, - THREAD_ARCHIVED: (channelId: BigString) => { - return `/channels/${channelId}/threads/archived` - }, - THREAD_ARCHIVED_PUBLIC: ( - channelId: BigString, - options?: ListArchivedThreads - ) => { - let url = `/channels/${channelId}/threads/archived/public?` - - if (options) { - if (options.before) { - url += `before=${new Date(options.before).toISOString()}` - } - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit) url += `&limit=${options.limit}` - } - - return url - }, - THREAD_ARCHIVED_PRIVATE: ( - channelId: BigString, - options?: ListArchivedThreads - ) => { - let url = `/channels/${channelId}/threads/archived/private?` - - if (options) { - if (options.before) { - url += `before=${new Date(options.before).toISOString()}` - } - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit) url += `&limit=${options.limit}` - } - - return url - }, - THREAD_ARCHIVED_PRIVATE_JOINED: ( - channelId: BigString, - options?: ListArchivedThreads - ) => { - let url = `/channels/${channelId}/users/@me/threads/archived/private?` - - if (options) { - if (options.before) { - url += `before=${new Date(options.before).toISOString()}` - } - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit) url += `&limit=${options.limit}` - } - - return url - }, - - // Thread -> Forum Endpoints - FORUM_START: (channelId: BigString) => { - return `/channels/${channelId}/threads?has_message=true` - }, - - // Guild Endpoints - GUILD: (guildId: BigString, withCounts?: boolean) => { - let url = `/guilds/${guildId}?` - - if (withCounts !== undefined) { - url += `with_counts=${withCounts.toString()}` - } - - return url - }, - GUILDS: () => { - return '/guilds' - }, - GUILD_AUDIT_LOGS: (guildId: BigString, options?: GetGuildAuditLog) => { - let url = `/guilds/${guildId}/audit-logs?` - - if (options) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.actionType) url += `action_type=${options.actionType}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.before) url += `&before=${options.before}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit) url += `&limit=${options.limit}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.userId) url += `&user_id=${options.userId}` - } - - return url - }, - GUILD_BAN: (guildId: BigString, userId: BigString) => { - return `/guilds/${guildId}/bans/${userId}` - }, - GUILD_BANS: (guildId: BigString, options?: GetBans) => { - let url = `/guilds/${guildId}/bans?` - - if (options) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit) url += `limit=${options.limit}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.after) url += `&after=${options.after}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.before) url += `&before=${options.before}` - } - - return url - }, - // TODO: move this away - GUILD_BANNER: (guildId: BigString, icon: string) => { - return `${baseEndpoints.CDN_URL}/banners/${guildId}/${icon}` - }, - GUILD_CHANNELS: (guildId: BigString) => { - return `/guilds/${guildId}/channels` - }, - GUILD_WIDGET: (guildId: BigString) => { - return `/guilds/${guildId}/widget` - }, - GUILD_WIDGET_JSON: (guildId: BigString) => { - return `/guilds/${guildId}/widget.json` - }, - GUILD_WIDGET_IMAGE: ( - guildId: BigString, - style?: 'shield' | 'banner1' | 'banner2' | 'banner3' | 'banner4' - ) => { - let url = `/guilds/${guildId}/widget.png?` - - if (style) { - url += `style=${style}` - } - - return url - }, - GUILD_EMOJI: (guildId: BigString, emojiId: BigString) => { - return `/guilds/${guildId}/emojis/${emojiId}` - }, - GUILD_EMOJIS: (guildId: BigString) => { - return `/guilds/${guildId}/emojis` - }, - // TODO: move this away - GUILD_ICON: (guildId: BigString, icon: string) => { - return `${baseEndpoints.CDN_URL}/icons/${guildId}/${icon}` - }, - GUILD_INTEGRATION: (guildId: BigString, integrationId: BigString) => { - return `/guilds/${guildId}/integrations/${integrationId}` - }, - GUILD_INTEGRATION_SYNC: (guildId: BigString, integrationId: BigString) => { - return `/guilds/${guildId}/integrations/${integrationId}/sync` - }, - GUILD_INTEGRATIONS: (guildId: BigString) => { - return `/guilds/${guildId}/integrations?include_applications=true` - }, - GUILD_INVITES: (guildId: BigString) => { - return `/guilds/${guildId}/invites` - }, - GUILD_LEAVE: (guildId: BigString) => { - return `/users/@me/guilds/${guildId}` - }, - GUILD_MEMBER: (guildId: BigString, userId: BigString) => { - return `/guilds/${guildId}/members/${userId}` - }, - GUILD_MEMBERS: (guildId: BigString, options?: ListGuildMembers) => { - let url = `/guilds/${guildId}/members?` - - if (options !== undefined) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit) url += `limit=${options.limit}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.after) url += `&after=${options.after}` - } - - return url - }, - GUILD_MEMBER_ROLE: ( - guildId: BigString, - memberId: BigString, - roleId: BigString - ) => { - return `/guilds/${guildId}/members/${memberId}/roles/${roleId}` - }, - GUILD_MEMBERS_SEARCH: ( - guildId: BigString, - query: string, - options?: { limit?: number } - ) => { - let url = `/guilds/${guildId}/members/search?query=${encodeURIComponent( - query - )}` - - if (options) { - if (options.limit !== undefined) url += `&limit=${options.limit}` - } - - return url - }, - GUILD_PRUNE: (guildId: BigString, options?: GetGuildPruneCountQuery) => { - let url = `/guilds/${guildId}/prune?` - - if (options) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.days) url += `days=${options.days}` - if (Array.isArray(options.includeRoles)) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&include_roles=${options.includeRoles.join(',')}` - } else if (options.includeRoles) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&include_roles=${options.includeRoles}` - } - } - - return url - }, - GUILD_REGIONS: (guildId: BigString) => { - return `/guilds/${guildId}/regions` - }, - GUILD_ROLE: (guildId: BigString, roleId: BigString) => { - return `/guilds/${guildId}/roles/${roleId}` - }, - GUILD_ROLES: (guildId: BigString) => { - return `/guilds/${guildId}/roles` - }, - // TODO: move this away - GUILD_SPLASH: (guildId: BigString, icon: string) => { - return `${baseEndpoints.CDN_URL}/splashes/${guildId}/${icon}` - }, - GUILD_VANITY_URL: (guildId: BigString) => { - return `/guilds/${guildId}/vanity-url` - }, - GUILD_WEBHOOKS: (guildId: BigString) => { - return `/guilds/${guildId}/webhooks` - }, - TEMPLATE: (code: string) => { - return `/guilds/templates/${code}` - }, - GUILD_TEMPLATE: (guildId: BigString, code: string) => { - return `/guilds/${guildId}/templates/${code}` - }, - GUILD_TEMPLATES: (guildId: BigString) => { - return `/guilds/${guildId}/templates` - }, - GUILD_PREVIEW: (guildId: BigString) => { - return `/guilds/${guildId}/preview` - }, - UPDATE_VOICE_STATE: (guildId: BigString, userId?: BigString) => { - return `/guilds/${guildId}/voice-states/${userId ?? '@me'}` - }, - GUILD_WELCOME_SCREEN: (guildId: BigString) => { - return `/guilds/${guildId}/welcome-screen` - }, - GUILD_SCHEDULED_EVENTS: (guildId: BigString, withUserCount?: boolean) => { - let url = `/guilds/${guildId}/scheduled-events?` - - if (withUserCount !== undefined) { - url += `with_user_count=${withUserCount.toString()}` - } - return url - }, - GUILD_SCHEDULED_EVENT: ( - guildId: BigString, - eventId: BigString, - withUserCount?: boolean - ) => { - let url = `/guilds/${guildId}/scheduled-events/${eventId}` - - if (withUserCount !== undefined) { - url += `with_user_count=${withUserCount.toString()}` - } - - return url - }, - GUILD_SCHEDULED_EVENT_USERS: ( - guildId: BigString, - eventId: BigString, - options?: GetScheduledEventUsers - ) => { - let url = `/guilds/${guildId}/scheduled-events/${eventId}/users?` - - if (options) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.limit !== undefined) url += `limit=${options.limit}` - if (options.withMember !== undefined) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&with_member=${options.withMember.toString()}` - } - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.after !== undefined) url += `&after=${options.after}` - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - if (options.before !== undefined) url += `&before=${options.before}` - } - - return url - }, - GUILD_MFA_LEVEL: (guildId: BigString) => `/guilds/${guildId}/mfa`, - // Voice - VOICE_REGIONS: () => { - return '/voice/regions' - }, - - INVITE: (inviteCode: string, options?: GetInvite) => { - let url = `/invites/${inviteCode}?` - - if (options) { - if (options.withCounts !== undefined) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `with_counts=${options.withCounts.toString()}` - } - if (options.withExpiration !== undefined) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&with_expiration=${options.withExpiration.toString()}` - } - if (options.scheduledEventId) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - url += `&guild_scheduled_event_id=${options.scheduledEventId}` - } - } - - return url - }, - - WEBHOOK: ( - webhookId: BigString, - token: string, - options?: { wait?: boolean, threadId?: BigString } - ) => { - let url = `/webhooks/${webhookId}/${token}?` - - if (options) { - if (options?.wait !== undefined) url += `wait=${options.wait.toString()}` - if (options.threadId) url += `thread_id=${options.threadId}` - } - - return url - }, - WEBHOOK_ID: (webhookId: BigString) => { - return `/webhooks/${webhookId}` - }, - WEBHOOK_MESSAGE: ( - webhookId: BigString, - token: string, - messageId: BigString, - options?: { threadId?: BigString } - ) => { - let url = `/webhooks/${webhookId}/${token}/messages/${messageId}?` - - if (options) { - if (options.threadId) url += `thread_id=${options.threadId}` - } - - return url - }, - WEBHOOK_MESSAGE_ORIGINAL: ( - webhookId: BigString, - token: string, - options?: { threadId?: BigString } - ) => { - let url = `/webhooks/${webhookId}/${token}/messages/@original?` - - if (options) { - if (options.threadId) url += `thread_id=${options.threadId}` - } - - return url - }, - WEBHOOK_SLACK: (webhookId: BigString, token: string) => { - return `/webhooks/${webhookId}/${token}/slack` - }, - WEBHOOK_GITHUB: (webhookId: BigString, token: string) => { - return `/webhooks/${webhookId}/${token}/github` - }, - - // Application Endpoints - COMMANDS: (applicationId: BigString) => { - return `/applications/${applicationId}/commands` - }, - COMMANDS_GUILD: (applicationId: BigString, guildId: BigString) => { - return `/applications/${applicationId}/guilds/${guildId}/commands` - }, - COMMANDS_PERMISSIONS: (applicationId: BigString, guildId: BigString) => { - return `/applications/${applicationId}/guilds/${guildId}/commands/permissions` - }, - COMMANDS_PERMISSION: ( - applicationId: BigString, - guildId: BigString, - commandId: BigString - ) => { - return `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}/permissions` - }, - COMMANDS_ID: ( - applicationId: BigString, - commandId: BigString, - withLocalizations?: boolean - ) => { - let url = `/applications/${applicationId}/commands/${commandId}?` - - if (withLocalizations !== undefined) { - url += `withLocalizations=${withLocalizations.toString()}` - } - - return url - }, - COMMANDS_GUILD_ID: ( - applicationId: BigString, - guildId: BigString, - commandId: BigString, - withLocalizations?: boolean - ) => { - let url = `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}?` - - if (withLocalizations !== undefined) { - url += `with_localizations=${withLocalizations.toString()}` - } - - return url - }, - - // Interaction Endpoints - INTERACTION_ID_TOKEN: (interactionId: BigString, token: string) => { - return `/interactions/${interactionId}/${token}/callback` - }, - INTERACTION_ORIGINAL_ID_TOKEN: (interactionId: BigString, token: string) => { - return `/webhooks/${interactionId}/${token}/messages/@original` - }, - INTERACTION_ID_TOKEN_MESSAGE_ID: ( - applicationId: BigString, - token: string, - messageId: BigString - ) => { - return `/webhooks/${applicationId}/${token}/messages/${messageId}` - }, - - // User endpoints - USER: (userId: BigString) => { - return `/users/${userId}` - }, - USER_BOT: () => { - return '/users/@me' - }, - USER_GUILDS: () => { - return '/users/@me/guilds' - }, - // TODO: move this away - USER_AVATAR: (userId: BigString, icon: string) => { - return `${baseEndpoints.CDN_URL}/avatars/${userId}/${icon}` - }, - // TODO: move this away - USER_DEFAULT_AVATAR: (icon: number) => { - return `${baseEndpoints.CDN_URL}/embed/avatars/${icon}.png` - }, - USER_DM: () => { - return '/users/@me/channels' - }, - USER_CONNECTIONS: () => { - return '/users/@me/connections' - }, - USER_NICK: (guildId: BigString) => { - return `/guilds/${guildId}/members/@me` - }, - - // Discovery Endpoints - DISCOVERY_CATEGORIES: () => { - return '/discovery/categories' - }, - DISCOVERY_VALID_TERM: (term: string) => { - return `/discovery/valid-term?term=${term}` - }, - DISCOVERY_METADATA: (guildId: BigString) => { - return `/guilds/${guildId}/discovery-metadata` - }, - DISCOVERY_SUBCATEGORY: (guildId: BigString, categoryId: number) => { - return `/guilds/${guildId}/discovery-categories/${categoryId}` - }, - - // OAuth2 - OAUTH2_APPLICATION: () => { - return 'oauth2/applications/@me' - }, - - // Stage instances - STAGE_INSTANCES: () => { - return '/stage-instances' - }, - STAGE_INSTANCE: (channelId: BigString) => { - return `/stage-instances/${channelId}` - }, - - // Stickers Endpoints - NITRO_STICKER_PACKS: () => { - return '/sticker-packs' - }, - STICKER: (stickerId: BigString) => { - return `/stickers/${stickerId}` - }, - GUILD_STICKERS: (guildId: BigString) => { - return `/guilds/${guildId}/stickers` - }, - GUILD_STICKER: (guildId: BigString, stickerId: BigString) => { - return `/guilds/${guildId}/stickers/${stickerId}` - } -} diff --git a/packages/old/constant/tests/empty.spec.ts b/packages/old/constant/tests/empty.spec.ts deleted file mode 100644 index 336ce12bb..000000000 --- a/packages/old/constant/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/packages/old/constant/tsconfig.json b/packages/old/constant/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/constant/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/constant/tsconfig.test.json b/packages/old/constant/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/constant/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/discordeno/.c8rc.json b/packages/old/discordeno/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/discordeno/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/discordeno/.mocharc.json b/packages/old/discordeno/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/discordeno/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/discordeno/.swcrc b/packages/old/discordeno/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/discordeno/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/discordeno/oldTest/channels/createCategory.test.ts b/packages/old/discordeno/oldTest/channels/createCategory.test.ts deleted file mode 100644 index 8e28bccb2..000000000 --- a/packages/old/discordeno/oldTest/channels/createCategory.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new category channel', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'Discordeno-test', - type: ChannelTypes.GuildCategory - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildCategory) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, undefined) - assertEquals(channel.userLimit, undefined) - assertEquals(channel.rateLimitPerUser, undefined) - assertEquals(channel.nsfw, undefined) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createNews.test.ts b/packages/old/discordeno/oldTest/channels/createNews.test.ts deleted file mode 100644 index cd6047422..000000000 --- a/packages/old/discordeno/oldTest/channels/createNews.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new news channel', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'Discordeno-test', - type: ChannelTypes.GuildAnnouncement - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildAnnouncement) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, undefined) - assertEquals(channel.userLimit, undefined) - assertEquals(channel.rateLimitPerUser, 0) - assertEquals(channel.nsfw, false) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createText.test.ts b/packages/old/discordeno/oldTest/channels/createText.test.ts deleted file mode 100644 index 877518a94..000000000 --- a/packages/old/discordeno/oldTest/channels/createText.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new text channel', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'Discordeno-test' }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildText) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, undefined) - assertEquals(channel.userLimit, undefined) - assertEquals(channel.rateLimitPerUser, 0) - assertEquals(channel.nsfw, false) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createTextWithNsfw.test.ts b/packages/old/discordeno/oldTest/channels/createTextWithNsfw.test.ts deleted file mode 100644 index 748daff4d..000000000 --- a/packages/old/discordeno/oldTest/channels/createTextWithNsfw.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new text channel with NSFW', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'discordeno-test', - nsfw: true - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildText) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, undefined) - assertEquals(channel.userLimit, undefined) - assertEquals(channel.rateLimitPerUser, 0) - assertEquals(channel.nsfw, true) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createTextWithPerms.test.ts b/packages/old/discordeno/oldTest/channels/createTextWithPerms.test.ts deleted file mode 100644 index 554871e36..000000000 --- a/packages/old/discordeno/oldTest/channels/createTextWithPerms.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { ChannelTypes, OverwriteTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new text channel with permission overwrites', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'discordeno-test', - permissionOverwrites: [ - { - id: bot.id, - type: OverwriteTypes.Member, - allow: ['VIEW_CHANNEL'], - deny: [] - } - ] - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildText) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, undefined) - assertEquals(channel.userLimit, undefined) - assertEquals(channel.rateLimitPerUser, 0) - assertEquals(channel.nsfw, false) - assertEquals(channel.permissionOverwrites.length, 1) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createTextWithRateLimit.test.ts b/packages/old/discordeno/oldTest/channels/createTextWithRateLimit.test.ts deleted file mode 100644 index 12fd2c24e..000000000 --- a/packages/old/discordeno/oldTest/channels/createTextWithRateLimit.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new text channel with a rate limit per user', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'discordeno-test', - rateLimitPerUser: 2423 - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildText) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, undefined) - assertEquals(channel.userLimit, undefined) - assertEquals(channel.rateLimitPerUser, 2423) - assertEquals(channel.nsfw, false) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createVoice.test.ts b/packages/old/discordeno/oldTest/channels/createVoice.test.ts deleted file mode 100644 index 498c828a7..000000000 --- a/packages/old/discordeno/oldTest/channels/createVoice.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new voice channel', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'Discordeno-test', - type: ChannelTypes.GuildVoice - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildVoice) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, 64000) - assertEquals(channel.userLimit, 0) - assertEquals(channel.rateLimitPerUser, 0) - assertEquals(channel.nsfw, false) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createVoiceWithBitrate.test.ts b/packages/old/discordeno/oldTest/channels/createVoiceWithBitrate.test.ts deleted file mode 100644 index dbfc8d2af..000000000 --- a/packages/old/discordeno/oldTest/channels/createVoiceWithBitrate.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new voice channel with a bitrate', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'discordeno-test', - type: ChannelTypes.GuildVoice, - bitrate: 32000 - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildVoice) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, 32000) - assertEquals(channel.userLimit, 0) - assertEquals(channel.rateLimitPerUser, 0) - assertEquals(channel.nsfw, false) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/createVoiceWithUserLimit.test.ts b/packages/old/discordeno/oldTest/channels/createVoiceWithUserLimit.test.ts deleted file mode 100644 index 6a88f265f..000000000 --- a/packages/old/discordeno/oldTest/channels/createVoiceWithUserLimit.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] create a new voice channel with a user limit', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'discordeno-test', - type: ChannelTypes.GuildVoice, - userLimit: 32 - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildVoice) - assertEquals(channel.topic, undefined) - assertEquals(channel.bitrate, 64000) - assertEquals(channel.userLimit, 32) - assertEquals(channel.rateLimitPerUser, 0) - assertEquals(channel.nsfw, false) - assertEquals(channel.permissionOverwrites.length, 0) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/deleteWithReason.test.ts b/packages/old/discordeno/oldTest/channels/deleteWithReason.test.ts deleted file mode 100644 index 81d599f6c..000000000 --- a/packages/old/discordeno/oldTest/channels/deleteWithReason.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { assertExists, assertRejects } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] delete a channel with a reason', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'delete-channel' - }) - - // Make sure the channel was created - assertExists(channel.id) - - // Delete the channel now with a reason - await bot.helpers.deleteChannel(channel.id, 'with a reason') - - // Check if channel still exists - await assertRejects(() => bot.helpers.getChannel(channel.id)) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/deleteWithoutReason.test.ts b/packages/old/discordeno/oldTest/channels/deleteWithoutReason.test.ts deleted file mode 100644 index ee4235ae7..000000000 --- a/packages/old/discordeno/oldTest/channels/deleteWithoutReason.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { assertExists, assertRejects } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] delete a channel without a reason', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - // Create a channel to delete - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'delete-channel' - }) - - // Make sure the channel was created - assertExists(channel.id) - - // Delete the channel now without a reason - await bot.helpers.deleteChannel(channel.id) - - // Check if channel still exists - await assertRejects(() => bot.helpers.getChannel(channel.id)) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/editChannelWithReason.test.ts b/packages/old/discordeno/oldTest/channels/editChannelWithReason.test.ts deleted file mode 100644 index 54c89969f..000000000 --- a/packages/old/discordeno/oldTest/channels/editChannelWithReason.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] edit a channel', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'editChannel' }) - - // Edit a channel name without a reason - await t.step('[channel] edit a channel name without a reason', async () => { - const editedChannel = await bot.helpers.editChannel(channel.id, { name: 'editedchannel' }) - assertEquals(editedChannel.name, 'editedchannel') - }) - - // Edit a channel topic - await t.step('[channel] edit a channel topic with a reason', async () => { - const editedChannel = await bot.helpers.editChannel(channel.id, { topic: 'editedChannel' }) - assertEquals(editedChannel.topic, 'editedChannel') - }) - - // Change the channel to a news channel - await t.step('[channel] change the channel to a news channel with a reason', async () => { - const editedChannel = await bot.helpers.editChannel( - channel.id, - { type: ChannelTypes.GuildAnnouncement, reason: 'reason' } - ) - assertEquals(editedChannel.type, ChannelTypes.GuildAnnouncement) - }) - - // Change from a news channel to a text channel - await t.step('[channel] change from a news channel to a text channel', async () => { - const editedChannel = await bot.helpers.editChannel(channel.id, { type: ChannelTypes.GuildText }) - assertEquals(editedChannel.type, ChannelTypes.GuildText) - }) - - // Enable nsfw - await t.step('[channel] enable nsfw', async () => { - const editedChannel = await bot.helpers.editChannel(channel.id, { nsfw: true }) - assertEquals(editedChannel.nsfw, true) - }) - - // Disable nsfw - await t.step('[channel] disable nsfw', async () => { - const editedChannel = await bot.helpers.editChannel(channel.id, { nsfw: false }) - assertEquals(editedChannel.nsfw, false) - }) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/getChannel.test.ts b/packages/old/discordeno/oldTest/channels/getChannel.test.ts deleted file mode 100644 index 0074b9342..000000000 --- a/packages/old/discordeno/oldTest/channels/getChannel.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] Get a channel', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'fetching' - }) - - const fetched = await bot.helpers.getChannel(channel.id) - assertExists(fetched) - assertEquals(channel.id, fetched.id) - assertEquals(channel.name, fetched.name) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/getChannels.test.ts b/packages/old/discordeno/oldTest/channels/getChannels.test.ts deleted file mode 100644 index 8886bd51c..000000000 --- a/packages/old/discordeno/oldTest/channels/getChannels.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[channel] Get all channels', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const [first, second] = await Promise.all([ - bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'first' }), - bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'second' }) - ]) - - const channels = await bot.helpers.getChannels(CACHED_COMMUNITY_GUILD_ID) - - assertEquals(channels.size > 1, true) - - await Promise.all( - [bot.helpers.deleteChannel(first.id), bot.helpers.deleteChannel(second.id)] - ) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/invites/invite.test.ts b/packages/old/discordeno/oldTest/channels/invites/invite.test.ts deleted file mode 100644 index e2cd5e2d6..000000000 --- a/packages/old/discordeno/oldTest/channels/invites/invite.test.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { ChannelTypes } from '../../../mod.js' -import { assertExists, assertNotEquals } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[invite] create an invite', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'Discordeno-test', - type: ChannelTypes.GuildAnnouncement - }) - - // Assertions - assertExists(channel.id) - - const invite = await bot.helpers.createInvite(channel.id, { - maxAge: 86400, - maxUses: 0, - temporary: false, - unique: false - }) - - // Assertions - assertExists(invite.code) - - await t.step('[invite] Get an invite', async () => { - const inv = await bot.helpers.getInvite(invite.code) - assertExists(inv.code) - }) - - await t.step('[invite] Get an invite with counts', async () => { - const inv = await bot.helpers.getInvite(invite.code, { withCounts: true }) - assertExists(inv.code) - assertExists(inv.approximateMemberCount) - assertExists(inv.approximatePresenceCount) - }) - - await t.step('[invite] Get an invite with expiration', async () => { - const inv = await bot.helpers.getInvite(invite.code, { withExpiration: true }) - assertExists(inv.code) - assertExists(invite.expiresAt) - }) - - await t.step('[invite] Get an invite with everything', async () => { - const inv = await bot.helpers.getInvite(invite.code, { withCounts: true, withExpiration: true }) - assertExists(inv.code) - assertExists(inv.approximateMemberCount) - assertExists(inv.approximatePresenceCount) - assertExists(invite.expiresAt) - }) - - await t.step('[invite] Get all guild invites.', async () => { - const fetchedInvites = await bot.helpers.getInvites(CACHED_COMMUNITY_GUILD_ID) - - assertExists(fetchedInvites) - assertNotEquals(fetchedInvites.size, 0) - }) - - await t.step('[invite] Get all channel invites.', async () => { - const fetchedInvites = await bot.helpers.getChannelInvites(channel.id) - - assertExists(fetchedInvites) - assertNotEquals(fetchedInvites.size, 0) - }) - - await t.step('[invite] Delete an invite', async () => { - await bot.helpers.deleteInvite(invite.code) - - // THERE IS NO WAY TO VALIDATE IT DELETED SO WE JUST ASSUME IT DID - // If you fetched a deleted invite, you get a full invite object. Thx discord. - }) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/messages/message.test.ts b/packages/old/discordeno/oldTest/channels/messages/message.test.ts deleted file mode 100644 index b808d07cd..000000000 --- a/packages/old/discordeno/oldTest/channels/messages/message.test.ts +++ /dev/null @@ -1,286 +0,0 @@ -import { ButtonStyles, ChannelTypes, delay, MessageComponentTypes } from '../../../mod.js' -import { assertEquals, assertExists, assertRejects } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[messages] Run message related unit tests', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'Discordeno-test', - type: ChannelTypes.GuildText - }) - - // Assertions - assertExists(channel.id) - - // Send a message with text - await t.step('[message] Send a message with text', async () => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - }) - - // Send a message with embeds - await t.step('[message] Send a message with embeds', async () => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz', - embeds: [ - { - title: 'Deno', - description: 'Deno is a modern web platform for building the web.', - url: 'https://deno.land/', - color: 0x00ff00, - fields: [ - { - name: 'Deno', - value: 'Deno is a modern web platform for building the web.', - inline: true - }, - { - name: 'Deno', - value: 'Deno is a modern web platform for building the web.', - inline: true - } - ], - footer: { - text: 'Deno', - iconUrl: 'https://deno.land/favicon.ico' - }, - image: { - url: 'https://deno.land/favicon.ico' - }, - thumbnail: { - url: 'https://deno.land/favicon.ico' - } - } - ] - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - assertEquals(message.embeds.length, 1) - assertEquals(message.embeds[0].title, 'Deno') - assertEquals(message.embeds[0].description, 'Deno is a modern web platform for building the web.') - assertEquals(message.embeds[0].url, 'https://deno.land/') - assertEquals(message.embeds[0].color, 0x00ff00) - assertEquals(message.embeds[0].fields?.length, 2) - assertEquals(message.embeds[0].fields?.[0].name, 'Deno') - assertEquals(message.embeds[0].fields?.[0].value, 'Deno is a modern web platform for building the web.') - assertEquals(message.embeds[0].fields?.[0].inline, true) - assertEquals(message.embeds[0].fields?.[1].name, 'Deno') - assertEquals(message.embeds[0].fields?.[1].value, 'Deno is a modern web platform for building the web.') - assertEquals(message.embeds[0].fields?.[1].inline, true) - assertEquals(message.embeds[0].footer?.text, 'Deno') - assertEquals(message.embeds[0].footer?.iconUrl, 'https://deno.land/favicon.ico') - assertEquals(message.embeds[0].image?.url, 'https://deno.land/favicon.ico') - assertEquals(message.embeds[0].thumbnail?.url, 'https://deno.land/favicon.ico') - }) - - // Send a message with components - await t.step('[message] Send a message with components', async () => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz', - components: [ - { - type: MessageComponentTypes.ActionRow, - components: [ - { - type: MessageComponentTypes.Button, - label: 'Doc', - style: ButtonStyles.Link, - url: 'https://discordeno.mod.land/' - }, - { - type: MessageComponentTypes.Button, - label: 'Server', - style: ButtonStyles.Link, - url: 'https://discord.gg/ddeno' - } - ] - }, - { - type: MessageComponentTypes.ActionRow, - components: [ - { - type: MessageComponentTypes.Button, - label: 'Hi', - customId: 'hi', - style: ButtonStyles.Primary - } - ] - } - ] - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - assertEquals(message.components?.length, 2) - assertEquals(message.components?.[0].type, MessageComponentTypes.ActionRow) - assertEquals(message.components?.[0].components?.length, 2) - assertEquals(message.components?.[0].components?.[0].type, MessageComponentTypes.Button) - assertEquals(message.components?.[0].components?.[0].label, 'Doc') - assertEquals(message.components?.[0].components?.[0].style, ButtonStyles.Link) - assertEquals(message.components?.[0].components?.[0].url, 'https://discordeno.mod.land/') - assertEquals(message.components?.[0].components?.[1].type, MessageComponentTypes.Button) - assertEquals(message.components?.[0].components?.[1].label, 'Server') - assertEquals(message.components?.[0].components?.[1].style, ButtonStyles.Link) - assertEquals(message.components?.[0].components?.[1].url, 'https://discord.gg/ddeno') - assertEquals(message.components?.[1].type, MessageComponentTypes.ActionRow) - assertEquals(message.components?.[1].components?.length, 1) - assertEquals(message.components?.[1].components?.[0].type, MessageComponentTypes.Button) - assertEquals(message.components?.[1].components?.[0].label, 'Hi') - assertEquals(message.components?.[1].components?.[0].customId, 'hi') - assertEquals(message.components?.[1].components?.[0].style, ButtonStyles.Primary) - }) - - // Edit the message - await t.step('[message] Edit the message', async () => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - const editedMessage = await bot.helpers.editMessage(channel.id, message.id, { - content: 'Hello Skillz 2', - embeds: [ - { - title: 'Deno', - description: 'Deno is a modern web platform for building the web.' - } - ] - }) - - assertEquals(editedMessage.content, 'Hello Skillz 2') - assertEquals(editedMessage.embeds.length, 1) - assertEquals(editedMessage.embeds[0].title, 'Deno') - assertEquals(editedMessage.embeds[0].description, 'Deno is a modern web platform for building the web.') - }) - - // Delete the message with a reason - await t.step('[message] Delete the message with a reason', async () => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - - await bot.helpers.deleteMessage(channel.id, message.id, 'Test') - await assertRejects(() => bot.helpers.getMessage(channel.id, message.id)) - }) - - // Delete the message without a reason - await t.step('[message] Delete the message with a reason', async () => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - - await bot.helpers.deleteMessage(channel.id, message.id) - await assertRejects(() => bot.helpers.getMessage(channel.id, message.id)) - }) - - // Bulk delete messages with a reason - await t.step('[message] Bulk delete messages with a reason', async () => { - const message1 = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message1.id) - assertEquals(message1.content, 'Hello Skillz') - - const message2 = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz 2' - }) - assertExists(message2.id) - assertEquals(message2.content, 'Hello Skillz 2') - - await bot.helpers.deleteMessages(channel.id, [message1.id, message2.id], 'Test') - await assertRejects(() => bot.helpers.getMessage(channel.id, message1.id)) - await assertRejects(() => bot.helpers.getMessage(channel.id, message2.id)) - }) - - // Bulk delete messages without a reason - await t.step('[message] Bulk delete messages without a reason', async () => { - const message1 = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message1.id) - assertEquals(message1.content, 'Hello Skillz') - - const message2 = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz 2' - }) - assertExists(message2.id) - assertEquals(message2.content, 'Hello Skillz 2') - - await bot.helpers.deleteMessages(channel.id, [message1.id, message2.id]) - await delay(3000) - await assertRejects(() => bot.helpers.getMessage(channel.id, message1.id)) - await assertRejects(() => bot.helpers.getMessage(channel.id, message2.id)) - }) - - // Get a message - await t.step('[message] Get a message', async () => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - - const getMessage = await bot.helpers.getMessage(channel.id, message.id) - assertExists(getMessage) - assertEquals(getMessage.content, message.content) - assertEquals(getMessage.id, message.id) - }) - - // Pin a message - await t.step('[message] Pin a message', async (t) => { - const message = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message.id) - assertEquals(message.content, 'Hello Skillz') - - await bot.helpers.pinMessage(channel.id, message.id) - const pinnedMessages = await bot.helpers.getPinnedMessages(channel.id) - assertEquals(pinnedMessages.size, 1) - assertEquals(pinnedMessages.first()?.content, message.content) - assertEquals(pinnedMessages.first()?.id, message.id) - - // Unpin a message - await t.step('[message] Unpin a message', async () => { - await bot.helpers.unpinMessage(channel.id, message.id) - const pinnedMessages = await bot.helpers.getPinnedMessages(channel.id) - assertEquals(pinnedMessages.size, 0) - }) - }) - - // Fetch multiple messages - await t.step('[message] Fetch multiple messages', async () => { - const message1 = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz' - }) - assertExists(message1.id) - assertEquals(message1.content, 'Hello Skillz') - - const message2 = await bot.helpers.sendMessage(channel.id, { - content: 'Hello Skillz 2' - }) - assertExists(message2.id) - assertEquals(message2.content, 'Hello Skillz 2') - - const messages = await bot.helpers.getMessages(channel.id, { - limit: 2 - }) - assertEquals(messages.size, 2) - assertEquals(messages.get(message1.id)?.content, message1.content) - assertEquals(messages.get(message2.id)?.content, message2.content) - }) - - // Delete the channel once test is done - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/messages/reactions.test.ts b/packages/old/discordeno/oldTest/channels/messages/reactions.test.ts deleted file mode 100644 index 203672d41..000000000 --- a/packages/old/discordeno/oldTest/channels/messages/reactions.test.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { assertEquals, assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[message] reaction related unit tests', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'reactions' }) - assertExists(channel?.id) - - const message = await bot.helpers.sendMessage(channel.id, { - content: 'discordeno is best lib' - }) - assertExists(message?.id) - - // Add a reaction - await t.step('[reactions] add a reaction', async (t) => { - await bot.helpers.addReaction(channel.id, message.id, '👍') - - // fetch message to validate - const fetched = await bot.helpers.getMessage(channel.id, message.id) - assertExists(fetched) - assertExists(fetched.reactions?.length) - }) - - // Remove a reaction - await t.step('[reactions] remove a reaction', async () => { - await bot.helpers.deleteOwnReaction(channel.id, message.id, '👍') - - // fetch message to validate - const fetched = await bot.helpers.getMessage(channel.id, message.id) - assertExists(fetched) - assertEquals(fetched.reactions, undefined) - }) - - // TODO: (tests) Add a custom reaction - // await t.step("[reactions] add a custom reaction", async () => { - // await bot.helpers.addReaction(channel.id, message.id, "<:discordeno:785403373817823272>"); - - // // fetch message to validate - // const fetched = await bot.helpers.getMessage(channel.id, message.id); - // assertExists(fetched); - // assertExists(fetched.reactions?.length); - // }); - - // Remove a custom reaction - await t.step('[reactions] remove a custom reaction', async () => { - await bot.helpers.deleteOwnReaction(channel.id, message.id, '<:discordeno:785403373817823272>') - - // fetch message to validate - const fetched = await bot.helpers.getMessage(channel.id, message.id) - assertExists(fetched) - assertEquals(fetched.reactions, undefined) - }) - - // Add multiple reactions - await t.step('[reactions] add multiple reactions', async (t) => { - await bot.helpers.addReactions(channel.id, message.id, ['👍', '👎']) - - // fetch message to validate - const fetched = await bot.helpers.getMessage(channel.id, message.id) - assertExists(fetched) - assertEquals(fetched.reactions?.length, 2) - - // Remove emoji reactions - await t.step('[reactions] remove reactions by single emoji', async () => { - await bot.helpers.deleteReactionsEmoji(channel.id, message.id, '👍') - - // fetch message to validate - const fetched = await bot.helpers.getMessage(channel.id, message.id) - assertExists(fetched) - assertEquals(fetched.reactions?.length, 1) - }) - }) - - // TODO: (tests) Add multiple custom reactions - // await t.step("[reactions] add multiple custom reactions", async (t) => { - // await bot.helpers.addReactions(channel.id, message.id, [ - // "<:discordeno:785403373817823272>", - // "<:blamewolf:814955268123000832>", - // ]); - - // // fetch message to validate - // const fetched = await bot.helpers.getMessage(channel.id, message.id); - // assertExists(fetched); - // assertEquals(fetched.reactions?.length, 3); - - // // Remove all reactions - // await t.step("[reactions] remove all reactions", async () => { - // await bot.helpers.removeAllReactions(channel.id, message.id); - - // // fetch message to validate - // const fetched = await bot.helpers.getMessage(channel.id, message.id); - // assertExists(fetched); - // assertEquals(fetched.reactions, undefined); - // }); - // }); - - // Add multiple reactions in order - await t.step('[reactions] add multiple reactions in order', async (t) => { - await bot.helpers.addReactions(channel.id, message.id, ['👍', '👎'], true) - - // fetch message to validate - const fetched = await bot.helpers.getMessage(channel.id, message.id) - assertExists(fetched) - assertEquals(fetched.reactions?.length, 2) - }) - - // TODO: (tests) Add multiple custom reactions in order - // await t.step("[reactions] add multiple custom reactions in order", async (t) => { - // await bot.helpers.addReactions(channel.id, message.id, [ - // "<:discordeno:785403373817823272>", - // "<:blamewolf:814955268123000832>", - // ], true); - - // // fetch message to validate - // const fetched = await bot.helpers.getMessage(channel.id, message.id); - // assertExists(fetched); - // assertEquals(fetched.reactions?.length, 4); - // }); - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/permissions/deleteChannelOverwrite.test.ts b/packages/old/discordeno/oldTest/channels/permissions/deleteChannelOverwrite.test.ts deleted file mode 100644 index 0f164d2e4..000000000 --- a/packages/old/discordeno/oldTest/channels/permissions/deleteChannelOverwrite.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { ChannelTypes, OverwriteTypes } from '../../../types/shared.js' -import { assertEquals, assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[channel] Delete a channel overwrite', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'deleteChannelOverwrite', - permissionOverwrites: [ - { - id: bot.id, - type: OverwriteTypes.Member, - allow: ['VIEW_CHANNEL'], - deny: [] - } - ] - }) - - // Assertions - assertExists(channel) - assertEquals(channel.type, ChannelTypes.GuildText) - assertEquals(channel.permissionOverwrites.length, 1) - - await bot.helpers.deleteChannelPermissionOverride(channel.id, bot.id) - - // Fetch the channel again to validate - const fetchedChannel = await bot.helpers.getChannel(channel.id) - assertExists(fetchedChannel?.id) - assertEquals(fetchedChannel.permissionOverwrites.length, 0) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/stageInstances.test.ts b/packages/old/discordeno/oldTest/channels/stageInstances.test.ts deleted file mode 100644 index 44177ac37..000000000 --- a/packages/old/discordeno/oldTest/channels/stageInstances.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertExists, assertNotEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[stage] Create a stage instance', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const stage = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'createinstance', - type: ChannelTypes.GuildStageVoice - }) - const instance = await bot.helpers.createStageInstance({ channelId: stage.id, topic: 'test it' }) - assertExists(instance) - - await t.step('[stage] Edit a stage instance', async () => { - const edited = await bot.helpers.editStageInstance(stage.id, { - topic: 'edited' - }) - assertNotEquals(edited.topic, stage.topic) - }) - - await t.step('[stage] Delete a stage instance', async () => { - await bot.helpers.deleteStageInstance(stage.id) - }) - - await bot.helpers.deleteChannel(stage.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/threads/deleteThread.test.ts b/packages/old/discordeno/oldTest/channels/threads/deleteThread.test.ts deleted file mode 100644 index 6c33f58ba..000000000 --- a/packages/old/discordeno/oldTest/channels/threads/deleteThread.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[thread] Delete a thread', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'threads' }) - const message = await bot.helpers.sendMessage(channel.id, { content: 'thread message' }) - const thread = await bot.helpers.startThreadWithMessage(channel.id, message.id, { - reason: 'idk', - rateLimitPerUser: 5, - name: 'tread carefully', - autoArchiveDuration: 60 - }) - - const threadMessage = await bot.helpers.sendMessage(thread.id, { content: 'message in a bottle' }) - assertExists(threadMessage.id) - - await bot.helpers.deleteChannel(thread.id) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/threads/editThread.test.ts b/packages/old/discordeno/oldTest/channels/threads/editThread.test.ts deleted file mode 100644 index 00170ada8..000000000 --- a/packages/old/discordeno/oldTest/channels/threads/editThread.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { assertExists, assertNotEquals } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[thread] Edit and archive a thread', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'threads' }) - const message = await bot.helpers.sendMessage(channel.id, { content: 'thread message' }) - const thread = await bot.helpers.startThreadWithMessage(channel.id, message.id, { - reason: 'idk', - rateLimitPerUser: 5, - name: 'tread carefully', - autoArchiveDuration: 60 - }) - - const threadMessage = await bot.helpers.sendMessage(thread.id, { content: 'message in a bottle' }) - assertExists(threadMessage.id) - - const edited = await bot.helpers.editChannel(thread.id, { - archived: true, - name: 'new name', - autoArchiveDuration: 1440, - locked: !thread.locked, - rateLimitPerUser: (thread.rateLimitPerUser || 0) + 1 - }) - assertNotEquals(thread.archived, edited.archived) - assertNotEquals(thread.name, edited.name) - assertNotEquals(thread.rateLimitPerUser, edited.rateLimitPerUser) - assertNotEquals(thread.autoArchiveDuration, edited.autoArchiveDuration) - assertNotEquals(thread.locked, edited.locked) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/threads/getActiveThreads.test.ts b/packages/old/discordeno/oldTest/channels/threads/getActiveThreads.test.ts deleted file mode 100644 index 624bb46aa..000000000 --- a/packages/old/discordeno/oldTest/channels/threads/getActiveThreads.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { assertEquals, assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[thread] Get active threads', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'threads' }) - const message = await bot.helpers.sendMessage(channel.id, { content: 'thread message' }) - const thread = await bot.helpers.startThreadWithMessage(channel.id, message.id, { - reason: 'idk', - rateLimitPerUser: 5, - name: 'tread carefully', - autoArchiveDuration: 60 - }) - - const threadMessage = await bot.helpers.sendMessage(thread.id, { content: 'message in a bottle' }) - assertExists(threadMessage.id) - - const activeThreads = await bot.helpers.getActiveThreads(CACHED_COMMUNITY_GUILD_ID) - assertEquals(Boolean(activeThreads.threads.size), true) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/threads/getArchivedThreads.test.ts b/packages/old/discordeno/oldTest/channels/threads/getArchivedThreads.test.ts deleted file mode 100644 index 3c27d2e8f..000000000 --- a/packages/old/discordeno/oldTest/channels/threads/getArchivedThreads.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { assertEquals, assertExists, assertNotEquals } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[thread] Get archived threads', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'threads' }) - const message = await bot.helpers.sendMessage(channel.id, { content: 'thread message' }) - const thread = await bot.helpers.startThreadWithMessage(channel.id, message.id, { - reason: 'idk', - rateLimitPerUser: 5, - name: 'tread carefully', - autoArchiveDuration: 60 - }) - - const archived = await bot.helpers.getPublicArchivedThreads(channel.id) - assertEquals(archived.threads.size, 0) - assertEquals(archived.members.size, 0) - - const threadMessage = await bot.helpers.sendMessage(thread.id, { content: 'message in a bottle' }) - assertExists(threadMessage.id) - - const edited = await bot.helpers.editChannel(thread.id, { - archived: true - }) - assertNotEquals(thread.archived, edited.archived) - - const archivedNow = await bot.helpers.getPublicArchivedThreads(channel.id) - assertEquals(Boolean(archivedNow.threads.size), true) - assertEquals(Boolean(archivedNow.members.size), true) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/threads/joinAndLeaveThread.test.ts b/packages/old/discordeno/oldTest/channels/threads/joinAndLeaveThread.test.ts deleted file mode 100644 index 3c9b2854c..000000000 --- a/packages/old/discordeno/oldTest/channels/threads/joinAndLeaveThread.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[thread] join and leave a thread', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'threads' }) - const message = await bot.helpers.sendMessage(channel.id, { content: 'thread message' }) - const thread = await bot.helpers.startThreadWithMessage(channel.id, message.id, { - reason: 'idk', - rateLimitPerUser: 5, - name: 'tread carefully', - autoArchiveDuration: 60 - }) - - const threadMessage = await bot.helpers.sendMessage(thread.id, { content: 'message in a bottle' }) - assertExists(threadMessage.id) - - await t.step('[thread] leave a thread', async () => { - await bot.helpers.leaveThread(thread.id) - }) - - await t.step('[thread] join a thread', async () => { - await bot.helpers.joinThread(thread.id) - }) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/channels/threads/startThread.test.ts b/packages/old/discordeno/oldTest/channels/threads/startThread.test.ts deleted file mode 100644 index bd3d18dd6..000000000 --- a/packages/old/discordeno/oldTest/channels/threads/startThread.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[thread] Start a thread', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'threads' }) - const message = await bot.helpers.sendMessage(channel.id, { content: 'thread message' }) - const thread = await bot.helpers.startThreadWithMessage(channel.id, message.id, { - reason: 'idk', - rateLimitPerUser: 5, - name: 'tread carefully', - autoArchiveDuration: 60 - }) - - assertExists(thread.id) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/delay.test.ts b/packages/old/discordeno/oldTest/delay.test.ts deleted file mode 100644 index ae947eb9e..000000000 --- a/packages/old/discordeno/oldTest/delay.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { delay } from '../mod.js' -import { assertEquals } from './deps.js' - -Deno.test({ - name: '[utils] delay 2000 ms', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const before = Date.now() - await delay(2000) - const after = Date.now() - assertEquals(after - before >= 2000, true) - } -}) diff --git a/packages/old/discordeno/oldTest/deps.ts b/packages/old/discordeno/oldTest/deps.ts deleted file mode 100644 index 0e79209b1..000000000 --- a/packages/old/discordeno/oldTest/deps.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from 'https://deno.land/std@0.138.0/testing/asserts.js' -export { config as dotenv } from 'https://deno.land/x/dotenv@v3.2.0/mod.js' - diff --git a/packages/old/discordeno/oldTest/guilds/automod.test.ts b/packages/old/discordeno/oldTest/guilds/automod.test.ts deleted file mode 100644 index c84987d59..000000000 --- a/packages/old/discordeno/oldTest/guilds/automod.test.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { AutoModerationActionType, AutoModerationEventTypes, AutoModerationTriggerTypes } from '@discordeno/types' -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[automod] Run automod tests', - ignore: process.env.TEST_ENV === 'UNIT', - async fn (t) { - const bot = loadBot() - - await t.step('[automod] Create a MessageSend rule for Keyword with BlockMessage action.', async () => { - const rule = await bot.helpers.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, { - name: 'test', - eventType: AutoModerationEventTypes.MessageSend, - triggerType: AutoModerationTriggerTypes.Keyword, - triggerMetadata: { - keywordFilter: ['iblamewolf'] - }, - actions: [ - { - type: AutoModerationActionType.BlockMessage - } - ] - }) - - assertExists(rule.id) - - const fetchedRule = await bot.helpers.getAutomodRule( - CACHED_COMMUNITY_GUILD_ID, - rule.id - ) - assertExists(fetchedRule.id) - assertEquals(fetchedRule.name, rule.name) - assertEquals(fetchedRule.eventType, AutoModerationEventTypes.MessageSend) - assertEquals(fetchedRule.triggerType, AutoModerationTriggerTypes.Keyword) - assertEquals(fetchedRule.triggerMetadata?.keywordFilter?.[0], 'iblamewolf') - assertExists(fetchedRule.actions) - assertExists(fetchedRule.actions[0]) - assertEquals(fetchedRule.actions[0].type, AutoModerationActionType.BlockMessage) - - await bot.helpers.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id) - }) - - await t.step('[automod] Create a MessageSend rule for Keyword with SendAlertMessage action.', async () => { - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'test' - }) - assertExists(channel.id) - - const rule = await bot.helpers.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, { - name: 'test', - eventType: AutoModerationEventTypes.MessageSend, - triggerType: AutoModerationTriggerTypes.Keyword, - triggerMetadata: { - keywordFilter: ['iblamewolf'] - }, - actions: [ - { - type: AutoModerationActionType.SendAlertMessage, - metadata: { - channelId: channel.id - } - } - ] - }) - - assertExists(rule.id) - - const fetchedRule = await bot.helpers.getAutomodRule( - CACHED_COMMUNITY_GUILD_ID, - rule.id - ) - assertExists(fetchedRule.id) - assertEquals(fetchedRule.name, rule.name) - assertEquals(fetchedRule.eventType, AutoModerationEventTypes.MessageSend) - assertEquals(fetchedRule.triggerType, AutoModerationTriggerTypes.Keyword) - assertEquals(fetchedRule.triggerMetadata?.keywordFilter?.[0], 'iblamewolf') - assertExists(fetchedRule.actions) - assertExists(fetchedRule.actions[0]) - assertEquals(fetchedRule.actions[0].type, AutoModerationActionType.SendAlertMessage) - assertEquals(fetchedRule.actions[0].metadata?.channelId, channel.id) - - await bot.helpers.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id) - await bot.helpers.deleteChannel(channel.id) - }) - - await t.step('[automod] Create a MessageSend rule for Keyword with Timeout action.', async () => { - const rule = await bot.helpers.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, { - name: 'test', - eventType: AutoModerationEventTypes.MessageSend, - triggerType: AutoModerationTriggerTypes.Keyword, - triggerMetadata: { - keywordFilter: ['iblamewolf'] - }, - actions: [ - { - type: AutoModerationActionType.Timeout, - metadata: { - durationSeconds: 10 - } - } - ] - }) - - assertExists(rule.id) - - const fetchedRule = await bot.helpers.getAutomodRule( - CACHED_COMMUNITY_GUILD_ID, - rule.id - ) - assertExists(fetchedRule.id) - assertEquals(fetchedRule.name, rule.name) - assertEquals(fetchedRule.eventType, AutoModerationEventTypes.MessageSend) - assertEquals(fetchedRule.triggerType, AutoModerationTriggerTypes.Keyword) - assertEquals(fetchedRule.triggerMetadata?.keywordFilter?.[0], 'iblamewolf') - assertExists(fetchedRule.actions) - assertExists(fetchedRule.actions[0]) - assertEquals(fetchedRule.actions[0].type, AutoModerationActionType.Timeout) - assertEquals(fetchedRule.actions[0].metadata?.durationSeconds, 10) - - await bot.helpers.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id) - }) - - await t.step('[automod] Create a MessageSend rule for Keyword with BlockMessage & Timeout action.', async () => { - const rule = await bot.helpers.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, { - name: 'test', - eventType: AutoModerationEventTypes.MessageSend, - triggerType: AutoModerationTriggerTypes.Keyword, - triggerMetadata: { - keywordFilter: ['iblamewolf'] - }, - actions: [ - { - type: AutoModerationActionType.BlockMessage - }, - { - type: AutoModerationActionType.Timeout, - metadata: { - durationSeconds: 10 - } - } - ] - }) - - assertExists(rule.id) - - await bot.helpers.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id) - }) - - await t.step( - '[automod] Create a MessageSend rule for Keyword with SendAlertMessage & Timeout action.', - async () => { - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'test' - }) - assertExists(channel.id) - - const rule = await bot.helpers.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, { - name: 'test', - eventType: AutoModerationEventTypes.MessageSend, - triggerType: AutoModerationTriggerTypes.Keyword, - triggerMetadata: { - keywordFilter: ['iblamewolf'] - }, - actions: [ - { - type: AutoModerationActionType.SendAlertMessage, - metadata: { - channelId: channel.id - } - }, - { - type: AutoModerationActionType.Timeout, - metadata: { - durationSeconds: 10 - } - } - ] - }) - - assertExists(rule.id) - - await bot.helpers.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id) - await bot.helpers.deleteChannel(channel.id) - } - ) - - await t.step( - '[automod] Create a MessageSend rule for Keyword with BlockMessage & SendAlertMessage & Timeout action.', - async (t) => { - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'test' - }) - assertExists(channel.id) - - const rule = await bot.helpers.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, { - name: 'test', - eventType: AutoModerationEventTypes.MessageSend, - triggerType: AutoModerationTriggerTypes.Keyword, - triggerMetadata: { - keywordFilter: ['iblamewolf'] - }, - actions: [ - { - type: AutoModerationActionType.BlockMessage - }, - { - type: AutoModerationActionType.SendAlertMessage, - metadata: { - channelId: channel.id - } - }, - { - type: AutoModerationActionType.Timeout, - metadata: { - durationSeconds: 10 - } - } - ] - }) - - assertExists(rule.id) - - // Get the rule again to make sure it was created correctly - await t.step('[automod] Get a automod rule', async () => { - const fetchedRule = await bot.helpers.getAutomodRule( - CACHED_COMMUNITY_GUILD_ID, - rule.id - ) - assertExists(fetchedRule.id) - assertEquals(fetchedRule.name, rule.name) - assertEquals(fetchedRule.eventType, AutoModerationEventTypes.MessageSend) - assertEquals(fetchedRule.triggerType, AutoModerationTriggerTypes.Keyword) - assertEquals(fetchedRule.triggerMetadata?.keywordFilter?.[0], 'iblamewolf') - assertExists(fetchedRule.actions) - assertExists(fetchedRule.actions[0]) - assertExists(fetchedRule.actions[1].metadata) - assertExists(fetchedRule.actions[2].metadata) - assertEquals(fetchedRule.actions[1].metadata.channelId, channel.id) - assertEquals(fetchedRule.actions[2].metadata.durationSeconds, 10) - assertEquals(fetchedRule.actions[0].type, AutoModerationActionType.BlockMessage) - assertEquals(fetchedRule.actions[1].type, AutoModerationActionType.SendAlertMessage) - assertEquals(fetchedRule.actions[2].type, AutoModerationActionType.Timeout) - }) - - await bot.helpers.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id) - await bot.helpers.deleteChannel(channel.id) - } - ) - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/editGuildMfaLevel.test.ts b/packages/old/discordeno/oldTest/guilds/editGuildMfaLevel.test.ts deleted file mode 100644 index e532fac4b..000000000 --- a/packages/old/discordeno/oldTest/guilds/editGuildMfaLevel.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { MfaLevels } from '../../mod.js' -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' - -Deno.test({ - name: '[guild] edit guild mfa level', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - 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/packages/old/discordeno/oldTest/guilds/events/events.test.ts b/packages/old/discordeno/oldTest/guilds/events/events.test.ts deleted file mode 100644 index ce381cb42..000000000 --- a/packages/old/discordeno/oldTest/guilds/events/events.test.ts +++ /dev/null @@ -1,290 +0,0 @@ -import { ChannelTypes, ScheduledEventEntityType, ScheduledEventPrivacyLevel } from '../../../mod.js' -import { assertEquals, assertExists, assertRejects } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: '[events] unit tests for events', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - // create a guild scheduled event with external entity with an end time - await t.step( - '[scheduled event] create a guild scheduled event with external entity with an end time.', - async () => { - const options = { - name: 'lfg', - description: 'itoh is an imposter', - scheduledStartTime: Date.now() + 600000, - scheduledEndTime: Date.now() + (600000 + 1), - privacyLevel: ScheduledEventPrivacyLevel.GuildOnly, - entityType: ScheduledEventEntityType.External, - location: 'heaven' - } - - const event = await bot.helpers.createScheduledEvent(CACHED_COMMUNITY_GUILD_ID, options) - - // Assertions - assertExists(event.id) - - assertEquals(event.location, options.location) - assertEquals(event.name, options.name) - assertEquals(event.description, options.description) - assertEquals(event.scheduledStartTime, options.scheduledStartTime) - assertEquals(event.scheduledEndTime, options.scheduledEndTime) - assertEquals(event.privacyLevel, options.privacyLevel) - assertEquals(event.entityType, options.entityType) - } - ) - - // create a guild scheduled event with stage entity with an end time - await t.step( - '[scheduled event] create a guild scheduled event with stage entity with an end time.', - async () => { - const stage = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'stage-event', - type: ChannelTypes.GuildStageVoice - }) - assertExists(stage.id) - - const options = { - name: 'lfg', - description: 'itoh is an imposter', - scheduledStartTime: Date.now() + 600000, - scheduledEndTime: Date.now() + (600000 + 1), - privacyLevel: ScheduledEventPrivacyLevel.GuildOnly, - entityType: ScheduledEventEntityType.StageInstance, - channelId: stage.id - } - - const event = await bot.helpers.createScheduledEvent(CACHED_COMMUNITY_GUILD_ID, options) - - // Assertions - assertExists(event.id) - - assertEquals(event.name, options.name) - assertEquals(event.description, options.description) - assertEquals(event.scheduledStartTime, options.scheduledStartTime) - assertEquals(event.scheduledEndTime, options.scheduledEndTime) - assertEquals(event.privacyLevel, options.privacyLevel) - assertEquals(event.entityType, options.entityType) - assertEquals(event.channelId, options.channelId) - - await bot.helpers.deleteChannel(stage.id) - } - ) - - // create a guild scheduled event with stage entity without an end time - await t.step( - '[scheduled event] create a guild scheduled event with stage entity without an end time.', - async () => { - const stage = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'stage-event', - type: ChannelTypes.GuildStageVoice - }) - assertExists(stage.id) - - const options = { - name: 'lfg', - description: 'itoh is an imposter', - scheduledStartTime: Date.now() + 600000, - privacyLevel: ScheduledEventPrivacyLevel.GuildOnly, - entityType: ScheduledEventEntityType.StageInstance, - channelId: stage.id - } - - const event = await bot.helpers.createScheduledEvent(CACHED_COMMUNITY_GUILD_ID, options) - - // Assertions - assertExists(event.id) - - assertEquals(event.name, options.name) - assertEquals(event.description, options.description) - assertEquals(event.scheduledStartTime, options.scheduledStartTime) - assertEquals(event.privacyLevel, options.privacyLevel) - assertEquals(event.entityType, options.entityType) - - await bot.helpers.deleteChannel(stage.id) - } - ) - - // create a guild scheduled event with voice entity with an end time - await t.step( - '[scheduled event] create a guild scheduled event with voice entity with an end time.', - async () => { - const voice = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'voice-event', - type: ChannelTypes.GuildVoice - }) - assertExists(voice.id) - - const options = { - name: 'lfg', - description: 'itoh is an imposter', - scheduledStartTime: Date.now() + 600000, - scheduledEndTime: Date.now() + (600000 + 1), - privacyLevel: ScheduledEventPrivacyLevel.GuildOnly, - entityType: ScheduledEventEntityType.Voice, - channelId: voice.id - } - - const event = await bot.helpers.createScheduledEvent(CACHED_COMMUNITY_GUILD_ID, options) - - // Assertions - assertExists(event.id) - - assertEquals(event.name, options.name) - assertEquals(event.description, options.description) - assertEquals(event.scheduledStartTime, options.scheduledStartTime) - assertEquals(event.scheduledEndTime, options.scheduledEndTime) - assertEquals(event.privacyLevel, options.privacyLevel) - assertEquals(event.entityType, options.entityType) - - await bot.helpers.deleteChannel(voice.id) - } - ) - - // create a guild scheduled event with voice entity without an end time - await t.step( - '[scheduled event] create a guild scheduled event with voice entity without an end time.', - async (t) => { - const voice = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'voice-event', - type: ChannelTypes.GuildVoice - }) - assertExists(voice.id) - - const options = { - name: 'lfg', - description: 'itoh is an imposter', - scheduledStartTime: Date.now() + 600000, - privacyLevel: ScheduledEventPrivacyLevel.GuildOnly, - entityType: ScheduledEventEntityType.Voice, - channelId: voice.id - } - - const event = await bot.helpers.createScheduledEvent(CACHED_COMMUNITY_GUILD_ID, options) - - // Assertions - assertExists(event.id) - - assertEquals(event.name, options.name) - assertEquals(event.description, options.description) - assertEquals(event.scheduledStartTime, options.scheduledStartTime) - assertEquals(event.privacyLevel, options.privacyLevel) - assertEquals(event.entityType, options.entityType) - - // Delete the guild scheduled event - await t.step( - '[scheduled event] delete the guild scheduled event.', - async () => { - await bot.helpers.deleteScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id) - await assertRejects(() => bot.helpers.getScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id)) - } - ) - - await bot.helpers.deleteChannel(voice.id) - } - ) - - // Edit a scheduled event - await t.step( - { - name: '[scheduled event] edit a scheduled event', - async fn(t) { - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'entity', - type: ChannelTypes.GuildStageVoice - }) - const event = await bot.helpers.createScheduledEvent(CACHED_COMMUNITY_GUILD_ID, { - name: 'lfg', - description: 'itoh is an imposter', - scheduledStartTime: Date.now() + 600000, - privacyLevel: ScheduledEventPrivacyLevel.GuildOnly, - entityType: ScheduledEventEntityType.StageInstance, - channelId: channel.id - }) - - await t.step('[scheduled event] edit the scheduled event name.', async () => { - const edited = await bot.helpers.editScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id, { - name: 'lfg2' - }) - - assertEquals(event.name, 'lfg') - assertEquals(edited.name, 'lfg2') - assertEquals(edited.description, 'itoh is an imposter') - }) - - await t.step('[scheduled event] edit the scheduled event description.', async () => { - const edited = await bot.helpers.editScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id, { - description: 'skillz is not an imposter' - }) - assertEquals(edited.description, 'skillz is not an imposter') - }) - - await t.step('[scheduled event] edit the scheduled event start time to before previous time.', async (t) => { - const edited = await bot.helpers.editScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id, { - scheduledStartTime: event.scheduledStartTime - 60000 - }) - assertEquals(event.scheduledStartTime > edited.scheduledStartTime, true) - - await t.step('[scheduled event] edit the scheduled event start time to after previous time.', async () => { - const editedAfter = await bot.helpers.editScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id, { - scheduledStartTime: edited.scheduledStartTime + 600000 - }) - assertEquals(edited.scheduledStartTime < editedAfter.scheduledStartTime, true) - }) - }) - - await t.step('[scheduled events] voice channel events tests', async (t) => { - const voice = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'xxx', - type: ChannelTypes.GuildVoice - }) - - await t.step('[scheduled event] edit the scheduled event entity type to voice channel.', async () => { - const edited = await bot.helpers.editScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id, { - entityType: ScheduledEventEntityType.Voice, - channelId: voice.id - }) - assertEquals(edited.entityType, ScheduledEventEntityType.Voice) - assertEquals(edited.channelId, voice.id) - }) - - await t.step( - '[scheduled event] edit the scheduled event entity type to external from voice channel.', - async () => { - const edited = await bot.helpers.editScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id, { - entityType: ScheduledEventEntityType.External, - channelId: null, - scheduledStartTime: Date.now() + 60000, - scheduledEndTime: Date.now() + 600000, - location: 'heaven' - }) - assertEquals(edited.entityType, ScheduledEventEntityType.External) - assertEquals(edited.channelId, undefined) - } - ) - - await t.step( - '[scheduled event] edit the scheduled event entity type to voice channel from external type.', - async () => { - const edited = await bot.helpers.editScheduledEvent(CACHED_COMMUNITY_GUILD_ID, event.id, { - entityType: ScheduledEventEntityType.Voice, - channelId: voice.id - }) - assertEquals(edited.entityType, ScheduledEventEntityType.Voice) - assertEquals(edited.channelId, voice.id) - } - ) - - await bot.helpers.deleteChannel(voice.id) - }) - - await bot.helpers.deleteChannel(channel.id) - } - } - ) - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/getVoiceRegions.test.ts b/packages/old/discordeno/oldTest/guilds/getVoiceRegions.test.ts deleted file mode 100644 index d641cef2f..000000000 --- a/packages/old/discordeno/oldTest/guilds/getVoiceRegions.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[voice] Get voice regions', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const regions = await bot.helpers.getVoiceRegions(CACHED_COMMUNITY_GUILD_ID) - assertEquals(regions.size > 1, true) - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/guild.test.ts b/packages/old/discordeno/oldTest/guilds/guild.test.ts deleted file mode 100644 index fc1fb77b4..000000000 --- a/packages/old/discordeno/oldTest/guilds/guild.test.ts +++ /dev/null @@ -1,276 +0,0 @@ -import { ChannelTypes } from '../../mod.js' -import { assertEquals, assertExists, assertNotEquals, assertRejects } from '../deps.js' -import { loadBot } from '../mod.js' - -Deno.test({ - name: '[guild] Create a guild', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - // Delete the oldest guild(most likely to have finished tests). - - const guild = await bot.helpers.createGuild({ - name: 'Discordeno-test' - }) - assertExists(guild.id) - - try { - await t.step('[guild] Get a guild', async () => { - const exists = await bot.helpers.getGuild(guild.id) - assertExists(exists) - assertExists(exists.id) - assertEquals(exists.name, guild.name) - }) - - await t.step('[guild] Edit a guild', async (t) => { - const voiceChannel = await bot.helpers.createChannel(guild.id, { - name: 'edit-guild-test', - type: ChannelTypes.GuildVoice - }) - assertExists(voiceChannel.id) - - const edited = await bot.helpers.editGuild(guild.id, { - name: 'Discordeno-test-edited', - afkChannelId: voiceChannel.id - // afkTimeout: 5, - }, guild.shardId) - assertEquals(edited.name, 'Discordeno-test-edited') - assertNotEquals(guild.afkChannelId, voiceChannel.id) - assertEquals(edited.afkChannelId, voiceChannel.id) - // assertEquals(guild.afkTimeout, 0); - // assertEquals(edited.afkTimeout, 5); - - await t.step("[guild] Reset a guild's afk channel id", async () => { - const edited2 = await bot.helpers.editGuild(guild.id, { afkChannelId: null }, guild.shardId) - assertNotEquals(edited.afkChannelId, edited2.afkChannelId) - assertEquals(edited2.afkChannelId, undefined) - }) - - await bot.helpers.deleteChannel(voiceChannel.id) - }) - - // await t.step("[guild] Edit a guild's afk settings", async () => { - - // }); - - await t.step('[guild] Get audit logs', async () => { - const auditLogs = await bot.helpers.getAuditLog(guild.id, { limit: 1 }) - assertExists(auditLogs.auditLogEntries.length) - }) - - // Get available voice regions - await t.step('[guild] Get available voice regions', async () => { - const regions = await bot.helpers.getVoiceRegions(guild.id) - assertExists(regions.size) - }) - - // Get a guild ban - await t.step('[guild] Get a guild ban', async (t) => { - await bot.helpers.banMember(guild.id, 379643682984296448n) - - const fetchedBan = await bot.helpers.getBan(guild.id, 379643682984296448n) - - // Assertions - assertExists(fetchedBan) - assertEquals(fetchedBan.user.id, 379643682984296448n) - - // Get multiple guild bans - await t.step('[guild] Get multiple guild bans', async () => { - await bot.helpers.banMember(guild.id, 416477607966670869n) - await bot.helpers.banMember(guild.id, 635383782576357407n) - - const fetchedBans = await bot.helpers.getBans(guild.id) - - // Assertions - assertExists(fetchedBans) - }) - }) - - // Get vanity URL - await t.step('[guild] Get vanity URL', async () => { - await assertRejects(() => bot.helpers.getVanityUrl(guild.id)) - }) - - // Emoji related tests - - // Create an emoji - await t.step({ - name: '[emoji] create an emoji', - async fn(t) { - const bot = loadBot() - const emoji = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - // Assertions - assertExists(emoji.id) - - await bot.helpers.deleteEmoji(guild.id, emoji.id) - } - }) - - // delete an emoji without a reason - await t.step({ - name: '[emoji] delete an emoji without a reason', - async fn(t) { - const bot = loadBot() - const emoji = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - // Assertions - assertExists(emoji.id) - - await bot.helpers.deleteEmoji(guild.id, emoji.id) - - await assertRejects(() => bot.helpers.getEmoji(guild.id, emoji.id!)) - } - }) - - // delete an emoji with a reason - await t.step({ - name: '[emoji] delete an emoji with a reason', - async fn(t) { - const bot = loadBot() - const emoji = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - // Assertions - assertExists(emoji.id) - - await bot.helpers.deleteEmoji(guild.id, emoji.id, 'with a reason') - - await assertRejects(() => bot.helpers.getEmoji(guild.id, emoji.id!)) - } - }) - - // edit an emoji name - await t.step({ - name: '[emoji] Edit an emoji name', - async fn(t) { - const bot = loadBot() - const emoji = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - // Assertions - assertExists(emoji.id) - assertEquals(emoji.name, 'blamewolf') - - await bot.helpers.editEmoji(guild.id, emoji.id, { - name: 'edited' - }) - - const edited = await bot.helpers.getEmoji(guild.id, emoji.id) - - assertEquals(edited.name, 'edited') - - await bot.helpers.deleteEmoji(guild.id, emoji.id) - } - }) - - // edit an emoji roles - await t.step({ - name: "[emoji] Edit an emoji's roles", - async fn(t) { - const bot = loadBot() - const emoji = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - // Assertions - assertExists(emoji.id) - assertEquals(emoji.name, 'blamewolf') - - const role = await bot.helpers.createRole(guild.id, { - name: 'dd-test-emoji' - }) - await bot.helpers.editEmoji(guild.id, emoji.id, { - roles: [role.id] - }) - - const edited = await bot.helpers.getEmoji(guild.id, emoji.id) - - assertEquals(edited.roles?.length, 1) - - await bot.helpers.deleteEmoji(guild.id, emoji.id) - await bot.helpers.deleteRole(guild.id, role.id) - } - }) - - // get an emoji - await t.step({ - name: '[emoji] get an emoji', - async fn(t) { - const bot = loadBot() - const emoji = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - // Assertions - assertExists(emoji.id) - - const exists = await bot.helpers.getEmoji(guild.id, emoji.id) - assertExists(exists.id) - assertEquals(emoji.id, exists.id) - - await bot.helpers.deleteEmoji(guild.id, emoji.id) - } - }) - - await t.step({ - name: '[emoji] get all guild emojis', - async fn(t) { - const bot = loadBot() - const emoji = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - const emoji2 = await bot.helpers.createEmoji(guild.id, { - name: 'blamewolf2', - image: 'https://cdn.discordapp.com/emojis/814955268123000832.png', - roles: [] - }) - - // Assertions - assertExists(emoji.id) - assertExists(emoji2.id) - - const exists = await bot.helpers.getEmojis(guild.id) - assertEquals(exists.size > 1, true) - - await bot.helpers.deleteEmoji(guild.id, emoji.id) - await bot.helpers.deleteEmoji(guild.id, emoji2.id) - } - }) - - // Delete a guild - await t.step('[guild] Delete a guild', async () => { - await bot.helpers.deleteGuild(guild.id) - // Make sure the guild was deleted - await assertRejects(() => bot.helpers.getGuild(guild.id)) - }) - } catch (error) { - // If any errors arise, delete the guild - await bot.helpers.deleteGuild(guild.id) - // then throw the error - throw error - } - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/members/bans.test.ts b/packages/old/discordeno/oldTest/guilds/members/bans.test.ts deleted file mode 100644 index e5ab87ffd..000000000 --- a/packages/old/discordeno/oldTest/guilds/members/bans.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { assertEquals, assertExists, assertRejects } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -// THIS IS WOLF, IF ANYTHING BREAKS BLAME HIM! -const wolfID = 270273690074087427n -// THIS IS IAN, HE PLAY GOLDEN SUN. BAN HIM BEFORE HE MAKES US ADDICTED TO IT!!! -const ianID = 90339695967350784n -// THIS IS LTS, HE PLAY TETRIS EFFECT: CONNECTED. BAN HIM BEFORE HE MAKES US ADDICTED TO IT!!! -const ltsID = 379643682984296448n - -// THESE BAN TESTS SHOULD BE DONE ONE BY ONE -Deno.test({ - name: '[member] ban member test group', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - // ban user from guild without reason - await t.step({ - name: '[member] ban user from guild without reason', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - await bot.helpers.banMember(CACHED_COMMUNITY_GUILD_ID, wolfID) - - // get a single user's ban - await t.step({ - name: "[member] get a single user's ban", - async fn(t) { - assertExists(await bot.helpers.getBan(CACHED_COMMUNITY_GUILD_ID, wolfID)) - } - }) - } - }) - - // ban member from guild with a reason - await t.step({ - name: '[member] ban member from guild with a reason', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - await bot.helpers.banMember(CACHED_COMMUNITY_GUILD_ID, ianID, { reason: 'Blame Wolf' }) - assertExists(await bot.helpers.getBan(CACHED_COMMUNITY_GUILD_ID, ianID)) - } - }) - - // ban member from guild and delete messages - await t.step('[member] ban member from guild and delete messages', async () => { - await bot.helpers.banMember(CACHED_COMMUNITY_GUILD_ID, ltsID, { deleteMessageSeconds: 604800 }) - assertExists(await bot.helpers.getBan(CACHED_COMMUNITY_GUILD_ID, ltsID)) - }) - - // get bans on a server - await t.step({ - name: '[member] get bans on a server', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const bans = await bot.helpers.getBans(CACHED_COMMUNITY_GUILD_ID) - assertEquals(bans.size > 1, true) - } - }) - - // fetch a single member by id - await t.step({ - name: '[member] fetch a single member by id', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const member = await bot.helpers.getMember(CACHED_COMMUNITY_GUILD_ID, bot.id) - - assertExists(member?.id) - } - }) - - // unban member from guild - await t.step({ - name: '[member] unban member from guild', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - await Promise.all([ - bot.helpers.unbanMember(CACHED_COMMUNITY_GUILD_ID, wolfID), - bot.helpers.unbanMember(CACHED_COMMUNITY_GUILD_ID, ianID) - ]) - - await assertRejects(() => bot.helpers.getBan(CACHED_COMMUNITY_GUILD_ID, wolfID)) - } - }) - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/members/dms.test.ts b/packages/old/discordeno/oldTest/guilds/members/dms.test.ts deleted file mode 100644 index 41e5d20bd..000000000 --- a/packages/old/discordeno/oldTest/guilds/members/dms.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' - -Deno.test({ - name: '[member] get dm channel and send a message', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - // Itoh Alt ID - const channel = await bot.helpers.getDmChannel(750661528360845322n) - assertExists(channel?.id) - - const message = await bot.helpers.sendMessage(channel.id, { content: 'https://i.imgur.com/doG55NR.png' }) - assertExists(message?.content) - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/members/editBotNickname.test.ts b/packages/old/discordeno/oldTest/guilds/members/editBotNickname.test.ts deleted file mode 100644 index 514f5ff31..000000000 --- a/packages/old/discordeno/oldTest/guilds/members/editBotNickname.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { assertEquals } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: "[misc] edit a bot's nickname", - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - const nick = 'lts20050703' - const member = await bot.helpers.editBotMember(CACHED_COMMUNITY_GUILD_ID, { nick }) - assertEquals(member.nick, nick) - - // Change nickname back - const member2 = await bot.helpers.editBotMember(CACHED_COMMUNITY_GUILD_ID, { nick: null }) - assertEquals(member2.nick, undefined) - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/members/members.test.ts b/packages/old/discordeno/oldTest/guilds/members/members.test.ts deleted file mode 100644 index e9f01cccc..000000000 --- a/packages/old/discordeno/oldTest/guilds/members/members.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { assertEquals, assertExists } from '../../deps.js' -import { loadBot } from '../../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../../utils.js' - -Deno.test({ - name: "[member] fetches the bot and compares the bot's id with the fetched member's id", - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const member = await bot.helpers.getMember(CACHED_COMMUNITY_GUILD_ID, bot.id) - assertExists(member?.id) - assertEquals(member?.id, bot.id) - } -}) - -Deno.test({ - name: '[member] Gets a member list and checks if the bot is in the member list', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - const members = await bot.helpers.getMembers(CACHED_COMMUNITY_GUILD_ID, { limit: 10 }) - assertEquals(members.has(bot.id), true) - } -}) diff --git a/packages/old/discordeno/oldTest/guilds/roles.test.ts b/packages/old/discordeno/oldTest/guilds/roles.test.ts deleted file mode 100644 index c9666e293..000000000 --- a/packages/old/discordeno/oldTest/guilds/roles.test.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[role] role unit tests', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const role = await bot.helpers.createRole(CACHED_COMMUNITY_GUILD_ID, { - name: 'test role' - }) - - assertExists(role.id) - - // Create a role with a reason - await t.step('[role] Create a role with a reason', async () => { - const role = await bot.helpers.createRole(CACHED_COMMUNITY_GUILD_ID, { - name: 'test role 2' - }, 'test reason') - - assertExists(role.id) - - await bot.helpers.deleteRole(CACHED_COMMUNITY_GUILD_ID, role.id) - }) - - // Create a role without a reason - await t.step('[role] Create a role without a reason', async () => { - const role = await bot.helpers.createRole(CACHED_COMMUNITY_GUILD_ID, { - name: 'test role 3' - }) - - assertExists(role.id) - - await bot.helpers.deleteRole(CACHED_COMMUNITY_GUILD_ID, role.id) - }) - - // Edit a role - await t.step('[role] Edit a role', async (t) => { - // Edit the roles name - await t.step('[role] Edit the roles name', async () => { - const edited = await bot.helpers.editRole(CACHED_COMMUNITY_GUILD_ID, role.id, { - name: 'test role 4' - }) - assertEquals(edited.name, 'test role 4') - }) - - // Edit the roles color - await t.step('[role] Edit the roles color', async () => { - const edited = await bot.helpers.editRole(CACHED_COMMUNITY_GUILD_ID, role.id, { - color: 0x0000ff - }) - assertEquals(edited.color, 0x0000ff) - }) - - // Edit the roles hoist - await t.step('[role] Edit the roles hoist', async (t) => { - const edited = await bot.helpers.editRole(CACHED_COMMUNITY_GUILD_ID, role.id, { - hoist: true - }) - assertEquals(edited.toggles.hoist, true) - - // Make hoist false - await t.step('[role] Make hoist false', async () => { - const edited = await bot.helpers.editRole(CACHED_COMMUNITY_GUILD_ID, role.id, { - hoist: false - }) - assertEquals(edited.toggles.hoist, false) - }) - }) - - // Edit the roles mentionable - await t.step('[role] Edit the roles mentionable', async (t) => { - const edited = await bot.helpers.editRole(CACHED_COMMUNITY_GUILD_ID, role.id, { - mentionable: true - }) - assertEquals(edited.toggles.mentionable, true) - - // Make mentionable false - await t.step('[role] Make mentionable false', async () => { - const edited = await bot.helpers.editRole(CACHED_COMMUNITY_GUILD_ID, role.id, { - mentionable: false - }) - assertEquals(edited.toggles.mentionable, false) - }) - }) - - // Edit the roles permissions - await t.step('[role] Edit the roles permissions', async (t) => { - const edited = await bot.helpers.editRole(CACHED_COMMUNITY_GUILD_ID, role.id, { - permissions: [ - 'SEND_MESSAGES', - 'VIEW_CHANNEL' - ] - }) - assertEquals( - edited.permissions.toString(), - bot.utils.calculateBits([ - 'SEND_MESSAGES', - 'VIEW_CHANNEL' - ]) - ) - }) - }) - - // Assign a role to a user - await t.step('[role] Assign a role to a user without a reason.', async (t) => { - // Assign the role to the user - await bot.helpers.addRole(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n, role.id) - const member = await bot.helpers.getMember(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n) - assertEquals(member?.roles.includes(role.id), true) - - // Remove the role from the user without a reason - await t.step('[role] Remove the role from the user without a reason', async () => { - await bot.helpers.removeRole(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n, role.id) - const member = await bot.helpers.getMember(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n) - assertEquals(member?.roles.includes(role.id), false) - }) - - // Add the role to the user with a reason - await t.step('[role] Add the role to the user with a reason', async () => { - await bot.helpers.addRole(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n, role.id, 'test reason') - const member = await bot.helpers.getMember(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n) - assertEquals(member?.roles.includes(role.id), true) - }) - - // Remove the role from the user with a reason - await t.step('[role] Remove the role from the user with a reason', async () => { - await bot.helpers.removeRole(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n, role.id, 'test reason') - const member = await bot.helpers.getMember(CACHED_COMMUNITY_GUILD_ID, 130136895395987456n) - assertEquals(member?.roles.includes(role.id), false) - }) - }) - - // Delete a role - await t.step('[role] Delete a role', async () => { - await bot.helpers.deleteRole(CACHED_COMMUNITY_GUILD_ID, role.id) - const deletedRoles = await bot.helpers.getRoles(CACHED_COMMUNITY_GUILD_ID) - assertEquals(deletedRoles.has(role.id), false) - }) - } -}) diff --git a/packages/old/discordeno/oldTest/misc/benchmark.test.ts b/packages/old/discordeno/oldTest/misc/benchmark.test.ts deleted file mode 100644 index 1cb60cff7..000000000 --- a/packages/old/discordeno/oldTest/misc/benchmark.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -// import { memoryBenchmarks } from "../../benchmarks/index.js"; -// import enableCachePlugin from "../../plugins/cache/mod.js"; -// import { loadBot } from "../mod.js"; - -// Deno.test({ -// name: "[Memory] Benchmark memory tests", -// async fn (t) { -// const bot = enableCachePlugin(loadBot()); - -// await memoryBenchmarks(bot, { -// log: true, -// table: true, -// }); -// }, -// }); diff --git a/packages/old/discordeno/oldTest/misc/gatewaybot.test.ts b/packages/old/discordeno/oldTest/misc/gatewaybot.test.ts deleted file mode 100644 index c5c87734b..000000000 --- a/packages/old/discordeno/oldTest/misc/gatewaybot.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' - -Deno.test({ - name: '[misc] Get gateway bot information', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const data = await bot.helpers.getGatewayBot() - - assertExists(data) - assertEquals(data.url, 'wss://gateway.discord.gg') - assertEquals(data.shards, 1) - assertEquals(data.sessionStartLimit.total, 1000) - assertEquals(data.sessionStartLimit.maxConcurrency, 1) - } -}) diff --git a/packages/old/discordeno/oldTest/misc/getApplicationInfo.test.ts b/packages/old/discordeno/oldTest/misc/getApplicationInfo.test.ts deleted file mode 100644 index a32279d8e..000000000 --- a/packages/old/discordeno/oldTest/misc/getApplicationInfo.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' - -Deno.test({ - name: '[application] Get application info', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const application = await bot.helpers.getApplicationInfo() - assertEquals(application.id, bot.id) - } -}) diff --git a/packages/old/discordeno/oldTest/misc/getUser.test.ts b/packages/old/discordeno/oldTest/misc/getUser.test.ts deleted file mode 100644 index 62af0cc92..000000000 --- a/packages/old/discordeno/oldTest/misc/getUser.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { assertEquals, assertExists } from '../deps.js' -import { loadBot } from '../mod.js' - -Deno.test({ - name: '[User] get a user and transform', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const user = await bot.helpers.getUser(bot.id) - assertExists(user?.id) - assertEquals(user.id, bot.id) - } -}) diff --git a/packages/old/discordeno/oldTest/misc/rateLimit.test.ts b/packages/old/discordeno/oldTest/misc/rateLimit.test.ts deleted file mode 100644 index aeb0e8c4e..000000000 --- a/packages/old/discordeno/oldTest/misc/rateLimit.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[Misc] Rate Limit Test', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'test' }) - await Promise.all(Array(10).map(() => bot.helpers.sendMessage(channel.id, { content: 'Rate Limit Test' }))) - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/misc/snowflake.test.ts b/packages/old/discordeno/oldTest/misc/snowflake.test.ts deleted file mode 100644 index 962ae5499..000000000 --- a/packages/old/discordeno/oldTest/misc/snowflake.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' - -Deno.test({ - name: '[tranform] snowflake to bigint', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - assertEquals(130136895395987456n, bot.transformers.snowflake('130136895395987456')) - } -}) diff --git a/packages/old/discordeno/oldTest/misc/startTyping.test.ts b/packages/old/discordeno/oldTest/misc/startTyping.test.ts deleted file mode 100644 index 868d51b98..000000000 --- a/packages/old/discordeno/oldTest/misc/startTyping.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[typing] start typing', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'typing' }) - await bot.helpers.startTyping(channel.id) - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/mod.ts b/packages/old/discordeno/oldTest/mod.ts deleted file mode 100644 index e9e22ae76..000000000 --- a/packages/old/discordeno/oldTest/mod.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createBot, createRestManager } from '../mod.js' -import { dotenv } from './deps.js' - -dotenv({ export: true, path: `${Deno.cwd()}/.env` }) - -export function loadBot() { - const token = process.env.DISCORD_TOKEN - if (!token) throw new Error('Token was not provided.') - - const bot = createBot({ - token, - botGatewayData: { - url: 'wss://gateway.discord.gg', - shards: 1, - sessionStartLimit: { - maxConcurrency: 1, - remaining: 1000, - resetAfter: Date.now() + 1000 * 60 * 60 * 24, - total: 1000 - } - } - }) - - bot.rest = createRestManager({ - token, - customUrl: process.env.PROXY_REST_URL, - secretKey: process.env.PROXY_REST_SECRET - }) - - return bot -} diff --git a/packages/old/discordeno/oldTest/rest.ts b/packages/old/discordeno/oldTest/rest.ts deleted file mode 100644 index 0359ec750..000000000 --- a/packages/old/discordeno/oldTest/rest.ts +++ /dev/null @@ -1,109 +0,0 @@ -// START FILE FOR REST PROCESS -import { BASE_URL, createRestManager } from '../mod.js' -import { dotenv } from './deps.js' - -dotenv({ export: true, path: `${Deno.cwd()}/.env` }) - -const token = process.env.GAMER_TOKEN -if (!token) throw new Error('Token was not provided.') - -const REST_AUTHORIZATION_KEY = process.env.PROXY_REST_SECRET -const PROXY_REST_URL = process.env.PROXY_REST_URL -const REST_PORT = Number(PROXY_REST_URL?.substring(PROXY_REST_URL.lastIndexOf(':') + 1)) ?? 8080 - -// CREATES THE FUNCTIONALITY FOR MANAGING THE REST REQUESTS -const rest = createRestManager({ - token, - secretKey: REST_AUTHORIZATION_KEY, - customUrl: PROXY_REST_URL -}) - -// START LISTENING TO THE URL(localhost) -const server = Deno.listen({ port: REST_PORT }) -console.log( - `Rest Proxy running. Access it at: ${PROXY_REST_URL}` -) - -// Connections to the server will be yielded up as an async iterable. -for await (const conn of server) { - // In order to not be blocking, we need to handle each connection individually - // in its own async function. - handleRequest(conn) -} - -async function handleRequest(conn: Deno.Conn) { - // This "upgrades" a network connection into an HTTP connection. - const httpConn = Deno.serveHttp(conn) - // Each request sent over the HTTP connection will be yielded as an async - // iterator from the HTTP connection. - for await (const requestEvent of httpConn) { - if ( - !REST_AUTHORIZATION_KEY || - REST_AUTHORIZATION_KEY !== - requestEvent.request.headers.get('AUTHORIZATION') - ) { - return requestEvent.respondWith( - new Response(JSON.stringify({ error: 'Invalid authorization key.' }), { - status: 401 - }) - ) - } - - try { - const text = await requestEvent.request.text() - const json = text ? JSON.parse(text) : undefined - - if (json?.file) { - json.file = await Promise.all(json.file.map(async (f: any) => ({ - name: f.name, - blob: await (await fetch(f.blob)).blob() - }))) - } - - const result = await rest.runMethod( - rest, - requestEvent.request.method as RequestMethod, - `${BASE_URL}${requestEvent.request.url.substring( - `http://localhost:${REST_PORT}`.length - ) - }`, - json - ) - - if (result) { - requestEvent.respondWith( - new Response(JSON.stringify(result), { - status: 200 - }) - ) - } else { - requestEvent.respondWith( - new Response(undefined, { - status: 204 - }) - ) - } - } catch (error) { - console.log( - 'CATCH', - requestEvent.request.url, - requestEvent.request.method, - requestEvent.request.body, - error.code, - error - ) - requestEvent.respondWith( - new Response( - JSON.stringify({ - message: error.message - }), - { - status: error.code ?? 469 - } - ) - ) - } - } -} - -type RequestMethod = 'POST' | 'PUT' | 'DELETE' | 'PATCH' diff --git a/packages/old/discordeno/oldTest/stickers/createGuildSticker.test.ts b/packages/old/discordeno/oldTest/stickers/createGuildSticker.test.ts deleted file mode 100644 index 5b1df49bc..000000000 --- a/packages/old/discordeno/oldTest/stickers/createGuildSticker.test.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { StickerFormatTypes } from '../../mod.js' -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[stickers] Create guild sticker', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const sticker = await bot.helpers.createGuildSticker(CACHED_COMMUNITY_GUILD_ID, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png' - } - }) - - assertEquals(sticker.name, 'sticker name') - assertEquals(sticker.description, 'sticker description') - assertEquals(sticker.tags, 'sticker tags') - - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'test' }) - const message = await bot.helpers.sendMessage(channel.id, { stickerIds: [sticker.id] }) - - assertEquals(message.stickerItems?.[0].formatType, StickerFormatTypes.Png) - assertEquals(message.stickerItems?.[0].id, sticker.id) - assertEquals(message.stickerItems?.[0].name, sticker.name) - - await bot.helpers.deleteGuildSticker(CACHED_COMMUNITY_GUILD_ID, sticker.id) - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/stickers/deleteGuildSticker.test.ts b/packages/old/discordeno/oldTest/stickers/deleteGuildSticker.test.ts deleted file mode 100644 index c6aeb7077..000000000 --- a/packages/old/discordeno/oldTest/stickers/deleteGuildSticker.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { assertRejects } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[stickers] Delete guild sticker', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const sticker = await bot.helpers.createGuildSticker(CACHED_COMMUNITY_GUILD_ID, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png' - } - }) - await bot.helpers.deleteGuildSticker(CACHED_COMMUNITY_GUILD_ID, sticker.id) - await assertRejects(() => bot.helpers.getGuildSticker(CACHED_COMMUNITY_GUILD_ID, sticker.id)) - } -}) diff --git a/packages/old/discordeno/oldTest/stickers/editGuildSticker.test.ts b/packages/old/discordeno/oldTest/stickers/editGuildSticker.test.ts deleted file mode 100644 index d4cdfd0af..000000000 --- a/packages/old/discordeno/oldTest/stickers/editGuildSticker.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[stickers] Edit guild sticker', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const createSticker = await bot.helpers.createGuildSticker(CACHED_COMMUNITY_GUILD_ID, { - name: 'test', - description: 'test', - tags: 'test', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png' - } - }) - const editSticker = await bot.helpers.editGuildSticker(CACHED_COMMUNITY_GUILD_ID, createSticker.id, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags' - }) - assertEquals(editSticker.name, 'sticker name') - assertEquals(editSticker.description, 'sticker description') - assertEquals(editSticker.tags, 'sticker tags') - - await bot.helpers.deleteGuildSticker(CACHED_COMMUNITY_GUILD_ID, editSticker.id) - } -}) diff --git a/packages/old/discordeno/oldTest/stickers/getGuildSticker.test.ts b/packages/old/discordeno/oldTest/stickers/getGuildSticker.test.ts deleted file mode 100644 index dde66c4ed..000000000 --- a/packages/old/discordeno/oldTest/stickers/getGuildSticker.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[stickers] Get guild sticker', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const createSticker = await bot.helpers.createGuildSticker(CACHED_COMMUNITY_GUILD_ID, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png' - } - }) - const getSticker = await bot.helpers.getGuildSticker(CACHED_COMMUNITY_GUILD_ID, createSticker.id) - assertEquals(getSticker.name, 'sticker name') - assertEquals(getSticker.description, 'sticker description') - assertEquals(getSticker.tags, 'sticker tags') - - await bot.helpers.deleteGuildSticker(CACHED_COMMUNITY_GUILD_ID, getSticker.id) - } -}) diff --git a/packages/old/discordeno/oldTest/stickers/getGuildStickers.test.ts b/packages/old/discordeno/oldTest/stickers/getGuildStickers.test.ts deleted file mode 100644 index 41c226a02..000000000 --- a/packages/old/discordeno/oldTest/stickers/getGuildStickers.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[stickers] Get guild stickers', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const sticker1 = await bot.helpers.createGuildSticker(CACHED_COMMUNITY_GUILD_ID, { - name: 'sticker 1', - description: 'sticker 1', - tags: 'sticker tags 1', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png' - } - }) - const sticker2 = await bot.helpers.createGuildSticker(CACHED_COMMUNITY_GUILD_ID, { - name: 'sticker 2', - description: 'sticker 2', - tags: 'sticker tags 2', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png' - } - }) - const stickers = await bot.helpers.getGuildStickers(CACHED_COMMUNITY_GUILD_ID) - assertEquals(stickers.size > 1, true) - await bot.helpers.deleteGuildSticker(CACHED_COMMUNITY_GUILD_ID, sticker1.id) - await bot.helpers.deleteGuildSticker(CACHED_COMMUNITY_GUILD_ID, sticker2.id) - } -}) diff --git a/packages/old/discordeno/oldTest/stickers/getSticker.test.ts b/packages/old/discordeno/oldTest/stickers/getSticker.test.ts deleted file mode 100644 index ff04b2d38..000000000 --- a/packages/old/discordeno/oldTest/stickers/getSticker.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { assertEquals } from '../deps.js' -import { loadBot } from '../mod.js' - -Deno.test({ - name: '[stickers] Get sticker', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - const sticker = await bot.helpers.getSticker(749054660769218631n) - assertEquals(sticker.name, 'Wave') - } -}) diff --git a/packages/old/discordeno/oldTest/utils.test.ts b/packages/old/discordeno/oldTest/utils.test.ts deleted file mode 100644 index fafb3d90f..000000000 --- a/packages/old/discordeno/oldTest/utils.test.ts +++ /dev/null @@ -1,441 +0,0 @@ -import { Collection, formatImageURL, hasProperty, iconBigintToHash, iconHashToBigInt, validateLength } from '../mod.js' -import { decode, encode } from '../util/base64.js' -import { bigintToSnowflake, snowflakeToBigint } from '../util/bigint.js' -import { removeTokenPrefix } from '../util/token.js' -import { assertEquals, assertExists, assertNotEquals } from './deps.js' -import { loadBot } from './mod.js' -import { delayUntil } from './utils.js' - -Deno.test({ - name: '[token] Remove token prefix when Bot is prefixed.', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals('discordeno is best lib', removeTokenPrefix('Bot discordeno is best lib')) - } -}) - -Deno.test({ - name: '[token] Remove token prefix when Bot is NOT prefixed.', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals('discordeno is best lib', removeTokenPrefix('discordeno is best lib')) - } -}) - -Deno.test({ - name: '[bigint] - Transform a snowflake string to bigint', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const text = '130136895395987456' - const big = 130136895395987456n - const result = snowflakeToBigint(text) - - assertEquals(big, result) - assertNotEquals(text, result) - } -}) - -Deno.test({ - name: '[bigint] - Transform a bigint to a string', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const text = '130136895395987456' - const big = 130136895395987456n - const result = bigintToSnowflake(big) - - assertEquals(text, result) - assertNotEquals(big, result) - } -}) - -Deno.test({ - name: '[emoji] Create an emoji url', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - assertEquals( - bot.helpers.getEmojiURL(785403373817823272n, false), - 'https://cdn.discordapp.com/emojis/785403373817823272.png' - ) - assertEquals( - bot.helpers.getEmojiURL(785403373817823272n, true), - 'https://cdn.discordapp.com/emojis/785403373817823272.gif' - ) - } -}) - -Deno.test({ - name: "[guild] format a guild's icon url", - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - assertEquals( - bot.helpers.getGuildIconURL(785384884197392384n, 3837424427068676005442449262648382018748n), - 'https://cdn.discordapp.com/icons/785384884197392384/46f50fb412eab14ec455d5cf777154bc.jpg?size=128' - ) - } -}) - -Deno.test({ - name: "[guild] format a guild's banner url", - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - assertEquals( - bot.helpers.getGuildBannerURL(613425648685547541n, { - banner: 3919584870146358272366452115178209474142n - }), - 'https://cdn.discordapp.com/banners/613425648685547541/84c4964c115c128fb9100952c3b4f65e.jpg?size=128' - ) - } -}) - -Deno.test({ - name: "[guild] format a guild's splash url", - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - assertEquals( - bot.helpers.getGuildSplashURL(785384884197392384n, 3837424427068676005442449262648382018748n), - 'https://cdn.discordapp.com/splashes/785384884197392384/46f50fb412eab14ec455d5cf777154bc.jpg?size=128' - ) - } -}) - -Deno.test({ - name: '[utils] format image url', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(formatImageURL('https://skillz.is.pro'), 'https://skillz.is.pro.jpg?size=128') - assertEquals(formatImageURL('https://skillz.is.pro', 1024), 'https://skillz.is.pro.jpg?size=1024') - assertEquals(formatImageURL('https://skillz.is.pro', 1024, 'gif'), 'https://skillz.is.pro.gif?size=1024') - assertEquals(formatImageURL('https://skillz.is.pro', undefined, 'gif'), 'https://skillz.is.pro.gif?size=128') - } -}) - -const iconHash = '4bbb271a13f7195031adcc06a2d867ce' -const iconBigInt = 3843769888406823508519992434416504301518n -const a_iconHash = 'a_4bbb271a13f7195031adcc06a2d867ce' -const a_iconBigInt = 3503487521485885045056617826984736090062n - -Deno.test({ - name: '[utils] icon hash to bigint', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(iconHashToBigInt(iconHash), iconBigInt) - } -}) - -Deno.test({ - name: '[utils] icon bigint to hash', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(iconBigintToHash(iconBigInt), iconHash) - } -}) - -Deno.test({ - name: '[utils] icon hash to bigint a_ (animated)', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(iconHashToBigInt(a_iconHash), a_iconBigInt) - } -}) - -Deno.test({ - name: '[utils] icon bigint to hash a_ (animated)', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(iconBigintToHash(a_iconBigInt), a_iconHash) - } -}) - -Deno.test({ - name: '[utils] Validate length is too low', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(validateLength('test', { min: 5 }), false) - } -}) - -Deno.test({ - name: '[utils] Validate length is too high', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(validateLength('test', { max: 3 }), false) - } -}) - -Deno.test({ - name: '[utils] Validate length is NOT just right in between.', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(validateLength('test', { min: 5, max: 3 }), false) - } -}) - -Deno.test({ - name: '[utils] Validate length is NOT too low', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(validateLength('test', { min: 3 }), true) - } -}) - -Deno.test({ - name: '[utils] Validate length is NOT too high', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(validateLength('test', { max: 5 }), true) - } -}) - -Deno.test({ - name: '[utils] Validate length is just right in between.', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(validateLength('test', { min: 3, max: 6 }), true) - } -}) - -const obj = { prop: 'lts372005' } - -Deno.test({ - name: '[utils] hasProperty does HAVE property', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(hasProperty(obj, 'prop'), true) - } -}) - -Deno.test({ - name: '[utils] hasProperty does NOT HAVE property', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(hasProperty(obj, 'lts372005'), false) - } -}) - -Deno.test({ - name: '[member] format a members avatar url', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - assertEquals( - bot.helpers.getAvatarURL(130136895395987456n, '8840', { - avatar: 4055337350987360625717955448021200177333n - }), - 'https://cdn.discordapp.com/avatars/130136895395987456/eae5905ad2d18d7c8deca20478b088b5.jpg?size=128' - ) - } -}) - -Deno.test({ - name: '[collection] Create a collection', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const collection = new Collection() - - assertExists(collection) - - await t.step({ - name: '[collection] collection values to array', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const testCollection = new Collection([['best', 'tri'], ['proficient', 'yui']]) - - assertEquals(testCollection.array(), ['tri', 'yui']) - } - }) - - await t.step({ - name: '[collection] get a random value', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const testCollection = new Collection([['best', 'tri']]) - - assertEquals(['best', 'tri'].includes(testCollection.random() ?? ''), true) - assertEquals(collection.random(), undefined) - } - }) - - await t.step({ - name: '[collection] Set a value without maxSize', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - collection.set('best developer', 'triformine') - assertEquals(collection.size, 1) - assertEquals(collection.get('best developer'), 'triformine') - - collection.set('deno', 'yes') - - await t.step({ - name: '[collection] get the value of the first element', - async fn(t) { - assertEquals(collection.first(), 'triformine') - } - }) - - await t.step({ - name: '[collection] get the value of the last element', - async fn(t) { - assertEquals(collection.last(), 'yes') - } - }) - } - }) - - await t.step({ - name: '[collection] Create a collection with maxSize', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const maxSize = 2 - - const maxCollection = new Collection([], { - maxSize - }) - - assertExists(maxCollection) - assertExists(maxCollection.maxSize) - assertEquals(maxCollection.maxSize, maxSize) - - await t.step({ - name: '[collection] Test if maxSize works properly', - async fn(t) { - maxCollection.set('foo', 'bar') - maxCollection.set('me', 'you') - - assertEquals(maxCollection.size, 2) - - maxCollection.set('this', 'not') - - assertEquals(maxCollection.size, 2) - - await t.step({ - name: '[collection] Test if forceSet ignore maxSize', - async fn(t) { - maxCollection.forceSet('this', 'not') - - assertEquals(maxCollection.size, 3) - } - }) - } - }) - } - }) - - const testCollection = new Collection([['a', 1], ['b', 2], ['c', 3]]) - - await t.step({ - name: '[collection] find by key or value', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(testCollection.find((v, k) => v === 2), 2) - assertEquals(testCollection.find((v, k) => k === 'b'), 2) - } - }) - - await t.step({ - name: '[collection] filter by key or value', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(testCollection.filter((v, k) => v === 3).size, 1) - assertEquals(testCollection.filter((v, k) => k === 'd').size, 0) - } - }) - - await t.step({ - name: '[collection] map', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(testCollection.map((k, v) => `${v}${k}`), ['a1', 'b2', 'c3']) - } - }) - - await t.step({ - name: '[collection] some', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(testCollection.some((v, _) => v === 1), true) - assertEquals(testCollection.some((v, _) => v === 4), false) - } - }) - - await t.step({ - name: '[collection] every', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(testCollection.every((v, _) => v !== 0), true) - assertEquals(testCollection.every((v, _) => v === 1), false) - } - }) - - await t.step({ - name: '[collection] reduce', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(testCollection.reduce((acc, val) => acc + val, 0), 6) - } - }) - - await t.step({ - name: '[collection] start sweeper', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - const sweeperCollection = new Collection([['a', 1], ['b', 2]], { - sweeper: { - filter: (v, _) => v === 1, - interval: 50 - } - }) - - try { - assertEquals(sweeperCollection.size, 2) - - await delayUntil(150, () => sweeperCollection.size !== 2, 50) - - assertEquals(sweeperCollection.size, 1) - } catch (err) { - sweeperCollection.stopSweeper() - - throw err - } - - sweeperCollection.stopSweeper() - } - }) - } -}) - -Deno.test({ - name: '[utils] encode some bytes to base64', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(encode(new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])), 'AQIDBAUGBwgJCg==') - } -}) - -Deno.test({ - name: '[utils] decode some base64 to bytes', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - assertEquals(decode('AQIDBAUGBwgJCg=='), new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) - } -}) - -Deno.test({ - name: '[utils] encode/decode base64 roundtrip should work', - ignore: process.env.TEST_ENV === 'INTEGRATION', - async fn(t) { - for (let i = 0; i < 10; i++) { - const bytes = [] - for (let i = 0; i < 10000; i++) { - bytes.push(Math.floor(Math.random() * 256)) - } - const data = new Uint8Array(bytes) - assertEquals(decode(encode(data)), data) - } - } -}) diff --git a/packages/old/discordeno/oldTest/utils.ts b/packages/old/discordeno/oldTest/utils.ts deleted file mode 100644 index 4907f61c4..000000000 --- a/packages/old/discordeno/oldTest/utils.ts +++ /dev/null @@ -1,23 +0,0 @@ -const UNIT_TEST_GUILD_ID = process.env.UNIT_TEST_GUILD_ID - -export const CACHED_COMMUNITY_GUILD_ID = UNIT_TEST_GUILD_ID ? BigInt(UNIT_TEST_GUILD_ID) : 907350958810480671n - -export async function delayUntil ( - maxMs: number, - isReady: () => boolean | undefined | Promise, - timeoutTime = 100 -): Promise { - const maxTime = Date.now() + maxMs - - async function hackyFix (resolve: () => void) { - if ((await isReady()) || Date.now() >= maxTime) { - resolve() - } else { - setTimeout(() => { - hackyFix(resolve) - }, timeoutTime) - } - } - - return await new Promise(async (resolve) => await hackyFix(resolve)) -} diff --git a/packages/old/discordeno/oldTest/webhook/deleteWebhook.test.ts b/packages/old/discordeno/oldTest/webhook/deleteWebhook.test.ts deleted file mode 100644 index 85ce8ab12..000000000 --- a/packages/old/discordeno/oldTest/webhook/deleteWebhook.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { assertExists, assertRejects } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[webhook] delete a webhook', - ignore: process.env.TEST_ENV === 'UNIT', - async fn (t) { - const bot = loadBot() - - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { - name: 'deleteWebhook' - }) - assertExists(channel?.id) - - const webhook = await bot.helpers.createWebhook(channel.id, { - name: 'delete' - }) - assertExists(webhook?.id) - - await bot.helpers.deleteWebhook(webhook.id) - - // Fetch the webhook to validate it was deleted - await assertRejects(() => bot.helpers.getWebhook(webhook.id)) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/webhook/deleteWebhookWithToken.test.ts b/packages/old/discordeno/oldTest/webhook/deleteWebhookWithToken.test.ts deleted file mode 100644 index 0ee5e159d..000000000 --- a/packages/old/discordeno/oldTest/webhook/deleteWebhookWithToken.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { assertExists, assertRejects } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[webhook] delete a webhook', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'deleteWebhook' }) - assertExists(channel?.id) - - const webhook = await bot.helpers.createWebhook(channel.id, { name: 'delete' }) - assertExists(webhook?.id) - assertExists(webhook.token) - - await bot.helpers.deleteWebhookWithToken(webhook.id, webhook.token) - - // Fetch the webhook to validate it was deleted - await assertRejects(() => bot.helpers.getWebhook(webhook.id)) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/webhook/messages.test.ts b/packages/old/discordeno/oldTest/webhook/messages.test.ts deleted file mode 100644 index 021e0a92e..000000000 --- a/packages/old/discordeno/oldTest/webhook/messages.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { assertEquals, assertExists, assertNotEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[webhooks] Send a message with a webhook', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'webhooks' }) - assertExists(channel?.id) - - const webhook = await bot.helpers.createWebhook(channel.id, { - name: 'gigi' - }) - - assertExists(webhook.token) - - const message = await bot.helpers.sendWebhookMessage(webhook.id, webhook.token, { - content: 'discordeno is best lib', - wait: true - }) - - assertExists(message?.id) - - await t.step('[webhooks] Get a webhook message', async () => { - const fetched = await bot.helpers.getWebhookMessage(webhook.id, webhook.token!, message.id) - - assertExists(fetched) - assertEquals(fetched.content, message.content) - }) - - await t.step('[webhooks] Edit a webhook message', async () => { - const edited = await bot.helpers.editWebhookMessage(webhook.id, webhook.token!, message.id, { - content: 'different' - }) - - assertExists(edited) - assertNotEquals(edited.content, message.content) - }) - - await t.step('[webhooks] Delete a webhook message', async () => { - assertExists(webhook.token) - await bot.helpers.deleteWebhookMessage(webhook.id, webhook.token, message.id) - }) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/oldTest/webhook/webhook.test.ts b/packages/old/discordeno/oldTest/webhook/webhook.test.ts deleted file mode 100644 index 8b8480b2a..000000000 --- a/packages/old/discordeno/oldTest/webhook/webhook.test.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { assertEquals, assertExists, assertNotEquals } from '../deps.js' -import { loadBot } from '../mod.js' -import { CACHED_COMMUNITY_GUILD_ID } from '../utils.js' - -Deno.test({ - name: '[webhooks] Webhook related tests', - ignore: process.env.TEST_ENV === 'UNIT', - async fn(t) { - const bot = loadBot() - - // Create a channel - const channel = await bot.helpers.createChannel(CACHED_COMMUNITY_GUILD_ID, { name: 'wbhook' }) - - await t.step('[webhooks] Create a webhook', async (t) => { - const webhook = await bot.helpers.createWebhook(channel.id, { - name: 'idk' - }) - assertExists(webhook) - assertEquals(webhook.name, 'idk') - - await t.step('[webhooks] Edit a webhook', async (t) => { - const edited = await bot.helpers.editWebhook(webhook.id, { - name: 'edited' - }) - - assertNotEquals(webhook.name, edited.name) - }) - - await t.step('[webhooks] Edit a webhook with token', async () => { - assertExists(webhook.token) - const edited = await bot.helpers.editWebhookWithToken(webhook.id, webhook.token, { - name: 'editedtoken' - }) - - assertNotEquals(webhook.name, edited.name) - }) - - await t.step('[webhooks] Get a webhook', async () => { - const fetched = await bot.helpers.getWebhook(webhook.id) - assertExists(fetched) - assertEquals(webhook.id, fetched.id) - }) - - await t.step('[webhooks] Get a webhook with a token', async () => { - assertExists(webhook.token) - const fetched = await bot.helpers.getWebhookWithToken(webhook.id, webhook.token) - assertEquals(webhook.id, fetched.id) - }) - }) - - await t.step('[webhooks] Get channel webhooks', async (t) => { - const second = await bot.helpers.createWebhook(channel.id, { name: 'what nonsense' }) - - assertExists(second) - const fetched = await bot.helpers.getChannelWebhooks(channel.id) - assertEquals(fetched.size > 1, true) - - await t.step('[webhooks] Get guild webhooks', async () => { - const guildWebhooks = await bot.helpers.getGuildWebhooks(channel.guildId) - assertEquals(guildWebhooks.size > 1, true) - }) - }) - - await bot.helpers.deleteChannel(channel.id) - } -}) diff --git a/packages/old/discordeno/package.json b/packages/old/discordeno/package.json deleted file mode 100644 index 16c7bfb1f..000000000 --- a/packages/old/discordeno/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "discordeno", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js discordeno", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "dependencies": { - "@discordeno/client": "18.0.0-alpha.1", - "@discordeno/gateway": "18.0.0-alpha.1", - "@discordeno/rest": "18.0.0-alpha.1", - "@discordeno/utils": "18.0.0-alpha.1" - }, - "devDependencies": { - "@discordeno/types": "18.0.0-alpha.1", - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/chai": "^4", - "@types/mocha": "^10", - "@types/node": "^18.11.9", - "@types/sinon": "^10.0.13", - "c8": "^7.12.0", - "chai": "^4.3.7", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - } -} \ No newline at end of file diff --git a/packages/old/discordeno/place/debug.rest.ts b/packages/old/discordeno/place/debug.rest.ts deleted file mode 100644 index 35504c344..000000000 --- a/packages/old/discordeno/place/debug.rest.ts +++ /dev/null @@ -1,137 +0,0 @@ -// START FILE FOR REST PROCESS -import { config as dotenv } from 'https://deno.land/x/dotenv@v3.2.0/index.js' - -import { BASE_URL, Collection, createRestManager } from './index.js' - -dotenv({ export: true, path: `${Deno.cwd()}/.env` }) - -const col = new Collection() - -const token = process.env.GAMER_TOKEN -if (!token) throw new Error('Token was not provided.') - -const REST_AUTHORIZATION_KEY = process.env.PROXY_REST_SECRET -const PROXY_REST_URL = process.env.PROXY_REST_URL -const REST_PORT = Number(PROXY_REST_URL?.substring(PROXY_REST_URL.lastIndexOf(':') + 1)) ?? 8080 - -// CREATES THE FUNCTIONALITY FOR MANAGING THE REST REQUESTS -const rest = createRestManager({ - token, - secretKey: REST_AUTHORIZATION_KEY, - customUrl: PROXY_REST_URL, - debug (text) { - if (text.startsWith('[REST - RequestCreate]')) { - const aaa = text.split(' ') - const method = aaa[4] - const url = aaa[7] - - col.set(method + url, Date.now()) - - // console.log("[DEBUG]", method, url); - } - - if (text.startsWith('[REST - processGlobalQueue] rate limited, running setTimeout.')) { - console.log('[POSSIBLE BUCKET ISSUE]') - } - }, - fetching (options) { - // console.log("[FETCHING]", options.method, options.url, Date.now() - col.get(options.method + options.url)!); - } -}) - -// START LISTENING TO THE URL(localhost) -const server = Deno.listen({ port: REST_PORT }) -console.log( - `HTTP webserver running. Access it at: ${PROXY_REST_URL}` -) - -// Connections to the server will be yielded up as an async iterable. -for await (const conn of server) { - // In order to not be blocking, we need to handle each connection individually - // in its own async function. - handleRequest(conn) -} - -async function handleRequest (conn: Deno.Conn) { - // This "upgrades" a network connection into an HTTP connection. - const httpConn = Deno.serveHttp(conn) - // Each request sent over the HTTP connection will be yielded as an async - // iterator from the HTTP connection. - for await (const requestEvent of httpConn) { - if ( - !REST_AUTHORIZATION_KEY || - REST_AUTHORIZATION_KEY !== - requestEvent.request.headers.get('AUTHORIZATION') - ) { - return requestEvent.respondWith( - new Response(JSON.stringify({ error: 'Invalid authorization key.' }), { - status: 401 - }) - ) - } - - try { - const text = await requestEvent.request.text() - const json = text ? JSON.parse(text) : undefined - - if (json?.file) { - json.file = await Promise.all(json.file.map(async (f: any) => ({ - name: f.name, - blob: await (await fetch(f.blob)).blob() - }))) - } - - const result = await rest.runMethod( - rest, - requestEvent.request.method as RequestMethod, - `${BASE_URL}${requestEvent.request.url.substring( - `http://localhost:${REST_PORT}`.length - ) - }`, - json - ) - - if (result) { - requestEvent.respondWith( - new Response(JSON.stringify(result), { - status: 200 - }) - ) - } else { - requestEvent.respondWith( - new Response(undefined, { - status: 204 - }) - ) - } - } catch (error) { - console.log( - 'CATCH', - requestEvent.request.url, - requestEvent.request.method, - requestEvent.request.body, - error.code, - error - ) - requestEvent.respondWith( - new Response( - JSON.stringify({ - message: error.message - }), - { - status: error.code ?? 469 - } - ) - ) - } - } -} - -type RequestMethod = 'POST' | 'PUT' | 'DELETE' | 'PATCH' - -// // @ts-ignore -// rest.convertRestError = (errorStack, data) => { -// return data; -// }; - -// console.log(`Giveaway Boat REST Started At: ${new Date().toUTCString()}`); diff --git a/packages/old/discordeno/place/mod.ts b/packages/old/discordeno/place/mod.ts deleted file mode 100644 index 94c7a48f8..000000000 --- a/packages/old/discordeno/place/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './@discordeno/types.js' -export * from './bot.js' -export * from './gateway/index.js' -export * from './handlers/index.js' -export * from './helpers/index.js' -export * from './rest/index.js' -export * from './transformers/index.js' -export * from './util/index.js' diff --git a/packages/old/discordeno/src/bot.ts b/packages/old/discordeno/src/bot.ts deleted file mode 100644 index ac79aaa34..000000000 --- a/packages/old/discordeno/src/bot.ts +++ /dev/null @@ -1,114 +0,0 @@ -import type { Client, CreateClientOptions } from '@discordeno/client' -import { createClient } from '@discordeno/client' -import { - createGatewayManager, - ShardSocketCloseCodes -} from '@discordeno/gateway' -import type { CreateRestManagerOptions } from '@discordeno/rest' -import { createRestManager } from '@discordeno/rest' -import type { - DiscordGatewayPayload, - GatewayDispatchEventNames, - GetGatewayBot -} from '@discordeno/types' -import { Errors } from '@discordeno/types' - -import { - baseEndpoints, - CHANNEL_MENTION_REGEX, - CONTEXT_MENU_COMMANDS_NAME_REGEX, - DISCORDENO_VERSION, - DISCORD_SNOWFLAKE_REGEX, - SLASH_COMMANDS_NAME_REGEX, - USER_AGENT -} from '@discordeno/utils' - -export function createBot (options: CreateBotOptions): Bot { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - const bot = { - ...createClient(options), - handleDiscordPayload: options.handleDiscordPayload, - botGatewayData: options.botGatewayData, - rest: createRestManager({ - token: options.token, - debug: options.events?.debug, - secretKey: options.secretKey ?? undefined - }) - } as Bot - - bot.gateway = createGatewayManager({ - gatewayBot: bot.botGatewayData ?? ({} as any), - gatewayConfig: { - token: options.token, - intents: options.intents - }, - - debug: bot.events.debug, - - handleDiscordPayload: - bot.handleDiscordPayload ?? - async function (shard, data: DiscordGatewayPayload) { - // TRIGGER RAW EVENT - bot.events.raw(bot, data, shard.id) - - if (!data.t) return - - // RUN DISPATCH CHECK - await bot.events.dispatchRequirements(bot, data, shard.id) - bot.handlers[data.t as GatewayDispatchEventNames]?.( - bot, - data, - shard.id - ) - } - }) - - return bot -} - -export async function startBot (bot: Bot): Promise { - if (Object.keys(bot.botGatewayData ?? {}).length === 0) { - bot.gateway.gatewayBot = await bot.rest.getGatewayBot() - bot.gateway.lastShardId = bot.gateway.gatewayBot.shards - 1 - bot.gateway.manager.totalShards = bot.gateway.gatewayBot.shards - } - - bot.gateway.spawnShards() -} - -export async function stopBot (bot: Bot): Promise { - await bot.gateway.stop( - ShardSocketCloseCodes.Shutdown, - 'User requested bot stop' - ) - - return bot -} - -export interface CreateBotOptions extends CreateClientOptions { - botGatewayData?: GetGatewayBot - rest?: Omit -} - -export interface Bot extends Client { - botGatewayData?: GetGatewayBot - rest: ReturnType - gateway: ReturnType -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function createBotConstants () { - return { - DISCORDENO_VERSION, - USER_AGENT, - BASE_URL: baseEndpoints.BASE_URL, - CDN_URL: baseEndpoints.CDN_URL, - regexes: { - SLASH_COMMANDS_NAME_REGEX, - CONTEXT_MENU_COMMANDS_NAME_REGEX, - CHANNEL_MENTION_REGEX, - DISCORD_SNOWFLAKE_REGEX - }, - Errors - } -} diff --git a/packages/old/discordeno/src/index.ts b/packages/old/discordeno/src/index.ts deleted file mode 100644 index fdbb3cbec..000000000 --- a/packages/old/discordeno/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from '@discordeno/client' -export * from '@discordeno/gateway' -export * from '@discordeno/rest' -export * from '@discordeno/types' -export * from '@discordeno/utils' -export * from './bot.js' diff --git a/packages/old/discordeno/tests/empty.spec.ts b/packages/old/discordeno/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/discordeno/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/discordeno/tsconfig.json b/packages/old/discordeno/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/discordeno/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/discordeno/tsconfig.test.json b/packages/old/discordeno/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/discordeno/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/embeds/.c8rc.json b/packages/old/embeds/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/embeds/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/embeds/.mocharc.json b/packages/old/embeds/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/embeds/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/embeds/package.json b/packages/old/embeds/package.json deleted file mode 100644 index 3caa4884a..000000000 --- a/packages/old/embeds/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "@discordeno/embeds", - "version": "18.0.0-alpha.1", - "main": "./src/index.ts", - "types": "./src/index.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "lint": "eslint \"**/*.ts*\"" - }, - "devDependencies": { - "@types/chai": "^4", - "@types/mocha": "^10", - "@types/sinon": "^10.0.13", - "c8": "^7.12.0", - "chai": "^4.3.7", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - } -} \ No newline at end of file diff --git a/packages/old/embeds/src/index.ts b/packages/old/embeds/src/index.ts deleted file mode 100644 index 7f652b973..000000000 --- a/packages/old/embeds/src/index.ts +++ /dev/null @@ -1,306 +0,0 @@ -// The order of the import is important -import type { - DiscordEmbed, - Embed, - ImageFormat, - ImageSize, - User -} from './deps.js' -import { - formatImageURL, - iconBigintToHash -} from './deps.js' - -import { routes } from '@discordeno/utils' - -export const embedLimits = { - title: 256, - description: 4096, - fieldName: 256, - fieldValue: 1024, - footerText: 2048, - authorName: 256, - fields: 25, - total: 6000 -} - -// COPIED FROM DISCORDENO AS A TEMP SOLUTION -// TODO: remove when DD has improved utils -function avatarURL ( - userId: bigint, - discriminator: string, - options?: { - avatar: bigint | undefined - size?: ImageSize - format?: ImageFormat - } -): string { - return options?.avatar - ? formatImageURL( - routes.USER_AVATAR( - userId, - typeof options?.avatar === 'string' - ? options.avatar - : iconBigintToHash(options?.avatar) - ), - options?.size || 128, - options?.format - ) - : routes.USER_DEFAULT_AVATAR(Number(discriminator) % 5) -} - -export class Embeds extends Array { - /** The amount of characters in the embed. */ - currentTotal = 0 - /** Whether the limits should be enforced or not. */ - enforceLimits = true - /** If a file is attached to the message it will be added here. */ - file?: EmbedFile - - constructor (enforceLimits = true) { - super() - // By default, always enforce discord limits but this allows bypass for any reason. - if (!enforceLimits) this.enforceLimits = false - - return this - } - - fitData (data: string, max: number): string { - // If the string is bigger then the allowed max shorten it. - if (data.length > max) data = data.substring(0, max) - // Check the amount of characters left for this embed - const availableCharacters = embedLimits.total - this.currentTotal - // If it is maxed out already return empty string as nothing can be added anymore - if (!availableCharacters) return '' - // If the string breaks the maximum embed limit then shorten it. - if (this.currentTotal + data.length > embedLimits.total) { - return data.substring(0, availableCharacters) - } - // Return the data as is with no changes. - return data - } - - setAuthor (name: string, iconUrl?: string | User, url?: string): this { - const embed = this.getLastEmbed() - const finalName = this.enforceLimits - ? this.fitData(name, embedLimits.authorName) - : name - - if (typeof iconUrl === 'string') { - embed.author = { name: finalName, iconUrl, url } - } else if (iconUrl) { - embed.author = { - name: finalName, - iconUrl: avatarURL(iconUrl.id, iconUrl?.discriminator, { - avatar: iconUrl.avatar! - }), - url - } - } else { - embed.author = { name: finalName, url } - } - - return this - } - - setColor (color: string): this { - this.getLastEmbed().color = - color.toLowerCase() === 'random' - ? Math.floor(Math.random() * (0xffffff + 1)) // Random color - : parseInt(color.replace('#', ''), 16) // Convert the hex to a acceptable color for discord - - return this - } - - setDescription (description: string | string[]): this { - if (Array.isArray(description)) description = description.join('\n') - this.getLastEmbed().description = this.fitData( - description, - embedLimits.description - ) - - return this - } - - addField (name: string, value: string, inline = false): this { - const embed = this.getLastEmbed() - - if (embed.fields!.length >= 25) return this - - embed.fields!.push({ - name: this.fitData(name, embedLimits.fieldName), - value: this.fitData(value, embedLimits.fieldValue), - inline - }) - - return this - } - - addBlankField (inline = false): this { - return this.addField('\u200B', '\u200B', inline) - } - - attachFile (file: unknown, name: string): this { - this.file = { - blob: file, - name - } - this.setImage(`attachment://${name}`) - - return this - } - - setFooter (text: string, icon?: string): this { - this.getLastEmbed().footer = { - text: this.fitData(text, embedLimits.footerText), - iconUrl: icon - } - - return this - } - - setImage (url: string | User): this { - if (typeof url === 'string') this.getLastEmbed().image = { url } - else { - this.getLastEmbed().image = { - url: avatarURL(url.id, url.discriminator, { - avatar: url.avatar!, - size: 2048 - }) - } - } - - return this - } - - setTimestamp (time = Date.now()): this { - this.getLastEmbed().timestamp = time - - return this - } - - setTitle (title: string, url?: string): this { - this.getLastEmbed().title = this.fitData(title, embedLimits.title) - if (url) this.getLastEmbed().url = url - - return this - } - - setURL (url: string): this { - this.getLastEmbed().url = url - - return this - } - - setThumbnail (url: string): this { - this.getLastEmbed().thumbnail = { url } - - return this - } - - addEmbed (embed?: Embed): this { - if (this.length === 10) return this - - this.push({ ...embed, fields: embed?.fields ?? [] }) - - return this - } - - /** Get the last DiscordEmbed, if there is no it will create one */ - getLastEmbed (): Embed { - if (this.length) return this[this.length - 1] - - this.push({ - fields: [] - }) - - return this[0] - } - - setFromJson (json: Record): this { - if (json.author?.name) { this.setAuthor(json.author.name, json.author.icon_url, json.url) } - if (json.title) this.setTitle(json.title, json.url) - if (json.description) this.setDescription(json.description) - if (json.color) this.setColor(json.color) - if (json.timestamp) this.setTimestamp() - if (json.footer?.text) { this.setFooter(json.footer.text, json.footer.icon_url) } - if (json.thumbnail) { this.setThumbnail(json.thumbnail?.url ?? json.thumbnail) } - if (json.image) this.setImage(json.image?.url ?? json.image) - if (json.fields && Array.isArray(json.fields)) { - for (const field of json.fields) { - if (field.name && field.value) { - this.addField(field.name, field.value, field.inline) - } - } - } - - return this - } - - setFromEmbed (embed: Embed): this { - if (embed.author?.name) { this.setAuthor(embed.author.name, embed.author.iconUrl, embed.url) } - if (embed.title) this.setTitle(embed.title, embed.url) - if (embed.description) this.setDescription(embed.description) - if (embed.color) this.getLastEmbed().color = embed.color - if (embed.timestamp) this.setTimestamp(embed.timestamp) - if (embed.footer?.text) { this.setFooter(embed.footer.text, embed.footer.iconUrl) } - if (embed.thumbnail?.url) this.setThumbnail(embed.thumbnail?.url) - if (embed.image?.url) this.setImage(embed.image?.url) - if (embed.fields && Array.isArray(embed.fields)) { - for (const field of embed.fields) { - if (field.name && field.value) { - this.addField(field.name, field.value, field.inline) - } - } - } - - return this - } - - showEmbedCode (): DiscordEmbed[] { - return this.map((embed) => ({ - ...embed, - timestamp: embed.timestamp - ? new Date(embed.timestamp).toISOString() - : undefined, - author: embed.author - ? { - name: embed.author.name, - url: embed.author.url, - proxy_icon_url: embed.author.proxyIconUrl, - icon_url: embed.author.iconUrl - } - : undefined, - footer: embed.footer - ? { - text: embed.footer.text, - proxy_icon_url: embed.footer.proxyIconUrl, - icon_url: embed.footer.iconUrl - } - : undefined, - image: embed.image - ? { - url: embed.image.url, - height: embed.image.height, - width: embed.image.width, - proxy_url: embed.image.proxyUrl - } - : undefined, - thumbnail: embed.thumbnail - ? { - url: embed.thumbnail.url, - height: embed.thumbnail.height, - width: embed.thumbnail.width, - proxy_url: embed.thumbnail.proxyUrl - } - : undefined - })) - } -} - -export interface EmbedFile { - blob: unknown - name: string -} - -export default Embeds diff --git a/packages/old/embeds/tests/empty.spec.ts b/packages/old/embeds/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/embeds/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/embeds/tsconfig.json b/packages/old/embeds/tsconfig.json deleted file mode 100644 index 0847b1d19..000000000 --- a/packages/old/embeds/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "include": [ - "." - ] -} \ No newline at end of file diff --git a/packages/old/embeds/tsconfig.test.json b/packages/old/embeds/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/embeds/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/eslint-config-discordeno/index.js b/packages/old/eslint-config-discordeno/index.js deleted file mode 100644 index 8397e8d08..000000000 --- a/packages/old/eslint-config-discordeno/index.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - env: { - es2021: true, - node: true - }, - extends: 'standard-with-typescript', - overrides: [ - { - files: ['*.spec.ts'], - rules: { - '@typescript-eslint/no-unused-expressions': 'off' - } - } - ], - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: ['./tsconfig.json'] - }, - rules: { - '@typescript-eslint/strict-boolean-expressions': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/consistent-type-assertions': 'off', - '@typescript-eslint/no-floating-promises': 'off', - '@typescript-eslint/no-invalid-void-type': 'off', - '@typescript-eslint/consistent-type-imports': 'error', - '@typescript-eslint/no-misused-promises': 'off' - } -} diff --git a/packages/old/eslint-config-discordeno/package.json b/packages/old/eslint-config-discordeno/package.json deleted file mode 100644 index 744cf3053..000000000 --- a/packages/old/eslint-config-discordeno/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "eslint-config-discordeno", - "version": "0.0.0", - "main": "index.js", - "license": "MIT", - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.45.0", - "eslint": "^8.0.1", - "eslint-config-standard-with-typescript": "^23.0.0", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0", - "typescript": "^4.9.3" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/old/gateway/.c8rc.json b/packages/old/gateway/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/gateway/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/gateway/.mocharc.json b/packages/old/gateway/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/gateway/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/gateway/.swcrc b/packages/old/gateway/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/gateway/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/gateway/README.md b/packages/old/gateway/README.md deleted file mode 100644 index d608547e2..000000000 --- a/packages/old/gateway/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# Standalone WS / Proxy WS - -This WS service is meant for ADVANCED DEVELOPERS ONLY! - -## Benefits - -- **Zero Downtime Updates**: - - - Your bot can be updated in a matter of seconds. With normal sharding, you have to restart which also has to process - identifying all your shards with a 1/~5s rate limit. With WS handling moved to a proxy process, this allows you to - instantly get the bot code restarted without any concerns of delays. If you have a bot on 200,000 servers normally - this would mean a 20 minute delay to restart your bot if you made a small change and restarted. - -- **Zero Downtime Resharding**: - - - Discord stops letting your bot get added to new servers at certain points in time. For example, suppose you had - 150,000 servers running 150 shards. The maximum amount of servers your shards could hold is 150 \* 2500 = 375,000. - If your bot reaches this, it can no longer join new servers until it re-shards. - - DD proxy provides 2 types of re-sharding. Automated and manual. You can also have both. - - `Automated`: This system will automatically begin a Zero-downtime resharding process behind the scenes when you - reach 80% of your maximum servers allowed by your shards. For example, since 375,000 was the max, at 300,000 we - would begin re-sharding behind the scenes with `ZERO DOWNTIME`. - - 80% of maximum servers reached (The % of 80% is customizable.) - - Identify limits have room to allow re-sharding. (Also customizable) - - `Manual`: You can also trigger this manually should you choose. - -- **Horizontal Scaling**: - - - The proxy system allows you to scale the bot horizontally. When you reach a huge size, you can either keep spending - more money to keep beefing up your server or you can buy several cheaper servers and scale horizontally. The proxy - means you can have WS handling on a completely separate system. - -- **No Loss Restarts**: - - - When you restart a bot without the proxy system, normally you would lose many events. Users may be using commands or - messages are sent that will not be filtered. As your bot's grow this number rises dramatically. Users may join who - wont get the auto-roles or any other actions your bot should take. With the proxy system, you can keep restarting - your bot and never lose any events. Events will be put into a queue while your bot is down(max size of queue is - customizable), once the bot is available the queue will begin processing all events. - -- **Controllers**: - - - The controller aspect gives you full control over everything inside the proxy. You can provide a function to simply - override the handler. For example, if you would like a certain function to do something different, instead of having - to fork and maintain your fork, you can just provide a function to override. - -- **Clustering With Workers**: - - Take full advantage of all your CPU cores by using workers to spread the load. Control how many shards per worker - and how many workers to maximize efficiency! - -## Usage - -```ts -createGatewayManager({ - // TODO: (docs) Fill this out -}); -``` - -## API/Docs - -// TODO: (docs) Fill this out. List all props/methods. diff --git a/packages/old/gateway/package.json b/packages/old/gateway/package.json deleted file mode 100644 index 7ba055381..000000000 --- a/packages/old/gateway/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@discordeno/gateway", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js gateway", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "dependencies": { - "@discordeno/utils": "18.0.0-alpha.1", - "ws": "^8.11.0" - }, - "devDependencies": { - "@discordeno/types": "18.0.0-alpha.1", - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/chai": "^4", - "@types/mocha": "^10", - "@types/node": "^18.11.9", - "@types/sinon": "^10.0.13", - "@types/ws": "^8.5.3", - "c8": "^7.12.0", - "chai": "^4.3.7", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - } -} \ No newline at end of file diff --git a/packages/old/gateway/src/index.ts b/packages/old/gateway/src/index.ts deleted file mode 100644 index 57e304a43..000000000 --- a/packages/old/gateway/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './manager/index.js' -export * from './shard/index.js' diff --git a/packages/old/gateway/src/manager/calculateTotalShards.ts b/packages/old/gateway/src/manager/calculateTotalShards.ts deleted file mode 100644 index 2667fb8cf..000000000 --- a/packages/old/gateway/src/manager/calculateTotalShards.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { GatewayManager } from './gatewayManager.js' - -/** Handler used to determine max number of shards to use based upon the max concurrency. */ -export function calculateTotalShards (gateway: GatewayManager): number { - // Bots under 100k servers do not have access to total shards. - if (gateway.manager.totalShards < 100) return gateway.manager.totalShards - - // Calculate a multiple of `maxConcurrency` which can be used to connect to the gateway. - return ( - Math.ceil( - gateway.manager.totalShards / - // If `maxConcurrency` is 1 we can safely use 16. - (gateway.gatewayBot.sessionStartLimit.maxConcurrency === 1 - ? 16 - : gateway.gatewayBot.sessionStartLimit.maxConcurrency) - ) * gateway.gatewayBot.sessionStartLimit.maxConcurrency - ) -} diff --git a/packages/old/gateway/src/manager/calculateWorkerId.ts b/packages/old/gateway/src/manager/calculateWorkerId.ts deleted file mode 100644 index 8556d9166..000000000 --- a/packages/old/gateway/src/manager/calculateWorkerId.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GatewayManager } from './gatewayManager.js' - -export function calculateWorkerId ( - manager: GatewayManager, - shardId: number -): number { - // Ignore decimal numbers. - let workerId = Math.floor(shardId / manager.shardsPerWorker) - // If the workerId overflows the maximal allowed workers we by default just use to last worker. - if (workerId >= manager.totalWorkers) { - // The Id of the last available worker is total -1 - workerId = manager.totalWorkers - 1 - } - - return workerId -} diff --git a/packages/old/gateway/src/manager/gatewayManager.ts b/packages/old/gateway/src/manager/gatewayManager.ts deleted file mode 100644 index c9f495348..000000000 --- a/packages/old/gateway/src/manager/gatewayManager.ts +++ /dev/null @@ -1,323 +0,0 @@ -import type { - DiscordGatewayPayload, - GetGatewayBot, - PickPartial -} from '@discordeno/types' -import type { LeakyBucket } from '@discordeno/utils' -import { Collection } from '@discordeno/utils' -import type { CreateShard } from '../shard/createShard.js' -import type { Shard, ShardGatewayConfig } from '../shard/types.js' -import { calculateTotalShards } from './calculateTotalShards.js' -import { calculateWorkerId } from './calculateWorkerId.js' -// import { -// markNewGuildShardId, -// resharder, -// resharderCloseOldShards, -// resharderIsPending, -// reshardingEditGuildShardIds, -// } from "./resharder.js"; -import { prepareBuckets } from './prepareBuckets.js' -import type { ShardManager } from './shardManager.js' -import { createShardManager } from './shardManager.js' -import { spawnShards } from './spawnShards.js' -import { stop } from './stop.js' -import { tellWorkerToIdentify } from './tellWorkerToIdentify.js' - -export type GatewayManager = ReturnType - -/** Create a new Gateway Manager. - * - * @param options: Customize every bit of the manager. If something is not - * provided, it will fallback to a default which should be suitable for most - * bots. - */ -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function createGatewayManager ( - options: PickPartial< - CreateGatewayManager, - 'handleDiscordPayload' | 'gatewayBot' | 'gatewayConfig' - > -) { - const prepareBucketsOverwritten = options.prepareBuckets ?? prepareBuckets - const spawnShardsOverwritten = options.spawnShards ?? spawnShards - const stopOverwritten = options.stop ?? stop - const tellWorkerToIdentifyOverwritten = - options.tellWorkerToIdentify ?? tellWorkerToIdentify - const calculateTotalShardsOverwritten = - options.calculateTotalShards ?? calculateTotalShards - const calculateWorkerIdOverwritten = - options.calculateWorkerId ?? calculateWorkerId - - const totalShards = options.totalShards ?? options.gatewayBot.shards ?? 1 - - const gatewayManager = { - // ---------- - // PROPERTIES - // ---------- - - /** The max concurrency buckets. - * Those will be created when the `spawnShards` (which calls `prepareBuckets` under the hood) function gets called. - */ - buckets: new Collection< - number, - { - workers: Array<{ id: number, queue: number[] }> - leak: LeakyBucket - } - >(), - /** Id of the first Shard which should get controlled by this manager. - * - * NOTE: This is intended for testing purposes - * if big bots want to test the gateway on smaller scale. - * This is not recommended to be used in production. - */ - firstShardId: options.firstShardId ?? 0, - /** Important data which is used by the manager to connect shards to the gateway. */ - gatewayBot: options.gatewayBot, - /** Id of the last Shard which should get controlled by this manager. - * - * NOTE: This is intended for testing purposes - * if big bots want to test the gateway on smaller scale. - * This is not recommended to be used in production. - */ - lastShardId: options.lastShardId ?? totalShards - 1 ?? 1, - /** This is where the Shards get stored. - * This will not be used when having a custom workers solution. - */ - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - manager: {} as ShardManager, - /** Delay in milliseconds to wait before spawning next shard. - * OPTIMAL IS ABOVE 5100. YOU DON'T WANT TO HIT THE RATE LIMIT!!! - */ - spawnShardDelay: options.spawnShardDelay ?? 5300, - /** How many Shards should get assigned to a Worker. - * - * IMPORTANT: Discordeno will NOT spawn Workers for you. - * Instead you have to overwrite the `tellWorkerToIdentify` function to make that for you. - * Look at the [BigBot template gateway solution](https://github.com/discordeno/discordeno/tree/main/template/bigbot/src/gateway) for reference. - * - * NOTE: The last Worker will IGNORE this value, - * which means that the last worker can get assigned an unlimited amount of shards. - * This is not a bug but intended behavior and means you have to assign more workers to this manager. - */ - shardsPerWorker: options.shardsPerWorker ?? 25, - /** The total amount of Workers which get controlled by this manager. - * - * IMPORTANT: Discordeno will NOT spawn Workers for you. - * Instead you have to overwrite the `tellWorkerToIdentify` function to make that for you. - * Look at the [BigBot template gateway solution](https://github.com/discordeno/discordeno/tree/main/template/bigbot/src/gateway) for reference. - */ - totalWorkers: options.totalWorkers ?? 4, - - // ---------- - // PROPERTIES - // ---------- - /** Prepares the buckets for identifying. - * - * NOTE: Most of the time this function does not need to be called, - * since it gets called by the `spawnShards` function indirectly. - */ - prepareBuckets: function () { - return prepareBucketsOverwritten(this) - }, - /** This function starts to spawn the Shards assigned to this manager. - * - * The managers `buckets` will be created and - * - * if `resharding.useOptimalLargeBotSharding` is set to true, - * `totalShards` gets double checked and adjusted accordingly if wrong. - */ - spawnShards: function () { - return spawnShardsOverwritten(this) - }, - /** Stop the gateway. This closes all shards. */ - stop: async function (code: number, reason: string) { - return await stopOverwritten(this, code, reason) - }, - /** Tell the Worker with this Id to identify this Shard. - * - * Useful if a custom Worker solution should be used. - * - * IMPORTANT: Discordeno will NOT spawn Workers for you. - * Instead you have to overwrite the `tellWorkerToIdentify` function to make that for you. - * Look at the [BigBot template gateway solution](https://github.com/discordeno/discordeno/tree/main/template/bigbot/src/gateway) for reference. - */ - tellWorkerToIdentify: async function ( - workerId: number, - shardId: number, - bucketId: number - ) { - return await tellWorkerToIdentifyOverwritten( - this, - workerId, - shardId, - bucketId - ) - }, - // TODO: fix debug - /** Handle the different logs. Used for debugging. */ - debug: options.debug ?? function () {}, - - // /** The methods related to resharding. */ - // resharding: { - // /** Whether the resharder should automatically switch to LARGE BOT SHARDING when the bot is above 100K servers. */ - // useOptimalLargeBotSharding: options.resharding?.useOptimalLargeBotSharding ?? true, - // /** Whether or not to automatically reshard. - // * - // * @default true - // */ - // reshard: options.resharding?.reshard ?? true, - // /** The percentage at which resharding should occur. - // * - // * @default 80 - // */ - // reshardPercentage: options.resharding?.reshardPercentage ?? 80, - // /** Handles resharding the bot when necessary. */ - // resharder: options.resharding?.resharder ?? resharder, - // /** Handles checking if all new shards are online in the new gateway. */ - // isPending: options.resharding?.isPending ?? resharderIsPending, - // /** Handles closing all shards in the old gateway. */ - // closeOldShards: options.resharding?.closeOldShards ?? resharderCloseOldShards, - // /** Handles checking if it is time to reshard and triggers the resharder. */ - // check: options.resharding?.check ?? startReshardingChecks, - // /** Handler to mark a guild id with its new shard id in cache. */ - // markNewGuildShardId: options.resharding?.markNewGuildShardId ?? markNewGuildShardId, - // /** Handler to update all guilds in cache with the new shard id. */ - // editGuildShardIds: options.resharding?.editGuildShardIds ?? reshardingEditGuildShardIds, - // }, - - /** Calculate the amount of Shards which should be used based on the bot's max concurrency. */ - calculateTotalShards: function () { - return calculateTotalShardsOverwritten(this) - }, - - /** Calculate the Id of the Worker related to this Shard. */ - calculateWorkerId: function (shardId: number) { - return calculateWorkerIdOverwritten(this, shardId) - } - } - - gatewayManager.manager = createShardManager({ - createShardOptions: options.createShardOptions, - gatewayConfig: options.gatewayConfig, - shardIds: [], - totalShards, - - handleMessage: function (shard, message) { - return options.handleDiscordPayload(shard, message) - }, - - requestIdentify: async (shardId) => { - // TODO: improve - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - await gatewayManager.buckets - .get( - shardId % gatewayManager.gatewayBot.sessionStartLimit.maxConcurrency - )! - .leak.acquire(1) - } - }) - - return gatewayManager -} - -export interface CreateGatewayManager { - /** Delay in milliseconds to wait before spawning next shard. OPTIMAL IS ABOVE 5100. YOU DON'T WANT TO HIT THE RATE LIMIT!!! */ - spawnShardDelay: number - /** Total amount of shards your bot uses. Useful for zero-downtime updates or resharding. */ - totalShards: number - /** The amount of shards to load per worker. */ - shardsPerWorker: number - /** The total amount of workers to use for your bot. */ - totalWorkers: number - /** Id of the first Shard which should get controlled by this manager. - * - * NOTE: This is intended for testing purposes - * if big bots want to test the gateway on smaller scale. - * This is not recommended to be used in production. - */ - firstShardId: number - /** Id of the last Shard which should get controlled by this manager. - * - * NOTE: This is intended for testing purposes - * if big bots want to test the gateway on smaller scale. - * This is not recommended to be used in production. - */ - lastShardId: number - - /** Important data which is used by the manager to connect shards to the gateway. */ - gatewayBot: GetGatewayBot - - gatewayConfig: PickPartial - - /** Options which are used to create a new shard. */ - createShardOptions?: Omit< - CreateShard, - 'id' | 'totalShards' | 'requestIdentify' | 'gatewayConfig' - > - - /** Stored as bucketId: { workers: [workerId, [ShardIds]], createNextShard: boolean } */ - buckets: Collection< - number, - { - workers: Array<{ id: number, queue: number[] }> - leak: LeakyBucket - } - > - // METHODS - - /** Prepares the buckets for identifying */ - prepareBuckets: typeof prepareBuckets - /** The handler for spawning ALL the shards. */ - spawnShards: typeof spawnShards - /** The handler to close all shards. */ - stop: typeof stop - /** Sends the discord payload to another server. */ - handleDiscordPayload: (shard: Shard, data: DiscordGatewayPayload) => any - /** Tell the worker to begin identifying this shard */ - tellWorkerToIdentify: typeof tellWorkerToIdentify - /** Handle the different logs. Used for debugging. */ - debug: (text: GatewayDebugEvents, ...args: any[]) => unknown - /** The methods related to resharding. */ - // resharding: { - // /** Whether the resharder should automatically switch to LARGE BOT SHARDING when you are above 100K servers. */ - // useOptimalLargeBotSharding: boolean; - // /** Whether or not to automatically reshard. */ - // reshard: boolean; - // /** The percentage at which resharding should occur. */ - // reshardPercentage: number; - // /** Handles resharding the bot when necessary. */ - // resharder: typeof resharder; - // /** Handles checking if all new shards are online in the new gateway. */ - // isPending: typeof resharderIsPending; - // /** Handles closing all shards in the old gateway. */ - // closeOldShards: typeof resharderCloseOldShards; - // /** Handler to mark a guild id with its new shard id in cache. */ - // markNewGuildShardId: typeof markNewGuildShardId; - // /** Handler to update all guilds in cache with the new shard id. */ - // editGuildShardIds: typeof reshardingEditGuildShardIds; - // }; - /** Calculates the number of shards to use based on the max concurrency */ - calculateTotalShards: typeof calculateTotalShards - - /** Calculate the id of the worker related ot this Shard. */ - calculateWorkerId: typeof calculateWorkerId -} - -export type GatewayDebugEvents = - | 'GW ERROR' - | 'GW CLOSED' - | 'GW CLOSED_RECONNECT' - | 'GW RAW' - | 'GW RECONNECT' - | 'GW INVALID_SESSION' - | 'GW RESUMED' - | 'GW RESUMING' - | 'GW IDENTIFYING' - | 'GW RAW_SEND' - | 'GW MAX REQUESTS' - | 'GW DEBUG' - | 'GW HEARTBEATING' - | 'GW HEARTBEATING_STARTED' - | 'GW HEARTBEATING_DETAILS' - | 'GW HEARTBEATING_CLOSED' diff --git a/packages/old/gateway/src/manager/index.ts b/packages/old/gateway/src/manager/index.ts deleted file mode 100644 index d750b9059..000000000 --- a/packages/old/gateway/src/manager/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './calculateTotalShards.js' -export * from './calculateWorkerId.js' -export * from './gatewayManager.js' -export * from './prepareBuckets.js' -export * from './shardManager.js' -export * from './spawnShards.js' -export * from './stop.js' -export * from './tellWorkerToIdentify.js' diff --git a/packages/old/gateway/src/manager/prepareBuckets.ts b/packages/old/gateway/src/manager/prepareBuckets.ts deleted file mode 100644 index 5cb32edc4..000000000 --- a/packages/old/gateway/src/manager/prepareBuckets.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { createLeakyBucket } from '@discordeno/utils' -import type { GatewayManager } from './gatewayManager.js' - -export function prepareBuckets (gateway: GatewayManager): void { - for ( - let i = 0; - i < gateway.gatewayBot.sessionStartLimit.maxConcurrency; - ++i - ) { - gateway.buckets.set(i, { - workers: [], - leak: createLeakyBucket({ - max: 1, - refillAmount: 1, - // special number which is proven to be working dont change - refillInterval: gateway.spawnShardDelay - }) - }) - } - - // ORGANIZE ALL SHARDS INTO THEIR OWN BUCKETS - for ( - let shardId = gateway.firstShardId; - shardId <= gateway.lastShardId; - ++shardId - ) { - if (shardId >= gateway.manager.totalShards) { - throw new Error( - `Shard (id: ${shardId}) is bigger or equal to the used amount of used shards which is ${gateway.manager.totalShards}` - ) - } - - const bucketId = - shardId % gateway.gatewayBot.sessionStartLimit.maxConcurrency - const bucket = gateway.buckets.get(bucketId) - if (bucket == null) { - throw new Error( - `Shard (id: ${shardId}) got assigned to an illegal bucket id: ${bucketId}, expected a bucket id between 0 and ${ - gateway.gatewayBot.sessionStartLimit.maxConcurrency - 1 - }` - ) - } - - // FIND A QUEUE IN THIS BUCKET THAT HAS SPACE - // const worker = bucket.workers.find((w) => w.queue.length < gateway.shardsPerWorker); - const workerId = gateway.calculateWorkerId(shardId) - const worker = bucket.workers.find((w) => w.id === workerId) - if (worker) { - // IF THE QUEUE HAS SPACE JUST ADD IT TO THIS QUEUE - worker.queue.push(shardId) - } else { - bucket.workers.push({ id: workerId, queue: [shardId] }) - } - } -} diff --git a/packages/old/gateway/src/manager/resharder.ts b/packages/old/gateway/src/manager/resharder.ts deleted file mode 100644 index 65680a459..000000000 --- a/packages/old/gateway/src/manager/resharder.ts +++ /dev/null @@ -1,288 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordReady, - GetGatewayBot -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import { inflateSync } from 'node:zlib' -import { createShard } from '../shard/createShard.js' -import { handleMessage } from '../shard/handleMessage.js' -import type { Shard } from '../shard/types.js' -import { ShardSocketCloseCodes } from '../shard/types.js' -import type { GatewayManager } from './gatewayManager.js' - -export type Resharder = ReturnType - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function activateResharder (options: ActivateResharderOptions) { - const resharder = { - // ---------- - // PROPERTIES - // ---------- - - /** Interval in milliseconds of when to check whether it's time to reshard. - * - * @default 28800000 (8 hours) - */ - checkInterval: options.checkInterval ?? 28800000, - - /** Gateway manager which is currently processing all shards and events. */ - gateway: options.gatewayManager, - - /** Timeout of the reshard checker. */ - intervalId: undefined as NodeJS.Timer | undefined, - - /** Percentage at which resharding should occur. - * @default 80 - */ - percentage: options.percentage ?? 80, - - /** Whether the resharder should automatically switch to LARGE BOT SHARDING when the bot is above 100K servers. */ - useOptimalLargeBotSharding: options.useOptimalLargeBotSharding ?? true, - - /** The collection of shards that were created and identified by this resharder but are ignoring incoming events because all shards are not yet online. */ - pendingShards: new Collection(), - - // ---------- - // METHODS - // ---------- - - /** Activate the resharder and delay the next reshard check. */ - activate: function () { - return activate(this) - }, - - /** Function which is used to fetch the current gateway information of the bot. - * This function is mainly used by the reshard checker. - */ - getGatewayBot: options.getGatewayBot, - - /** Reshard the bots gateway. */ - reshard: async function (gatewayBot: GetGatewayBot) { - return await reshard(this, gatewayBot) - }, - - tellWorkerToPrepare: options.tellWorkerToPrepare, - - shardIsPending: options.shardIsPending ?? shardIsPending, - - markNewGuildShardId: options.markNewGuildShardId ?? markNewGuildShardId - } - - resharder.activate() - - return resharder -} - -export interface ActivateResharderOptions { - /** Interval in milliseconds of when to check whether it's time to reshard. - * - * @default 28800000 (8 hours) - */ - checkInterval?: number - /** Gateway manager which the resharder should be bound to. */ - gatewayManager: GatewayManager - /** Percentage at which resharding should occur. - * @default 80 - */ - percentage?: number - /** Whether the resharder should automatically switch to LARGE BOT SHARDING when the bot is above 100K servers. */ - useOptimalLargeBotSharding?: boolean - - /** Function which can be used to fetch the current gateway information of the bot. - * This function is mainly used by the reshard checker. - */ - getGatewayBot: () => Promise - - /** Function which is used to tell a Worker that it should identify a resharder Shard to the gateway and wait for further instructions. - * The worker should **NOT** process any events coming from this Shard. - */ - tellWorkerToPrepare: ( - gatewayManager: GatewayManager, - workerId: number, - shardId: number, - bucketId: number - ) => Promise - - /** Tell the resharder and manager that the a shard is created and identified using new settings but is currently pending by ignoring incoming events. This can be used to track all shards are online which is when old shards are closed and these new shards replace the old ones. */ - shardIsPending: (resharder: Resharder, shard: Shard) => Promise - - /** Used to update the shard ids of the cached guilds. When a bot is resharded, guilds can be moved around across shards to evenly distribute, so the shards need to be updated. */ - markNewGuildShardId: (guildIds: string[], shardId: number) => Promise -} - -/** Handler that by default will check to see if resharding should occur. Can be overridden if you have multiple servers and you want to communicate through redis pubsub or whatever you prefer. */ -export function activate (resharder: Resharder): void { - if (resharder.intervalId !== undefined) { - throw new Error( - '[RESHARDER] Cannot activate the resharder more than one time.' - ) - } - - resharder.intervalId = setInterval(async () => { - console.log('[Resharding] Checking if resharding is needed.') - - const result = await resharder.getGatewayBot() - - // 2500 is the max amount of guilds a single shard can handle - // 1000 is the amount of guilds discord uses to determine how many shards to recommend. - // This algo helps check if your bot has grown enough to reshard. - const percentage = - ((2500 * result.shards) / - (resharder.gateway.manager.totalShards * 1000)) * - 100 - // Less than necessary% being used so do nothing - if (percentage < resharder.percentage) return - - // Don't have enough identify rate limits to reshard - if (result.sessionStartLimit.remaining < result.shards) return - - // MULTI-SERVER BOTS OVERRIDE THIS IF YOU NEED TO RESHARD SERVER BY SERVER - return await resharder.reshard(result) - }, resharder.checkInterval) -} - -export async function reshard ( - resharder: Resharder, - gatewayBot: GetGatewayBot -): Promise { - console.log('[Resharding] Starting the reshard process.') - - resharder.gateway.gatewayBot = gatewayBot - - // If more than 100K servers, begin switching to 16x sharding - if (resharder.useOptimalLargeBotSharding) { - console.log('[Resharding] Using optimal large bot sharding solution.') - resharder.gateway.manager.totalShards = - resharder.gateway.calculateTotalShards() - } - - resharder.gateway.prepareBuckets() - - // SPREAD THIS OUT TO DIFFERENT WORKERS TO BEGIN STARTING UP - // Ignore eslint here because prefer concurrency of forEach instead of for of - // eslint-disable-next-line @typescript-eslint/no-misused-promises - resharder.gateway.buckets.forEach(async (bucket, bucketId) => { - for (const worker of bucket.workers) { - for (const shardId of worker.queue) { - await resharder.tellWorkerToPrepare( - resharder.gateway, - worker.id, - shardId, - bucketId - ) - } - } - }) -} - -/** Handler that by default will save the new shard id for each guild this becomes ready in new gateway. This can be overridden to save the shard ids in a redis cache layer or whatever you prefer. These ids will be used later to update all guilds. */ -export async function markNewGuildShardId ( - guildIds: bigint[], - shardId: number -): Promise { - // PLACEHOLDER TO LET YOU MARK A GUILD ID AND SHARD ID FOR LATER USE ONCE RESHARDED -} - -/** Handler that by default does not do anything since by default the library will not cache. */ -export async function reshardingEditGuildShardIds (): Promise { - // PLACEHOLDER TO LET YOU UPDATE CACHED GUILDS -} - -export async function tellWorkerToPrepare ( - resharder: Resharder, - shardId: number -): Promise { - // First create a shard without identifyin. - const shard = createShard({ - ...resharder.gateway.manager.createShardOptions, - id: shardId, - totalShards: resharder.gateway.manager.totalShards, - gatewayConfig: resharder.gateway.manager.gatewayConfig, - requestIdentify: async function () { - return await resharder.gateway.manager.requestIdentify(shardId) - }, - // Ignore events in this new shard for now - handleMessage: async function (shard, message) { - let preProcessMessage = message.data - - // If message compression is enabled, - // Discord might send zlib compressed payloads. - if (shard.gatewayConfig.compress && preProcessMessage instanceof Blob) { - preProcessMessage = inflateSync( - await preProcessMessage.arrayBuffer() - ).toString() - } - - // Safeguard incase decompression failed to make a string. - if (typeof preProcessMessage !== 'string') return - - const messageData = JSON.parse( - preProcessMessage - ) as DiscordGatewayPayload - - if (messageData.t === 'READY') { - const payload = messageData.d as DiscordReady - shard.resumeGatewayUrl = payload.resume_gateway_url - await resharder.markNewGuildShardId( - payload.guilds.map((g) => g.id), - shardId - ) - } - } - }) - - // Now identify this shard(still ignoring events) - await shard.identify() - - // Tell the manager that this shard is online - return await resharder.shardIsPending(resharder, shard) -} - -export async function shardIsPending ( - resharder: Resharder, - shard: Shard -): Promise { - // Save this in pending at the moment, until all shards are online - resharder.pendingShards.set(shard.id, shard) - - // Check if all shards are now online. - if (resharder.gateway.gatewayBot.shards <= resharder.pendingShards.size) { - // Time to replace old shards - - // New shards start processing events - for (const shard of resharder.pendingShards.values()) { - shard.handleMessage = async function (message) { - return await handleMessage(shard, message) - } - } - - // Old shards stop processing events - for (const shard of resharder.gateway.manager.shards.values()) { - const oldHandler = shard.handleMessage - - shard.handleMessage = async function (message) { - let preProcessMessage = message.data - if (shard.gatewayConfig.compress && preProcessMessage instanceof Blob) { - preProcessMessage = inflateSync( - await preProcessMessage.arrayBuffer() - ).toString() - } - if (typeof preProcessMessage !== 'string') return - const messageData = JSON.parse( - preProcessMessage - ) as DiscordGatewayPayload - if (messageData.t !== 'GUILD_MEMBERS_CHUNK') return - - // Process only the chunking events - oldHandler(message) - } - } - - // Close old shards - await resharder.gateway.stop(ShardSocketCloseCodes.Resharded, 'Resharded!') - - // Replace old shards - resharder.gateway.manager.shards = resharder.pendingShards - } -} diff --git a/packages/old/gateway/src/manager/shardManager.ts b/packages/old/gateway/src/manager/shardManager.ts deleted file mode 100644 index c2315d7ac..000000000 --- a/packages/old/gateway/src/manager/shardManager.ts +++ /dev/null @@ -1,127 +0,0 @@ -import type { DiscordGatewayPayload, PickPartial } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { CreateShard } from '../shard/createShard.js' -import { createShard } from '../shard/createShard.js' -import type { Shard, ShardGatewayConfig } from '../shard/types.js' - -// TODO: debug - -/** This is a Shard manager. - * This does not manage a specific range of Shard but the provided Shards on create or when an identify is requested. - * The aim of this is to provide an easy to use manager which can be used by workers or any other kind of separate process. - */ -export type ShardManager = ReturnType - -/** Create a new Shard manager. - * This does not manage a specific range of Shard but the provided Shards on create or when an identify is requested. - * The aim of this is to provide an easy to use manager which can be used by workers or any other kind of separate process. - */ -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function createShardManager (options: CreateShardManager) { - return { - // ---------- - // PROPERTIES - // ---------- - - /** Options which are used to create a new Shard. */ - createShardOptions: { - ...options.createShardOptions, - events: { - ...options.createShardOptions?.events, - message: - options.createShardOptions?.events?.message ?? options.handleMessage - } - }, - /** Gateway configuration which is used when creating a Shard. */ - gatewayConfig: options.gatewayConfig, - /** Managed Shards. */ - shards: new Collection( - options.shardIds.map((shardId) => { - const shard = createShard({ - ...options.createShardOptions, - id: shardId, - totalShards: options.totalShards, - gatewayConfig: options.gatewayConfig, - requestIdentify: async function () { - return await options.requestIdentify(shardId) - } - }) - - return [shardId, shard] as const - }) - ), - /** Total amount of Shards used by the bot. */ - totalShards: options.totalShards, - - // ---------- - // METHODS - // ---------- - - /** Tell the manager to identify a Shard. - * If this Shard is not already managed this will also add the Shard to the manager. - */ - identify: async function (shardId: number) { - let shard = this.shards.get(shardId) - if (shard == null) { - shard = createShard({ - ...this.createShardOptions, - id: shardId, - totalShards: this.totalShards, - gatewayConfig: this.gatewayConfig, - requestIdentify: async function () { - return await options.requestIdentify(shardId) - } - }) - - this.shards.set(shardId, shard) - } - - return await shard.identify() - }, - - /** Kill a shard. - * Close a shards connection to Discord's gateway (if any) and remove it from the manager. - */ - kill: async function (shardId: number) { - const shard = this.shards.get(shardId) - if (shard == null) return - - this.shards.delete(shardId) - return await shard.shutdown() - }, - - /** This function communicates with the parent manager, - * in order to know whether this manager is allowed to identify a new shard. - */ - requestIdentify: options.requestIdentify - } -} - -export interface CreateShardManager { - // ---------- - // PROPERTIES - // ---------- - /** Options which are used to create a new Shard. */ - createShardOptions?: Omit< - CreateShard, - 'id' | 'totalShards' | 'requestIdentify' | 'gatewayConfig' - > - /** Gateway configuration which is used when creating a Shard. */ - gatewayConfig: PickPartial - /** Ids of the Shards which should be managed. */ - shardIds: number[] - /** Total amount of Shard used by the bot. */ - totalShards: number - - // ---------- - // METHODS - // ---------- - - /** This function is used when a shard receives any message from Discord. */ - handleMessage: (shard: Shard, message: DiscordGatewayPayload) => unknown - - /** This function communicates with the parent manager, - * in order to know whether this manager is allowed to identify a new shard. # - */ - requestIdentify: (shardId: number) => Promise -} diff --git a/packages/old/gateway/src/manager/spawnShards.ts b/packages/old/gateway/src/manager/spawnShards.ts deleted file mode 100644 index e11672153..000000000 --- a/packages/old/gateway/src/manager/spawnShards.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { GatewayManager } from './gatewayManager.js' - -/** Begin spawning shards. */ -export function spawnShards (gateway: GatewayManager): void { - // PREPARES ALL SHARDS IN SPECIFIC BUCKETS - gateway.prepareBuckets() - - // SPREAD THIS OUT TO DIFFERENT WORKERS TO BEGIN STARTING UP - // Prefer concurrency of forEach instead of forof - // eslint-disable-next-line @typescript-eslint/no-misused-promises - gateway.buckets.forEach(async (bucket, bucketId) => { - for (const worker of bucket.workers) { - for (const shardId of worker.queue) { - await gateway.tellWorkerToIdentify(worker.id, shardId, bucketId) - } - } - }) -} diff --git a/packages/old/gateway/src/manager/stop.ts b/packages/old/gateway/src/manager/stop.ts deleted file mode 100644 index 5ed22da32..000000000 --- a/packages/old/gateway/src/manager/stop.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { delay } from '@discordeno/utils' -import type { GatewayManager } from './gatewayManager.js' - -export async function stop ( - gateway: GatewayManager, - code: number, - reason: string -): Promise { - gateway.manager.shards.forEach((shard) => shard.close(code, reason)) - - await delay(5000) -} diff --git a/packages/old/gateway/src/manager/tellWorkerToIdentify.ts b/packages/old/gateway/src/manager/tellWorkerToIdentify.ts deleted file mode 100644 index 49f7a32a7..000000000 --- a/packages/old/gateway/src/manager/tellWorkerToIdentify.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { GatewayManager } from './gatewayManager.js' - -/** Allows users to hook in and change to communicate to different workers across different servers or anything they like. For example using redis pubsub to talk to other servers. */ -export async function tellWorkerToIdentify ( - gateway: GatewayManager, - _workerId: number, - shardId: number, - _bucketId: number -): Promise { - return await gateway.manager.identify(shardId) -} diff --git a/packages/old/gateway/src/noCheckHelpers/guilds/voice/connectToVoiceChannel.ts b/packages/old/gateway/src/noCheckHelpers/guilds/voice/connectToVoiceChannel.ts deleted file mode 100644 index cae4d57ed..000000000 --- a/packages/old/gateway/src/noCheckHelpers/guilds/voice/connectToVoiceChannel.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ -// @ts-nocheck - -import type { AtLeastOne, BigString } from '@discordeno/types' -import { GatewayOpcodes } from '@discordeno/types' -import { calculateShardId } from '@discordeno/utils' -import type { RestManager } from '../../../../../rest/src/restManager.js' - -/** - * Connects the bot user to a voice or stage channel. - * - * This function sends the _Update Voice State_ gateway command over the gateway behind the scenes. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the voice channel to leave is in. - * - * @remarks - * Requires the `CONNECT` permission. - * - * Fires a _Voice State Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/topics/gateway#update-voice-state} - */ -export async function connectToVoiceChannel ( - rest: RestManager, - guildId: BigString, - channelId: BigString, - options?: AtLeastOne> -): Promise { - const shardId = calculateShardId( - bot.gateway, - guildId - ) - const shard = bot.gateway.manager.shards.get(shardId) - if (shard == null) { - throw new Error(`Shard (id: ${shardId} not found`) - } - - return shard.send({ - op: GatewayOpcodes.VoiceStateUpdate, - d: { - guild_id: guildId.toString(), - channel_id: channelId.toString(), - self_mute: Boolean(options?.selfMute), - self_deaf: options?.selfDeaf ?? true - } - }) -} - -/** https://discord.com/developers/docs/topics/gateway#update-voice-state */ -export interface UpdateVoiceState { - /** id of the guild */ - guildId: string - /** id of the voice channel client wants to join (null if disconnecting) */ - channelId: string | null - /** Is the client muted */ - selfMute: boolean - /** Is the client deafened */ - selfDeaf: boolean -} diff --git a/packages/old/gateway/src/noCheckHelpers/guilds/voice/leaveVoiceChannel.ts b/packages/old/gateway/src/noCheckHelpers/guilds/voice/leaveVoiceChannel.ts deleted file mode 100644 index b9aeec835..000000000 --- a/packages/old/gateway/src/noCheckHelpers/guilds/voice/leaveVoiceChannel.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ -// @ts-nocheck - -import type { BigString } from '@discordeno/types' -import { GatewayOpcodes } from '@discordeno/types' -import { calculateShardId } from '@discordeno/utils' -import type { RestManager } from '../../../../../rest/src/restManager.js' - -/** - * Leaves the voice channel the bot user is currently in. - * - * This function sends the _Update Voice State_ gateway command over the gateway behind the scenes. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the voice channel to leave is in. - * - * @remarks - * Fires a _Voice State Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/topics/gateway#update-voice-state} - */ -export async function leaveVoiceChannel ( - rest: RestManager, - guildId: BigString -): Promise { - const shardId = calculateShardId( - bot.gateway, - guildId - ) - const shard = bot.gateway.manager.shards.get(shardId) - if (shard == null) { - throw new Error(`Shard (id: ${shardId} not found`) - } - - return shard.send({ - op: GatewayOpcodes.VoiceStateUpdate, - d: { - guild_id: guildId.toString(), - channel_id: null, - self_mute: false, - self_deaf: false - } - }) -} diff --git a/packages/old/gateway/src/noCheckHelpers/members/fetchMembers.ts b/packages/old/gateway/src/noCheckHelpers/members/fetchMembers.ts deleted file mode 100644 index 95c6b2feb..000000000 --- a/packages/old/gateway/src/noCheckHelpers/members/fetchMembers.ts +++ /dev/null @@ -1,96 +0,0 @@ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ -// @ts-nocheck - -import type { BigString } from '@discordeno/types' -import { GatewayOpcodes } from '@discordeno/types' -import { calculateShardId } from '@discordeno/utils' -import type { RestManager } from '../../../../rest/src/restManager.js' - -/** - * Fetches the list of members for a guild over the gateway. - * - * @param rest - The rest manager to use to make the requests. - * @param guildId - The ID of the guild to get the list of members for. - * @param options - The parameters for the fetching of the members. - * - * @remarks - * If requesting the entire member list: - * - Requires the `GUILD_MEMBERS` intent. - * - * If requesting presences ({@link RequestGuildMembers.presences | presences} set to `true`): - * - Requires the `GUILD_PRESENCES` intent. - * - * If requesting a prefix ({@link RequestGuildMembers.query | query} non-`undefined`): - * - Returns a maximum of 100 members. - * - * If requesting a users by ID ({@link RequestGuildMembers.userIds | userIds} non-`undefined`): - * - Returns a maximum of 100 members. - * - * Fires a _Guild Members Chunk_ gateway event for every 1000 members fetched. - * - * @see {@link https://discord.com/developers/docs/topics/gateway#request-guild-members} - */ -export async function fetchMembers ( - rest: RestManager, - guildId: BigString, - options?: Omit -): Promise { - // You can request 1 member without the intent - // Check if intents is not 0 as proxy ws won't set intents in other instances - // TODO: validations - // if ( - // bot.intents && - // (!options?.limit || options.limit > 1) && - // !(bot.intents & GatewayIntents.GuildMembers) - // ) { - // throw new Error(rest.constants.Errors.MISSING_INTENT_GUILD_MEMBERS) - // } - - // if (options?.userIds?.length) { - // options.limit = options.userIds.length - // } - - const shardId = calculateShardId( - bot.gateway, - guildId - ) - - return await new Promise((resolve) => { - const nonce = `${guildId}-${Date.now()}` - bot.cache.fetchAllMembersProcessingRequests.set(nonce, resolve) - - const shard = bot.gateway.manager.shards.get(shardId) - if (shard == null) { - throw new Error(`Shard (id: ${shardId}) not found.`) - } - - shard.send({ - op: GatewayOpcodes.RequestGuildMembers, - d: { - guild_id: guildId.toString(), - // If a query is provided use it, OR if a limit is NOT provided use "" - query: options?.query ?? (options?.limit ? undefined : ''), - limit: options?.limit ?? 0, - presences: options?.presences ?? false, - user_ids: options?.userIds?.map((id) => id.toString()), - nonce - } - }) - }) -} - -/** https://discord.com/developers/docs/topics/gateway#request-guild-members */ -export interface RequestGuildMembers { - /** id of the guild to get members for */ - guildId: BigString - /** String that username starts with, or an empty string to return all members */ - query?: string - /** Maximum number of members to send matching the query; a limit of 0 can be used with an empty string query to return all members */ - limit: number - /** Used to specify if we want the presences of the matched members */ - presences?: boolean - /** Used to specify which users you wish to fetch */ - userIds?: BigString[] - /** Nonce to identify the Guild Members Chunk response */ - nonce?: string -} diff --git a/packages/old/gateway/src/noCheckHelpers/misc/editBotStatus.ts b/packages/old/gateway/src/noCheckHelpers/misc/editBotStatus.ts deleted file mode 100644 index 1c362a024..000000000 --- a/packages/old/gateway/src/noCheckHelpers/misc/editBotStatus.ts +++ /dev/null @@ -1,15 +0,0 @@ -// @ts-nocheck - -import type { RestManager } from '../../../../rest/src/restManager.js' -import type { StatusUpdate } from './editShardStatus.js' - -export async function editBotStatus ( - rest: RestManager, - data: StatusUpdate -): Promise { - await Promise.all( - bot.gateway.manager.shards.map(async (shard) => - rest.helpers.editShardStatus(shard.id, data) - ) - ) -} diff --git a/packages/old/gateway/src/noCheckHelpers/misc/editShardStatus.ts b/packages/old/gateway/src/noCheckHelpers/misc/editShardStatus.ts deleted file mode 100644 index 41156863c..000000000 --- a/packages/old/gateway/src/noCheckHelpers/misc/editShardStatus.ts +++ /dev/null @@ -1,89 +0,0 @@ -// @ts-nocheck - -import type { PresenceStatus } from '@discordeno/types' -import { GatewayOpcodes } from '@discordeno/types' -import type { Activity } from '../../../../bot/transformers/activity.js' -import type { RestManager } from '../../../../rest/src/restManager.js' -export async function editShardStatus ( - rest: RestManager, - shardId: number, - data: StatusUpdate -): Promise { - const shard = bot.gateway.manager.shards.get(shardId) - if (shard == null) { - throw new Error(`Shard (id: ${shardId}) not found.`) - } - - return shard.send({ - op: GatewayOpcodes.PresenceUpdate, - d: { - since: null, - afk: false, - activities: data.activities.map((activity) => ({ - name: activity.name, - type: activity.type, - url: activity.url, - created_at: activity.createdAt, - timestamps: - activity.startedAt ?? activity.endedAt - ? { - start: activity.startedAt, - end: activity.endedAt - } - : undefined, - application_id: activity.applicationId?.toString(), - details: activity.details, - state: activity.state, - emoji: activity.emoji - ? { - name: activity.emoji.name, - id: activity.emoji.id?.toString(), - animated: activity.emoji.animated - } - : undefined, - party: activity.partyId - ? { - id: activity.partyId.toString(), - size: activity.partyMaxSize - } - : undefined, - assets: - activity.largeImage ?? - activity.largeText ?? - activity.smallImage ?? - activity.smallText - ? { - large_image: activity.largeImage, - large_text: activity.largeText, - small_image: activity.smallImage, - small_text: activity.smallText - } - : undefined, - secrets: - activity.join ?? activity.spectate ?? activity.match - ? { - join: activity.join, - spectate: activity.spectate, - match: activity.match - } - : undefined, - instance: activity.instance, - flags: activity.flags, - buttons: activity.buttons - })), - status: data.status - } - }) -} - -/** https://discord.com/developers/docs/topics/gateway-events#update-presence */ -export interface StatusUpdate { - // /** Unix time (in milliseconds) of when the client went idle, or null if the client is not idle */ - // since: number | null; - /** The user's activities */ - activities: Activity[] - /** The user's new status */ - status: keyof typeof PresenceStatus - // /** Whether or not the client is afk */ - // afk: boolean; -} diff --git a/packages/old/gateway/src/noCheckHelpers/templates/createGuildFromTemplate.ts b/packages/old/gateway/src/noCheckHelpers/templates/createGuildFromTemplate.ts deleted file mode 100644 index 832e0bb39..000000000 --- a/packages/old/gateway/src/noCheckHelpers/templates/createGuildFromTemplate.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { DiscordGuild } from '@discordeno/types' -import type { Guild } from '../../../../bot/transformers/guild.js' -import type { RestManager } from '../../../../rest/src/restManager.js' - -/** - * Creates a guild from a template. - * - * @param rest - The rest manager to use to make the request. - * @param templateCode - The code of the template. - * @param options - The parameters for the creation of the guild. - * @returns An instance of the created {@link Guild}. - * - * @remarks - * ⚠️ This route can only be used by bots in __fewer than 10 guilds__. - * - * Fires a _Guild Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild-template#create-guild-from-guild-template} - */ -export async function createGuildFromTemplate ( - rest: RestManager, - templateCode: string, - numberOfShard: number, - options: CreateGuildFromTemplate -): Promise { - // TODO: validations - // if (options.icon) { - // options.icon = await urlToBase64(options.icon) - // } - - const createdGuild = await rest.runMethod( - - 'POST', - routes.TEMPLATE(templateCode), - options - ) - - return TRANSFORMERS.guild(createdGuild) -} - -/** https://discord.com/developers/docs/resources/template#create-guild-from-template-json-params */ -export interface CreateGuildFromTemplate { - /** Name of the guild (2-100 characters) */ - name: string - /** base64 128x128 image for the guild icon */ - icon?: string -} diff --git a/packages/old/gateway/src/shard/calculateSafeRequests.ts b/packages/old/gateway/src/shard/calculateSafeRequests.ts deleted file mode 100644 index 36b69bc34..000000000 --- a/packages/old/gateway/src/shard/calculateSafeRequests.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Shard } from './types.js' - -export function calculateSafeRequests (shard: Shard): number { - // * 2 adds extra safety layer for discords OP 1 requests that we need to respond to - const safeRequests = - shard.maxRequestsPerRateLimitTick - - Math.ceil(shard.rateLimitResetInterval / shard.heart.interval) * 2 - - return safeRequests < 0 ? 0 : safeRequests -} diff --git a/packages/old/gateway/src/shard/close.ts b/packages/old/gateway/src/shard/close.ts deleted file mode 100644 index f8208c785..000000000 --- a/packages/old/gateway/src/shard/close.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Shard } from './types.js' - -export function close (shard: Shard, code: number, reason: string): void { - if (shard.socket?.readyState !== WebSocket.OPEN) return - - return shard.socket?.close(code, reason) -} diff --git a/packages/old/gateway/src/shard/connect.ts b/packages/old/gateway/src/shard/connect.ts deleted file mode 100644 index a961a58c8..000000000 --- a/packages/old/gateway/src/shard/connect.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { WebSocket } from 'ws' -import type { Shard } from './types.js' -import { ShardState } from './types.js' - -export async function connect (shard: Shard): Promise { - // Only set the shard to `Connecting` state, - // if the connection request does not come from an identify or resume action. - if (![ShardState.Identifying, ShardState.Resuming].includes(shard.state)) { - shard.state = ShardState.Connecting - } - shard.events.connecting?.(shard) - - let url = new URL(shard.gatewayConfig.url) - // If not connecting to a proxy but directly to discord need to handle resuming - if (url.origin === 'wss://gateway.discord.gg') { - if (shard.state === ShardState.Resuming) { - url = new URL(shard.resumeGatewayUrl) - } - url.searchParams.set('v', shard.gatewayConfig.version.toString()) - url.searchParams.set('encoding', 'json') - } - - const socket = new WebSocket(url.toString()) - - shard.socket = socket - - // TODO: proper event handling - socket.onerror = (event) => console.log({ error: event }) - - socket.onclose = async (event) => await shard.handleClose(event) - - socket.onmessage = async (message) => await shard.handleMessage(message) - - return await new Promise((resolve) => { - socket.onopen = () => { - // Only set the shard to `Unidentified` state, - // if the connection request does not come from an identify or resume action. - if ( - ![ShardState.Identifying, ShardState.Resuming].includes(shard.state) - ) { - shard.state = ShardState.Unidentified - } - shard.events.connected?.(shard) - - resolve() - } - }) -} diff --git a/packages/old/gateway/src/shard/createShard.ts b/packages/old/gateway/src/shard/createShard.ts deleted file mode 100644 index c88dadf01..000000000 --- a/packages/old/gateway/src/shard/createShard.ts +++ /dev/null @@ -1,372 +0,0 @@ -import type { - ActivityTypes, - DiscordGatewayPayload, - PickPartial, - PresenceStatus -} from '@discordeno/types' -import type { LeakyBucket } from '@discordeno/utils' -import { API_VERSION, createLeakyBucket } from '@discordeno/utils' -import type { CloseEvent, MessageEvent, WebSocket } from 'ws' -import { calculateSafeRequests } from './calculateSafeRequests.js' -import { close } from './close.js' -import { connect } from './connect.js' -import { handleClose } from './handleClose.js' -import { handleMessage } from './handleMessage.js' -import { identify } from './identify.js' -import { isOpen } from './isOpen.js' -import { resume } from './resume.js' -import { send } from './send.js' -import { shutdown } from './shutdown.js' -import { startHeartbeating } from './startHeartbeating.js' -import { stopHeartbeating } from './stopHeartbeating.js' -import type { - Shard, - ShardEvents, - ShardGatewayConfig, - ShardHeart, - ShardSocketRequest -} from './types.js' -import { - DEFAULT_HEARTBEAT_INTERVAL, - GATEWAY_RATE_LIMIT_RESET_INTERVAL, - MAX_GATEWAY_REQUESTS_PER_INTERVAL, - ShardState -} from './types.js' - -// TODO: debug -// TODO: function overwrite -// TODO: improve shard event resolving - -/** */ -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export function createShard (options: CreateShard) { - // This is done for performance reasons - const calculateSafeRequestsOverwritten = - options.calculateSafeRequests ?? calculateSafeRequests - const closeOverwritten = options.close ?? close - const connectOverwritten = options.connect ?? connect - const identifyOverwritten = options.identify ?? identify - const sendOverwritten = options.send ?? send - const shutdownOverwritten = options.shutdown ?? shutdown - const resumeOverwritten = options.resume ?? resume - const handleCloseOverwritten = options.handleClose ?? handleClose - const handleMessageOverwritten = options.handleMessage ?? handleMessage - const isOpenOverwritten = options.isOpen ?? isOpen - const startHeartbeatingOverwritten = - options.startHeartbeating ?? startHeartbeating - const stopHeartbeatingOverwritten = - options.stopHeartbeating ?? stopHeartbeating - - return { - // ---------- - // PROPERTIES - // ---------- - - /** The gateway configuration which is used to connect to Discord. */ - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - gatewayConfig: { - compress: options.gatewayConfig.compress ?? false, - intents: options.gatewayConfig.intents ?? 0, - properties: { - os: options.gatewayConfig?.properties?.os ?? process.platform, - browser: options.gatewayConfig?.properties?.browser ?? 'Discordeno', - device: options.gatewayConfig?.properties?.device ?? 'Discordeno' - }, - token: options.gatewayConfig.token, - url: options.gatewayConfig.url ?? 'wss://gateway.discord.gg', - version: options.gatewayConfig.version ?? API_VERSION - } as ShardGatewayConfig, - /** This contains all the heartbeat information */ - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - heart: { - acknowledged: false, - interval: DEFAULT_HEARTBEAT_INTERVAL - } as ShardHeart, - /** Id of the shard. */ - id: options.id, - /** The maximum of requests which can be send to discord per rate limit tick. - * Typically this value should not be changed. - */ - maxRequestsPerRateLimitTick: MAX_GATEWAY_REQUESTS_PER_INTERVAL, - /** The previous payload sequence number. */ - previousSequenceNumber: options.previousSequenceNumber ?? null, - /** In which interval (in milliseconds) the gateway resets it's rate limit. */ - rateLimitResetInterval: GATEWAY_RATE_LIMIT_RESET_INTERVAL, - /** Current session id of the shard if present. */ - sessionId: undefined as string | undefined, - /** This contains the WebSocket connection to Discord, if currently connected. */ - socket: undefined as WebSocket | undefined, - /** Current internal state of the shard. */ - state: ShardState.Offline, - /** The total amount of shards which are used to communicate with Discord. */ - totalShards: options.totalShards, - resumeGatewayUrl: '', - - // ---------- - // METHODS - // ---------- - - /** The shard related event handlers. */ - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - events: options.events ?? ({} as ShardEvents), - - /** Calculate the amount of requests which can safely be made per rate limit interval, - * before the gateway gets disconnected due to an exceeded rate limit. - */ - calculateSafeRequests: function () { - return calculateSafeRequestsOverwritten(this) - }, - - /** Close the socket connection to discord if present. */ - close: function (code: number, reason: string) { - return closeOverwritten(this, code, reason) - }, - - /** Connect the shard with the gateway and start heartbeating. - * This will not identify the shard to the gateway. - */ - connect: async function () { - return await connectOverwritten(this) - }, - - /** Identify the shard to the gateway. - * If not connected, this will also connect the shard to the gateway. - */ - identify: async function () { - return await identifyOverwritten(this) - }, - - /** Check whether the connection to Discord is currently open. */ - isOpen: function () { - return isOpenOverwritten(this) - }, - - /** Function which can be overwritten in order to get the shards presence. */ - // This function allows to be async, in case the devs create the presence based on eg. database values. - // Passing the shard's id there to make it easier for the dev to use this function. - makePresence: options.makePresence, - - /** Attempt to resume the previous shards session with the gateway. */ - resume: async function () { - return await resumeOverwritten(this) - }, - - /** Send a message to Discord. - * @param {boolean} [highPriority=false] - Whether this message should be send asap. - */ - send: async function ( - message: ShardSocketRequest, - highPriority: boolean = false - ) { - return await sendOverwritten(this, message, highPriority) - }, - - /** Shutdown the shard. - * Forcefully disconnect the shard from Discord. - * The shard may not attempt to reconnect with Discord. - */ - shutdown: async function () { - return await shutdownOverwritten(this) - }, - - /** @private Internal shard bucket. - * Only access this if you know what you are doing. - * - * Bucket for handling shard request rate limits. - */ - bucket: createLeakyBucket({ - max: MAX_GATEWAY_REQUESTS_PER_INTERVAL, - refillInterval: GATEWAY_RATE_LIMIT_RESET_INTERVAL, - refillAmount: MAX_GATEWAY_REQUESTS_PER_INTERVAL - }), - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Handle a gateway connection close. - */ - handleClose: async function (close: CloseEvent) { - return await handleCloseOverwritten(this, close) - }, - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Handle an incoming gateway message. - */ - handleMessage: async function (message: MessageEvent) { - return await handleMessageOverwritten(this, message) - }, - - /** This function communicates with the management process, in order to know whether its free to identify. */ - requestIdentify: async function () { - return await options.requestIdentify(this.id) - }, - - /** @private Internal state. - * Only use this if you know what you are doing. - * - * Cache for pending gateway requests which should have been send while the gateway went offline. - */ - offlineSendQueue: [] as Array<(_?: unknown) => void>, - - /** @private Internal shard map. - * Only use this map if you know what you are doing. - * - * This is used to resolve internal waiting states. - * Mapped by SelectedEvents => ResolveFunction - */ - resolves: new Map< - 'READY' | 'RESUMED' | 'INVALID_SESSION', - (payload: DiscordGatewayPayload) => void - >(), - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Start sending heartbeat payloads to Discord in the provided interval. - */ - startHeartbeating: function (interval: number) { - return startHeartbeatingOverwritten(this, interval) - }, - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Stop the heartbeating process with discord. - */ - stopHeartbeating: function () { - return stopHeartbeatingOverwritten(this) - } - } -} - -/** https://discord.com/developers/docs/topics/gateway-events#activity-object */ -export interface BotActivity { - name: string - type: ActivityTypes - url?: string -} - -/** https://discord.com/developers/docs/topics/gateway-events#update-presence */ -export interface BotStatusUpdate { - // /** Unix time (in milliseconds) of when the client went idle, or null if the client is not idle */ - since: number | null - /** The user's activities */ - activities: BotActivity[] - /** The user's new status */ - status: keyof typeof PresenceStatus - // /** Whether or not the client is afk */ - // afk: boolean; -} - -export interface CreateShard { - /** Id of the shard which should be created. */ - id: number - - /** Gateway configuration for the shard. */ - gatewayConfig: PickPartial - - /** The total amount of shards which are used to communicate with Discord. */ - totalShards: number - - /** This function communicates with the management process, in order to know whether its free to identify. - * When this function resolves, this means that the shard is allowed to send an identify payload to discord. - */ - requestIdentify: (shardId: number) => Promise - - /** Calculate the amount of requests which can safely be made per rate limit interval, - * before the gateway gets disconnected due to an exceeded rate limit. - */ - calculateSafeRequests?: typeof calculateSafeRequests - - /** Close the socket connection to discord if present. */ - close?: typeof close - - /** Connect the shard with the gateway and start heartbeating. - * This will not identify the shard to the gateway. - */ - connect?: typeof connect - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Handle a gateway connection close. - */ - handleClose?: typeof handleClose - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Handle an incoming gateway message. - */ - handleMessage?: typeof handleMessage - - /** Identify the shard to the gateway. - * If not connected, this will also connect the shard to the gateway. - */ - identify?: typeof identify - - /** Check whether the connection to Discord is currently open. */ - isOpen?: typeof isOpen - - /** Function which can be overwritten in order to get the shards presence. */ - makePresence?: ( - shardId: number - ) => Promise | BotStatusUpdate - - /** The maximum of requests which can be send to discord per rate limit tick. - * Typically this value should not be changed. - */ - maxRequestsPerRateLimitTick?: number - - /** The previous payload sequence number. */ - previousSequenceNumber?: number - - /** In which interval (in milliseconds) the gateway resets it's rate limit. */ - rateLimitResetInterval?: number - - /** Attempt to resume the previous shards session with the gateway. */ - resume?: typeof resume - - /** Send a message to Discord. - * @param {boolean} [highPriority=false] - Whether this message should be send asap. - */ - send?: typeof send - - /** Shutdown the shard. - * Forcefully disconnect the shard from Discord. - * The shard may not attempt to reconnect with Discord. - */ - shutdown?: typeof shutdown - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Start sending heartbeat payloads to Discord in the provided interval. - */ - startHeartbeating?: typeof startHeartbeating - - /** Current internal state of the shard. */ - state?: ShardState - - /** @private Internal shard function. - * Only use this function if you know what you are doing. - * - * Stop the heartbeating process with discord. - */ - stopHeartbeating?: typeof stopHeartbeating - - /** The shard related event handlers. */ - events?: ShardEvents - /** This contains all the heartbeat information */ - heart?: ShardHeart - /** Bucket for handling shard request rate limits. */ - bucket?: LeakyBucket - /** Cache for pending gateway requests which should have been send while the gateway went offline. */ - offlineSendQueue?: ShardSocketRequest[] - /** This is used to resolve internal waiting states. - * Mapped by SelectedEvents => ResolveFunction - */ - resolves?: Shard['resolves'] -} diff --git a/packages/old/gateway/src/shard/handleClose.ts b/packages/old/gateway/src/shard/handleClose.ts deleted file mode 100644 index c06c6c294..000000000 --- a/packages/old/gateway/src/shard/handleClose.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { GatewayCloseEventCodes } from '@discordeno/types' -import type { CloseEvent } from 'ws' -import type { Shard } from './types.js' -import { ShardSocketCloseCodes, ShardState } from './types.js' - -export async function handleClose ( - shard: Shard, - close: CloseEvent -): Promise { - // gateway.debug("GW CLOSED", { shardId, payload: event }); - - shard.stopHeartbeating() - - switch (close.code) { - case ShardSocketCloseCodes.TestingFinished: { - shard.state = ShardState.Offline - shard.events.disconnected?.(shard) - - return - } - // On these codes a manual start will be done. - case ShardSocketCloseCodes.Shutdown: - case ShardSocketCloseCodes.ReIdentifying: - case ShardSocketCloseCodes.Resharded: - case ShardSocketCloseCodes.ResumeClosingOldConnection: - case ShardSocketCloseCodes.ZombiedConnection: { - shard.state = ShardState.Disconnected - shard.events.disconnected?.(shard) - - // gateway.debug("GW CLOSED_RECONNECT", { shardId, payload: event }); - return - } - // Gateway connection closes which require a new identify. - case GatewayCloseEventCodes.UnknownOpcode: - case GatewayCloseEventCodes.NotAuthenticated: - case GatewayCloseEventCodes.InvalidSeq: - case GatewayCloseEventCodes.RateLimited: - case GatewayCloseEventCodes.SessionTimedOut: { - shard.state = ShardState.Identifying - shard.events.disconnected?.(shard) - - return await shard.identify() - } - // When these codes are received something went really wrong. - // On those we cannot start a reconnect attempt. - case GatewayCloseEventCodes.AuthenticationFailed: - case GatewayCloseEventCodes.InvalidShard: - case GatewayCloseEventCodes.ShardingRequired: - case GatewayCloseEventCodes.InvalidApiVersion: - case GatewayCloseEventCodes.InvalidIntents: - case GatewayCloseEventCodes.DisallowedIntents: { - shard.state = ShardState.Offline - shard.events.disconnected?.(shard) - - throw new Error( - close.reason || 'Discord gave no reason! GG! You broke Discord!' - ) - } - // Gateway connection closes on which a resume is allowed. - case GatewayCloseEventCodes.UnknownError: - case GatewayCloseEventCodes.DecodeError: - case GatewayCloseEventCodes.AlreadyAuthenticated: - default: { - shard.state = ShardState.Resuming - shard.events.disconnected?.(shard) - - return await shard.resume() - } - } -} diff --git a/packages/old/gateway/src/shard/handleMessage.ts b/packages/old/gateway/src/shard/handleMessage.ts deleted file mode 100644 index d308a1869..000000000 --- a/packages/old/gateway/src/shard/handleMessage.ts +++ /dev/null @@ -1,161 +0,0 @@ -import type { - DiscordGatewayPayload, - DiscordHello, - DiscordReady -} from '@discordeno/types' -import { GatewayOpcodes } from '@discordeno/types' -import { createLeakyBucket, delay } from '@discordeno/utils' -import { inflateSync } from 'node:zlib' -import type { MessageEvent } from 'ws' -import type { Shard } from './types.js' -import { GATEWAY_RATE_LIMIT_RESET_INTERVAL, ShardState } from './types.js' - -export async function handleMessage ( - shard: Shard, - message: MessageEvent -): Promise { - let preProcessMessage = message.data - - // If message compression is enabled, - // Discord might send zlib compressed payloads. - if (shard.gatewayConfig.compress && preProcessMessage instanceof Blob) { - preProcessMessage = inflateSync( - await preProcessMessage.arrayBuffer() - ).toString() - } - - // Safeguard incase decompression failed to make a string. - if (typeof preProcessMessage !== 'string') return - - const messageData = JSON.parse(preProcessMessage) as DiscordGatewayPayload - - // Edge case start: https://github.com/discordeno/discordeno/issues/2311 - shard.heart.lastAck = Date.now() - // Manually calculating the round trip time for users who need it. - if (shard.heart.lastBeat && !shard.heart.acknowledged) { - shard.heart.rtt = shard.heart.lastAck - shard.heart.lastBeat - } - shard.heart.acknowledged = true - // Edge case end! - - switch (messageData.op) { - case GatewayOpcodes.Heartbeat: { - // TODO: can this actually happen - if (!shard.isOpen()) return - - shard.heart.lastBeat = Date.now() - // Discord randomly sends this requiring an immediate heartbeat back. - // Using a direct socket.send call here because heartbeat requests are reserved by us. - shard.socket?.send( - JSON.stringify({ - op: GatewayOpcodes.Heartbeat, - d: shard.previousSequenceNumber - }) - ) - shard.events.heartbeat?.(shard) - - break - } - case GatewayOpcodes.Hello: { - const interval = (messageData.d as DiscordHello).heartbeat_interval - - shard.startHeartbeating(interval) - - if (shard.state !== ShardState.Resuming) { - // HELLO has been send on a non resume action. - // This means that the shard starts a new session, - // therefore the rate limit interval has been reset too. - shard.bucket = createLeakyBucket({ - max: shard.calculateSafeRequests(), - refillInterval: GATEWAY_RATE_LIMIT_RESET_INTERVAL, - refillAmount: shard.calculateSafeRequests(), - // Waiting acquires should not be lost on a re-identify. - waiting: shard.bucket.waiting - }) - } - - shard.events.hello?.(shard) - - break - } - case GatewayOpcodes.HeartbeatACK: { - shard.events.heartbeatAck?.(shard) - - break - } - case GatewayOpcodes.Reconnect: { - // gateway.debug("GW RECONNECT", { shardId }); - - shard.events.requestedReconnect?.(shard) - - await shard.resume() - - break - } - case GatewayOpcodes.InvalidSession: { - // gateway.debug("GW INVALID_SESSION", { shardId, payload: messageData }); - const resumable = messageData.d as boolean - - shard.events.invalidSession?.(shard, resumable) - - // We need to wait for a random amount of time between 1 and 5 - // Reference: https://discord.com/developers/docs/topics/gateway#resuming - await delay(Math.floor((Math.random() * 4 + 1) * 1000)) - - shard.resolves.get('INVALID_SESSION')?.(messageData) - shard.resolves.delete('INVALID_SESSION') - - // When resumable is false we need to re-identify - if (!resumable) { - await shard.identify() - - break - } - - // The session is invalid but apparently it is resumable - await shard.resume() - - break - } - } - - if (messageData.t === 'RESUMED') { - // gateway.debug("GW RESUMED", { shardId }); - - shard.state = ShardState.Connected - shard.events.resumed?.(shard) - - // Continue the requests which have been queued since the shard went offline. - shard.offlineSendQueue.map((resolve) => resolve()) - - shard.resolves.get('RESUMED')?.(messageData) - shard.resolves.delete('RESUMED') - } else if (messageData.t === 'READY') { - // Important for future resumes. - - const payload = messageData.d as DiscordReady - - shard.resumeGatewayUrl = payload.resume_gateway_url - - shard.sessionId = payload.session_id - shard.state = ShardState.Connected - - // Continue the requests which have been queued since the shard went offline. - // Important when this is a re-identify - shard.offlineSendQueue.map((resolve) => resolve()) - - shard.resolves.get('READY')?.(messageData) - shard.resolves.delete('READY') - } - - // Update the sequence number if it is present - // `s` can be either `null` or a `number`. - // In order to prevent update misses when `s` is `0` we check against null. - if (messageData.s !== null) { - shard.previousSequenceNumber = messageData.s - } - - // The necessary handling required for the Shards connection has been finished. - // Now the event can be safely forwarded. - shard.events.message?.(shard, messageData) -} diff --git a/packages/old/gateway/src/shard/identify.ts b/packages/old/gateway/src/shard/identify.ts deleted file mode 100644 index 30a828bc1..000000000 --- a/packages/old/gateway/src/shard/identify.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { GatewayOpcodes } from '@discordeno/types' -import type { Shard } from './types.js' -import { ShardSocketCloseCodes, ShardState } from './types.js' - -export async function identify (shard: Shard): Promise { - // A new identify has been requested even though there is already a connection open. - // Therefore we need to close the old connection and heartbeating before creating a new one. - if (shard.isOpen()) { - console.log(`CLOSING EXISTING SHARD: #${shard.id}`) - shard.close( - ShardSocketCloseCodes.ReIdentifying, - 'Re-identifying closure of old connection.' - ) - } - - shard.state = ShardState.Identifying - shard.events.identifying?.(shard) - - // It is possible that the shard is in Heartbeating state but not identified, - // so check whether there is already a gateway connection existing. - // If not we need to create one before we identify. - if (!shard.isOpen()) { - await shard.connect() - } - - // Wait until an identify is free for this shard. - await shard.requestIdentify() - - shard.send( - { - op: GatewayOpcodes.Identify, - d: { - token: `Bot ${shard.gatewayConfig.token}`, - compress: shard.gatewayConfig.compress, - properties: shard.gatewayConfig.properties, - intents: shard.gatewayConfig.intents, - shard: [shard.id, shard.totalShards], - presence: await shard.makePresence?.(shard.id) - } - }, - true - ) - - return await new Promise((resolve) => { - shard.resolves.set('READY', () => { - shard.events.identified?.(shard) - resolve() - }) - // When identifying too fast, - // Discord sends an invalid session payload. - // This can safely be ignored though and the shard starts a new identify action. - shard.resolves.set('INVALID_SESSION', () => { - shard.resolves.delete('READY') - resolve() - }) - }) -} diff --git a/packages/old/gateway/src/shard/index.ts b/packages/old/gateway/src/shard/index.ts deleted file mode 100644 index 4fe59b819..000000000 --- a/packages/old/gateway/src/shard/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -export * from './calculateSafeRequests.js' -export * from './close.js' -export * from './connect.js' -export * from './createShard.js' -export * from './handleClose.js' -export * from './handleMessage.js' -export * from './identify.js' -export * from './isOpen.js' -export * from './resume.js' -export * from './send.js' -export * from './shutdown.js' -export * from './startHeartbeating.js' -export * from './stopHeartbeating.js' -export * from './types.js' diff --git a/packages/old/gateway/src/shard/isOpen.ts b/packages/old/gateway/src/shard/isOpen.ts deleted file mode 100644 index 2f4f7046d..000000000 --- a/packages/old/gateway/src/shard/isOpen.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { WebSocket } from 'ws' -import type { Shard } from './types.js' - -export function isOpen (shard: Shard): boolean { - return shard.socket?.readyState === WebSocket.OPEN -} diff --git a/packages/old/gateway/src/shard/resume.ts b/packages/old/gateway/src/shard/resume.ts deleted file mode 100644 index c2a24e6c4..000000000 --- a/packages/old/gateway/src/shard/resume.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { GatewayOpcodes } from '@discordeno/types' -import type { Shard } from './types.js' -import { ShardSocketCloseCodes, ShardState } from './types.js' - -export async function resume (shard: Shard): Promise { - // gateway.debug("GW RESUMING", { shardId }); - // It has been requested to resume the Shards session. - // It's possible that the shard is still connected with Discord's gateway therefore we need to forcefully close it. - if (shard.isOpen()) { - shard.close( - ShardSocketCloseCodes.ResumeClosingOldConnection, - 'Reconnecting the shard, closing old connection.' - ) - } - - // Shard has never identified, so we cannot resume. - if (!shard.sessionId) { - // gateway.debug( - // "GW DEBUG", - // `[Error] Trying to resume a shard (id: ${shardId}) that was not first identified.`, - // ); - - return await shard.identify() - - // throw new Error(`[SHARD] Trying to resume a shard (id: ${shard.id}) which was never identified`); - } - - shard.state = ShardState.Resuming - - // Before we can resume, we need to create a new connection with Discord's gateway. - await shard.connect() - - shard.send( - { - op: GatewayOpcodes.Resume, - d: { - token: `Bot ${shard.gatewayConfig.token}`, - session_id: shard.sessionId, - seq: shard.previousSequenceNumber ?? 0 - } - }, - true - ) - - return await new Promise((resolve) => { - shard.resolves.set('RESUMED', () => resolve()) - // If it is attempted to resume with an invalid session id, - // Discord sends an invalid session payload - // Not erroring here since it is easy that this happens, also it would be not catchable - shard.resolves.set('INVALID_SESSION', () => { - shard.resolves.delete('RESUMED') - resolve() - }) - }) -} diff --git a/packages/old/gateway/src/shard/send.ts b/packages/old/gateway/src/shard/send.ts deleted file mode 100644 index 5d27c68d8..000000000 --- a/packages/old/gateway/src/shard/send.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { Shard, ShardSocketRequest } from './types.js' - -async function checkOffline ( - shard: Shard, - highPriority: boolean -): Promise { - if (!shard.isOpen()) { - await new Promise((resolve) => { - if (highPriority) { - // Higher priority requests get added at the beginning of the array. - shard.offlineSendQueue.unshift(resolve) - } else { - shard.offlineSendQueue.push(resolve) - } - }) - } -} - -export async function send ( - shard: Shard, - message: ShardSocketRequest, - highPriority: boolean -): Promise { - // Before acquiring a token from the bucket, check whether the shard is currently offline or not. - // Else bucket and token wait time just get wasted. - await checkOffline(shard, highPriority) - - await shard.bucket.acquire(1, highPriority) - - // It's possible, that the shard went offline after a token has been acquired from the bucket. - await checkOffline(shard, highPriority) - - shard.socket?.send(JSON.stringify(message)) -} diff --git a/packages/old/gateway/src/shard/shutdown.ts b/packages/old/gateway/src/shard/shutdown.ts deleted file mode 100644 index 51f32aa36..000000000 --- a/packages/old/gateway/src/shard/shutdown.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Shard } from './types.js' -import { ShardSocketCloseCodes, ShardState } from './types.js' - -export async function shutdown (shard: Shard): Promise { - shard.close(ShardSocketCloseCodes.Shutdown, 'Shard shutting down.') - shard.state = ShardState.Offline -} diff --git a/packages/old/gateway/src/shard/startHeartbeating.ts b/packages/old/gateway/src/shard/startHeartbeating.ts deleted file mode 100644 index 948074ab4..000000000 --- a/packages/old/gateway/src/shard/startHeartbeating.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { GatewayOpcodes } from '@discordeno/types' -import type { Shard } from './types.js' -import { ShardSocketCloseCodes, ShardState } from './types.js' - -export function startHeartbeating (shard: Shard, interval: number): void { - // gateway.debug("GW HEARTBEATING_STARTED", { shardId, interval }); - - shard.heart.interval = interval - - // Only set the shard's state to `Unidentified` - // if heartbeating has not been started due to an identify or resume action. - if ([ShardState.Disconnected, ShardState.Offline].includes(shard.state)) { - shard.state = ShardState.Unidentified - } - - // The first heartbeat needs to be send with a random delay between `0` and `interval` - // Using a `setTimeout(_, jitter)` here to accomplish that. - // `Math.random()` can be `0` so we use `0.5` if this happens - // Reference: https://discord.com/developers/docs/topics/gateway#heartbeating - const jitter = Math.ceil(shard.heart.interval * (Math.random() || 0.5)) - shard.heart.timeoutId = setTimeout(() => { - // Using a direct socket.send call here because heartbeat requests are reserved by us. - shard.socket?.send( - JSON.stringify({ - op: GatewayOpcodes.Heartbeat, - d: shard.previousSequenceNumber - }) - ) - - shard.heart.lastBeat = Date.now() - shard.heart.acknowledged = false - - // After the random heartbeat jitter we can start a normal interval. - shard.heart.intervalId = setInterval(async () => { - // gateway.debug("GW DEBUG", `Running setInterval in heartbeat file. Shard: ${shardId}`); - - // gateway.debug("GW HEARTBEATING", { shardId, shard: currentShard }); - - // The Shard did not receive a heartbeat ACK from Discord in time, - // therefore we have to assume that the connection has failed or got "zombied". - // The Shard needs to start a re-identify action accordingly. - // Reference: https://discord.com/developers/docs/topics/gateway#heartbeating-example-gateway-heartbeat-ack - if (!shard.heart.acknowledged) { - shard.close( - ShardSocketCloseCodes.ZombiedConnection, - 'Zombied connection, did not receive an heartbeat ACK in time.' - ) - - return await shard.identify() - } - - shard.heart.acknowledged = false - - // Using a direct socket.send call here because heartbeat requests are reserved by us. - shard.socket?.send( - JSON.stringify({ - op: GatewayOpcodes.Heartbeat, - d: shard.previousSequenceNumber - }) - ) - - shard.heart.lastBeat = Date.now() - - shard.events.heartbeat?.(shard) - }, shard.heart.interval) - }, jitter) -} diff --git a/packages/old/gateway/src/shard/stopHeartbeating.ts b/packages/old/gateway/src/shard/stopHeartbeating.ts deleted file mode 100644 index 0a668b7ce..000000000 --- a/packages/old/gateway/src/shard/stopHeartbeating.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Shard } from './types.js' - -export function stopHeartbeating (shard: Shard): void { - // Clear the regular heartbeat interval. - clearInterval(shard.heart.intervalId) - // It's possible that the Shard got closed before the first jittered heartbeat. - // To go safe we should clear the related timeout too. - clearTimeout(shard.heart.timeoutId) -} diff --git a/packages/old/gateway/src/shard/types.ts b/packages/old/gateway/src/shard/types.ts deleted file mode 100644 index abc6161f1..000000000 --- a/packages/old/gateway/src/shard/types.ts +++ /dev/null @@ -1,147 +0,0 @@ -import type { DiscordGatewayPayload, GatewayOpcodes } from '@discordeno/types' -import type { createShard } from './createShard.js' - -// TODO: think whether we also need an identifiedShard function - -export const MAX_GATEWAY_REQUESTS_PER_INTERVAL = 120 -export const GATEWAY_RATE_LIMIT_RESET_INTERVAL = 60_000 // 60 seconds -export const DEFAULT_HEARTBEAT_INTERVAL = 45000 - -export type Shard = ReturnType - -export enum ShardState { - /** Shard is fully connected to the gateway and receiving events from Discord. */ - Connected = 0, - /** Shard started to connect to the gateway. - * This is only used if the shard is not currently trying to identify or resume. - */ - Connecting = 1, - /** Shard got disconnected and reconnection actions have been started. */ - Disconnected = 2, - /** The shard is connected to the gateway but only heartbeating. - * At this state the shard has not been identified with discord. - */ - Unidentified = 3, - /** Shard is trying to identify with the gateway to create a new session. */ - Identifying = 4, - /** Shard is trying to resume a session with the gateway. */ - Resuming = 5, - /** Shard got shut down studied or due to a not (self) fixable error and may not attempt to reconnect on its own. */ - Offline = 6, -} - -export interface ShardGatewayConfig { - /** Whether incoming payloads are compressed using zlib. - * - * @default false - */ - compress: boolean - /** The calculated intent value of the events which the shard should receive. - * - * @default 0 - */ - intents: number - /** Identify properties to use */ - properties: { - /** Operating system the shard runs on. - * - * @default "darwin" | "linux" | "windows" - */ - os: string - /** The "browser" where this shard is running on. - * - * @default "Discordeno" - */ - browser: string - /** The device on which the shard is running. - * - * @default "Discordeno" - */ - device: string - } - /** Bot token which is used to connect to Discord */ - token: string - /** The URL of the gateway which should be connected to. - * - * @default "wss://gateway.discord.gg" - */ - url: string - /** The gateway version which should be used. - * - * @default 10 - */ - version: number -} - -export interface ShardHeart { - /** Whether or not the heartbeat was acknowledged by Discord in time. */ - acknowledged: boolean - /** Interval between heartbeats requested by Discord. */ - interval: number - /** Id of the interval, which is used for sending the heartbeats. */ - intervalId?: NodeJS.Timer - /** Unix (in milliseconds) timestamp when the last heartbeat ACK was received from Discord. */ - lastAck?: number - /** Unix timestamp (in milliseconds) when the last heartbeat was sent. */ - lastBeat?: number - /** Round trip time (in milliseconds) from Shard to Discord and back. - * Calculated using the heartbeat system. - * Note: this value is undefined until the first heartbeat to Discord has happened. - */ - rtt?: number - /** Id of the timeout which is used for sending the first heartbeat to Discord since it's "special". */ - timeoutId?: NodeJS.Timeout -} - -export interface ShardEvents { - /** A heartbeat has been send. */ - heartbeat?: (shard: Shard) => unknown - /** A heartbeat ACK was received. */ - heartbeatAck?: (shard: Shard) => unknown - /** Shard has received a Hello payload. */ - hello?: (shard: Shard) => unknown - /** The Shards session has been invalidated. */ - invalidSession?: (shard: Shard, resumable: boolean) => unknown - /** The shard has started a resume action. */ - resuming?: (shard: Shard) => unknown - /** The shard has successfully resumed an old session. */ - resumed?: (shard: Shard) => unknown - /** Discord has requested the Shard to reconnect. */ - requestedReconnect?: (shard: Shard) => unknown - /** The shard started to connect to Discord's gateway. */ - connecting?: (shard: Shard) => unknown - /** The shard is connected with Discord's gateway. */ - connected?: (shard: Shard) => unknown - /** The shard has been disconnected from Discord's gateway. */ - disconnected?: (shard: Shard) => unknown - /** The shard has started to identify itself to Discord. */ - identifying?: (shard: Shard) => unknown - /** The shard has successfully been identified itself with Discord. */ - identified?: (shard: Shard) => unknown - /** The shard has received a message from Discord. */ - message?: (shard: Shard, payload: DiscordGatewayPayload) => unknown -} - -export enum ShardSocketCloseCodes { - /** A regular Shard shutdown. */ - Shutdown = 3000, - /** A resume has been requested and therefore the old connection needs to be closed. */ - ResumeClosingOldConnection = 3024, - /** Did not receive a heartbeat ACK in time. - * Closing the shard and creating a new session. - */ - ZombiedConnection = 3010, - /** Discordeno's gateway tests hae been finished, therefore the Shard can be turned off. */ - TestingFinished = 3064, - /** Special close code reserved for Discordeno's zero-downtime resharding system. */ - Resharded = 3065, - /** Shard is re-identifying therefore the old connection needs to be closed. */ - ReIdentifying = 3066, -} - -export interface ShardSocketRequest { - /** The OP-Code for the payload to send. */ - op: GatewayOpcodes - /** Payload data. */ - d: unknown -} diff --git a/packages/old/gateway/tests/empty.spec.ts b/packages/old/gateway/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/gateway/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/gateway/tsconfig.json b/packages/old/gateway/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/gateway/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/gateway/tsconfig.test.json b/packages/old/gateway/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/gateway/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/logger/package.json b/packages/old/logger/package.json deleted file mode 100644 index 2be8bd739..000000000 --- a/packages/old/logger/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@discordeno/logger", - "version": "18.0.0-alpha.1", - "main": "./src/index.ts", - "types": "./src/index.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:type": "tsc --noEmit" - }, - "devDependencies": { - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/node": "^18.11.9", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - }, - "dependencies": { - "chalk": "^5.1.2" - } -} \ No newline at end of file diff --git a/packages/old/logger/src/index.ts b/packages/old/logger/src/index.ts deleted file mode 100644 index ad215c865..000000000 --- a/packages/old/logger/src/index.ts +++ /dev/null @@ -1,110 +0,0 @@ -import chalk from 'chalk' - -export enum LogLevels { - Debug, - Info, - Warn, - Error, - Fatal, -} - -const prefixes = new Map([ - [LogLevels.Debug, 'DEBUG'], - [LogLevels.Info, 'INFO'], - [LogLevels.Warn, 'WARN'], - [LogLevels.Error, 'ERROR'], - [LogLevels.Fatal, 'FATAL'] -]) - -const noColor: (str: string) => string = (msg) => msg -const colorFunctions = new Map string>([ - [LogLevels.Debug, chalk.gray], - [LogLevels.Info, chalk.cyan], - [LogLevels.Warn, chalk.yellow], - [LogLevels.Error, (str: string) => chalk.red(str)], - [LogLevels.Fatal, (str: string) => chalk.red.bold.italic(str)] -]) - -export function logger ({ - logLevel = LogLevels.Info, - name -}: { - logLevel?: LogLevels - name?: string -} = {}): { - log: (level: LogLevels, ...args: any[]) => void - setLevel: (level: LogLevels) => void - debug: (...args: any[]) => void - info: (...args: any[]) => void - warn: (...args: any[]) => void - error: (...args: any[]) => void - fatal: (...args: any[]) => void - } { - function log (level: LogLevels, ...args: any[]): void { - if (level < logLevel) return - - let color = colorFunctions.get(level) - if (color == null) color = noColor - - const date = new Date() - const log = [ - `[${date.toLocaleDateString()} ${date.toLocaleTimeString()}]`, - color(prefixes.get(level) ?? 'DEBUG'), - name ? `${name} >` : '>', - ...args - ] - - switch (level) { - case LogLevels.Debug: - return console.debug(...log) - case LogLevels.Info: - return console.info(...log) - case LogLevels.Warn: - return console.warn(...log) - case LogLevels.Error: - return console.error(...log) - case LogLevels.Fatal: - return console.error(...log) - default: - return console.log(...log) - } - } - - function setLevel (level: LogLevels): void { - logLevel = level - } - - function debug (...args: any[]): void { - log(LogLevels.Debug, ...args) - } - - function info (...args: any[]): void { - log(LogLevels.Info, ...args) - } - - function warn (...args: any[]): void { - log(LogLevels.Warn, ...args) - } - - function error (...args: any[]): void { - log(LogLevels.Error, ...args) - } - - function fatal (...args: any[]): void { - log(LogLevels.Fatal, ...args) - } - - return { - log, - setLevel, - debug, - info, - warn, - error, - fatal - } -} - -export const log = logger({ name: 'Main' }) -export const createLogger = logger -export default log diff --git a/packages/old/logger/tsconfig.json b/packages/old/logger/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/logger/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/logger/tsconfig.test.json b/packages/old/logger/tsconfig.test.json deleted file mode 100644 index d79436623..000000000 --- a/packages/old/logger/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests" - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/cache/.c8rc.json b/packages/old/plugins/cache/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/plugins/cache/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/plugins/cache/.mocharc.json b/packages/old/plugins/cache/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/plugins/cache/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/plugins/cache/.swcrc b/packages/old/plugins/cache/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/plugins/cache/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/plugins/cache/README.md b/packages/old/plugins/cache/README.md deleted file mode 100644 index 5eb6ee1a9..000000000 --- a/packages/old/plugins/cache/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# cache-plugin - -This is an official plugin maintained by Discordeno. This plugin provides automatic caching. Remember Discordeno does -not cache by default. This plugin is NOT recommended for big bot developers but this is useful for smaller bots who just -want simple functionality. - -## Usage - -```ts -// MOVE TO DEPS.TS AND USE SPECIFIC VERSION -import { enableCachePlugin, enableCacheSweepers } from "https://deno.land/x/discordeno_cache_plugin/mod.js"; - -// Create the bot object, THIS WILL NEED YOUR OPTIONS. -const baseBot = createBot({}); -// Enables the cache plugin on this bot -const bot = enableCachePlugin(baseBot); -enableCacheSweepers(bot); -// Start your bot -await startBot(bot); -``` diff --git a/packages/old/plugins/cache/package.json b/packages/old/plugins/cache/package.json deleted file mode 100644 index 6f5b57744..000000000 --- a/packages/old/plugins/cache/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "@discordeno/cache-plugin", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts'", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "devDependencies": { - "@discordeno/gateway": "18.0.0-alpha.1", - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/chai": "^4", - "@types/mocha": "^10", - "@types/node": "^18.11.9", - "@types/sinon": "^10.0.13", - "c8": "^7.12.0", - "chai": "^4.3.7", - "discordeno": "18.0.0-alpha.1", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - } -} \ No newline at end of file diff --git a/packages/old/plugins/cache/src/addCacheCollections.ts b/packages/old/plugins/cache/src/addCacheCollections.ts deleted file mode 100644 index 1b860b190..000000000 --- a/packages/old/plugins/cache/src/addCacheCollections.ts +++ /dev/null @@ -1,52 +0,0 @@ -import type { - BigString, - Bot, - Channel, - Guild, - Member, - Message, - ModifyWebhook, - PresenceUpdate, - User, - Webhook -} from 'discordeno' -import { Collection } from 'discordeno' - -export type BotWithCache = Omit & -CacheProps & { - helpers: BotHelpersWithCache -} - -export type BotHelpersWithCache = Omit & { - /** The added channelId argument at the end is used to validate permission checks */ - editWebhook: ( - webhookId: BigString, - options: ModifyWebhook, - fromChannelId?: bigint - ) => Promise -} - -export interface CacheProps { - guilds: Collection - users: Collection - members: Collection - channels: Collection - messages: Collection - presences: Collection - dispatchedGuildIds: Set - dispatchedChannelIds: Set -} - -export function addCacheCollections (bot: B): BotWithCache { - const cacheBot = bot as unknown as BotWithCache - cacheBot.guilds = new Collection() - cacheBot.users = new Collection() - cacheBot.members = new Collection() - cacheBot.channels = new Collection() - cacheBot.messages = new Collection() - cacheBot.presences = new Collection() - cacheBot.dispatchedGuildIds = new Set() - cacheBot.dispatchedChannelIds = new Set() - - return cacheBot -} diff --git a/packages/old/plugins/cache/src/dispatchRequirements.ts b/packages/old/plugins/cache/src/dispatchRequirements.ts deleted file mode 100644 index 3b7447ff2..000000000 --- a/packages/old/plugins/cache/src/dispatchRequirements.ts +++ /dev/null @@ -1,103 +0,0 @@ -import type { Shard } from '@discordeno/gateway' -import type { Bot, DiscordGatewayPayload, Guild } from 'discordeno' -import type { BotWithCache } from './addCacheCollections.js' - -const processing = new Set() - -export async function dispatchRequirements ( - bot: BotWithCache, - data: DiscordGatewayPayload, - shard: Shard -): Promise { - // 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) - ? (data.d as any)?.id - : (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 (bot.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 as string - } 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 as string - } 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 as string} event` - ) - - const guild = (await bot.helpers - .getGuild(id, { - counts: true - }) - .catch(console.log)) as Guild - - if (!guild) { - processing.delete(id) - return bot.events.debug(`[DISPATCH] Guild ID ${id} failed to fetch.`) - } - - bot.events.debug(`[DISPATCH] Guild ID ${id} has been found. ${guild.name}`) - - const [channels, botMember] = await Promise.all([ - bot.helpers.getChannels(id), - bot.helpers.getMember(id, bot.id) - ]).catch((error) => { - bot.events.debug(error) - return [] - }) - - if (!botMember || !channels) { - processing.delete(id) - return bot.events.debug( - `[DISPATCH] Guild ID ${id} Name: ${guild.name} failed. Unable to get botMember or channels` - ) - } - - // Add to cache - bot.guilds.set(id, guild) - bot.dispatchedGuildIds.delete(id) - channels.forEach((channel) => { - bot.dispatchedChannelIds.delete(channel.id) - bot.channels.set(channel.id, channel) - }) - bot.members.set( - bot.transformers.snowflake(`${botMember.id}${guild.id}`), - botMember - ) - - processing.delete(id) - - bot.events.debug( - `[DISPATCH] Guild ID ${id} Name: ${guild.name} completely loaded.` - ) -} diff --git a/packages/old/plugins/cache/src/index.ts b/packages/old/plugins/cache/src/index.ts deleted file mode 100644 index 06df6d100..000000000 --- a/packages/old/plugins/cache/src/index.ts +++ /dev/null @@ -1,166 +0,0 @@ -import type { Bot, DiscordGuildEmojisUpdate } from 'discordeno' -import { Collection } from 'discordeno' -import type { BotWithCache } from './addCacheCollections.js' -import { addCacheCollections } from './addCacheCollections.js' -import { setupCacheEdits } from './setupCacheEdits.js' -import { setupCacheRemovals } from './setupCacheRemovals.js' - -// PLUGINS MUST TAKE A BOT ARGUMENT WHICH WILL BE MODIFIED -export function enableCachePlugin ( - rawBot: B -): BotWithCache { - // MARK THIS PLUGIN BEING USED - rawBot.enabledPlugins.add('CACHE') - - // CUSTOMIZATION GOES HERE - const bot = addCacheCollections(rawBot) - - // Get the unmodified transformer. - const { guild, user, member, channel, message, presence, role } = - bot.transformers - // Override the transformer - bot.transformers.guild = function (_, payload) { - // Run the unmodified transformer - const result = guild(bot, payload) - // Cache the result - if (result) { - bot.guilds.set(result.id, result) - - const channels = payload.guild.channels ?? [] - - channels.forEach((channel) => { - bot.transformers.channel(bot, { channel, guildId: result.id }) - }) - - payload.guild.members?.forEach((member) => { - bot.transformers.member( - bot, - member, - result.id, - bot.transformers.snowflake(member.user!.id) - ) - }) - } - - // Return the result - return result - } - - // Override the transformer - bot.transformers.user = function (...args) { - // Run the unmodified transformer - const result = user(...args) - // Cache the result - if (result) { - bot.users.set(result.id, result) - } - // Return the result - return result - } - - // Override the transformer - bot.transformers.member = function (...args) { - // Run the unmodified transformer - const result = member(...args) - // Cache the result - if (result) { - bot.members.set( - bot.transformers.snowflake(`${result.id}${result.guildId}`), - result - ) - } - // Return the result - return result - } - - // Override the transformer - bot.transformers.channel = function (...args) { - // Run the unmodified transformer - const result = channel(...args) - // Cache the result - if (result) { - bot.channels.set(result.id, result) - } - // Return the result - return result - } - - // Override the transformer - bot.transformers.message = function (_, payload) { - // Run the unmodified transformer - const result = message(bot, payload) - // Cache the result - if (result) { - bot.messages.set(result.id, result) - // CACHE THE USER - const user = bot.transformers.user(bot, payload.author) - bot.users.set(user.id, user) - - if (payload.guild_id && payload.member) { - const guildId = bot.transformers.snowflake(payload.guild_id) - // CACHE THE MEMBER - bot.members.set( - bot.transformers.snowflake(`${payload.author.id}${payload.guild_id}`), - bot.transformers.member(bot, payload.member, guildId, user.id) - ) - } - } - - // Return the result - return result - } - - // Override the transformer - bot.transformers.presence = function (...args) { - // Run the unmodified transformer - const result = presence(...args) - // Cache the result - if (result) { - bot.presences.set(result.user.id, result) - } - // Return the result - return result - } - - // Override the transformer - bot.transformers.role = function (...args) { - // Run the unmodified transformer - const result = role(...args) - // Cache the result - if (result) { - bot.guilds.get(result.guildId)?.roles.set(result.id, result) - } - // Return the result - return result - } - - const { GUILD_EMOJIS_UPDATE } = bot.handlers - bot.handlers.GUILD_EMOJIS_UPDATE = function (_, data, shardId) { - const payload = data.d as DiscordGuildEmojisUpdate - - const guild = bot.guilds.get(bot.transformers.snowflake(payload.guild_id)) - if (guild) { - guild.emojis = new Collection( - payload.emojis.map((e) => { - const emoji = bot.transformers.emoji(bot, e) - return [emoji.id!, emoji] - }) - ) - } - - GUILD_EMOJIS_UPDATE(bot, data, shardId) - } - - setupCacheRemovals(bot) - setupCacheEdits(bot) - - // PLUGINS MUST RETURN THE BOT - return bot -} - -export default enableCachePlugin -export * from './addCacheCollections.js' -export * from './dispatchRequirements.js' -export * from './setupCacheEdits.js' -export * from './setupCacheRemovals.js' -export * from './sweepers.js' diff --git a/packages/old/plugins/cache/src/setupCacheEdits.ts b/packages/old/plugins/cache/src/setupCacheEdits.ts deleted file mode 100644 index b40f1eefe..000000000 --- a/packages/old/plugins/cache/src/setupCacheEdits.ts +++ /dev/null @@ -1,135 +0,0 @@ -import type { - Bot, - DiscordGuildMemberAdd, - DiscordGuildMemberRemove, - DiscordMessageReactionAdd, - DiscordMessageReactionRemove, - DiscordMessageReactionRemoveAll, - DiscordVoiceState -} from 'discordeno' -import type { BotWithCache } from './addCacheCollections.js' - -export function setupCacheEdits (bot: BotWithCache): void { - const { - GUILD_MEMBER_ADD, - GUILD_MEMBER_REMOVE, - MESSAGE_REACTION_ADD, - MESSAGE_REACTION_REMOVE, - MESSAGE_REACTION_REMOVE_ALL, - VOICE_STATE_UPDATE - } = bot.handlers - - bot.handlers.GUILD_MEMBER_ADD = function (_, data, shardId) { - const payload = data.d as DiscordGuildMemberAdd - - const guild = bot.guilds.get(bot.transformers.snowflake(payload.guild_id)) - - if (guild) guild.memberCount++ - - GUILD_MEMBER_ADD(bot, data, shardId) - } - - bot.handlers.GUILD_MEMBER_REMOVE = function (_, data, shardId) { - const payload = data.d as DiscordGuildMemberRemove - - const guild = bot.guilds.get(bot.transformers.snowflake(payload.guild_id)) - - if (guild) guild.memberCount-- - - GUILD_MEMBER_REMOVE(bot, data, shardId) - } - - bot.handlers.MESSAGE_REACTION_ADD = function (_, data, shardId) { - const payload = data.d as DiscordMessageReactionAdd - - const messageId = bot.transformers.snowflake(payload.message_id) - const message = bot.messages.get(messageId) - - const emoji = bot.transformers.emoji(bot, payload.emoji) - - // if the message is cached - if (message) { - const reactions = message.reactions?.map((r) => r.emoji.name) - const toSet = { - count: 1, - me: bot.transformers.snowflake(payload.user_id) === bot.id, - emoji - } - - // if theres no reaction add it - if ((message.reactions == null) || (reactions == null)) { - message.reactions = [toSet] - } else if (!reactions.includes(emoji.name)) { - message.reactions?.push(toSet) - } else { // otherwise the reaction has already been added so +1 to the reaction count - const current = message.reactions?.[reactions.indexOf(emoji.name)] - - // rewrite - if (current) { - current.count++ - } - } - } - - MESSAGE_REACTION_ADD(bot, data, shardId) - } - - bot.handlers.MESSAGE_REACTION_REMOVE = function (_, data, shardId) { - const payload = data.d as DiscordMessageReactionRemove - - const messageId = bot.transformers.snowflake(payload.message_id) - const message = bot.messages.get(messageId) - - const emoji = bot.transformers.emoji(bot, payload.emoji) - - // if the message is cached - if (message) { - const reactions = message.reactions?.map((r) => r.emoji.name) - - if (reactions?.indexOf(emoji.name) !== undefined) { - const current = message.reactions?.[reactions.indexOf(emoji.name)] - - if (current) { - if (current.count > 0) { - current.count-- - } - // delete when count is 0 - if (current.count === 0) { - message.reactions?.splice(reactions?.indexOf(emoji.name), 1) - } - // when someone deleted a reaction that doesn't exist in the cache just pass - } - } - } - - MESSAGE_REACTION_REMOVE(bot, data, shardId) - } - - bot.handlers.MESSAGE_REACTION_REMOVE_ALL = function (_, data, shardId) { - const payload = data.d as DiscordMessageReactionRemoveAll - - const messageId = bot.transformers.snowflake(payload.message_id) - const message = bot.messages.get(messageId) - - if (message) { - // when an admin deleted all the reactions of a message - message.reactions = undefined - } - - MESSAGE_REACTION_REMOVE_ALL(bot, data, shardId) - } - - bot.handlers.VOICE_STATE_UPDATE = (_, data, shardId) => { - const payload = data.d as DiscordVoiceState - if (!payload.guild_id) return - - const vs = bot.transformers.voiceState(bot, { - voiceState: payload, - guildId: bot.transformers.snowflake(payload.guild_id) - }) - - bot.guilds.get(vs.guildId)?.voiceStates.set(vs.userId, vs) - - VOICE_STATE_UPDATE(bot, data, shardId) - } -} diff --git a/packages/old/plugins/cache/src/setupCacheRemovals.ts b/packages/old/plugins/cache/src/setupCacheRemovals.ts deleted file mode 100644 index 3b62cf41f..000000000 --- a/packages/old/plugins/cache/src/setupCacheRemovals.ts +++ /dev/null @@ -1,144 +0,0 @@ -import type { - Bot, - DiscordChannel, - DiscordGuildBanAddRemove, - DiscordGuildEmojisUpdate, - DiscordGuildMemberRemove, - DiscordGuildRoleDelete, - DiscordMessageDelete, - DiscordMessageDeleteBulk, - DiscordUnavailableGuild, - DiscordVoiceState, Emoji -} from 'discordeno' -import { Collection } from 'discordeno' -import type { BotWithCache } from './addCacheCollections.js' - -export function setupCacheRemovals (bot: BotWithCache): void { - const { - CHANNEL_DELETE, - GUILD_BAN_ADD, - GUILD_DELETE, - GUILD_EMOJIS_UPDATE, - GUILD_MEMBER_REMOVE, - GUILD_ROLE_DELETE, - MESSAGE_DELETE_BULK, - VOICE_STATE_UPDATE - } = bot.handlers - - bot.handlers.GUILD_DELETE = function (_, data, shardId) { - const payload = data.d as DiscordUnavailableGuild - const id = bot.transformers.snowflake(payload.id) - - bot.guilds.delete(id) - bot.channels.forEach((channel) => { - if (channel.guildId === id) bot.channels.delete(channel.id) - }) - bot.members.forEach((member) => { - if (member.guildId === id) bot.members.delete(member.id) - }) - bot.messages.forEach((message) => { - if (message.guildId === id) bot.messages.delete(message.id) - }) - GUILD_DELETE(bot, data, shardId) - } - - bot.handlers.CHANNEL_DELETE = function (_, data, shardId) { - const payload = data.d as DiscordChannel - // HANDLER BEFORE DELETING, BECAUSE HANDLER RUNS TRANSFORMER WHICH REACHES - CHANNEL_DELETE(bot, data, shardId) - - const id = bot.transformers.snowflake(payload.id) - bot.channels.delete(id) - bot.messages.forEach((message) => { - if (message.channelId === id) bot.messages.delete(message.id) - }) - } - - bot.handlers.GUILD_MEMBER_REMOVE = function (_, data, shardId) { - const payload = data.d as DiscordGuildMemberRemove - bot.members.delete(bot.transformers.snowflake(payload.user.id)) - GUILD_MEMBER_REMOVE(bot, data, shardId) - } - - bot.handlers.GUILD_BAN_ADD = function (_, data, shardId) { - const payload = data.d as DiscordGuildBanAddRemove - bot.members.delete(bot.transformers.snowflake(payload.user.id)) - GUILD_BAN_ADD(bot, data, shardId) - } - - bot.handlers.GUILD_EMOJIS_UPDATE = function (_, data, shardId) { - const payload = data.d as DiscordGuildEmojisUpdate - const guild = bot.guilds.get(bot.transformers.snowflake(payload.guild_id)) - - if (guild) { - guild.emojis = new Collection( - payload.emojis.map((e) => { - const emoji: Emoji = bot.transformers.emoji(bot, e) - return [emoji.id!, emoji] - }) - ) - } - - GUILD_EMOJIS_UPDATE(bot, data, shardId) - } - - bot.handlers.MESSAGE_DELETE = function (_, data) { - const payload = data.d as DiscordMessageDelete - const id = bot.transformers.snowflake(payload.id) - const message = bot.messages.get(id) - bot.events.messageDelete( - bot, - { - id, - channelId: bot.transformers.snowflake(payload.channel_id), - guildId: payload.guild_id - ? bot.transformers.snowflake(payload.guild_id) - : undefined - }, - message - ) - bot.messages.delete(id) - } - - bot.handlers.MESSAGE_DELETE_BULK = function (_, data, shardId) { - const payload = data.d as DiscordMessageDeleteBulk - payload.ids.forEach((id) => - bot.messages.delete(bot.transformers.snowflake(id)) - ) - MESSAGE_DELETE_BULK(bot, data, shardId) - } - - bot.handlers.GUILD_ROLE_DELETE = function (_, data, shardId) { - const payload = data.d as DiscordGuildRoleDelete - const guild = bot.guilds.get(bot.transformers.snowflake(payload.guild_id)) - const id = bot.transformers.snowflake(payload.role_id) - - if (guild) { - guild.roles.delete(id) - bot.members.forEach((member) => { - // SKIP MEMBERS IN OTHER GUILDS - if (member.guildId !== guild.id) return - // SKIP MEMBERS WHO DON'T HAVE ROLE - if (!member.roles.includes(id)) return - // EDIT THE MEMBERS ROLES - member.roles = member.roles.filter((roleId) => roleId !== id) - }) - } - - GUILD_ROLE_DELETE(bot, data, shardId) - } - - bot.handlers.VOICE_STATE_UPDATE = (_, data, shardId) => { - const payload = data.d as DiscordVoiceState - if (!payload.guild_id) return - - const vs = bot.transformers.voiceState(bot, { - voiceState: payload, - guildId: bot.transformers.snowflake(payload.guild_id) - }) - - if (!vs.channelId) { bot.guilds.get(vs.guildId)?.voiceStates.delete(vs.userId) } - - VOICE_STATE_UPDATE(bot, data, shardId) - } -} diff --git a/packages/old/plugins/cache/src/sweepers.ts b/packages/old/plugins/cache/src/sweepers.ts deleted file mode 100644 index 6e7238480..000000000 --- a/packages/old/plugins/cache/src/sweepers.ts +++ /dev/null @@ -1,87 +0,0 @@ -import type { Bot, Member } from 'discordeno' -import type { BotWithCache } from './addCacheCollections.js' -import { dispatchRequirements } from './dispatchRequirements.js' - -/** Enables sweepers for your bot but will require, enabling cache first. */ -export function enableCacheSweepers (bot: BotWithCache): void { - bot.guilds.startSweeper({ - filter: function (guild, _, bot: BotWithCache) { - // Reset activity for next interval - if (bot.activeGuildIds.delete(guild.id)) return false - - // This is inactive guild. Not a single thing has happened for at least 30 minutes. - // Not a reaction, not a message, not any event! - bot.dispatchedGuildIds.add(guild.id) - - return true - }, - interval: 3660000, - bot - }) - bot.channels.startSweeper({ - filter: function channelSweeper (channel, key, bot: BotWithCache) { - // If this is in a guild and the guild was dispatched, then we can dispatch the channel - if (channel.guildId && bot.dispatchedGuildIds.has(channel.guildId)) { - bot.dispatchedChannelIds.add(channel.id) - return true - } - - // THE KEY DM CHANNELS ARE STORED BY IS THE USER ID. If the user is not cached, we dont need to cache their dm channel. - if (!channel.guildId && !bot.members.has(key)) return true - - return false - }, - interval: 3660000, - bot - }) - - const setMember = bot.members.set.bind(bot.members) - bot.members.set = function (id, member) { - return setMember(id, { - ...member, - cachedAt: Date.now() - } as Member) - } - - bot.members.startSweeper({ - filter: function memberSweeper (member, _, bot: BotWithCache) { - // Don't sweep the bot else strange things will happen - if (member.id === bot.id) return false - - // Only sweep members who were not active the last 30 minutes - return ( - Date.now() - (member ).cachedAt > - 1800000 - ) - }, - interval: 300000, - bot - }) - - bot.messages.startSweeper({ - filter: function messageSweeper (message) { - // DM messages aren't needed - if (!message.guildId) return true - - // Only delete messages older than 10 minutes - return Date.now() - message.timestamp > 600000 - }, - interval: 300000, - bot - }) - - bot.presences.startSweeper({ filter: () => true, interval: 300000, bot }) - - // DISPATCH REQUIREMENTS - const handleDiscordPayloadOld = - bot.gateway.manager.createShardOptions.events.message - bot.gateway.manager.createShardOptions.events.message = async function ( - shard, - data - ) { - // RUN DISPATCH CHECK - await dispatchRequirements(bot, data, shard) - // RUN OLD HANDLER - handleDiscordPayloadOld(shard, data) - } -} diff --git a/packages/old/plugins/cache/tests/empty.spec.ts b/packages/old/plugins/cache/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/plugins/cache/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/plugins/cache/tsconfig.json b/packages/old/plugins/cache/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/plugins/cache/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/cache/tsconfig.test.json b/packages/old/plugins/cache/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/plugins/cache/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/fileloader/.c8rc.json b/packages/old/plugins/fileloader/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/plugins/fileloader/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/plugins/fileloader/.mocharc.json b/packages/old/plugins/fileloader/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/plugins/fileloader/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/plugins/fileloader/.swcrc b/packages/old/plugins/fileloader/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/plugins/fileloader/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/plugins/fileloader/README.md b/packages/old/plugins/fileloader/README.md deleted file mode 100644 index c92aee1ce..000000000 --- a/packages/old/plugins/fileloader/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# fileloader-plugin - -This plugin leverages the ability to write files, and then import them. - -## Code Example - -```typescript -import { createBot, enableFileLoaderPlugin, Intents, startBot } from "./deps.js"; // Import discordeno and this plugin. - -console.log("Starting Up the Bot, this might take awhile..."); - -const bot = enableFileLoaderPlugin( - createBot({ - token: "", // Your bot's token - botId: 0n, // Your bot's "Application Id", - intents: Intents.Guilds, - events: { - ready() { - console.log("Bot Ready"); - }, - }, - }), -); - -bot.fastFileLoader([ - // './src/commands', etc. This works just like `import [something] from [somewhere]` -]); - -startBot(bot); -``` - -Make sure to ignore `fileloader.ts` in git as it is (re)generated where you (re)start the bot. diff --git a/packages/old/plugins/fileloader/package.json b/packages/old/plugins/fileloader/package.json deleted file mode 100644 index eadb87665..000000000 --- a/packages/old/plugins/fileloader/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@discordeno/fileloader-plugin", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts'", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "devDependencies": { - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "tsconfig": "*", - "discordeno": "18.0.0-alpha.1", - "typescript": "^4.9.3" - }, - "dependencies": { - "@types/node": "^18.11.9" - } -} \ No newline at end of file diff --git a/packages/old/plugins/fileloader/src/index.ts b/packages/old/plugins/fileloader/src/index.ts deleted file mode 100644 index ceb9a1237..000000000 --- a/packages/old/plugins/fileloader/src/index.ts +++ /dev/null @@ -1,100 +0,0 @@ -import type { Bot } from 'discordeno' - -// iMpOrTaNt to make sure files can be reloaded properly! -export let uniqueFilePathCounter = 0 -export let paths: string[] = [] - -/** Recursively generates an array of unique paths to import using `fileLoader()` - * (**Is** windows compatible) - */ -export async function importDirectory (path: string): Promise { - path = path.replaceAll('\\', '/') - const files = Deno.readDirSync(Deno.realPathSync(path)) - - for (const file of files) { - if (!file.name) continue - - const currentPath = `${path}/${file.name}` - if (file.isFile) { - if (!currentPath.endsWith('.js')) continue - paths.push( - `import "${Deno.mainModule.substring(0, Deno.mainModule.lastIndexOf('/'))}/${currentPath.substring( - currentPath.indexOf('src/') - ) - }#${uniqueFilePathCounter}";` - ) - continue - } - - // Recursive function! - await importDirectory(currentPath) - } - - uniqueFilePathCounter++ -} - -/** Writes, then imports all everything in fileloader.ts */ -export async function fileLoader () { - await Deno.writeTextFile('fileloader.js', paths.join('\n').replaceAll('\\', '/')) - await import( - `${Deno.mainModule.substring(0, Deno.mainModule.lastIndexOf('/'))}/fileloader.ts#${uniqueFilePathCounter}` - ) - paths = [] -} - -/** This function will import the specified directories */ -export async function fastFileLoader ( - /** An array of directories to import recursively. */ - paths: string[], - /** A function that will run before recursively setting a part of `paths`. - * `path` contains the path that will be imported, useful for logging - */ - between?: (path: string, uniqueFilePathCounter: number, paths: string[]) => void, - /** A function that runs before **actually** importing all the files. */ - before?: (uniqueFilePathCounter: number, paths: string[]) => void -) { - await Promise.all( - [...paths].map((path) => { - if (between != null) between(path, uniqueFilePathCounter, paths) - importDirectory(path) - }) - ) - - if (before != null) before(uniqueFilePathCounter, paths) - - await fileLoader() -} - -/** Extend the Bot with the Plugin's added functions */ -export interface BotWithFileLoader extends Bot { - /** Recursively generates an array of unique paths to import using `fileLoader()` - * (**Is** windows compatible) - */ - importDirectory: (path: string) => void - /** Writes, then imports all everything in fileloader.ts */ - fileLoader: () => void - /** This function will import the specified directories */ - fastFileLoader: ( - /** An array of directories to import recursively. */ - paths: string[], - /** A function that will run before recursively setting a part of `paths`. - * `path` contains the path that will be imported, useful for logging - */ - between?: (path: string, uniqueFilePathCounter: number, paths: string[]) => void, - /** A function that runs before **actually** importing all the files. */ - before?: (uniqueFilePathCounter: number, paths: string[]) => void, - ) => void -} - -/** Pass in a (compatible) bot instance, and get sweet file loader goodness. - * Remember to capture the output of this function! - */ -export function enableFileLoaderPlugin (rawBot: Bot): BotWithFileLoader { - const bot = rawBot as BotWithFileLoader - - bot.importDirectory = importDirectory - bot.fileLoader = fileLoader - bot.fastFileLoader = fastFileLoader - - return bot -} diff --git a/packages/old/plugins/fileloader/tests/empty.spec.ts b/packages/old/plugins/fileloader/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/plugins/fileloader/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/plugins/fileloader/tsconfig.json b/packages/old/plugins/fileloader/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/plugins/fileloader/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/fileloader/tsconfig.test.json b/packages/old/plugins/fileloader/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/plugins/fileloader/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/mod.ts b/packages/old/plugins/mod.ts deleted file mode 100644 index f7a51bb49..000000000 --- a/packages/old/plugins/mod.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './cache/index.js.js' -export * from './fileloader/index.js.js' -export * from './helpers/index.js.js' -export * from './permissions/index.js.js' -export * from './validations/index.js.js' - diff --git a/packages/old/plugins/permissions/.c8rc.json b/packages/old/plugins/permissions/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/plugins/permissions/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/plugins/permissions/.mocharc.json b/packages/old/plugins/permissions/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/plugins/permissions/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/plugins/permissions/.swcrc b/packages/old/plugins/permissions/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/plugins/permissions/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/plugins/permissions/README.md b/packages/old/plugins/permissions/README.md deleted file mode 100644 index 012b81931..000000000 --- a/packages/old/plugins/permissions/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# permissions-plugin - -This is an official plugin maintained by Discordeno. This plugin provides automatic permission checking and useful -permission checking utility functions. Highly recommended to install this plugin for all users as you can use the -utility functions. Enabling the permission plugin should not be done for big bot developers as it requires the cache -plugin which will not work in a performance optimized fashion. This is designed mainly for the small beginner devs. - -## Requirements - -- [Cache Plugin](https://github.com/discordeno/cache-plugin) - -## Usage - -```ts -// MOVE TO DEPS.TS AND USE SPECIFIC VERSION -import enableCachePlugin from "https://deno.land/x/discordeno_cache_plugin/mod.js"; -import enablePermissionPlugin from "https://deno.land/x/discordeno_permission_plugin/mod.js"; - -// Create the bot object, THIS WILL NEED YOUR OPTIONS. -const bot = createBot({}); -// REQUIRED: Enables the cache plugin on this bot -enableCachePlugin(bot); -// Enables the permission plugin on this bot -enablePermissionPlugin(bot); -// Start your bot -await startBot(bot); -``` diff --git a/packages/old/plugins/permissions/deps.ts b/packages/old/plugins/permissions/deps.ts deleted file mode 100644 index 0191dbb9d..000000000 --- a/packages/old/plugins/permissions/deps.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from '../../index.js' -export type { BotWithCache } from '../cache/index.js.js' - diff --git a/packages/old/plugins/permissions/mod.ts b/packages/old/plugins/permissions/mod.ts deleted file mode 100644 index 9ab2b11cf..000000000 --- a/packages/old/plugins/permissions/mod.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { BotWithCache } from './deps.js' -import { channels } from './src/channels/index.js.js' -import { emojis } from './src/emojis/index.js.js' -import { guilds } from './src/guilds/index.js.js' -import { integrations } from './src/integrations/index.js.js' -import { members } from './src/members/index.js.js' -import { messages } from './src/messages/index.js.js' -import { roles } from './src/roles/index.js.js' -import { stickers } from './src/stickers/index.js.js' -import { webhooks } from './src/webhooks/index.js.js' - -// PLUGINS MUST TAKE A BOT ARGUMENT WHICH WILL BE MODIFIED -export function enablePermissionsPlugin (bot: B): B { - // PERM CHECKS REQUIRE CACHE DUH! - if (!bot.enabledPlugins?.has('CACHE')) throw new Error('The PERMISSIONS plugin requires the CACHE plugin first.') - - // MARK THIS PLUGIN BEING USED - bot.enabledPlugins.add('PERMISSIONS') - - // BEGIN OVERRIDING HELPER FUNCTIONS - channels(bot) - emojis(bot) - guilds(bot) - integrations(bot) - members(bot) - messages(bot) - roles(bot) - stickers(bot) - webhooks(bot) - - // PLUGINS MUST RETURN THE BOT - return bot -} - -export * from './src/permissions.js' -// DEFAULT MAKES IT SLIGHTLY EASIER TO USE -export default enablePermissionsPlugin diff --git a/packages/old/plugins/permissions/package.json b/packages/old/plugins/permissions/package.json deleted file mode 100644 index 2d7e86f52..000000000 --- a/packages/old/plugins/permissions/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@discordeno/permissions-plugin", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts'", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "devDependencies": { - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "tsconfig": "*", - "@discordeno/types": "18.0.0-alpha.1", - "typescript": "^4.9.3" - }, - "dependencies": { - "@types/node": "^18.11.9" - } -} \ No newline at end of file diff --git a/packages/old/plugins/permissions/src/channels/createChannel.ts b/packages/old/plugins/permissions/src/channels/createChannel.ts deleted file mode 100644 index dddab624f..000000000 --- a/packages/old/plugins/permissions/src/channels/createChannel.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function createChannel (bot: BotWithCache) { - const createChannel = bot.helpers.createChannel - - bot.helpers.createChannel = async function (guildId, options) { - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - - if (guild) { - if (options?.rateLimitPerUser && !(options.rateLimitPerUser > 0 && options.rateLimitPerUser < 21600)) { - throw new Error('Amount of seconds a user has to wait before sending another message must be between 0-21600') - } - - if (options?.name && !bot.utils.validateLength(options.name, { min: 1, max: 100 })) { - throw new Error('The channel name must be between 1-100 characters.') - } - - const requiredPerms: PermissionStrings[] = [] - - requiredPerms.push('MANAGE_CHANNELS') - - if ((options?.permissionOverwrites) != null) requiredPerms.push('MANAGE_ROLES') - - if (options?.type === ChannelTypes.GuildAnnouncement && !guild.toggles.has('news')) { - throw new Error('The NEWS feature is missing in this guild to be able to modify the channel type.') - } - - if ( - options?.topic && !bot.utils.validateLength(options.topic, { - min: 1, - max: options.type === ChannelTypes.GuildForum ? 4096 : 1024 - }) - ) { - throw new Error('The topic length must be between 1 and 1024 (4096 if forum)') - } - - if (options?.userLimit && options.userLimit > 99) throw new Error('The user limit must be less than 99.') - - if (options?.parentId) { - const category = bot.channels.get(bot.transformers.snowflake(options.parentId)) - if ((category) && category.type !== ChannelTypes.GuildCategory) { - throw new Error('The parent id must be for a category channel type.') - } - } - - requireBotGuildPermissions(bot, guild, requiredPerms) - } - - return await createChannel(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/channels/deleteChannel.ts b/packages/old/plugins/permissions/src/channels/deleteChannel.ts deleted file mode 100644 index 65f72e6a2..000000000 --- a/packages/old/plugins/permissions/src/channels/deleteChannel.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function deleteChannel (bot: BotWithCache) { - const deleteChannel = bot.helpers.deleteChannel - - bot.helpers.deleteChannel = async function (channelId, reason) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - - if (channel?.guildId) { - const guild = bot.guilds.get(channel.guildId) - if (guild == null) throw new Error('GUILD_NOT_FOUND') - - if (guild.rulesChannelId === channelId) throw new Error('RULES_CHANNEL_CANNOT_BE_DELETED') - - if (guild.publicUpdatesChannelId === channelId) throw new Error('UPDATES_CHANNEL_CANNOT_BE_DELETED') - - const perms: PermissionStrings[] = ['VIEW_CHANNEL'] - const isThread = [ChannelTypes.AnnouncementThread, ChannelTypes.PublicThread, ChannelTypes.PrivateThread] - .includes(channel.type) - const isVoice = [ChannelTypes.GuildVoice, ChannelTypes.GuildStageVoice].includes(channel.type) - - if (isThread) perms.push('MANAGE_THREADS') - else perms.push('MANAGE_CHANNELS') - - if (isVoice) perms.push('CONNECT') - - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), perms) - } - - return await deleteChannel(channelId, reason) - } -} diff --git a/packages/old/plugins/permissions/src/channels/deleteChannelPermissionOverride.ts b/packages/old/plugins/permissions/src/channels/deleteChannelPermissionOverride.ts deleted file mode 100644 index 32e3090db..000000000 --- a/packages/old/plugins/permissions/src/channels/deleteChannelPermissionOverride.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function deleteChannelPermissionOverride (bot: BotWithCache) { - const deleteChannelPermissionOverride = bot.helpers.deleteChannelPermissionOverride - - bot.helpers.deleteChannelPermissionOverride = async function (channelId, overwriteId) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - - if (channel?.guildId) { - const perms: PermissionStrings[] = ['VIEW_CHANNEL', 'MANAGE_ROLES'] - const isVoice = [ChannelTypes.GuildVoice, ChannelTypes.GuildStageVoice].includes(channel.type) - - if (isVoice) perms.push('CONNECT') - - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), perms) - } - - return await deleteChannelPermissionOverride(channelId, overwriteId) - } -} diff --git a/packages/old/plugins/permissions/src/channels/editChannel.ts b/packages/old/plugins/permissions/src/channels/editChannel.ts deleted file mode 100644 index 1bc17fc41..000000000 --- a/packages/old/plugins/permissions/src/channels/editChannel.ts +++ /dev/null @@ -1,86 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function editChannel (bot: BotWithCache) { - const editChannel = bot.helpers.editChannel - - bot.helpers.editChannel = async function (channelId, options) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - - if (channel?.guildId) { - const guild = bot.guilds.get(channel.guildId) - - if (options.rateLimitPerUser && options.rateLimitPerUser > 21600) { - throw new Error('Amount of seconds a user has to wait before sending another message must be between 0-21600') - } - - if (options.name) { - if (!bot.utils.validateLength(options.name, { min: 1, max: 100 })) { - throw new Error('The channel name must be between 1-100 characters.') - } - } - - const perms: PermissionStrings[] = ['VIEW_CHANNEL'] - const isThread = [ChannelTypes.AnnouncementThread, ChannelTypes.PublicThread, ChannelTypes.PrivateThread] - .includes(channel.type) - const isVoice = [ChannelTypes.GuildVoice, ChannelTypes.GuildStageVoice].includes(channel.type) - - if (isVoice) perms.push('CONNECT') - - if (isThread) { - if (options.invitable !== undefined && channel.type !== ChannelTypes.PrivateThread) { - throw new Error('Invitable option is only allowed on private threads.') - } - - // UNARCHIVING AN UNLOCKED CHANNEL SIMPLY REQUIRES SEND - if (!channel.locked && options.archived === false) { - perms.push('SEND_MESSAGES') - // MORE THAN ARCHIVE WAS MODIFIED - if (Object.keys(options).length > 1) perms.push('MANAGE_THREADS') - } else { - perms.push('MANAGE_THREADS') - } - - if ((options.appliedTags) && options.appliedTags.length > 5) throw new Error('thread applied tags is limit to 5') - } else { - perms.push('MANAGE_CHANNELS') - - if (options.permissionOverwrites) perms.push('MANAGE_ROLES') - - if (options.type) { - if ([ChannelTypes.GuildAnnouncement, ChannelTypes.GuildText].includes(options.type)) { - throw new Error('Only news and text types can be modified.') - } - - if ((guild) && !guild.toggles.has('news')) { - throw new Error('The NEWS feature is missing in this guild to be able to modify the channel type.') - } - } - - if (options.topic) { - if (!bot.utils.validateLength(options.topic, { min: 1, max: 1024 })) { - throw new Error('The topic must be a number between 1 and 1024') - } - } - - if (options.userLimit && options.userLimit > 99) throw new Error('The user limit must be less than 99.') - - if (options.parentId) { - const category = bot.channels.get(bot.transformers.snowflake(options.parentId)) - if ((category) && category.type !== ChannelTypes.GuildCategory) { - throw new Error('The parent id must be for a category channel type.') - } - } - - if ((options.availableTags) && options.availableTags.length > 20) { - throw new Error('channel available tags is limited to 20') - } - } - - requireBotChannelPermissions(bot, channel, perms) - } - - return await editChannel(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/channels/editChannelPermissionOverrides.ts b/packages/old/plugins/permissions/src/channels/editChannelPermissionOverrides.ts deleted file mode 100644 index f7baa6102..000000000 --- a/packages/old/plugins/permissions/src/channels/editChannelPermissionOverrides.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function editChannelPermissionOverrides (bot: BotWithCache) { - const editChannelPermissionOverrides = bot.helpers.editChannelPermissionOverrides - - bot.helpers.editChannelPermissionOverrides = async function (channelId, overwrite) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if (channel?.guildId) { - const perms: PermissionStrings[] = ['VIEW_CHANNEL', 'MANAGE_ROLES'] - const isVoice = [ChannelTypes.GuildVoice, ChannelTypes.GuildStageVoice].includes(channel.type) - - if (isVoice) perms.push('CONNECT') - - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), perms) - } - - return await editChannelPermissionOverrides(channelId, overwrite) - } -} diff --git a/packages/old/plugins/permissions/src/channels/followAnnouncementChannel.ts b/packages/old/plugins/permissions/src/channels/followAnnouncementChannel.ts deleted file mode 100644 index de6419f8e..000000000 --- a/packages/old/plugins/permissions/src/channels/followAnnouncementChannel.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { BotWithCache} from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function followAnnouncementChannel (bot: BotWithCache) { - const followAnnouncementChannel = bot.helpers.followAnnouncementChannel - - bot.helpers.followAnnouncementChannel = async function (sourceChannelId, targetChannelId) { - const sourceChannel = bot.channels.get(bot.transformers.snowflake(sourceChannelId)) - if ((sourceChannel) && sourceChannel.type !== ChannelTypes.GuildAnnouncement) { - throw new Error('Source channel must be an announcement channel') - } - const targetChannel = bot.channels.get(bot.transformers.snowflake(targetChannelId)) - if (targetChannel) { - const isWebhookParent = [ChannelTypes.GuildAnnouncement, ChannelTypes.GuildText].includes(targetChannel.type) - if (!isWebhookParent) { - throw new Error('Target channel must be a text channel or an announcement channel') - } - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(sourceChannelId), ['VIEW_CHANNEL']) - requireBotChannelPermissions(bot, bot.transformers.snowflake(targetChannelId), ['VIEW_CHANNEL', 'MANAGE_WEBHOOKS']) - return await followAnnouncementChannel(sourceChannelId, targetChannelId) - } -} diff --git a/packages/old/plugins/permissions/src/channels/forums/createForumThread.ts b/packages/old/plugins/permissions/src/channels/forums/createForumThread.ts deleted file mode 100644 index 2b6bdc348..000000000 --- a/packages/old/plugins/permissions/src/channels/forums/createForumThread.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function createForumThread (bot: BotWithCache) { - const createForumThread = bot.helpers.createForumThread - - bot.helpers.createForumThread = async function (channelId, options) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - - if ((channel) && channel.type !== ChannelTypes.GuildForum) { - throw new Error('Channel must be a forum channel') - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['VIEW_CHANNEL', 'SEND_MESSAGES']) - - return await createForumThread(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/channels/forums/mod.ts b/packages/old/plugins/permissions/src/channels/forums/mod.ts deleted file mode 100644 index f50fb2d9a..000000000 --- a/packages/old/plugins/permissions/src/channels/forums/mod.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { createForumThread } from './createForumThread.js' - -export function forums (bot: BotWithCache) { - createForumThread(bot) -} diff --git a/packages/old/plugins/permissions/src/channels/getChannelWebhooks.ts b/packages/old/plugins/permissions/src/channels/getChannelWebhooks.ts deleted file mode 100644 index a9d364c46..000000000 --- a/packages/old/plugins/permissions/src/channels/getChannelWebhooks.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { BotWithCache} from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function getChannelWebhooks (bot: BotWithCache) { - const getChannelWebhooks = bot.helpers.getChannelWebhooks - - bot.helpers.getChannelWebhooks = async function (channelId) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if (channel) { - const isWebhookParent = [ChannelTypes.GuildAnnouncement, ChannelTypes.GuildText].includes(channel.type) - if (!isWebhookParent) { - throw new Error('Target channel must be a text channel or an announcement channel') - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['VIEW_CHANNEL', 'MANAGE_WEBHOOKS']) - } - - return await getChannelWebhooks(channelId) - } -} diff --git a/packages/old/plugins/permissions/src/channels/mod.ts b/packages/old/plugins/permissions/src/channels/mod.ts deleted file mode 100644 index c372730ba..000000000 --- a/packages/old/plugins/permissions/src/channels/mod.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { createChannel } from './createChannel.js' -import { deleteChannel } from './deleteChannel.js' -import { deleteChannelPermissionOverride } from './deleteChannelPermissionOverride.js' -import { editChannel } from './editChannel.js' -import { editChannelPermissionOverrides } from './editChannelPermissionOverrides.js' -import { followAnnouncementChannel } from './followAnnouncementChannel.js' -import { forums } from './forums/index.js.js' -import { getChannelWebhooks } from './getChannelWebhooks.js' -import { stages } from './stages/index.js.js' -import { swapChannels } from './swapChannels.js' -import { threads } from './threads/index.js.js' - -export function channels (bot: BotWithCache) { - forums(bot) - stages(bot) - threads(bot) - - createChannel(bot) - deleteChannel(bot) - deleteChannelPermissionOverride(bot) - editChannel(bot) - editChannelPermissionOverrides(bot) - followAnnouncementChannel(bot) - getChannelWebhooks(bot) - swapChannels(bot) -} diff --git a/packages/old/plugins/permissions/src/channels/stages/createStageInstance.ts b/packages/old/plugins/permissions/src/channels/stages/createStageInstance.ts deleted file mode 100644 index 968aa0b0a..000000000 --- a/packages/old/plugins/permissions/src/channels/stages/createStageInstance.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function createStageInstance (bot: BotWithCache) { - const createStageInstance = bot.helpers.createStageInstance - - bot.helpers.createStageInstance = async function (options) { - const channel = bot.channels.get(bot.transformers.snowflake(options.channelId)) - if ((channel) && channel.type !== ChannelTypes.GuildStageVoice) { - throw new Error('Channel must be a stage voice channel') - } - - const perms: PermissionStrings[] = ['VIEW_CHANNEL', 'CONNECT', 'MANAGE_CHANNELS', 'MUTE_MEMBERS', 'MOVE_MEMBERS'] - if (options.sendStartNotification) perms.push('MENTION_EVERYONE') - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), perms) - - return await createStageInstance(options) - } -} diff --git a/packages/old/plugins/permissions/src/channels/stages/deleteStageInstances.ts b/packages/old/plugins/permissions/src/channels/stages/deleteStageInstances.ts deleted file mode 100644 index bc5cbd860..000000000 --- a/packages/old/plugins/permissions/src/channels/stages/deleteStageInstances.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function deleteStageInstance (bot: BotWithCache) { - const deleteStageInstance = bot.helpers.deleteStageInstance - - bot.helpers.deleteStageInstance = async function (channelId) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if ((channel) && channel.type !== ChannelTypes.GuildStageVoice) { - throw new Error('Channel must be a stage voice channel') - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), [ - 'VIEW_CHANNEL', - 'CONNECT', - 'MANAGE_CHANNELS', - 'MUTE_MEMBERS', - 'MOVE_MEMBERS' - ]) - - return await deleteStageInstance(channelId) - } -} diff --git a/packages/old/plugins/permissions/src/channels/stages/editStageInstance.ts b/packages/old/plugins/permissions/src/channels/stages/editStageInstance.ts deleted file mode 100644 index b9336c8c8..000000000 --- a/packages/old/plugins/permissions/src/channels/stages/editStageInstance.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function editStageInstance (bot: BotWithCache) { - const editStageInstance = bot.helpers.editStageInstance - - bot.helpers.editStageInstance = async function (channelId, data) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if ((channel) && channel.type !== ChannelTypes.GuildStageVoice) { - throw new Error('Channel must be a stage voice channel') - } - - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), [ - 'VIEW_CHANNEL', - 'CONNECT', - 'MANAGE_CHANNELS', - 'MUTE_MEMBERS', - 'MOVE_MEMBERS' - ]) - - return await editStageInstance(channelId, data) - } -} diff --git a/packages/old/plugins/permissions/src/channels/stages/mod.ts b/packages/old/plugins/permissions/src/channels/stages/mod.ts deleted file mode 100644 index e21f1ba77..000000000 --- a/packages/old/plugins/permissions/src/channels/stages/mod.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { createStageInstance } from './createStageInstance.js' -import { deleteStageInstance } from './deleteStageInstances.js' -import { editStageInstance } from './editStageInstance.js' - -export function stages (bot: BotWithCache) { - createStageInstance(bot) - deleteStageInstance(bot) - editStageInstance(bot) -} diff --git a/packages/old/plugins/permissions/src/channels/swapChannels.ts b/packages/old/plugins/permissions/src/channels/swapChannels.ts deleted file mode 100644 index 9962d0d09..000000000 --- a/packages/old/plugins/permissions/src/channels/swapChannels.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function swapChannels (bot: BotWithCache) { - const swapChannels = bot.helpers.swapChannels - - bot.helpers.swapChannels = async function (guildId, channelPositions) { - for (const channelPosition of channelPositions) { - const channel = bot.channels.get(BigInt(channelPosition.id)) - if (channel) { - const perms: PermissionStrings[] = ['VIEW_CHANNEL', 'MANAGE_CHANNELS'] - const isVoice = [ChannelTypes.GuildVoice, ChannelTypes.GuildStageVoice].includes(channel.type) - if (isVoice) perms.push('CONNECT') - requireBotChannelPermissions(bot, BigInt(channelPosition.id), perms) - } - } - return await swapChannels(guildId, channelPositions) - } -} diff --git a/packages/old/plugins/permissions/src/channels/threads/addThreadMember.ts b/packages/old/plugins/permissions/src/channels/threads/addThreadMember.ts deleted file mode 100644 index 6b9a882bd..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/addThreadMember.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function addThreadMember (bot: BotWithCache) { - const addThreadMember = bot.helpers.addThreadMember - - bot.helpers.addThreadMember = async function (threadId, userId) { - const channel = bot.channels.get(bot.transformers.snowflake(threadId)) - - if (channel) { - const isThread = ![ChannelTypes.PublicThread, ChannelTypes.PrivateThread, ChannelTypes.AnnouncementThread] - .includes(channel.type) - - if (isThread) throw new Error('Channel must be a thread channel') - - if (channel.archived) throw new Error('Cannot add user to thread if thread is archived.') - - requireBotChannelPermissions(bot, channel, ['VIEW_CHANNEL', 'SEND_MESSAGES']) - } - - return await addThreadMember(threadId, userId) - } -} diff --git a/packages/old/plugins/permissions/src/channels/threads/getPrivateArchivedThreads.ts b/packages/old/plugins/permissions/src/channels/threads/getPrivateArchivedThreads.ts deleted file mode 100644 index bde13f99a..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/getPrivateArchivedThreads.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function getPrivateArchivedThreads (bot: BotWithCache) { - const getPrivateArchivedThreads = bot.helpers.getPrivateArchivedThreads - bot.helpers.getPrivateArchivedThreads = async function (channelId, options) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - - if (channel) { - const isThreadParent = [ChannelTypes.GuildText, ChannelTypes.GuildAnnouncement, ChannelTypes.GuildForum] - .includes(channel.type) - if (!isThreadParent) { - throw new Error('Channel must be a text channel, a forum channel, or an announcement channel') - } - } - - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), [ - 'VIEW_CHANNEL', - 'READ_MESSAGE_HISTORY', - 'MANAGE_MESSAGES' - ]) - - return await getPrivateArchivedThreads(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/channels/threads/getPrivateJoinedArchivedThreads.ts b/packages/old/plugins/permissions/src/channels/threads/getPrivateJoinedArchivedThreads.ts deleted file mode 100644 index edced9ade..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/getPrivateJoinedArchivedThreads.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function getPrivateJoinedArchivedThreads (bot: BotWithCache) { - const getPrivateJoinedArchivedThreads = bot.helpers.getPrivateJoinedArchivedThreads - bot.helpers.getPrivateJoinedArchivedThreads = async function (channelId, options) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - - if (channel) { - const isThreadParent = [ChannelTypes.GuildText, ChannelTypes.GuildAnnouncement, ChannelTypes.GuildForum] - .includes(channel.type) - if (!isThreadParent) { - throw new Error('Channel must be a text channel, a forum channel, or an announcement channel') - } - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['VIEW_CHANNEL', 'READ_MESSAGE_HISTORY']) - - return await getPrivateJoinedArchivedThreads(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/channels/threads/getPublicArchivedThreads.ts b/packages/old/plugins/permissions/src/channels/threads/getPublicArchivedThreads.ts deleted file mode 100644 index ae451c968..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/getPublicArchivedThreads.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function getPublicArchivedThreads (bot: BotWithCache) { - const getPublicArchivedThreads = bot.helpers.getPublicArchivedThreads - bot.helpers.getPublicArchivedThreads = async function (channelId, options) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - - if (channel) { - const isThreadParent = [ChannelTypes.GuildText, ChannelTypes.GuildAnnouncement, ChannelTypes.GuildForum] - .includes(channel.type) - if (!isThreadParent) { - throw new Error('Channel must be a text channel, a forum channel, or an announcement channel') - } - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['VIEW_CHANNEL', 'READ_MESSAGE_HISTORY']) - - return await getPublicArchivedThreads(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/channels/threads/joinThread.ts b/packages/old/plugins/permissions/src/channels/threads/joinThread.ts deleted file mode 100644 index dfefd7fb1..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/joinThread.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function joinThread (bot: BotWithCache) { - const joinThread = bot.helpers.joinThread - - bot.helpers.joinThread = async function (threadId) { - const channel = bot.channels.get(bot.transformers.snowflake(threadId)) - - if (channel) { - const isThread = ![ChannelTypes.PublicThread, ChannelTypes.PrivateThread, ChannelTypes.AnnouncementThread] - .includes(channel.type) - - if (isThread) throw new Error('Channel must be a thread channel') - - if (channel.archived) throw new Error('You can not join an archived channel.') - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(threadId), ['VIEW_CHANNEL']) - - return await joinThread(threadId) - } -} diff --git a/packages/old/plugins/permissions/src/channels/threads/leaveThread.ts b/packages/old/plugins/permissions/src/channels/threads/leaveThread.ts deleted file mode 100644 index d9afa8446..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/leaveThread.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function leaveThread (bot: BotWithCache) { - const leaveThread = bot.helpers.leaveThread - - bot.helpers.leaveThread = async function (threadId) { - const channel = bot.channels.get(bot.transformers.snowflake(threadId)) - - if (channel) { - const isThread = ![ChannelTypes.PublicThread, ChannelTypes.PrivateThread, ChannelTypes.AnnouncementThread] - .includes(channel.type) - - if (isThread) throw new Error('Channel must be a thread channel') - - if (channel.archived) throw new Error('You can not leave an archived channel.') - } - requireBotChannelPermissions(bot, bot.transformers.snowflake(threadId), ['VIEW_CHANNEL']) - - return await leaveThread(threadId) - } -} diff --git a/packages/old/plugins/permissions/src/channels/threads/mod.ts b/packages/old/plugins/permissions/src/channels/threads/mod.ts deleted file mode 100644 index aac072acd..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/mod.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { addThreadMember } from './addThreadMember.js' -import { getPrivateArchivedThreads } from './getPrivateArchivedThreads.js' -import { getPrivateJoinedArchivedThreads } from './getPrivateJoinedArchivedThreads.js' -import { getPublicArchivedThreads } from './getPublicArchivedThreads.js' -import { joinThread } from './joinThread.js' -import { leaveThread } from './leaveThread.js' -import { removeThreadMember } from './removeThreadMember.js' - -export function threads (bot: BotWithCache) { - addThreadMember(bot) - getPublicArchivedThreads(bot) - getPrivateArchivedThreads(bot) - getPrivateJoinedArchivedThreads(bot) - joinThread(bot) - leaveThread(bot) - removeThreadMember(bot) -} diff --git a/packages/old/plugins/permissions/src/channels/threads/removeThreadMember.ts b/packages/old/plugins/permissions/src/channels/threads/removeThreadMember.ts deleted file mode 100644 index 90cc37920..000000000 --- a/packages/old/plugins/permissions/src/channels/threads/removeThreadMember.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function removeThreadMember (bot: BotWithCache) { - const removeThreadMember = bot.helpers.removeThreadMember - - bot.helpers.removeThreadMember = async function (threadId, userId) { - const channel = bot.channels.get(bot.transformers.snowflake(threadId)) - - if (channel) { - const isThread = ![ChannelTypes.PublicThread, ChannelTypes.PrivateThread, ChannelTypes.AnnouncementThread] - .includes(channel.type) - - if (isThread) throw new Error('Channel must be a thread channel') - - if (channel.archived) throw new Error('Cannot remove user from thread if thread is archived.') - - if (!(bot.id === channel.ownerId && channel.type === ChannelTypes.PrivateThread)) { - requireBotChannelPermissions(bot, channel, ['VIEW_CHANNEL', 'MANAGE_MESSAGES']) - } - } - - return await removeThreadMember(threadId, userId) - } -} diff --git a/packages/old/plugins/permissions/src/emojis/createEmoji.ts b/packages/old/plugins/permissions/src/emojis/createEmoji.ts deleted file mode 100644 index fcac7e4e9..000000000 --- a/packages/old/plugins/permissions/src/emojis/createEmoji.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function createEmoji (bot: BotWithCache) { - const createEmoji = bot.helpers.createEmoji - - bot.helpers.createEmoji = async function (guildId, id) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_EMOJIS_AND_STICKERS']) - - return await createEmoji(guildId, id) - } -} diff --git a/packages/old/plugins/permissions/src/emojis/deleteEmoji.ts b/packages/old/plugins/permissions/src/emojis/deleteEmoji.ts deleted file mode 100644 index eb221c851..000000000 --- a/packages/old/plugins/permissions/src/emojis/deleteEmoji.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function deleteEmoji (bot: BotWithCache) { - const deleteEmoji = bot.helpers.deleteEmoji - - bot.helpers.deleteEmoji = async function (guildId, id) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_EMOJIS_AND_STICKERS']) - - return await deleteEmoji(guildId, id) - } -} diff --git a/packages/old/plugins/permissions/src/emojis/editEmoji.ts b/packages/old/plugins/permissions/src/emojis/editEmoji.ts deleted file mode 100644 index 6425b5cbe..000000000 --- a/packages/old/plugins/permissions/src/emojis/editEmoji.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function editEmoji (bot: BotWithCache) { - const editEmoji = bot.helpers.editEmoji - - bot.helpers.editEmoji = async function (guildId, id, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_EMOJIS_AND_STICKERS']) - - return await editEmoji(guildId, id, options) - } -} diff --git a/packages/old/plugins/permissions/src/emojis/mod.ts b/packages/old/plugins/permissions/src/emojis/mod.ts deleted file mode 100644 index f394f5c62..000000000 --- a/packages/old/plugins/permissions/src/emojis/mod.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { createEmoji } from './createEmoji.js' -import { deleteEmoji } from './deleteEmoji.js' -import { editEmoji } from './editEmoji.js' - -export function emojis (bot: BotWithCache) { - createEmoji(bot) - deleteEmoji(bot) - editEmoji(bot) -} diff --git a/packages/old/plugins/permissions/src/guilds/automod/createAutomodRule.ts b/packages/old/plugins/permissions/src/guilds/automod/createAutomodRule.ts deleted file mode 100644 index 2730ef0b3..000000000 --- a/packages/old/plugins/permissions/src/guilds/automod/createAutomodRule.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { BotWithCache } from '../../../deps.js'; -import { AutoModerationActionType } from '../../../deps.js' -import { requireBotGuildPermissions } from '../../permissions.js' - -export function createAutomodRule (bot: BotWithCache) { - const createAutomodRule = bot.helpers.createAutomodRule - - bot.helpers.createAutomodRule = async function (guildId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - for (const action of options.actions) { - // Check for maximum duration seconds - if (action.metadata?.durationSeconds && action.metadata.durationSeconds > 2419200) { - console.log( - `[Warning] Automod action duration seconds is too high: ${action.metadata.durationSeconds}. Setting to Discord's allowed maximum.` - ) - // Discords max is 4 weeks - action.metadata.durationSeconds = 2419200 - } - - // Timeout actions require perm check - if (action.type === AutoModerationActionType.Timeout) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MODERATE_MEMBERS']) - } - } - - return await createAutomodRule(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/automod/deleteAutomodRule.ts b/packages/old/plugins/permissions/src/guilds/automod/deleteAutomodRule.ts deleted file mode 100644 index e96fb413a..000000000 --- a/packages/old/plugins/permissions/src/guilds/automod/deleteAutomodRule.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotGuildPermissions } from '../../permissions.js' - -export function deleteAutomodRule (bot: BotWithCache) { - const deleteAutomodRule = bot.helpers.deleteAutomodRule - - bot.helpers.deleteAutomodRule = async function (guildId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await deleteAutomodRule(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/automod/editAutomodRule.ts b/packages/old/plugins/permissions/src/guilds/automod/editAutomodRule.ts deleted file mode 100644 index 904d81a6e..000000000 --- a/packages/old/plugins/permissions/src/guilds/automod/editAutomodRule.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { BotWithCache } from '../../../deps.js'; -import { AutoModerationActionType } from '../../../deps.js' -import { requireBotGuildPermissions } from '../../permissions.js' - -export function editAutomodRule (bot: BotWithCache) { - const editAutomodRule = bot.helpers.editAutomodRule - - bot.helpers.editAutomodRule = async function (guildId, ruleId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - for (const action of options.actions ?? []) { - // Check for maximum duration seconds - if (action.metadata?.durationSeconds && action.metadata.durationSeconds > 2419200) { - console.log( - `[Warning] Automod action duration seconds is too high: ${action.metadata.durationSeconds}. Setting to Discord's allowed maximum.` - ) - // Discords max is 4 weeks - action.metadata.durationSeconds = 2419200 - } - - // Timeout actions require perm check - if (action.type === AutoModerationActionType.Timeout) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MODERATE_MEMBERS']) - } - } - - return await editAutomodRule(guildId, ruleId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/automod/getAutomodRule.ts b/packages/old/plugins/permissions/src/guilds/automod/getAutomodRule.ts deleted file mode 100644 index 157dc3ed6..000000000 --- a/packages/old/plugins/permissions/src/guilds/automod/getAutomodRule.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotGuildPermissions } from '../../permissions.js' - -export function getAutomodRule (bot: BotWithCache) { - const getAutomodRule = bot.helpers.getAutomodRule - - bot.helpers.getAutomodRule = async function (guildId, ruleId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await getAutomodRule(guildId, ruleId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/automod/getAutomodRules.ts b/packages/old/plugins/permissions/src/guilds/automod/getAutomodRules.ts deleted file mode 100644 index 26597bdcf..000000000 --- a/packages/old/plugins/permissions/src/guilds/automod/getAutomodRules.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotGuildPermissions } from '../../permissions.js' - -export function getAutomodRules (bot: BotWithCache) { - const getAutomodRules = bot.helpers.getAutomodRules - - bot.helpers.getAutomodRules = async function (guildId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await getAutomodRules(guildId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/automod/mod.ts b/packages/old/plugins/permissions/src/guilds/automod/mod.ts deleted file mode 100644 index 98129af23..000000000 --- a/packages/old/plugins/permissions/src/guilds/automod/mod.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { createAutomodRule } from './createAutomodRule.js' -import { deleteAutomodRule } from './deleteAutomodRule.js' -import { editAutomodRule } from './editAutomodRule.js' -import { getAutomodRule } from './getAutomodRule.js' -import { getAutomodRules } from './getAutomodRules.js' - -export function automod (bot: BotWithCache) { - createAutomodRule(bot) - deleteAutomodRule(bot) - editAutomodRule(bot) - getAutomodRule(bot) - getAutomodRules(bot) -} diff --git a/packages/old/plugins/permissions/src/guilds/createGuild.ts b/packages/old/plugins/permissions/src/guilds/createGuild.ts deleted file mode 100644 index 4e49336ce..000000000 --- a/packages/old/plugins/permissions/src/guilds/createGuild.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { BotWithCache } from '../../deps.js' - -export function createGuild (bot: BotWithCache) { - const createGuild = bot.helpers.createGuild - - bot.helpers.createGuild = async function (options) { - if (bot.guilds.size > 10) throw new Error('A bot can not create a guild if it is already in 10 guilds.') - - return await createGuild(options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/deleteGuild.ts b/packages/old/plugins/permissions/src/guilds/deleteGuild.ts deleted file mode 100644 index 639fc522a..000000000 --- a/packages/old/plugins/permissions/src/guilds/deleteGuild.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' - -export function deleteGuild (bot: BotWithCache) { - const deleteGuild = bot.helpers.deleteGuild - - bot.helpers.deleteGuild = async function (guildId) { - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - if ((guild) && guild.ownerId !== bot.id) throw new Error('A bot can only delete a guild it owns.') - - return await deleteGuild(guildId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/editGuild.ts b/packages/old/plugins/permissions/src/guilds/editGuild.ts deleted file mode 100644 index ab0416ba1..000000000 --- a/packages/old/plugins/permissions/src/guilds/editGuild.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { BotWithCache} from '../../deps.js'; -import { GuildFeatures } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function editGuild (bot: BotWithCache) { - const editGuild = bot.helpers.editGuild - - bot.helpers.editGuild = async function (guildId, options, shardId) { - if (options.features?.includes(GuildFeatures.Community)) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['ADMINISTRATOR']) - } else requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await editGuild(guildId, options, shardId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/editGuildMfaLevel.ts b/packages/old/plugins/permissions/src/guilds/editGuildMfaLevel.ts deleted file mode 100644 index 6fe945456..000000000 --- a/packages/old/plugins/permissions/src/guilds/editGuildMfaLevel.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { BotWithCache } from '../../deps.js' - -export function editGuildMfaLevel (bot: BotWithCache) { - const editGuildMfaLevel = bot.helpers.editGuildMfaLevel - - bot.helpers.editGuildMfaLevel = async function (guildId, mfaLevel, reason) { - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - if (guild?.ownerId !== bot.id) throw new Error('The bot is not the owner of the guild') - return await editGuildMfaLevel(guildId, mfaLevel, reason) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/editWelcomeScreen.ts b/packages/old/plugins/permissions/src/guilds/editWelcomeScreen.ts deleted file mode 100644 index 928186a46..000000000 --- a/packages/old/plugins/permissions/src/guilds/editWelcomeScreen.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function editWelcomeScreen (bot: BotWithCache) { - const editWelcomeScreen = bot.helpers.editWelcomeScreen - - bot.helpers.editWelcomeScreen = async function (guildId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await editWelcomeScreen(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/events/createScheduledEvent.ts b/packages/old/plugins/permissions/src/guilds/events/createScheduledEvent.ts deleted file mode 100644 index 672ff2361..000000000 --- a/packages/old/plugins/permissions/src/guilds/events/createScheduledEvent.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ScheduledEventEntityType } from '../../../deps.js' -import { requireBotChannelPermissions, requireBotGuildPermissions } from '../../permissions.js' - -export function createScheduledEvent (bot: BotWithCache) { - const createScheduledEvent = bot.helpers.createScheduledEvent - - bot.helpers.createScheduledEvent = async function (guildId, options) { - if (options.entityType === ScheduledEventEntityType.StageInstance) { - if (!options.channelId) { - throw new Error( - 'A channel id is required for creating a stage scheduled event.' - ) - } - - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'MANAGE_CHANNELS', - 'MUTE_MEMBERS', - 'MOVE_MEMBERS' - ]) - - // MANAGE_EVENTS at the guild level or at least MANAGE_EVENTS for the channel_id associated with the event - try { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), [ - 'MANAGE_EVENTS' - ]) - } catch { - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'MANAGE_EVENTS' - ]) - } - - return await createScheduledEvent(guildId, options) - } - - if (options.entityType === ScheduledEventEntityType.Voice) { - if (!options.channelId) { - throw new Error( - 'A channel id is required for creating a voice scheduled event.' - ) - } - - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'VIEW_CHANNEL', - 'CONNECT' - ]) - - // MANAGE_EVENTS at the guild level or at least MANAGE_EVENTS for the channel_id associated with the event - try { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), [ - 'MANAGE_EVENTS' - ]) - } catch { - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'MANAGE_EVENTS' - ]) - } - - return await createScheduledEvent(guildId, options) - } - - // EXTERNAL EVENTS - - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), [ - 'MANAGE_EVENTS' - ]) - - return await createScheduledEvent(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/events/editScheduledEvent.ts b/packages/old/plugins/permissions/src/guilds/events/editScheduledEvent.ts deleted file mode 100644 index 6cd26beea..000000000 --- a/packages/old/plugins/permissions/src/guilds/events/editScheduledEvent.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { BotWithCache} from '../../../deps.js'; -import { ScheduledEventEntityType } from '../../../deps.js' -import { requireBotChannelPermissions, requireBotGuildPermissions } from '../../permissions.js' - -export function editScheduledEvent (bot: BotWithCache) { - const editScheduledEvent = bot.helpers.editScheduledEvent - - bot.helpers.editScheduledEvent = async function (guildId, eventId, options) { - if (options.entityType === ScheduledEventEntityType.StageInstance) { - if (!options.channelId) { - throw new Error( - 'A channel id is required for creating a stage scheduled event.' - ) - } - - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'MANAGE_CHANNELS', - 'MUTE_MEMBERS', - 'MOVE_MEMBERS' - ]) - - // MANAGE_EVENTS at the guild level or at least MANAGE_EVENTS for the channel_id associated with the event - try { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), [ - 'MANAGE_EVENTS' - ]) - } catch { - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'MANAGE_EVENTS' - ]) - } - - return await editScheduledEvent(guildId, eventId, options) - } - - if (options.entityType === ScheduledEventEntityType.Voice) { - if (!options.channelId) { - throw new Error( - 'A channel id is required for creating a voice scheduled event.' - ) - } - - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'VIEW_CHANNEL', - 'CONNECT' - ]) - - // MANAGE_EVENTS at the guild level or at least MANAGE_EVENTS for the channel_id associated with the event - try { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), [ - 'MANAGE_EVENTS' - ]) - } catch { - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'MANAGE_EVENTS' - ]) - } - - return await editScheduledEvent(guildId, eventId, options) - } - - // EXTERNAL EVENTS - - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), [ - 'MANAGE_EVENTS' - ]) - - return await editScheduledEvent(guildId, eventId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/events/mod.ts b/packages/old/plugins/permissions/src/guilds/events/mod.ts deleted file mode 100644 index ad14e8b29..000000000 --- a/packages/old/plugins/permissions/src/guilds/events/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { createScheduledEvent } from './createScheduledEvent.js' -import { editScheduledEvent } from './editScheduledEvent.js' - -export function events (bot: BotWithCache) { - createScheduledEvent(bot) - editScheduledEvent(bot) -} diff --git a/packages/old/plugins/permissions/src/guilds/getAuditLog.ts b/packages/old/plugins/permissions/src/guilds/getAuditLog.ts deleted file mode 100644 index 9b125338c..000000000 --- a/packages/old/plugins/permissions/src/guilds/getAuditLog.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function getAuditLog (bot: BotWithCache) { - const getAuditLog = bot.helpers.getAuditLog - - bot.helpers.getAuditLog = async function (guildId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['VIEW_AUDIT_LOG']) - - return await getAuditLog(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/getBan.ts b/packages/old/plugins/permissions/src/guilds/getBan.ts deleted file mode 100644 index 5f208f1ab..000000000 --- a/packages/old/plugins/permissions/src/guilds/getBan.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function getBan (bot: BotWithCache) { - const getBan = bot.helpers.getBan - - bot.helpers.getBan = async function (guildId, memberId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['BAN_MEMBERS']) - - return await getBan(guildId, memberId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/getBans.ts b/packages/old/plugins/permissions/src/guilds/getBans.ts deleted file mode 100644 index eefbc76ca..000000000 --- a/packages/old/plugins/permissions/src/guilds/getBans.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function getBans (bot: BotWithCache) { - const getBans = bot.helpers.getBans - - bot.helpers.getBans = async function (guildId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['BAN_MEMBERS']) - - return await getBans(guildId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/getPruneCount.ts b/packages/old/plugins/permissions/src/guilds/getPruneCount.ts deleted file mode 100644 index 2abd04344..000000000 --- a/packages/old/plugins/permissions/src/guilds/getPruneCount.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function getPruneCount (bot: BotWithCache) { - const getPruneCount = bot.helpers.getPruneCount - - bot.helpers.getPruneCount = async function (guildId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['KICK_MEMBERS']) - - return await getPruneCount(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/getVanityUrl.ts b/packages/old/plugins/permissions/src/guilds/getVanityUrl.ts deleted file mode 100644 index aba09c6b0..000000000 --- a/packages/old/plugins/permissions/src/guilds/getVanityUrl.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function getVanityUrl (bot: BotWithCache) { - const getVanityUrl = bot.helpers.getVanityUrl - - bot.helpers.getVanityUrl = async function (guildId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await getVanityUrl(guildId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/getWelcomeScreen.ts b/packages/old/plugins/permissions/src/guilds/getWelcomeScreen.ts deleted file mode 100644 index b29edbdde..000000000 --- a/packages/old/plugins/permissions/src/guilds/getWelcomeScreen.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function getWelcomeScreen (bot: BotWithCache) { - const getWelcomeScreen = bot.helpers.getWelcomeScreen - - bot.helpers.getWelcomeScreen = async function (guildId) { - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - if ((guild?.welcomeScreen) == null) requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await getWelcomeScreen(guildId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/invites/createInvite.ts b/packages/old/plugins/permissions/src/guilds/invites/createInvite.ts deleted file mode 100644 index 16969aafa..000000000 --- a/packages/old/plugins/permissions/src/guilds/invites/createInvite.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function createInvite (bot: BotWithCache) { - const createInvite = bot.helpers.createInvite - - bot.helpers.createInvite = async function (channelId, options = {}) { - requireBotChannelPermissions(bot, channelId, ['CREATE_INSTANT_INVITE']) - - return await createInvite(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/invites/getChannelInvites.ts b/packages/old/plugins/permissions/src/guilds/invites/getChannelInvites.ts deleted file mode 100644 index 66dc02c27..000000000 --- a/packages/old/plugins/permissions/src/guilds/invites/getChannelInvites.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function getChannelInvites (bot: BotWithCache) { - const getChannelInvites = bot.helpers.getChannelInvites - - bot.helpers.getChannelInvites = async function (channelId) { - requireBotChannelPermissions(bot, channelId, ['MANAGE_CHANNELS']) - - return await getChannelInvites(channelId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/invites/getInvites.ts b/packages/old/plugins/permissions/src/guilds/invites/getInvites.ts deleted file mode 100644 index 753acc025..000000000 --- a/packages/old/plugins/permissions/src/guilds/invites/getInvites.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function getInvites (bot: BotWithCache) { - const getInvites = bot.helpers.getInvites - - bot.helpers.getInvites = async function (guildId) { - requireBotChannelPermissions(bot, guildId, ['MANAGE_GUILD']) - - return await getInvites(guildId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/mod.ts b/packages/old/plugins/permissions/src/guilds/mod.ts deleted file mode 100644 index f51821ffd..000000000 --- a/packages/old/plugins/permissions/src/guilds/mod.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { automod } from './automod/index.js.js' -import { createGuild } from './createGuild.js' -import { deleteGuild } from './deleteGuild.js' -import { editGuild } from './editGuild.js' -import { editGuildMfaLevel } from './editGuildMfaLevel.js' -import { editWelcomeScreen } from './editWelcomeScreen.js' -import { events } from './events/index.js.js' -import { getAuditLog } from './getAuditLog.js' -import { getBan } from './getBan.js' -import { getBans } from './getBans.js' -import { getPruneCount } from './getPruneCount.js' -import { getVanityUrl } from './getVanityUrl.js' -import { getWelcomeScreen } from './getWelcomeScreen.js' -import { voice } from './voice/index.js.js' -import { widgets } from './widgets/index.js.js' - -export function guilds (bot: BotWithCache) { - automod(bot) - events(bot) - voice(bot) - widgets(bot) - - createGuild(bot) - deleteGuild(bot) - editGuild(bot) - editGuildMfaLevel(bot) - editWelcomeScreen(bot) - getAuditLog(bot) - getBan(bot) - getBans(bot) - getPruneCount(bot) - getVanityUrl(bot) - getWelcomeScreen(bot) -} diff --git a/packages/old/plugins/permissions/src/guilds/voice/connectToVoiceChannels.ts b/packages/old/plugins/permissions/src/guilds/voice/connectToVoiceChannels.ts deleted file mode 100644 index 0b407e2a9..000000000 --- a/packages/old/plugins/permissions/src/guilds/voice/connectToVoiceChannels.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../../deps.js'; -import { ChannelTypes } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function connectToVoiceChannel (bot: BotWithCache) { - const connectToVoiceChannel = bot.helpers.connectToVoiceChannel - - bot.helpers.connectToVoiceChannel = async function (guildId, channelId, options) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if (channel == null) throw new Error('CHANNEL_NOT_FOUND') - - if ( - ![ChannelTypes.GuildStageVoice, ChannelTypes.GuildVoice].includes( - channel.type - ) - ) { - throw new Error('INVALID_CHANNEL_TYPE') - } - - const guild = channel?.guildId && bot.guilds.get(channel.guildId) - if (!guild) throw new Error('GUILD_NOT_FOUND') - - // Permissions needed for the bot to connect - // CONNECT is needed - const permsNeeded: PermissionStrings[] = ['CONNECT', 'VIEW_CHANNEL'] - - // Check if there is space for the bot if channel has user limit - // Having MANAGE_CHANNELS permissions bypasses the limit - // --> Add MANAGE_CHANNELS perm to the check if it is needed - if ( - channel.userLimit && - guild.voiceStates.filter((vs) => vs.channelId === channelId).size >= - channel.userLimit - ) { - permsNeeded.push('MANAGE_CHANNELS') - } - - requireBotChannelPermissions(bot, channel, permsNeeded) - - return await connectToVoiceChannel(guildId, channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/voice/mod.ts b/packages/old/plugins/permissions/src/guilds/voice/mod.ts deleted file mode 100644 index 18e97afc3..000000000 --- a/packages/old/plugins/permissions/src/guilds/voice/mod.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { connectToVoiceChannel } from './connectToVoiceChannels.js' - -export function voice (bot: BotWithCache) { - connectToVoiceChannel(bot) -} diff --git a/packages/old/plugins/permissions/src/guilds/widgets/editWidgetSettings.ts b/packages/old/plugins/permissions/src/guilds/widgets/editWidgetSettings.ts deleted file mode 100644 index 2139be2a3..000000000 --- a/packages/old/plugins/permissions/src/guilds/widgets/editWidgetSettings.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotGuildPermissions } from '../../permissions.js' - -export function editWidgetSettings (bot: BotWithCache) { - const editWidgetSettings = bot.helpers.editWidgetSettings - - bot.helpers.editWidgetSettings = async function (guildId, enabled, channelId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await editWidgetSettings(guildId, enabled, channelId) - } -} diff --git a/packages/old/plugins/permissions/src/guilds/widgets/mod.ts b/packages/old/plugins/permissions/src/guilds/widgets/mod.ts deleted file mode 100644 index f7ad0394a..000000000 --- a/packages/old/plugins/permissions/src/guilds/widgets/mod.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { editWidgetSettings } from './editWidgetSettings.js' - -export function widgets (bot: BotWithCache) { - editWidgetSettings(bot) -} diff --git a/packages/old/plugins/permissions/src/integrations/deleteIntegrations.ts b/packages/old/plugins/permissions/src/integrations/deleteIntegrations.ts deleted file mode 100644 index e2aef79e5..000000000 --- a/packages/old/plugins/permissions/src/integrations/deleteIntegrations.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function deleteIntegration (bot: BotWithCache) { - const deleteIntegration = bot.helpers.deleteIntegration - - bot.helpers.deleteIntegration = async function (guildId, id) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await deleteIntegration(guildId, id) - } -} diff --git a/packages/old/plugins/permissions/src/integrations/getIntegrations.ts b/packages/old/plugins/permissions/src/integrations/getIntegrations.ts deleted file mode 100644 index 2f06ea68b..000000000 --- a/packages/old/plugins/permissions/src/integrations/getIntegrations.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function getIntegrations (bot: BotWithCache) { - const getIntegrations = bot.helpers.getIntegrations - - bot.helpers.getIntegrations = async function (guildId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_GUILD']) - - return await getIntegrations(guildId) - } -} diff --git a/packages/old/plugins/permissions/src/integrations/mod.ts b/packages/old/plugins/permissions/src/integrations/mod.ts deleted file mode 100644 index 46a1c6c94..000000000 --- a/packages/old/plugins/permissions/src/integrations/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { deleteIntegration } from './deleteIntegrations.js' -import { getIntegrations } from './getIntegrations.js' - -export function integrations (bot: BotWithCache) { - deleteIntegration(bot) - getIntegrations(bot) -} diff --git a/packages/old/plugins/permissions/src/members/banMember.ts b/packages/old/plugins/permissions/src/members/banMember.ts deleted file mode 100644 index f6a442037..000000000 --- a/packages/old/plugins/permissions/src/members/banMember.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function banMember (bot: BotWithCache) { - const banMember = bot.helpers.banMember - - bot.helpers.banMember = async function (guildId, id, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['BAN_MEMBERS']) - - return await banMember(guildId, id, options) - } -} diff --git a/packages/old/plugins/permissions/src/members/editBotMember.ts b/packages/old/plugins/permissions/src/members/editBotMember.ts deleted file mode 100644 index 9e3a1435d..000000000 --- a/packages/old/plugins/permissions/src/members/editBotMember.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function editBotMember (bot: BotWithCache) { - const editBotMember = bot.helpers.editBotMember - - bot.helpers.editBotMember = async function (guildId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['CHANGE_NICKNAME']) - - return await editBotMember(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/members/editMember.ts b/packages/old/plugins/permissions/src/members/editMember.ts deleted file mode 100644 index 2ae9f4a0c..000000000 --- a/packages/old/plugins/permissions/src/members/editMember.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js' -import { requireBotChannelPermissions, requireBotGuildPermissions } from '../permissions.js' - -export function editMember (bot: BotWithCache) { - const editMember = bot.helpers.editMember - - bot.helpers.editMember = async function (guildId, memberId, options) { - const requiredPerms: PermissionStrings[] = [] - - if (options.nick) requiredPerms.push('MANAGE_NICKNAMES') - - if (options.roles) requiredPerms.push('MANAGE_ROLES') - - if ( - options.mute !== undefined || options.deaf !== undefined || - options.channelId !== undefined - ) { - const memberVoiceState = (bot.guilds.get(bot.transformers.snowflake(guildId))) - ?.voiceStates.get(bot.transformers.snowflake(memberId)) - - if (!memberVoiceState?.channelId) throw new Error('MEMBER_NOT_IN_VOICE_CHANNEL') - - if (options.mute !== undefined) requiredPerms.push('MUTE_MEMBERS') - - if (options.deaf !== undefined) requiredPerms.push('DEAFEN_MEMBERS') - - if (options.channelId) { - const requiredVoicePerms: PermissionStrings[] = ['CONNECT', 'MOVE_MEMBERS'] - if (memberVoiceState) requireBotChannelPermissions(bot, memberVoiceState?.channelId, requiredVoicePerms) - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), requiredVoicePerms) - } - } - - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), requiredPerms) - - return await editMember(guildId, memberId, options) - } -} diff --git a/packages/old/plugins/permissions/src/members/kickMember.ts b/packages/old/plugins/permissions/src/members/kickMember.ts deleted file mode 100644 index 0be6ab769..000000000 --- a/packages/old/plugins/permissions/src/members/kickMember.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function kickMember (bot: BotWithCache) { - const kickMember = bot.helpers.kickMember - - bot.helpers.kickMember = async function (guildId, memberId, reason) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['KICK_MEMBERS']) - - return await kickMember(guildId, memberId, reason) - } -} diff --git a/packages/old/plugins/permissions/src/members/mod.ts b/packages/old/plugins/permissions/src/members/mod.ts deleted file mode 100644 index 767ec756e..000000000 --- a/packages/old/plugins/permissions/src/members/mod.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { banMember } from './banMember.js' -import { editBotMember } from './editBotMember.js' -import { editMember } from './editMember.js' -import { kickMember } from './kickMember.js' -import { pruneMembers } from './pruneMembers.js' -import { unbanMember } from './unbanMember.js' - -export function members (bot: BotWithCache) { - banMember(bot) - editBotMember(bot) - editMember(bot) - kickMember(bot) - pruneMembers(bot) - unbanMember(bot) -} diff --git a/packages/old/plugins/permissions/src/members/pruneMembers.ts b/packages/old/plugins/permissions/src/members/pruneMembers.ts deleted file mode 100644 index 6bb6ba366..000000000 --- a/packages/old/plugins/permissions/src/members/pruneMembers.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function pruneMembers (bot: BotWithCache) { - const pruneMembers = bot.helpers.pruneMembers - - bot.helpers.pruneMembers = async function (guildId, options) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['KICK_MEMBERS']) - - return await pruneMembers(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/members/unbanMember.ts b/packages/old/plugins/permissions/src/members/unbanMember.ts deleted file mode 100644 index a73c860f6..000000000 --- a/packages/old/plugins/permissions/src/members/unbanMember.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function unbanMember (bot: BotWithCache) { - const unbanMember = bot.helpers.unbanMember - - bot.helpers.unbanMember = async function (guildId, id) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['BAN_MEMBERS']) - - return await unbanMember(guildId, id) - } -} diff --git a/packages/old/plugins/permissions/src/messages/deleteMessage.ts b/packages/old/plugins/permissions/src/messages/deleteMessage.ts deleted file mode 100644 index 19a37e859..000000000 --- a/packages/old/plugins/permissions/src/messages/deleteMessage.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function deleteMessage (bot: BotWithCache) { - const deleteMessage = bot.helpers.deleteMessage - - bot.helpers.deleteMessage = async function (channelId, messageId, reason, milliseconds) { - const message = bot.messages.get(bot.transformers.snowflake(messageId)) - // DELETING SELF MESSAGES IS ALWAYS ALLOWED - if (message?.authorId === bot.id) return await deleteMessage(channelId, messageId, reason, milliseconds) - - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if (channel?.guildId) { - requireBotChannelPermissions(bot, channel, [ - 'MANAGE_MESSAGES' - ]) - } else { - throw new Error( - `You can only delete messages in a channel which has a guild id. Channel ID: ${channelId} Message Id: ${messageId}` - ) - } - - return await deleteMessage(channelId, messageId, reason, milliseconds) - } -} diff --git a/packages/old/plugins/permissions/src/messages/deleteMessages.ts b/packages/old/plugins/permissions/src/messages/deleteMessages.ts deleted file mode 100644 index 2c1a7837b..000000000 --- a/packages/old/plugins/permissions/src/messages/deleteMessages.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function deleteMessages (bot: BotWithCache) { - const deleteMessages = bot.helpers.deleteMessages - - bot.helpers.deleteMessages = async function (channelId, ids, reason) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if (!channel?.guildId) { - throw new Error( - `Bulk deleting messages is only allowed in channels which has a guild id. Channel ID: ${channelId} IDS: ${ids.join(' ') - }` - ) - } - - requireBotChannelPermissions(bot, channel, ['MANAGE_MESSAGES']) - - return await deleteMessages(channelId, ids, reason) - } -} diff --git a/packages/old/plugins/permissions/src/messages/editMessage.ts b/packages/old/plugins/permissions/src/messages/editMessage.ts deleted file mode 100644 index e7dfa8432..000000000 --- a/packages/old/plugins/permissions/src/messages/editMessage.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function editMessage (bot: BotWithCache) { - const editMessage = bot.helpers.editMessage - - bot.helpers.editMessage = async function (channelId, messageId, content) { - const message = bot.messages.get(messageId) - if (message) { - if (message.authorId !== bot.id) { - content = { flags: content.flags } - requireBotChannelPermissions(bot, channelId, ['MANAGE_MESSAGES']) - } - } - - return await editMessage(channelId, messageId, content) - } -} diff --git a/packages/old/plugins/permissions/src/messages/getMessage.ts b/packages/old/plugins/permissions/src/messages/getMessage.ts deleted file mode 100644 index ef0fbda06..000000000 --- a/packages/old/plugins/permissions/src/messages/getMessage.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function getMessage (bot: BotWithCache) { - const getMessage = bot.helpers.getMessage - - bot.helpers.getMessage = async function (channelId, messageId) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if (channel?.guildId) requireBotChannelPermissions(bot, channel, ['READ_MESSAGE_HISTORY']) - - return await getMessage(channelId, messageId) - } -} diff --git a/packages/old/plugins/permissions/src/messages/getMessages.ts b/packages/old/plugins/permissions/src/messages/getMessages.ts deleted file mode 100644 index d9b5130dc..000000000 --- a/packages/old/plugins/permissions/src/messages/getMessages.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function getMessages (bot: BotWithCache) { - const getMessages = bot.helpers.getMessages - - bot.helpers.getMessages = async function (channelId, options) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if (channel?.guildId) { - requireBotChannelPermissions(bot, channel, [ - 'READ_MESSAGE_HISTORY', - 'VIEW_CHANNEL' - ]) - } - - return await getMessages(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/messages/mod.ts b/packages/old/plugins/permissions/src/messages/mod.ts deleted file mode 100644 index 325316b69..000000000 --- a/packages/old/plugins/permissions/src/messages/mod.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { deleteMessage } from './deleteMessage.js' -import { deleteMessages } from './deleteMessages.js' -import { getMessage } from './getMessage.js' -import { getMessages } from './getMessages.js' -import { pinMessage } from './pinMessage.js' -import { reactions } from './reactions/index.js.js' -import { sendMessage } from './sendMessage.js' -import { unpinMessage } from './unpinMessage.js' - -export function messages (bot: BotWithCache) { - reactions(bot) - deleteMessage(bot) - deleteMessages(bot) - getMessage(bot) - getMessages(bot) - pinMessage(bot) - sendMessage(bot) - unpinMessage(bot) -} diff --git a/packages/old/plugins/permissions/src/messages/pinMessage.ts b/packages/old/plugins/permissions/src/messages/pinMessage.ts deleted file mode 100644 index e5a4ada8d..000000000 --- a/packages/old/plugins/permissions/src/messages/pinMessage.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function pinMessage (bot: BotWithCache) { - const pinMessage = bot.helpers.pinMessage - - bot.helpers.pinMessage = async function ( - channelId, - messageId - ) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), [ - 'MANAGE_MESSAGES' - ]) - - return await pinMessage(channelId, messageId) - } -} diff --git a/packages/old/plugins/permissions/src/messages/publishMessage.ts b/packages/old/plugins/permissions/src/messages/publishMessage.ts deleted file mode 100644 index d37c3338a..000000000 --- a/packages/old/plugins/permissions/src/messages/publishMessage.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function publishMessage (bot: BotWithCache) { - const publishMessage = bot.helpers.publishMessage - - bot.helpers.publishMessage = async function (channelId, messageId) { - const message = bot.messages.get(bot.transformers.snowflake(messageId)) - - requireBotChannelPermissions( - bot, - bot.transformers.snowflake(channelId), - message?.authorId === bot.id ? ['SEND_MESSAGES'] : ['MANAGE_MESSAGES'] - ) - - return await publishMessage(channelId, messageId) - } -} diff --git a/packages/old/plugins/permissions/src/messages/reactions/addReaction.ts b/packages/old/plugins/permissions/src/messages/reactions/addReaction.ts deleted file mode 100644 index cb9d6f154..000000000 --- a/packages/old/plugins/permissions/src/messages/reactions/addReaction.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function addReaction (bot: BotWithCache) { - const addReaction = bot.helpers.addReaction - - bot.helpers.addReaction = async function (channelId, messageId, reaction) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['READ_MESSAGE_HISTORY', 'ADD_REACTIONS']) - - return await addReaction(channelId, messageId, reaction) - } -} diff --git a/packages/old/plugins/permissions/src/messages/reactions/addReactions.ts b/packages/old/plugins/permissions/src/messages/reactions/addReactions.ts deleted file mode 100644 index f362f9ce8..000000000 --- a/packages/old/plugins/permissions/src/messages/reactions/addReactions.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function addReactions (bot: BotWithCache) { - const addReactions = bot.helpers.addReactions - - bot.helpers.addReactions = async function (channelId, messageId, reactions, ordered) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['READ_MESSAGE_HISTORY', 'ADD_REACTIONS']) - - return await addReactions(channelId, messageId, reactions, ordered) - } -} diff --git a/packages/old/plugins/permissions/src/messages/reactions/deleteReactionsAll.ts b/packages/old/plugins/permissions/src/messages/reactions/deleteReactionsAll.ts deleted file mode 100644 index 950d367f5..000000000 --- a/packages/old/plugins/permissions/src/messages/reactions/deleteReactionsAll.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function deleteReactionsAll (bot: BotWithCache) { - const deleteReactionsAll = bot.helpers.deleteReactionsAll - - bot.helpers.deleteReactionsAll = async function (channelId, messageId) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['MANAGE_MESSAGES']) - - return await deleteReactionsAll(channelId, messageId) - } -} diff --git a/packages/old/plugins/permissions/src/messages/reactions/deleteReactionsEmoji.ts b/packages/old/plugins/permissions/src/messages/reactions/deleteReactionsEmoji.ts deleted file mode 100644 index 03e408487..000000000 --- a/packages/old/plugins/permissions/src/messages/reactions/deleteReactionsEmoji.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function deleteReactionsEmoji (bot: BotWithCache) { - const deleteReactionsEmoji = bot.helpers.deleteReactionsEmoji - - bot.helpers.deleteReactionsEmoji = async function (channelId, messageId, reaction) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['MANAGE_MESSAGES']) - - return await deleteReactionsEmoji(channelId, messageId, reaction) - } -} diff --git a/packages/old/plugins/permissions/src/messages/reactions/deleteUserReaction.ts.ts b/packages/old/plugins/permissions/src/messages/reactions/deleteUserReaction.ts.ts deleted file mode 100644 index 408720988..000000000 --- a/packages/old/plugins/permissions/src/messages/reactions/deleteUserReaction.ts.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { requireBotChannelPermissions } from '../../permissions.js' - -export function deleteUserReaction (bot: BotWithCache) { - const deleteUserReaction = bot.helpers.deleteUserReaction - - bot.helpers.deleteUserReaction = async function (channelId, messageId, userId, reaction) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['MANAGE_MESSAGES']) - - return await deleteUserReaction(channelId, messageId, userId, reaction) - } -} diff --git a/packages/old/plugins/permissions/src/messages/reactions/mod.ts b/packages/old/plugins/permissions/src/messages/reactions/mod.ts deleted file mode 100644 index fbb790ce3..000000000 --- a/packages/old/plugins/permissions/src/messages/reactions/mod.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { BotWithCache } from '../../../deps.js' -import { addReaction } from './addReaction.js' -import { addReactions } from './addReactions.js' -import { deleteReactionsAll } from './deleteReactionsAll.js' -import { deleteReactionsEmoji } from './deleteReactionsEmoji.js' -import { deleteUserReaction } from './deleteUserReaction.ts.js' - -export function reactions (bot: BotWithCache) { - addReaction(bot) - addReactions(bot) - deleteReactionsAll(bot) - deleteReactionsEmoji(bot) - deleteUserReaction(bot) -} diff --git a/packages/old/plugins/permissions/src/messages/sendMessage.ts b/packages/old/plugins/permissions/src/messages/sendMessage.ts deleted file mode 100644 index 9ac10e0fb..000000000 --- a/packages/old/plugins/permissions/src/messages/sendMessage.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { BotWithCache, PermissionStrings } from '../../deps.js'; -import { ChannelTypes } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function sendMessage (bot: BotWithCache) { - const sendMessage = bot.helpers.sendMessage - - bot.helpers.sendMessage = async function (channelId, content) { - const channel = bot.channels.get(bot.transformers.snowflake(channelId)) - if ( - (channel) && - [ChannelTypes.GuildCategory, ChannelTypes.GuildStageVoice, ChannelTypes.GuildForum].includes(channel.type) - ) { - throw new Error(`Can not send message to a channel of this type. Channel ID: ${channelId}`) - } - - if (channel) { - const requiredPerms: PermissionStrings[] = [] - if (channel.guildId) requiredPerms.push('SEND_MESSAGES') - if (content.tts) requiredPerms.push('SEND_TTS_MESSAGES') - if (content.messageReference) requiredPerms.push('READ_MESSAGE_HISTORY') - if (requiredPerms.length > 0) requireBotChannelPermissions(bot, channel, requiredPerms) - } - - return await sendMessage(channelId, content) - } -} diff --git a/packages/old/plugins/permissions/src/messages/unpinMessage.ts b/packages/old/plugins/permissions/src/messages/unpinMessage.ts deleted file mode 100644 index a28f4eb5f..000000000 --- a/packages/old/plugins/permissions/src/messages/unpinMessage.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function unpinMessage (bot: BotWithCache) { - const unpinMessage = bot.helpers.unpinMessage - - bot.helpers.unpinMessage = async function (channelId, messageId) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['MANAGE_MESSAGES']) - - return await unpinMessage(channelId, messageId) - } -} diff --git a/packages/old/plugins/permissions/src/permissions.ts b/packages/old/plugins/permissions/src/permissions.ts deleted file mode 100644 index e13dbffe9..000000000 --- a/packages/old/plugins/permissions/src/permissions.ts +++ /dev/null @@ -1,409 +0,0 @@ -import type { - BotWithCache, - Channel, - Guild, - Member, - OverwriteReadable, - PermissionStrings, - Role} from '../deps.js'; -import { - BitwisePermissionFlags, - Errors, - separateOverwrites -} from '../deps.js' - -/** Calculates the permissions this member has in the given guild */ -export function calculateBasePermissions ( - bot: BotWithCache, - guildOrId: bigint | Guild, - memberOrId: bigint | Member -) { - const guild = typeof guildOrId === 'bigint' ? bot.guilds.get(guildOrId) : guildOrId - const member = typeof memberOrId === 'bigint' - ? bot.members.get(bot.transformers.snowflake(`${memberOrId}${guild?.id}`)) - : memberOrId - - if ((guild == null) || (member == null)) return 8n - - let permissions = 0n - // Calculate the role permissions bits, @everyone role is not in memberRoleIds so we need to pass guildId manually - permissions |= [...member.roles, guild.id] - .map((id) => guild.roles.get(id)?.permissions) - // Removes any edge case undefined - .filter((perm) => perm) - .reduce((bits, perms) => { - bits |= perms - return bits - }, 0n) || 0n - - // If the memberId is equal to the guild ownerId he automatically has every permission so we add ADMINISTRATOR permission - if (guild.ownerId === member.id) permissions |= 8n - // Return the members permission bits as a string - return permissions -} - -/** Calculates the permissions this member has for the given Channel */ -export function calculateChannelOverwrites ( - bot: BotWithCache, - channelOrId: bigint | Channel, - memberOrId: bigint | Member -) { - const channel = typeof channelOrId === 'bigint' ? bot.channels.get(channelOrId) : channelOrId - - // This is a DM channel so return ADMINISTRATOR permission - if (!channel?.guildId) return 8n - - const member = typeof memberOrId === 'bigint' ? bot.members.get(memberOrId) : memberOrId - - if (!channel || (member == null)) return 8n - - // Get all the role permissions this member already has - let permissions = calculateBasePermissions( - bot, - channel.guildId, - member - ) - - // First calculate @everyone overwrites since these have the lowest priority - const overwriteEveryone = channel.permissionOverwrites?.find((overwrite) => { - const [_, id] = separateOverwrites(overwrite) - return id === channel.guildId - }) - if (overwriteEveryone) { - const [_type, _id, allow, deny] = separateOverwrites(overwriteEveryone) - // First remove denied permissions since denied < allowed - permissions &= ~deny - permissions |= allow - } - - const overwrites = channel.permissionOverwrites - - // In order to calculate the role permissions correctly we need to temporarily save the allowed and denied permissions - let allow = 0n - let deny = 0n - const memberRoles = member.roles || [] - // Second calculate members role overwrites since these have middle priority - for (const overwrite of overwrites || []) { - const [_type, id, allowBits, denyBits] = separateOverwrites(overwrite) - - if (!memberRoles.includes(id)) continue - - deny |= denyBits - allow |= allowBits - } - // After role overwrite calculate save allowed permissions first we remove denied permissions since "denied < allowed" - permissions &= ~deny - permissions |= allow - - // Third calculate member specific overwrites since these have the highest priority - const overwriteMember = overwrites?.find((overwrite) => { - const [_, id] = separateOverwrites(overwrite) - return id === member.id - }) - if (overwriteMember) { - const [_type, _id, allowBits, denyBits] = separateOverwrites( - overwriteMember - ) - - permissions &= ~denyBits - permissions |= allowBits - } - - return permissions -} - -/** Checks if the given permission bits are matching the given permissions. `ADMINISTRATOR` always returns `true` */ -export function validatePermissions ( - permissionBits: bigint, - permissions: PermissionStrings[] -) { - if (permissionBits & 8n) return true - - return permissions.every( - (permission) => - // Check if permission is in permissionBits - permissionBits & BigInt(BitwisePermissionFlags[permission]) - ) -} - -/** Checks if the given member has these permissions in the given guild */ -export function hasGuildPermissions ( - bot: BotWithCache, - guild: bigint | Guild, - member: bigint | Member, - permissions: PermissionStrings[] -) { - // First we need the role permission bits this member has - const basePermissions = calculateBasePermissions( - bot, - guild, - member - ) - // Second use the validatePermissions function to check if the member has every permission - return validatePermissions(basePermissions, permissions) -} - -/** Checks if the bot has these permissions in the given guild */ -export function botHasGuildPermissions ( - bot: BotWithCache, - guild: bigint | Guild, - permissions: PermissionStrings[] -) { - // Since Bot is a normal member we can use the hasRolePermissions() function - return hasGuildPermissions(bot, guild, bot.id, permissions) -} - -/** Checks if the given member has these permissions for the given channel */ -export function hasChannelPermissions ( - bot: BotWithCache, - channel: bigint | Channel, - member: bigint | Member, - permissions: PermissionStrings[] -) { - // First we need the overwrite bits this member has - const channelOverwrites = calculateChannelOverwrites( - bot, - channel, - member - ) - // Second use the validatePermissions function to check if the member has every permission - return validatePermissions(channelOverwrites, permissions) -} - -/** Checks if the bot has these permissions f0r the given channel */ -export function botHasChannelPermissions ( - bot: BotWithCache, - channel: bigint | Channel, - permissions: PermissionStrings[] -) { - // Since Bot is a normal member we can use the hasRolePermissions() function - return hasChannelPermissions(bot, channel, bot.id, permissions) -} - -/** Returns the permissions that are not in the given permissionBits */ -export function missingPermissions ( - permissionBits: bigint, - permissions: PermissionStrings[] -) { - if (permissionBits & 8n) return [] - - return permissions.filter((permission) => !(permissionBits & BigInt(BitwisePermissionFlags[permission]))) -} - -/** Get the missing Guild permissions this member has */ -export function getMissingGuildPermissions ( - bot: BotWithCache, - guild: bigint | Guild, - member: bigint | Member, - permissions: PermissionStrings[] -) { - // First we need the role permission bits this member has - const permissionBits = calculateBasePermissions( - bot, - guild, - member - ) - // Second return the members missing permissions - return missingPermissions(permissionBits, permissions) -} - -/** Get the missing Channel permissions this member has */ -export function getMissingChannelPermissions ( - bot: BotWithCache, - channel: bigint | Channel, - member: bigint | Member, - permissions: PermissionStrings[] -) { - // First we need the role permission bits this member has - const permissionBits = calculateChannelOverwrites( - bot, - channel, - member - ) - // Second return the members missing permissions - return missingPermissions(permissionBits, permissions) -} - -/** Throws an error if this member has not all of the given permissions */ -export function requireGuildPermissions ( - bot: BotWithCache, - guild: bigint | Guild, - member: bigint | Member, - permissions: PermissionStrings[] -) { - const missing = getMissingGuildPermissions( - bot, - guild, - member, - permissions - ) - if (missing.length > 0) { - // If the member is missing a permission throw an Error - throw new Error(`Missing Permissions: ${missing.join(' & ')}`) - } -} - -/** Throws an error if the bot does not have all permissions */ -export function requireBotGuildPermissions ( - bot: BotWithCache, - guild: bigint | Guild, - permissions: PermissionStrings[] -) { - // Since Bot is a normal member we can use the throwOnMissingGuildPermission() function - return requireGuildPermissions(bot, guild, bot.id, permissions) -} - -/** Throws an error if this member has not all of the given permissions */ -export function requireChannelPermissions ( - bot: BotWithCache, - channel: bigint | Channel, - member: bigint | Member, - permissions: PermissionStrings[] -) { - const missing = getMissingChannelPermissions( - bot, - channel, - member, - permissions - ) - if (missing.length > 0) { - // If the member is missing a permission throw an Error - throw new Error(`Missing Permissions: ${missing.join(' & ')}`) - } -} - -/** Throws an error if the bot has not all of the given channel permissions */ -export function requireBotChannelPermissions ( - bot: BotWithCache, - channel: bigint | Channel, - permissions: PermissionStrings[] -) { - // Since Bot is a normal member we can use the throwOnMissingChannelPermission() function - return requireChannelPermissions(bot, channel, bot.id, permissions) -} - -/** Internal function to check if the bot has the permissions to set these overwrites */ -export function requireOverwritePermissions ( - bot: BotWithCache, - guildOrId: bigint | Guild, - overwrites: OverwriteReadable[] -) { - let requiredPerms: Set = new Set(['MANAGE_CHANNELS']) - - overwrites?.forEach((overwrite) => { - if (overwrite.allow) overwrite.allow.forEach(requiredPerms.add, requiredPerms) - if (overwrite.deny) overwrite.deny.forEach(requiredPerms.add, requiredPerms) - }) - - // MANAGE_ROLES permission can only be set by administrators - if (requiredPerms.has('MANAGE_ROLES')) requiredPerms = new Set(['ADMINISTRATOR']) - - requireGuildPermissions(bot, guildOrId, bot.id, [ - ...requiredPerms - ]) -} - -/** Gets the highest role from the member in this guild */ -export function highestRole ( - bot: BotWithCache, - guildOrId: bigint | Guild, - memberOrId: bigint | Member -) { - const guild = typeof guildOrId === 'bigint' ? bot.guilds.get(guildOrId) : guildOrId - if (guild == null) throw new Error(Errors.GUILD_NOT_FOUND) - - // Get the roles from the member - const memberRoles = - (typeof memberOrId === 'bigint' - ? bot.members.get(bot.transformers.snowflake(`${memberOrId}${guild.id}`)) - : memberOrId) - ?.roles - // This member has no roles so the highest one is the @everyone role - if (memberRoles == null) return guild.roles.get(guild.id)! - - let memberHighestRole: Role | undefined - - for (const roleId of memberRoles) { - const role = guild.roles.get(roleId) - // Rare edge case handling if undefined - if (role == null) continue - - // If memberHighestRole is still undefined we want to assign the role, - // else we want to check if the current role position is higher than the current memberHighestRole - if ( - (memberHighestRole == null) || - memberHighestRole.position < role.position || - memberHighestRole.position === role.position - ) { - memberHighestRole = role - } - } - - // The member has at least one role so memberHighestRole must exist - return memberHighestRole! -} - -/** Checks if the first role is higher than the second role */ -export function higherRolePosition ( - bot: BotWithCache, - guildOrId: bigint | Guild, - roleId: bigint, - otherRoleId: bigint -) { - const guild = typeof guildOrId === 'bigint' ? bot.guilds.get(guildOrId) : guildOrId - if (guild == null) return true - - const role = guild.roles.get(roleId) - const otherRole = guild.roles.get(otherRoleId) - if ((role == null) || (otherRole == null)) throw new Error(Errors.ROLE_NOT_FOUND) - - // Rare edge case handling - if (role.position === otherRole.position) return role.id < otherRole.id - - return role.position > otherRole.position -} - -/** Checks if the member has a higher position than the given role */ -export function isHigherPosition ( - bot: BotWithCache, - guildOrId: bigint | Guild, - memberId: bigint, - compareRoleId: bigint -) { - const guild = typeof guildOrId === 'bigint' ? bot.guilds.get(guildOrId) : guildOrId - - if ((guild == null) || guild.ownerId === memberId) return true - - const memberHighestRole = highestRole(bot, guild, memberId) - return higherRolePosition( - bot, - guild.id, - memberHighestRole.id, - compareRoleId - ) -} - -/** Checks if a channel overwrite for a user id or a role id has permission in this channel */ -export function channelOverwriteHasPermission ( - guildId: bigint, - id: bigint, - overwrites: bigint[], - permissions: PermissionStrings[] -) { - const overwrite = overwrites.find((perm) => { - const [_, bitID] = separateOverwrites(perm) - return id === bitID - }) || - overwrites.find((perm) => { - const [_, bitID] = separateOverwrites(perm) - return bitID === guildId - }) - - if (!overwrite) return false - - return permissions.every((perm) => { - const [_type, _id, allowBits, denyBits] = separateOverwrites(overwrite) - if (BigInt(denyBits) & BigInt(BitwisePermissionFlags[perm])) return false - if (BigInt(allowBits) & BigInt(BitwisePermissionFlags[perm])) return true - }) -} diff --git a/packages/old/plugins/permissions/src/roles/addRole.ts b/packages/old/plugins/permissions/src/roles/addRole.ts deleted file mode 100644 index bd0d32714..000000000 --- a/packages/old/plugins/permissions/src/roles/addRole.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { higherRolePosition, highestRole, requireBotGuildPermissions } from '../permissions.js' - -export function addRole (bot: BotWithCache) { - const addRole = bot.helpers.addRole - - bot.helpers.addRole = async function (guildId, memberId, roleId, reason) { - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - if (guild) { - const role = guild.roles.get(bot.transformers.snowflake(roleId)) - if (role) { - const botRole = highestRole(bot, guild, bot.id) - - if (!higherRolePosition(bot, guild, botRole.id, role.id)) { - throw new Error( - `The bot can not add this role to the member because it does not have a role higher than the role ID: ${role.id}.` - ) - } - } - - requireBotGuildPermissions(bot, guild, ['MANAGE_ROLES']) - } - - return await addRole(guildId, memberId, roleId, reason) - } -} diff --git a/packages/old/plugins/permissions/src/roles/createRole.ts b/packages/old/plugins/permissions/src/roles/createRole.ts deleted file mode 100644 index b1f7db712..000000000 --- a/packages/old/plugins/permissions/src/roles/createRole.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function createRole (bot: BotWithCache) { - const createRole = bot.helpers.createRole - - bot.helpers.createRole = async function (guildId, options, reason) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_ROLES']) - - if (options.name && !bot.utils.validateLength(options.name, { max: 100 })) { - throw new Error('Role name must be less than 100 characters') - } - - return await createRole(guildId, options, reason) - } -} diff --git a/packages/old/plugins/permissions/src/roles/deleteRole.ts b/packages/old/plugins/permissions/src/roles/deleteRole.ts deleted file mode 100644 index 0b6ecff20..000000000 --- a/packages/old/plugins/permissions/src/roles/deleteRole.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function deleteRole (bot: BotWithCache) { - const deleteRole = bot.helpers.deleteRole - - bot.helpers.deleteRole = async function (guildId, id) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_ROLES']) - - return await deleteRole(guildId, id) - } -} diff --git a/packages/old/plugins/permissions/src/roles/editRole.ts b/packages/old/plugins/permissions/src/roles/editRole.ts deleted file mode 100644 index b29b7bac3..000000000 --- a/packages/old/plugins/permissions/src/roles/editRole.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { higherRolePosition, highestRole, requireBotGuildPermissions } from '../permissions.js' - -export function editRole (bot: BotWithCache) { - const editRole = bot.helpers.editRole - - bot.helpers.editRole = async function ( - guildId, - id, - options - ) { - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - if (guild) { - const role = guild.roles.get(bot.transformers.snowflake(id)) - if (role) { - const botRole = highestRole(bot, guild, bot.id) - - if (!higherRolePosition(bot, guild, botRole.id, role.id)) { - throw new Error( - `The bot can not add this role to the member because it does not have a role higher than the role ID: ${role.id}.` - ) - } - } - - requireBotGuildPermissions(bot, guild, ['MANAGE_ROLES']) - } - - if (options.name && !bot.utils.validateLength(options.name, { max: 100 })) { - throw new Error('Role name must be less than 100 characters') - } - - return await editRole(guildId, id, options) - } -} diff --git a/packages/old/plugins/permissions/src/roles/mod.ts b/packages/old/plugins/permissions/src/roles/mod.ts deleted file mode 100644 index 5550699e7..000000000 --- a/packages/old/plugins/permissions/src/roles/mod.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { addRole } from './addRole.js' -import { createRole } from './createRole.js' -import { deleteRole } from './deleteRole.js' -import { editRole } from './editRole.js' -import { modifyRolePositions } from './modifyRolePositions.js' -import { removeRole } from './removeRole.js' - -export function roles (bot: BotWithCache) { - addRole(bot) - createRole(bot) - deleteRole(bot) - editRole(bot) - modifyRolePositions(bot) - removeRole(bot) -} diff --git a/packages/old/plugins/permissions/src/roles/modifyRolePositions.ts b/packages/old/plugins/permissions/src/roles/modifyRolePositions.ts deleted file mode 100644 index c08a65a1e..000000000 --- a/packages/old/plugins/permissions/src/roles/modifyRolePositions.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export function modifyRolePositions (bot: BotWithCache) { - const modifyRolePositions = bot.helpers.modifyRolePositions - - bot.helpers.modifyRolePositions = async function (guildId, categoryId) { - requireBotGuildPermissions(bot, bot.transformers.snowflake(guildId), ['MANAGE_ROLES']) - - return await modifyRolePositions(guildId, categoryId) - } -} diff --git a/packages/old/plugins/permissions/src/roles/removeRole.ts b/packages/old/plugins/permissions/src/roles/removeRole.ts deleted file mode 100644 index 3a36afcf5..000000000 --- a/packages/old/plugins/permissions/src/roles/removeRole.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { higherRolePosition, highestRole, requireBotGuildPermissions } from '../permissions.js' - -export function removeRole (bot: BotWithCache) { - const removeRole = bot.helpers.removeRole - - bot.helpers.removeRole = async function ( - guildId, - memberId, - roleId, - reason - ) { - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - if (guild) { - const role = guild.roles.get(bot.transformers.snowflake(roleId)) - if (role) { - const botRole = highestRole(bot, guild, bot.id) - - if (!higherRolePosition(bot, guild, botRole.id, role.id)) { - throw new Error( - `The bot can not add this role to the member because it does not have a role higher than the role ID: ${role.id}.` - ) - } - } - - requireBotGuildPermissions(bot, guild, ['MANAGE_ROLES']) - } - - return await removeRole(guildId, memberId, roleId, reason) - } -} diff --git a/packages/old/plugins/permissions/src/stickers/createGuildSticker.ts b/packages/old/plugins/permissions/src/stickers/createGuildSticker.ts deleted file mode 100644 index 97d8bb61b..000000000 --- a/packages/old/plugins/permissions/src/stickers/createGuildSticker.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export async function createGuildSticker (bot: BotWithCache) { - const createGuildSticker = bot.helpers.createGuildSticker - bot.helpers.createGuildSticker = async (guildId, options) => { - requireBotGuildPermissions(bot, guildId, ['MANAGE_EMOJIS_AND_STICKERS']) - return await createGuildSticker(guildId, options) - } -} diff --git a/packages/old/plugins/permissions/src/stickers/deleteGuildSticker.ts b/packages/old/plugins/permissions/src/stickers/deleteGuildSticker.ts deleted file mode 100644 index 4952656bf..000000000 --- a/packages/old/plugins/permissions/src/stickers/deleteGuildSticker.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export async function deleteGuildSticker (bot: BotWithCache) { - const deleteGuildSticker = bot.helpers.deleteGuildSticker - bot.helpers.deleteGuildSticker = async (guildId, stickerId, reason) => { - requireBotGuildPermissions(bot, guildId, ['MANAGE_EMOJIS_AND_STICKERS']) - return await deleteGuildSticker(guildId, stickerId, reason) - } -} diff --git a/packages/old/plugins/permissions/src/stickers/editGuildSticker.ts b/packages/old/plugins/permissions/src/stickers/editGuildSticker.ts deleted file mode 100644 index b2f416a28..000000000 --- a/packages/old/plugins/permissions/src/stickers/editGuildSticker.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotGuildPermissions } from '../permissions.js' - -export async function editGuildSticker (bot: BotWithCache) { - const editGuildSticker = bot.helpers.editGuildSticker - bot.helpers.editGuildSticker = async (guildId, stickerId, options) => { - requireBotGuildPermissions(bot, guildId, ['MANAGE_EMOJIS_AND_STICKERS']) - return await editGuildSticker(guildId, stickerId, options) - } -} diff --git a/packages/old/plugins/permissions/src/stickers/mod.ts b/packages/old/plugins/permissions/src/stickers/mod.ts deleted file mode 100644 index 61bf8417b..000000000 --- a/packages/old/plugins/permissions/src/stickers/mod.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { createGuildSticker } from './createGuildSticker.js' -import { deleteGuildSticker } from './deleteGuildSticker.js' -import { editGuildSticker } from './editGuildSticker.js' - -export function stickers (bot: BotWithCache) { - createGuildSticker(bot) - deleteGuildSticker(bot) - editGuildSticker(bot) -} diff --git a/packages/old/plugins/permissions/src/webhooks/createWebhook.ts b/packages/old/plugins/permissions/src/webhooks/createWebhook.ts deleted file mode 100644 index c9fd96a9c..000000000 --- a/packages/old/plugins/permissions/src/webhooks/createWebhook.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function createWebhook (bot: BotWithCache) { - const createWebhook = bot.helpers.createWebhook - - bot.helpers.createWebhook = async function (channelId, options) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['MANAGE_WEBHOOKS', 'VIEW_CHANNEL']) - - return await createWebhook(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/webhooks/deleteWebhook.ts b/packages/old/plugins/permissions/src/webhooks/deleteWebhook.ts deleted file mode 100644 index 2ab2035c4..000000000 --- a/packages/old/plugins/permissions/src/webhooks/deleteWebhook.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function deleteWebhook (bot: BotWithCache) { - const deleteWebhook = bot.helpers.deleteWebhook - - bot.helpers.deleteWebhook = async function (channelId, options) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(channelId), ['MANAGE_WEBHOOKS', 'VIEW_CHANNEL']) - - return await deleteWebhook(channelId, options) - } -} diff --git a/packages/old/plugins/permissions/src/webhooks/editWebhook.ts b/packages/old/plugins/permissions/src/webhooks/editWebhook.ts deleted file mode 100644 index 9ad52716d..000000000 --- a/packages/old/plugins/permissions/src/webhooks/editWebhook.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { requireBotChannelPermissions } from '../permissions.js' - -export function editWebhook (bot: BotWithCache) { - const editWebhook = bot.helpers.editWebhook - - bot.helpers.editWebhook = async function (webhookId, options, fromChannelId) { - if (options.channelId) { - requireBotChannelPermissions(bot, bot.transformers.snowflake(options.channelId), [ - 'MANAGE_WEBHOOKS', - 'VIEW_CHANNEL' - ]) - } - if (fromChannelId) requireBotChannelPermissions(bot, fromChannelId, ['MANAGE_WEBHOOKS', 'VIEW_CHANNEL']) - - return await editWebhook(webhookId, options) - } -} diff --git a/packages/old/plugins/permissions/src/webhooks/mod.ts b/packages/old/plugins/permissions/src/webhooks/mod.ts deleted file mode 100644 index e3d1c5c47..000000000 --- a/packages/old/plugins/permissions/src/webhooks/mod.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BotWithCache } from '../../deps.js' -import { createWebhook } from './createWebhook.js' -import { deleteWebhook } from './deleteWebhook.js' -import { editWebhook } from './editWebhook.js' - -export function webhooks (bot: BotWithCache) { - createWebhook(bot) - deleteWebhook(bot) - editWebhook(bot) -} diff --git a/packages/old/plugins/permissions/tests/empty.spec.ts b/packages/old/plugins/permissions/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/plugins/permissions/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/plugins/permissions/tsconfig.json b/packages/old/plugins/permissions/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/plugins/permissions/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/permissions/tsconfig.test.json b/packages/old/plugins/permissions/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/plugins/permissions/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/utils/.c8rc.json b/packages/old/plugins/utils/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/plugins/utils/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/plugins/utils/.mocharc.json b/packages/old/plugins/utils/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/plugins/utils/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/plugins/utils/.swcrc b/packages/old/plugins/utils/.swcrc deleted file mode 100644 index 13d4f44c6..000000000 --- a/packages/old/plugins/utils/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} diff --git a/packages/old/plugins/utils/README.md b/packages/old/plugins/utils/README.md deleted file mode 100644 index 31c1d3391..000000000 --- a/packages/old/plugins/utils/README.md +++ /dev/null @@ -1 +0,0 @@ -# utils-plugin diff --git a/packages/old/plugins/utils/index.ts b/packages/old/plugins/utils/index.ts deleted file mode 100644 index b851b1ef8..000000000 --- a/packages/old/plugins/utils/index.ts +++ /dev/null @@ -1,170 +0,0 @@ -import type { - ApplicationCommandOptionChoice, - BigString, - Bot, - Channel, - Collection, - CreateMessage, - FinalHelpers, - InteractionResponse, - ListGuildMembers, - Member, - Message -} from 'discordeno' -import type { BotWithCache } from '../cache/src/addCacheCollections.js' -import { cloneChannel } from './src/channels.js' -import { disconnectMember } from './src/disconnectMember.js' -import { fetchAndRetrieveMembers } from './src/fetchAndRetrieveMembers.js' -import { getMembersPaginated } from './src/getMembersPaginated.js' -import { moveMember } from './src/moveMember.js' -import { sendAutocompleteChoices } from './src/sendAutoCompleteChoices.js' -import { sendDirectMessage } from './src/sendDirectMessage.js' -import { sendPrivateInteractionResponse } from './src/sendPrivateInteractionResponse.js' -import { sendTextMessage } from './src/sendTextMessage.js' -import { suppressEmbeds } from './src/suppressEmbeds.js' -import type { ModifyThread } from './src/threads.js' -import { - archiveThread, - editThread, - lockThread, - unarchiveThread, - unlockThread -} from './src/threads.js' - -export type BotWithUtilsPlugin = Omit & -HelperFunctionsFromHelperPlugin - -export interface HelperFunctionsFromHelperPlugin { - helpers: FinalHelpers & { - fetchAndRetrieveMembers: ( - guildId: BigString - ) => Promise> - sendDirectMessage: ( - userId: BigString, - content: string | CreateMessage - ) => Promise - sendTextMessage: ( - channelId: BigString, - content: string | CreateMessage - ) => Promise - sendPrivateInteractionResponse: ( - id: BigString, - token: string, - options: InteractionResponse - ) => Promise - suppressEmbeds: ( - channelId: BigString, - messageId: BigString - ) => Promise - archiveThread: (threadId: BigString) => Promise - unarchiveThread: (threadId: BigString) => Promise - lockThread: (threadId: BigString) => Promise - unlockThread: (threadId: BigString) => Promise - editThread: ( - threadId: BigString, - options: ModifyThread, - reason?: string - ) => Promise - cloneChannel: (channel: Channel, reason?: string) => Promise - sendAutocompleteChoices: ( - interactionId: BigString, - interactionToken: string, - choices: ApplicationCommandOptionChoice[] - ) => Promise - disconnectMember: ( - guildId: BigString, - memberId: BigString - ) => Promise - getMembersPaginated: ( - guildId: BigString, - options: ListGuildMembers - ) => Promise> - moveMember: ( - guildId: BigString, - memberId: BigString, - channelId: BigString - ) => Promise - } -} - -export function enableUtilsPlugin ( - rawBot: B -): BotWithUtilsPlugin { - // FORCE OVERRIDE THE TYPE SO WE CAN SETUP FUNCTIONS - const bot = rawBot as unknown as BotWithUtilsPlugin - - bot.helpers.fetchAndRetrieveMembers = async (guildId: BigString) => - await fetchAndRetrieveMembers(bot as unknown as BotWithCache, guildId) - bot.helpers.sendDirectMessage = async ( - userId: BigString, - content: string | CreateMessage - ) => await sendDirectMessage(bot, userId, content) - bot.helpers.sendTextMessage = async ( - channelId: BigString, - content: string | CreateMessage - ) => await sendTextMessage(bot, channelId, content) - bot.helpers.sendPrivateInteractionResponse = async ( - id: BigString, - token: string, - options: InteractionResponse - ) => await sendPrivateInteractionResponse(bot, id, token, options) - bot.helpers.suppressEmbeds = async ( - channelId: BigString, - messageId: BigString - ) => await suppressEmbeds(bot, channelId, messageId) - bot.helpers.archiveThread = async (threadId: BigString) => - await archiveThread(bot, threadId) - bot.helpers.unarchiveThread = async (threadId: BigString) => - await unarchiveThread(bot, threadId) - bot.helpers.lockThread = async (threadId: BigString) => - await lockThread(bot, threadId) - bot.helpers.unlockThread = async (threadId: BigString) => - await unlockThread(bot, threadId) - bot.helpers.editThread = async ( - threadId: BigString, - options: ModifyThread, - reason?: string - ) => await editThread(bot, threadId, options, reason) - bot.helpers.cloneChannel = async (channel: Channel, reason?: string) => - await cloneChannel(bot, channel, reason) - bot.helpers.sendAutocompleteChoices = async ( - interactionId: BigString, - interactionToken: string, - choices: ApplicationCommandOptionChoice[] - ) => - await sendAutocompleteChoices( - bot, - interactionId, - interactionToken, - choices - ) - bot.helpers.disconnectMember = async ( - guildId: BigString, - memberId: BigString - ) => await disconnectMember(bot, guildId, memberId) - bot.helpers.getMembersPaginated = async ( - guildId: BigString, - options: ListGuildMembers - ) => await getMembersPaginated(bot, guildId, options) - bot.helpers.moveMember = async ( - guildId: BigString, - memberId: BigString, - channelId: BigString - ) => await moveMember(bot, guildId, memberId, channelId) - - return bot as BotWithUtilsPlugin -} - -// EXPORT EVERYTHING HERE SO USERS CAN OPT TO USE FUNCTIONS DIRECTLY -export * from './src/channels.js' -export * from './src/disconnectMember.js' -export * from './src/fetchAndRetrieveMembers.js' -export * from './src/getMembersPaginated.js' -export * from './src/moveMember.js' -export * from './src/sendAutoCompleteChoices.js' -export * from './src/sendDirectMessage.js' -export * from './src/sendPrivateInteractionResponse.js' -export * from './src/sendTextMessage.js' -export * from './src/suppressEmbeds.js' -export * from './src/threads.js' -export default enableUtilsPlugin diff --git a/packages/old/plugins/utils/package.json b/packages/old/plugins/utils/package.json deleted file mode 100644 index 27b5648e7..000000000 --- a/packages/old/plugins/utils/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@discordeno/utils-plugin", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts'", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "devDependencies": { - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/chai": "^4", - "@types/mocha": "^10", - "@types/node": "^18.11.9", - "@types/sinon": "^10.0.13", - "c8": "^7.12.0", - "chai": "^4.3.7", - "discordeno": "18.0.0-alpha.1", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3" - } -} \ No newline at end of file diff --git a/packages/old/plugins/utils/src/channels.ts b/packages/old/plugins/utils/src/channels.ts deleted file mode 100644 index 16e8ee9d9..000000000 --- a/packages/old/plugins/utils/src/channels.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { Bot, Channel, CreateGuildChannel } from 'discordeno' -import { separateOverwrites } from 'discordeno' - -/** Create a copy of a channel */ -export async function cloneChannel ( - bot: Bot, - channel: Channel, - reason?: string -): Promise { - if (!channel.guildId) { - throw new Error('Cannot clone a channel outside a guild') - } - - const createChannelOptions: CreateGuildChannel = { - 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, - permissionOverwrites: channel.permissionOverwrites.map((overwrite) => { - const [type, id, allow, deny] = separateOverwrites(overwrite) - - return { - id, - type, - allow: bot.utils.calculatePermissions(BigInt(allow)), - deny: bot.utils.calculatePermissions(BigInt(deny)) - } - }), - reason - } - - // Create the channel (also handles permissions) - return await bot.helpers.createChannel(channel.guildId, createChannelOptions) -} diff --git a/packages/old/plugins/utils/src/disconnectMember.ts b/packages/old/plugins/utils/src/disconnectMember.ts deleted file mode 100644 index e7d22c910..000000000 --- a/packages/old/plugins/utils/src/disconnectMember.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BigString, Bot, Member } from 'discordeno' - -/** Kicks a member from a voice channel */ -export async function disconnectMember ( - bot: Bot, - guildId: BigString, - memberId: BigString -): Promise { - return await bot.helpers.editMember(guildId, memberId, { channelId: null }) -} diff --git a/packages/old/plugins/utils/src/fetchAndRetrieveMembers.ts b/packages/old/plugins/utils/src/fetchAndRetrieveMembers.ts deleted file mode 100644 index 1a0ed4996..000000000 --- a/packages/old/plugins/utils/src/fetchAndRetrieveMembers.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { BigString, Collection, Member } from 'discordeno' -import type { BotWithCache } from '../../cache/src/addCacheCollections.js' - -/** Fetch members for an entire guild then return the entire guilds cached members. */ -export async function fetchAndRetrieveMembers ( - bot: BotWithCache, - guildId: BigString -): Promise> { - if (!bot.enabledPlugins?.has('CACHE')) { - throw new Error( - 'The fetchAndRetrieveMembers function requires the CACHE plugin first.' - ) - } - - const guild = bot.guilds.get(bot.transformers.snowflake(guildId)) - if (guild == null) { - throw new Error( - 'The guild was not found in cache. Unable to fetch members for uncached guild.' - ) - } - - await bot.helpers.fetchMembers(guildId, { limit: 0 }) - return bot.members.filter((member) => member.guildId === guildId) -} diff --git a/packages/old/plugins/utils/src/getMembersPaginated.ts b/packages/old/plugins/utils/src/getMembersPaginated.ts deleted file mode 100644 index 5fa613d6f..000000000 --- a/packages/old/plugins/utils/src/getMembersPaginated.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { - BigString, - Bot, - DiscordMemberWithUser, - ListGuildMembers, - Member -} from 'discordeno' -import { Collection } from 'discordeno' - -/** - * Highly recommended to **NOT** use this function to get members instead use fetchMembers(). - * 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 getMembersPaginated ( - bot: Bot, - guildId: BigString, - options: ListGuildMembers -): Promise { - const members = new Collection() - - let membersLeft = options?.limit ?? 1000 - let loops = 1 - while ((options?.limit ?? 1000) > members.size && membersLeft > 0) { - bot.events.debug('Running while loop in getMembers function.') - - if (options?.limit && options.limit > 1000) { - console.log( - `Paginating get members from REST. #${loops} / ${Math.ceil( - (options?.limit ?? 1) / 1000 - )}` - ) - } - - const result = await bot.rest.runMethod( - bot.rest, - 'GET', - bot.constants.routes.GUILD_MEMBERS(guildId, { - limit: membersLeft > 1000 ? 1000 : membersLeft, - after: options.after - }) - ) - - const discordenoMembers = result.map((member) => - bot.transformers.member( - bot, - member, - bot.transformers.snowflake(guildId), - bot.transformers.snowflake(member.user.id) - ) - ) - - if (discordenoMembers.length === 0) break - - discordenoMembers.forEach((member) => { - bot.events.debug('Running forEach loop in get_members file.') - members.set(member.id, member) - }) - - options = { - limit: options?.limit, - after: discordenoMembers[discordenoMembers.length - 1].id.toString() - } - - membersLeft -= 1000 - - loops++ - } - - return members -} diff --git a/packages/old/plugins/utils/src/moveMember.ts b/packages/old/plugins/utils/src/moveMember.ts deleted file mode 100644 index c67ad817c..000000000 --- a/packages/old/plugins/utils/src/moveMember.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { BigString, Bot, Member } from 'discordeno' - -/** - * Move a member from a voice channel to another. - */ -export async function moveMember ( - bot: Bot, - guildId: BigString, - memberId: BigString, - channelId: BigString -): Promise { - return await bot.helpers.editMember(guildId, memberId, { channelId }) -} diff --git a/packages/old/plugins/utils/src/sendAutoCompleteChoices.ts b/packages/old/plugins/utils/src/sendAutoCompleteChoices.ts deleted file mode 100644 index 1254f3919..000000000 --- a/packages/old/plugins/utils/src/sendAutoCompleteChoices.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - ApplicationCommandOptionChoice, - BigString, - Bot -} from 'discordeno' -import { InteractionResponseTypes } from 'discordeno' - -export async function sendAutocompleteChoices ( - bot: Bot, - interactionId: BigString, - interactionToken: string, - choices: ApplicationCommandOptionChoice[] -): Promise { - await bot.helpers.sendInteractionResponse(interactionId, interactionToken, { - type: InteractionResponseTypes.ApplicationCommandAutocompleteResult, - data: { - choices - } - }) -} diff --git a/packages/old/plugins/utils/src/sendDirectMessage.ts b/packages/old/plugins/utils/src/sendDirectMessage.ts deleted file mode 100644 index ad80f0569..000000000 --- a/packages/old/plugins/utils/src/sendDirectMessage.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { BigString, Bot, CreateMessage, Message } from 'discordeno' -import { Collection } from 'discordeno' - -/** Maps the for dm channels */ -export const dmChannelIds = new Collection() - -/** Sends a direct message to a user. This can take two API calls. The first call is to create a dm channel. Then sending the message to that channel. Channel ids are cached as needed to prevent duplicate requests. */ -export async function sendDirectMessage ( - bot: Bot, - userId: BigString, - content: string | CreateMessage -): Promise { - if (typeof content === 'string') content = { content } - - // GET CHANNEL ID FROM CACHE OR CREATE THE CHANNEL FOR THIS USER - const cachedChannelId = dmChannelIds.get(userId) - // IF ID IS CACHED SEND MESSAGE DIRECTLY - if (cachedChannelId) { - return await bot.helpers.sendMessage(cachedChannelId, content) - } - - // CREATE A NEW DM CHANNEL AND PLUCK ITS ID - const channel = await bot.helpers.getDmChannel(userId) - - // CACHE IT FOR FUTURE REQUESTS - dmChannelIds.set(userId, channel.id) - - // CACHE CHANNEL IF NEEDED - return await bot.helpers.sendMessage(channel.id, content) -} diff --git a/packages/old/plugins/utils/src/sendPrivateInteractionResponse.ts b/packages/old/plugins/utils/src/sendPrivateInteractionResponse.ts deleted file mode 100644 index 6bee376c5..000000000 --- a/packages/old/plugins/utils/src/sendPrivateInteractionResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BigString, Bot, InteractionResponse } from 'discordeno' - -/** sendInteractionResponse with ephemeral reply */ -export async function sendPrivateInteractionResponse ( - bot: Bot, - id: BigString, - token: string, - options: InteractionResponse -): Promise { - if (options.data && !options.data?.flags) options.data.flags = 64 // private: true - return await bot.helpers.sendInteractionResponse(id, token, options) -} diff --git a/packages/old/plugins/utils/src/sendTextMessage.ts b/packages/old/plugins/utils/src/sendTextMessage.ts deleted file mode 100644 index 5f660ac8b..000000000 --- a/packages/old/plugins/utils/src/sendTextMessage.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { BigString, Bot, CreateMessage, Message } from 'discordeno' - -/** Sends a text message. */ -export async function sendTextMessage ( - bot: Bot, - channelId: BigString, - content: string | CreateMessage -): Promise { - if (typeof content === 'string') content = { content } - return await bot.helpers.sendMessage(channelId, content) -} diff --git a/packages/old/plugins/utils/src/suppressEmbeds.ts b/packages/old/plugins/utils/src/suppressEmbeds.ts deleted file mode 100644 index c55d4be49..000000000 --- a/packages/old/plugins/utils/src/suppressEmbeds.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { BigString, Bot, DiscordMessage, Message } from 'discordeno' - -/** Suppress all the embeds in this message */ -export async function suppressEmbeds ( - bot: Bot, - channelId: BigString, - messageId: BigString -): Promise { - const result = await bot.rest.runMethod( - bot.rest, - 'PATCH', - bot.constants.routes.CHANNEL_MESSAGE(channelId, messageId), - { flags: 4 } - ) - - return bot.transformers.message(bot, result) -} diff --git a/packages/old/plugins/utils/src/threads.ts b/packages/old/plugins/utils/src/threads.ts deleted file mode 100644 index e9ebd87e6..000000000 --- a/packages/old/plugins/utils/src/threads.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { BigString, Bot, Channel, DiscordChannel } from 'discordeno' - -/** Sets a thread channel to be archived. */ -export async function archiveThread ( - bot: Bot, - threadId: BigString -): Promise { - return await editThread(bot, threadId, { archived: true }) -} - -/** Sets a thread channel to be unarchived. */ -export async function unarchiveThread ( - bot: Bot, - threadId: BigString -): Promise { - return await editThread(bot, threadId, { archived: false }) -} - -/** Sets a thread channel to be locked. */ -export async function lockThread ( - bot: Bot, - threadId: BigString -): Promise { - return await editThread(bot, threadId, { locked: true }) -} - -/** Sets a thread channel to be unlocked. */ -export async function unlockThread ( - bot: Bot, - threadId: BigString -): Promise { - return await editThread(bot, threadId, { locked: false }) -} - -/** Update a thread's settings. Requires the `MANAGE_CHANNELS` permission for the guild. */ -export async function editThread ( - bot: Bot, - threadId: BigString, - options: ModifyThread, - reason?: string -): Promise { - const result = await bot.rest.runMethod( - bot.rest, - 'PATCH', - bot.constants.routes.CHANNEL(threadId), - { - name: options.name, - archived: options.archived, - auto_archive_duration: options.autoArchiveDuration, - locked: options.locked, - rate_limit_per_user: options.rateLimitPerUser, - reason - } - ) - - return bot.transformers.channel(bot, { - channel: result, - guildId: result.guild_id - ? bot.transformers.snowflake(result.guild_id) - : undefined - }) -} - -/** https://discord.com/developers/docs/resources/channel#modify-channel-json-params-thread */ -export interface ModifyThread { - /** 1-100 character thread name */ - name?: string - /** Whether the thread is archived */ - archived?: boolean - /** Duration in minutes to automatically archive the thread after recent activity */ - autoArchiveDuration?: 60 | 1440 | 4320 | 10080 - /** When a thread is locked, only users with `MANAGE_THREADS` can unarchive it */ - locked?: boolean - /** whether non-moderators can add other non-moderators to a thread; only available on private threads */ - invitable?: boolean - /** Amount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission `MANAGE_MESSAGES`, `MANAGE_THREAD` or `MANAGE_CHANNEL` are unaffected */ - rateLimitPerUser?: number -} diff --git a/packages/old/plugins/utils/tests/empty.spec.ts b/packages/old/plugins/utils/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/plugins/utils/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/plugins/utils/tsconfig.json b/packages/old/plugins/utils/tsconfig.json deleted file mode 100644 index 6cc7ea9b5..000000000 --- a/packages/old/plugins/utils/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist" - }, - "include": ["./src/**/*.ts", "./src/**/*.tsx"], - "exclude": ["node_modules", "dist", "test", "tests"] -} diff --git a/packages/old/plugins/utils/tsconfig.test.json b/packages/old/plugins/utils/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/plugins/utils/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/validations/.c8rc.json b/packages/old/plugins/validations/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/plugins/validations/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/plugins/validations/.mocharc.json b/packages/old/plugins/validations/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/plugins/validations/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/plugins/validations/.swcrc b/packages/old/plugins/validations/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/plugins/validations/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/plugins/validations/README.md b/packages/old/plugins/validations/README.md deleted file mode 100644 index ff0a022e1..000000000 --- a/packages/old/plugins/validations/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# validations-plugin - -This is an official plugin maintained by Discordeno. This plugin provides automatic request checking and useful -validation utility functions. Highly recommended to install this plugin for all users as you can use the utility -functions. - -## Usage - -```ts -// MOVE TO DEPS.TS AND USE SPECIFIC VERSION -import { enableValidationsPlugin } from "./deps.js"; -// Create the bot object, THIS WILL NEED YOUR OPTIONS. -const bot = createBot({}); -// Enables the plugin on this bot -enableValidationsPlugin(bot); -// Start your bot -await startBot(bot); -``` diff --git a/packages/old/plugins/validations/deps.ts b/packages/old/plugins/validations/deps.ts deleted file mode 100644 index cbba4b3bf..000000000 --- a/packages/old/plugins/validations/deps.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '../../index.js' diff --git a/packages/old/plugins/validations/mod.ts b/packages/old/plugins/validations/mod.ts deleted file mode 100644 index 8dacc90a6..000000000 --- a/packages/old/plugins/validations/mod.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { Bot } from './deps.js' -import { channels } from './src/channels/index.js.js' -import { guilds } from './src/guilds/index.js.js' -import { interactions } from './src/interaction/index.js.js' -import { invites } from './src/invites/index.js.js' -import { members } from './src/members/index.js.js' -import { messages } from './src/messages/index.js.js' -import { misc } from './src/misc/index.js.js' -import { stickers } from './src/stickers/index.js.js' -import { webhooks } from './src/webhooks/index.js.js' - -// PLUGINS MUST TAKE A BOT ARGUMENT WHICH WILL BE MODIFIED -export function enableValidationsPlugin (bot: B): B { - // MARK THIS PLUGIN BEING USED - bot.enabledPlugins.add('VALIDATIONS') - - // BEGIN OVERRIDING HELPER FUNCTIONS - channels(bot) - guilds(bot) - interactions(bot) - invites(bot) - members(bot) - messages(bot) - misc(bot) - stickers(bot) - webhooks(bot) - - // TODO: validations createGuildTemplate - // if (options.name.length < 1 || options.name.length > 100) { - // throw new Error('The name can only be in between 1-100 characters.') - // } - - // if (options.description?.length && options.description.length > 120) { - // throw new Error('The description can only be in between 0-120 characters.') - // } - - // TODO: validations editGuildTemplate - // if ( - // options.name?.length && - // (options.name.length < 1 || options.name.length > 100) - // ) { - // throw new Error('The name can only be in between 1-100 characters.') - // } - - // if (options.description?.length && options.description.length > 120) { - // throw new Error('The description can only be in between 0-120 characters.') - // } - - // PLUGINS MUST RETURN THE BOT - return bot -} - -// EXPORT ALL UTIL FUNCTIONS -export * from './src/applicationCommandOptions.js' -export * from './src/attachments.js' -export * from './src/components.js' - -// DEFAULT MAKES IT SLIGHTLY EASIER TO USE -export default enableValidationsPlugin diff --git a/packages/old/plugins/validations/package.json b/packages/old/plugins/validations/package.json deleted file mode 100644 index 4ceb6b0b1..000000000 --- a/packages/old/plugins/validations/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@discordeno/validations-plugin", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts'", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "devDependencies": { - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "tsconfig": "*", - "@discordeno/types": "18.0.0-alpha.1", - "typescript": "^4.9.3" - }, - "dependencies": { - "@types/node": "^18.11.9" - } -} \ No newline at end of file diff --git a/packages/old/plugins/validations/src/applicationCommandLength.ts b/packages/old/plugins/validations/src/applicationCommandLength.ts deleted file mode 100644 index 7daa021d0..000000000 --- a/packages/old/plugins/validations/src/applicationCommandLength.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { ApplicationCommandOption, CreateSlashApplicationCommand } from '../deps.js' -export function validateApplicationCommandLength (options: CreateSlashApplicationCommand) { - let length = 0 - if (options.nameLocalizations) { - length += Math.max(options.name.length, ...Object.values(options.nameLocalizations).map((name) => name.length)) - } else length += options.name.length - if (options.descriptionLocalizations) { - length += Math.max( - options.description.length, - ...Object.values(options.descriptionLocalizations).map((name) => name.length) - ) - } else { - length += options.description.length - } - if (options.options) length += validateApplicationCommandOptionLength(options.options) - - if (length > 4000) { - throw new Error( - 'Slash commands can have a maximum of 4000 characters for combined name, description, and value properties for each command, its options (including subcommands and groups), and choices. When localization fields are present, only the longest localization for each field (including the default value) is counted towards the size limit.' - ) - } -} - -function validateApplicationCommandOptionLength (options: ApplicationCommandOption[]) { - let length = 0 - for (const option of options) { - if (option.nameLocalizations) { - length += Math.max(option.name.length, ...Object.values(option.nameLocalizations).map((name) => name.length)) - } else length += option.name.length - if (option.descriptionLocalizations) { - length += Math.max( - option.description.length, - ...Object.values(option.descriptionLocalizations).map((name) => name.length) - ) - } else { - length += option.description.length - } - - if (option.choices) { - for (const choice of option.choices) { - length += choice.value.toString().length - if (choice.nameLocalizations) { - length += Math.max(option.name.length, ...Object.values(choice.nameLocalizations).map((name) => name.length)) - } else length += choice.name.length - } - } - - if (option.options) length += validateApplicationCommandOptionLength(option.options) - } - return length -} diff --git a/packages/old/plugins/validations/src/applicationCommandOptions.ts b/packages/old/plugins/validations/src/applicationCommandOptions.ts deleted file mode 100644 index 4028448f2..000000000 --- a/packages/old/plugins/validations/src/applicationCommandOptions.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { ApplicationCommandOption, Bot } from '../deps.js'; -import { ApplicationCommandOptionTypes } from '../deps.js' - -export function validateApplicationCommandOptions (bot: Bot, options: ApplicationCommandOption[]) { - const requiredOptions: ApplicationCommandOption[] = [] - const optionalOptions: ApplicationCommandOption[] = [] - - for (const option of options) { - option.name = option.name.toLowerCase() - - if (option.choices?.length) { - if (option.choices.length > 25) throw new Error('Too many application command options provided.') - - if ( - option.type !== ApplicationCommandOptionTypes.String && option.type !== ApplicationCommandOptionTypes.Integer - ) { - throw new Error('Only string or integer options can have choices.') - } - } - - if (!bot.utils.validateLength(option.name, { min: 1, max: 32 })) { - throw new Error('Invalid application command option name.') - } - - if (!bot.utils.validateLength(option.description, { min: 1, max: 100 })) { - throw new Error('Invalid application command description.') - } - - option.choices?.every((choice) => { - if (!bot.utils.validateLength(choice.name, { min: 1, max: 100 })) { - throw new Error('Invalid application command option choice name. Must be between 1-100 characters long.') - } - - if ( - option.type === ApplicationCommandOptionTypes.String && - (typeof choice.value !== 'string' || choice.value.length < 1 || choice.value.length > 100) - ) { - throw new Error('Invalid slash options choice value type.') - } - - if (option.type === ApplicationCommandOptionTypes.Integer && typeof choice.value !== 'number') { - throw new Error('A number must be set for Integer types.') - } - }) - - if (option.required) { - requiredOptions.push(option) - continue - } - - optionalOptions.push(option) - } - - return [...requiredOptions, ...optionalOptions] -} diff --git a/packages/old/plugins/validations/src/attachments.ts b/packages/old/plugins/validations/src/attachments.ts deleted file mode 100644 index e6fadf8b7..000000000 --- a/packages/old/plugins/validations/src/attachments.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Attachment, Bot } from '../deps.js' - -export function validateAttachments (bot: Bot, attachments: Attachment[]) { - attachments.forEach((attachment) => { - if (attachment.description && !bot.utils.validateLength(attachment.description, { min: 0, max: 1024 })) { - throw new Error('Attachment description length must be less than 1024 characters') - } - }) -} diff --git a/packages/old/plugins/validations/src/channels/mod.ts b/packages/old/plugins/validations/src/channels/mod.ts deleted file mode 100644 index e2c846edf..000000000 --- a/packages/old/plugins/validations/src/channels/mod.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Bot } from '../../deps.js' -import { threads } from './threads/index.js.js' - -export function channels (bot: Bot) { - threads(bot) - - // TODO: validations createChannel - // BITRATE IS IN THOUSANDS SO IF USER PROVIDES 32 WE CONVERT TO 32000 - // if (options?.bitrate && options.bitrate < 1000) options.bitrate *= 1000 - - // TODO: validations editChannelPositions - // if (channelPositions.length === 0) { - // throw new Error('You must provide at least one channels to be moved.') - // } -} diff --git a/packages/old/plugins/validations/src/channels/threads/addThreadMember.ts b/packages/old/plugins/validations/src/channels/threads/addThreadMember.ts deleted file mode 100644 index ee46c285f..000000000 --- a/packages/old/plugins/validations/src/channels/threads/addThreadMember.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Bot } from '../../../deps.js' - -export function addThreadMember (bot: Bot) { - const addThreadMember = bot.helpers.addThreadMember - - bot.helpers.addThreadMember = async function (threadId, userId) { - if (userId === bot.id) throw new Error('To add the bot to a thread, you must use bot.helpers.joinThread()') - - return await addThreadMember(threadId, userId) - } -} diff --git a/packages/old/plugins/validations/src/channels/threads/getThreadMember.ts b/packages/old/plugins/validations/src/channels/threads/getThreadMember.ts deleted file mode 100644 index 48a7afda4..000000000 --- a/packages/old/plugins/validations/src/channels/threads/getThreadMember.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Bot} from '../../../deps.js'; -import { GatewayIntents } from '../../../deps.js' - -export function getThreadMembers (bot: Bot) { - const getThreadMembers = bot.helpers.getThreadMembers - - bot.helpers.getThreadMembers = async function (threadId) { - const hasIntent = bot.intents & GatewayIntents.GuildMembers - if (!hasIntent) throw new Error('The get thread members endpoint requires GuildMembers intent.') - return await getThreadMembers(threadId) - } -} diff --git a/packages/old/plugins/validations/src/channels/threads/mod.ts b/packages/old/plugins/validations/src/channels/threads/mod.ts deleted file mode 100644 index 7ca92b0a5..000000000 --- a/packages/old/plugins/validations/src/channels/threads/mod.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Bot } from '../../../deps.js' -import { addThreadMember } from './addThreadMember.js' -import { getThreadMembers } from './getThreadMember.js' -import { removeThreadMember } from './removeThreadMember.js' - -export function threads (bot: Bot) { - addThreadMember(bot) - getThreadMembers(bot) - removeThreadMember(bot) -} diff --git a/packages/old/plugins/validations/src/channels/threads/removeThreadMember.ts b/packages/old/plugins/validations/src/channels/threads/removeThreadMember.ts deleted file mode 100644 index 0c169f143..000000000 --- a/packages/old/plugins/validations/src/channels/threads/removeThreadMember.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Bot } from '../../../deps.js' - -export function removeThreadMember (bot: Bot) { - const removeThreadMember = bot.helpers.removeThreadMember - - bot.helpers.removeThreadMember = async function (threadId, userId) { - if (userId === bot.id) throw new Error('To remove the bot from a thread, you must use bot.helpers.leaveThread()') - - return await removeThreadMember(threadId, userId) - } -} diff --git a/packages/old/plugins/validations/src/components.ts b/packages/old/plugins/validations/src/components.ts deleted file mode 100644 index 141b672a3..000000000 --- a/packages/old/plugins/validations/src/components.ts +++ /dev/null @@ -1,236 +0,0 @@ -import type { Bot, Emoji, MessageComponents} from '../deps.js'; -import { ButtonStyles, MessageComponentTypes } from '../deps.js' - -export function validateComponents (bot: Bot, components: MessageComponents) { - if (!components?.length) return - - let actionRowCounter = 0 - - for (const component of components) { - actionRowCounter++ - // Max of 5 ActionRows per message - if (actionRowCounter > 5) throw new Error('Too many action rows.') - - // Max of 5 Buttons (or any component type) within an ActionRow - if (component.components?.length > 5) throw new Error('Too many components.') - else if ( - component.components?.length > 1 && - component.components.some((subComponent) => - subComponent.type === MessageComponentTypes.SelectMenu || - subComponent.type === MessageComponentTypes.SelectMenuChannels || - subComponent.type === MessageComponentTypes.SelectMenuRoles || - subComponent.type === MessageComponentTypes.SelectMenuUsers || - subComponent.type === MessageComponentTypes.SelectMenuUsersAndRoles - ) - ) { - throw new Error('Select component must be alone.') - } - - for (const subComponent of component.components) { - if ( - subComponent.customId && - !bot.utils.validateLength(subComponent.customId, { max: 100 }) - ) { - throw new Error('The custom id in the component is too big.') - } - - // 5 Link buttons can not have a customId - if (subComponent.type === MessageComponentTypes.Button) { - if (subComponent.style === ButtonStyles.Link && subComponent.customId) { - throw new Error('Link buttons can not have custom ids.') - } - // Other buttons must have a customId - if ( - !subComponent.customId && subComponent.style !== ButtonStyles.Link - ) { - throw new Error( - 'The button requires a custom id if it is not a link button.' - ) - } - - if (!bot.utils.validateLength(subComponent.label, { max: 80 })) { - throw new Error('The label can not be longer than 80 characters.') - } - - subComponent.emoji = makeEmojiFromString(subComponent.emoji) - } - - if ( - subComponent.type === MessageComponentTypes.SelectMenu || - subComponent.type === MessageComponentTypes.SelectMenuChannels || - subComponent.type === MessageComponentTypes.SelectMenuRoles || - subComponent.type === MessageComponentTypes.SelectMenuUsers || - subComponent.type === MessageComponentTypes.SelectMenuUsersAndRoles - ) { - if ( - subComponent.placeholder && - !bot.utils.validateLength(subComponent.placeholder, { max: 150 }) - ) { - throw new Error( - 'The component placeholder can not be longer than 150 characters.' - ) - } - - if (subComponent.minValues) { - if (subComponent.minValues < 1) { - throw new Error( - 'The min values must be more than 1 in a select component.' - ) - } - - if (subComponent.minValues > 25) { - throw new Error( - 'The min values must be less than 25 in a select component.' - ) - } - - if (!subComponent.maxValues) subComponent.maxValues = subComponent.minValues - if (subComponent.minValues > subComponent.maxValues) { - throw new Error( - 'The select component can not have a min values higher than a max values.' - ) - } - } - - if (subComponent.maxValues) { - if (subComponent.maxValues < 1) { - throw new Error( - 'The max values must be more than 1 in a select component.' - ) - } - - if (subComponent.maxValues > 25) { - throw new Error( - 'The max values must be less than 25 in a select component.' - ) - } - } - - if (subComponent.type === MessageComponentTypes.SelectMenu) { - if (subComponent.options.length < 1) throw new Error('You need at least 1 option in the select component.') - - if (subComponent.options.length > 25) { - throw new Error( - 'You can not have more than 25 options in the select component.' - ) - } - - let defaults = 0 - - for (const option of subComponent.options) { - if (option.default) { - defaults++ - if (defaults > (subComponent.maxValues || 25)) throw new Error('You chose too many default options.') - } - - if (!bot.utils.validateLength(option.label, { max: 25 })) { - throw new Error( - 'The select component label can not exceed 25 characters.' - ) - } - - if (!bot.utils.validateLength(option.value, { max: 100 })) { - throw new Error( - 'The select component value can not exceed 100 characters.' - ) - } - - if ( - option.description && - !bot.utils.validateLength(option.description, { max: 50 }) - ) { - throw new Error( - 'The select option description can not exceed 50 characters.' - ) - } - - option.emoji = makeEmojiFromString(option.emoji) - } - } - } - - if (subComponent.type === MessageComponentTypes.InputText) { - // Other buttons must have a customId - if ( - !subComponent.customId - ) { - throw new Error( - 'The text input requires a custom id' - ) - } - - if (!bot.utils.validateLength(subComponent.label, { max: 45 })) { - throw new Error('The label can not be longer than 45 characters.') - } - - if (subComponent.minLength) { - if (subComponent.minLength < 0) { - throw new Error( - 'The min length must be more than 0 in a text input component.' - ) - } - - if (subComponent.minLength > 4000) { - throw new Error( - 'The min length must be less than 4000 in a text input component.' - ) - } - - if (subComponent.maxLength && subComponent.minLength > subComponent.maxLength) { - throw new Error( - 'The text input component can not have a higher min length than the max length.' - ) - } - } - - if (subComponent.maxLength) { - if (subComponent.maxLength < 1) { - throw new Error( - 'The max length must be more than 1 in a text input component.' - ) - } - - if (subComponent.maxLength > 4000) { - throw new Error( - 'The max length must be less than 4000 in a text input component.' - ) - } - } - } - } - } -} - -function makeEmojiFromString ( - emoji?: - | string - | { - id?: string | bigint | undefined - name?: string | undefined - animated?: boolean | undefined - } -) { - if (!emoji) return - - if (typeof emoji !== 'string') { - return { - id: emoji.id ? BigInt(emoji.id) : undefined, - name: emoji.name, - animated: emoji.animated - } - } - - // A snowflake id was provided - if (/^[0-9]+$/.test(emoji)) { - emoji = { - id: BigInt(emoji) - } - } else { - // A unicode emoji was provided - emoji = { - name: emoji - } - } - - return emoji as Emoji -} diff --git a/packages/old/plugins/validations/src/guilds/createGuild.ts b/packages/old/plugins/validations/src/guilds/createGuild.ts deleted file mode 100644 index 67ea69ff5..000000000 --- a/packages/old/plugins/validations/src/guilds/createGuild.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Bot } from '../../deps.js' - -export function createGuild (bot: Bot) { - const createGuild = bot.helpers.createGuild - - bot.helpers.createGuild = async function (options) { - if ( - options.name && - !bot.utils.validateLength(options.name, { min: 2, max: 100 }) - ) { - throw new Error('The guild name must be between 2 and 100 characters.') - } - - return await createGuild(options) - } -} diff --git a/packages/old/plugins/validations/src/guilds/events/createScheduledEvent.ts b/packages/old/plugins/validations/src/guilds/events/createScheduledEvent.ts deleted file mode 100644 index ea11988e2..000000000 --- a/packages/old/plugins/validations/src/guilds/events/createScheduledEvent.ts +++ /dev/null @@ -1,64 +0,0 @@ -import type { Bot} from '../../../deps.js'; -import { ScheduledEventEntityType } from '../../../deps.js' - -export function createScheduledEvent (bot: Bot) { - const createScheduledEvent = bot.helpers.createScheduledEvent - - bot.helpers.createScheduledEvent = async function (guildId, options) { - // TODO: validations - // if (!validateLength(options.name, { min: 1, max: 100 })) { - // throw new Error('Name must be between 1-100 characters.') - // } - // if ( - // options.description && - // !validateLength(options.description, { max: 1000 }) - // ) { - // throw new Error('Description must be below 1000 characters.') - // } - // if (options.location) { - // if (!validateLength(options.location, { max: 100 })) { - // throw new Error('Location must be below 100 characters.') - // } - // if (options.entityType === ScheduledEventEntityType.Voice) { - // throw new Error('Location can not be provided for a Voice event.') - // } - // } - // if (options.entityType === ScheduledEventEntityType.External) { - // if (!options.scheduledEndTime) { - // throw new Error( - // 'A scheduled end time is required when making an External event.' - // ) - // } - // if (!options.location) { - // throw new Error('A location is required when making an External event.') - // } - // } - // if ( - // options.scheduledStartTime && - // options.scheduledEndTime && - // options.scheduledStartTime > options.scheduledEndTime - // ) { - // throw new Error('Cannot schedule event to end before starting.') - // } - - if (options.entityType === ScheduledEventEntityType.StageInstance) { - if (!options.channelId) { - throw new Error( - 'A channel id is required for creating a stage scheduled event.' - ) - } - - return await createScheduledEvent(guildId, options) - } - - if (options.entityType === ScheduledEventEntityType.Voice) { - if (!options.channelId) { - throw new Error( - 'A channel id is required for creating a voice scheduled event.' - ) - } - } - - return await createScheduledEvent(guildId, options) - } -} diff --git a/packages/old/plugins/validations/src/guilds/events/mod.ts b/packages/old/plugins/validations/src/guilds/events/mod.ts deleted file mode 100644 index 999d3f2a3..000000000 --- a/packages/old/plugins/validations/src/guilds/events/mod.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { Bot } from '../../../deps.js' -import { createScheduledEvent } from './createScheduledEvent.js' - -export function events (bot: Bot) { - createScheduledEvent(bot) - - // TODO: validations editScheduledEvent - // if (options.name && !validateLength(options.name, { min: 1, max: 100 })) { - // throw new Error('Name must be between 1-100 characters.') - // } - // if ( - // options.description && - // !validateLength(options.description, { max: 1000 }) - // ) { - // throw new Error('Description must be below 1000 characters.') - // } - // if (options.location && !validateLength(options.location, { max: 100 })) { - // throw new Error('Location must be below 100 characters.') - // } - // if ( - // options.scheduledStartTime && - // options.scheduledEndTime && - // options.scheduledStartTime > options.scheduledEndTime - // ) { - // throw new Error('Cannot schedule event to end before starting.') - // } -} diff --git a/packages/old/plugins/validations/src/guilds/mod.ts b/packages/old/plugins/validations/src/guilds/mod.ts deleted file mode 100644 index 2420a8226..000000000 --- a/packages/old/plugins/validations/src/guilds/mod.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { Bot } from '../../deps.js' -import { createGuild } from './createGuild.js' -import { events } from './events/index.js.js' - -export function guilds (bot: Bot) { - events(bot) - createGuild(bot) - - // TODO: validations createEmoji - // if (options.image && !options.image.startsWith('data:image/')) { - // options.image = await urlToBase64(options.image) - // } - - // TODO: validations editGuild - // if (options.icon && !options.icon.startsWith('data:image/')) { - // options.icon = await urlToBase64(options.icon) - // } - - // if (options.banner && !options.banner.startsWith('data:image/')) { - // options.banner = await urlToBase64(options.banner) - // } - - // if (options.splash && !options.splash.startsWith('data:image/')) { - // options.splash = await urlToBase64(options.splash) - // } - - // TODO: validations getAuditLog - // if (options?.limit) { - // options.limit = - // options.limit >= 1 && options.limit <= 100 ? options.limit : 50 - // } - - // TODO: validations getPruneCount - // if (options?.days && options.days < 1) { - // throw new Error(rest.constants.Errors.PRUNE_MIN_DAYS) - // } - // if (options?.days && options.days > 30) { - // throw new Error(rest.constants.Errors.PRUNE_MAX_DAYS) - // } -} diff --git a/packages/old/plugins/validations/src/interaction/commands/createGlobalApplicationCommand.ts b/packages/old/plugins/validations/src/interaction/commands/createGlobalApplicationCommand.ts deleted file mode 100644 index 16711e262..000000000 --- a/packages/old/plugins/validations/src/interaction/commands/createGlobalApplicationCommand.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { - Bot} from '../../../deps.js'; -import { - ApplicationCommandTypes, - CONTEXT_MENU_COMMANDS_NAME_REGEX, - SLASH_COMMANDS_NAME_REGEX -} from '../../../deps.js' -import { validateApplicationCommandLength } from '../../applicationCommandLength.js' -import { validateApplicationCommandOptions } from '../../applicationCommandOptions.js' - -export function createGlobalApplicationCommand (bot: Bot) { - const createGlobalApplicationCommand = bot.helpers.createGlobalApplicationCommand - - bot.helpers.createGlobalApplicationCommand = async function (options) { - const isChatInput = !options.type || options.type === ApplicationCommandTypes.ChatInput - - if (!options.name) throw new Error('A name is required to create a options.') - - if (isChatInput) { - if (!SLASH_COMMANDS_NAME_REGEX.test(options.name)) { - throw new Error('The name of the slash command did not match the required regex.') - } - - // Only slash need to be lowercase - options.name = options.name.toLowerCase() - - // Slash commands require description - if (!options.description) throw new Error('Slash commands require some form of a description be provided.') - else if (!bot.utils.validateLength(options.description, { min: 1, max: 100 })) { - throw new Error('Application command descriptions must be between 1 and 100 characters.') - } - - if (options.options?.length) { - if (options.options.length > 25) throw new Error('Only 25 options are allowed to be provided.') - - options.options = validateApplicationCommandOptions(bot, options.options) - } - - validateApplicationCommandLength(options) - } else { - if (!CONTEXT_MENU_COMMANDS_NAME_REGEX.test(options.name)) { - throw new Error('The name of the context menu did not match the required regex.') - } - - let length = 0 - if (options.nameLocalizations) { - length += Math.max(options.name.length, ...Object.values(options.nameLocalizations).map((name) => name.length)) - } else length += options.name.length - - if (length > 4000) { - throw new Error( - 'Slash commands can have a maximum of 4000 characters for combined name, description, and value properties for each command, its options (including subcommands and groups), and choices. When localization fields are present, only the longest localization for each field (including the default value) is counted towards the size limit.' - ) - } - } - - return await createGlobalApplicationCommand(options) - } -} diff --git a/packages/old/plugins/validations/src/interaction/commands/createGuildApplicationCommand.ts b/packages/old/plugins/validations/src/interaction/commands/createGuildApplicationCommand.ts deleted file mode 100644 index e689373bb..000000000 --- a/packages/old/plugins/validations/src/interaction/commands/createGuildApplicationCommand.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { - Bot} from '../../../deps.js'; -import { - ApplicationCommandTypes, - CONTEXT_MENU_COMMANDS_NAME_REGEX, - SLASH_COMMANDS_NAME_REGEX -} from '../../../deps.js' -import { validateApplicationCommandOptions } from '../../applicationCommandOptions.js' - -export function createGuildApplicationCommand (bot: Bot) { - const createGuildApplicationCommand = bot.helpers.createGuildApplicationCommand - - bot.helpers.createGuildApplicationCommand = async function (options, guildId) { - const isChatInput = !options.type || options.type === ApplicationCommandTypes.ChatInput - - if (!options.name) throw new Error('A name is required to create a options.') - - if (isChatInput) { - if (!SLASH_COMMANDS_NAME_REGEX.test(options.name)) { - throw new Error('The name of the slash command did not match the required regex.') - } - - // Only slash need to be lowercase - options.name = options.name.toLowerCase() - - // Slash commands require description - if (!options.description) throw new Error('Slash commands require some form of a description be provided.') - else if (!bot.utils.validateLength(options.description, { min: 1, max: 100 })) { - throw new Error('Application command descriptions must be between 1 and 100 characters.') - } - - if (options.options?.length) { - if (options.options.length > 25) throw new Error('Only 25 options are allowed to be provided.') - - options.options = validateApplicationCommandOptions(bot, options.options) - } - } else { - if (!CONTEXT_MENU_COMMANDS_NAME_REGEX.test(options.name)) { - throw new Error('The name of the context menu did not match the required regex.') - } - } - - return await createGuildApplicationCommand(options, guildId) - } -} diff --git a/packages/old/plugins/validations/src/interaction/commands/mod.ts b/packages/old/plugins/validations/src/interaction/commands/mod.ts deleted file mode 100644 index eaf87cea3..000000000 --- a/packages/old/plugins/validations/src/interaction/commands/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Bot } from '../../../deps.js' -import { createGlobalApplicationCommand } from './createGlobalApplicationCommand.js' -import { createGuildApplicationCommand } from './createGuildApplicationCommand.js' - -export function commands (bot: Bot) { - createGlobalApplicationCommand(bot) - createGuildApplicationCommand(bot) -} diff --git a/packages/old/plugins/validations/src/interaction/mod.ts b/packages/old/plugins/validations/src/interaction/mod.ts deleted file mode 100644 index 749fb3400..000000000 --- a/packages/old/plugins/validations/src/interaction/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Bot } from '../../deps.js' -import { commands } from './commands/index.js.js' -import { responses } from './responses/index.js.js' - -export function interactions (bot: Bot) { - commands(bot) - responses(bot) -} diff --git a/packages/old/plugins/validations/src/interaction/responses/editFollowupMessage.ts b/packages/old/plugins/validations/src/interaction/responses/editFollowupMessage.ts deleted file mode 100644 index e945f49c8..000000000 --- a/packages/old/plugins/validations/src/interaction/responses/editFollowupMessage.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { Bot } from '../../../deps.js'; -import { AllowedMentionsTypes } from '../../../deps.js' - -export function editFollowupMessage (bot: Bot) { - const editFollowupMessage = bot.helpers.editFollowupMessage - - bot.helpers.editFollowupMessage = async function (token, messageId, options) { - if (options.content && options.content.length > 2000) throw Error('MESSAGE_MAX_LENGTH') - - if ((options.embeds) && options.embeds.length > 10) options.embeds.splice(10) - - if (options.allowedMentions) { - if (options.allowedMentions.users?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.UserMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'users') - } - - if (options.allowedMentions.users.length > 100) { - options.allowedMentions.users = options.allowedMentions.users.slice(0, 100) - } - } - - if (options.allowedMentions.roles?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.RoleMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'roles') - } - - if (options.allowedMentions.roles.length > 100) { - options.allowedMentions.roles = options.allowedMentions.roles.slice(0, 100) - } - } - } - - return await editFollowupMessage(token, messageId, options) - } -} diff --git a/packages/old/plugins/validations/src/interaction/responses/editOriginalInteractionResponse.ts b/packages/old/plugins/validations/src/interaction/responses/editOriginalInteractionResponse.ts deleted file mode 100644 index 5c6116bf5..000000000 --- a/packages/old/plugins/validations/src/interaction/responses/editOriginalInteractionResponse.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { Bot } from '../../../deps.js'; -import { AllowedMentionsTypes } from '../../../deps.js' - -export function editOriginalInteractionResponse (bot: Bot) { - const editOriginalInteractionResponse = bot.helpers.editOriginalInteractionResponse - - bot.helpers.editOriginalInteractionResponse = async function (token, options) { - if (options.content && options.content.length > 2000) throw Error(bot.constants.Errors.MESSAGE_MAX_LENGTH) - - if ((options.embeds) && options.embeds.length > 10) options.embeds.splice(10) - - if (options.allowedMentions) { - if (options.allowedMentions.users?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.UserMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'users') - } - - if (options.allowedMentions.users.length > 100) { - options.allowedMentions.users = options.allowedMentions.users.slice(0, 100) - } - } - - if (options.allowedMentions.roles?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.RoleMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'roles') - } - - if (options.allowedMentions.roles.length > 100) { - options.allowedMentions.roles = options.allowedMentions.roles.slice(0, 100) - } - } - } - - return await editOriginalInteractionResponse(token, options) - } -} diff --git a/packages/old/plugins/validations/src/interaction/responses/mod.ts b/packages/old/plugins/validations/src/interaction/responses/mod.ts deleted file mode 100644 index 6027fe36e..000000000 --- a/packages/old/plugins/validations/src/interaction/responses/mod.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Bot } from '../../../deps.js' -import { editFollowupMessage } from './editFollowupMessage.js' -import { editOriginalInteractionResponse } from './editOriginalInteractionResponse.js' -import { sendInteractionResponse } from './sendInteractionResponse.js' - -export function responses (bot: Bot) { - editFollowupMessage(bot) - editOriginalInteractionResponse(bot) - sendInteractionResponse(bot) -} diff --git a/packages/old/plugins/validations/src/interaction/responses/sendInteractionResponse.ts b/packages/old/plugins/validations/src/interaction/responses/sendInteractionResponse.ts deleted file mode 100644 index da9f68c72..000000000 --- a/packages/old/plugins/validations/src/interaction/responses/sendInteractionResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Bot } from '../../../deps.js' - -export function sendInteractionResponse (bot: Bot) { - const sendInteractionResponse = bot.helpers.sendInteractionResponse - - bot.helpers.sendInteractionResponse = async function (id, token, options) { - if (options.data?.title !== undefined) { - if (!bot.utils.validateLength(options.data.title, { min: 1, max: 45 })) { - throw new Error('Invalid modal title. Must be between 1-45 characters long.') - } - } - - options.data?.choices?.every((choice) => { - if (!bot.utils.validateLength(choice.name, { min: 1, max: 100 })) { - throw new Error('Invalid application command option choice name. Must be between 1-100 characters long.') - } - - if (typeof choice.value === 'string' && (choice.value.length < 1 || choice.value.length > 100)) { - throw new Error('Invalid slash options choice value type.') - } - }) - - return await sendInteractionResponse(id, token, options) - } -} diff --git a/packages/old/plugins/validations/src/invites/createInvite.ts b/packages/old/plugins/validations/src/invites/createInvite.ts deleted file mode 100644 index 0119709c0..000000000 --- a/packages/old/plugins/validations/src/invites/createInvite.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Bot } from '../../deps.js' - -export function createInvite (bot: Bot) { - const createInvite = bot.helpers.createInvite - - bot.helpers.createInvite = async function (channelId, options = {}) { - if (options.maxAge && (options.maxAge < 0 || options.maxAge > 604800)) { - throw new Error('The max age for an invite must be between 0 and 604800.') - } - if (options.maxUses && (options.maxUses < 0 || options.maxUses > 100)) { - throw new Error('The max uses for an invite must be between 0 and 100.') - } - - return await createInvite(channelId, options) - } -} diff --git a/packages/old/plugins/validations/src/invites/mod.ts b/packages/old/plugins/validations/src/invites/mod.ts deleted file mode 100644 index 0ceec7a8d..000000000 --- a/packages/old/plugins/validations/src/invites/mod.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Bot } from '../../deps.js' -import { createInvite } from './createInvite.js' - -export function invites (bot: Bot) { - createInvite(bot) -} diff --git a/packages/old/plugins/validations/src/members/editMember.ts b/packages/old/plugins/validations/src/members/editMember.ts deleted file mode 100644 index 351d928c7..000000000 --- a/packages/old/plugins/validations/src/members/editMember.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Bot } from '../../deps.js' - -export function editMember (bot: Bot) { - const editMember = bot.helpers.editMember - - bot.helpers.editMember = async function (guildId, memberId, options) { - if (options.nick && options.nick.length > 32) throw new Error('NICKNAMES_MAX_LENGTH') - - return await editMember(guildId, memberId, options) - } -} diff --git a/packages/old/plugins/validations/src/members/mod.ts b/packages/old/plugins/validations/src/members/mod.ts deleted file mode 100644 index b0038aa1b..000000000 --- a/packages/old/plugins/validations/src/members/mod.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { Bot } from '../../deps.js' -import { editMember } from './editMember.js' - -export function members (bot: Bot) { - editMember(bot) - - // TODO: validations getDmChannel - // if (userId === rest.id) { - // throw new Error(rest.constants.Errors.YOU_CAN_NOT_DM_THE_BOT_ITSELF) - // } - - // TODO: validations pruneMembers - // if (options.days && options.days < 1) { - // throw new Error(rest.constants.Errors.PRUNE_MIN_DAYS) - // } - // if (options.days && options.days > 30) { - // throw new Error(rest.constants.Errors.PRUNE_MAX_DAYS) - // } - - // TODO: validations searchMembers - // if (options?.limit) { - // if (options.limit < 1) { - // throw new Error(rest.constants.Errors.MEMBER_SEARCH_LIMIT_TOO_LOW) - // } - // if (options.limit > 1000) { - // throw new Error(rest.constants.Errors.MEMBER_SEARCH_LIMIT_TOO_HIGH) - // } - // } -} diff --git a/packages/old/plugins/validations/src/messages/deleteMessages.ts b/packages/old/plugins/validations/src/messages/deleteMessages.ts deleted file mode 100644 index 5544876ee..000000000 --- a/packages/old/plugins/validations/src/messages/deleteMessages.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { Bot } from '../../deps.js' - -export function deleteMessages (bot: Bot) { - const deleteMessages = bot.helpers.deleteMessages - - bot.helpers.deleteMessages = async function ( - channelId, - ids, - reason - ) { - // TODO: validations - // if (ids.length < 2) { - // throw new Error(rest.constants.Errors.DELETE_MESSAGES_MIN) - // } - - // if (ids.length > 100) { - // console.warn( - // 'This endpoint only accepts a maximum of 100 messages. Using the first 100 message ids provided.' - // ) - // } - - // 2 WEEKS - const oldestAllowed = Date.now() - 1209600000 - - ids = ids.filter((id) => { - const createdAt = Number(bot.transformers.snowflake(id) / 4194304n + 1420070400000n) - // IF MESSAGE IS OLDER THAN 2 WEEKS - if (createdAt > oldestAllowed) return true - - console.log( - `[Validation Plugin] Skipping bulk message delete of ID ${id} because it is older than 2 weeks.` - ) - return false - }) - - if (ids.length < 2) throw new Error('Bulk message delete requires at least 2 messages.') - - return await deleteMessages(channelId, ids, reason) - } -} diff --git a/packages/old/plugins/validations/src/messages/editMessage.ts b/packages/old/plugins/validations/src/messages/editMessage.ts deleted file mode 100644 index d7655df32..000000000 --- a/packages/old/plugins/validations/src/messages/editMessage.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { Bot } from '../../deps.js'; -import { AllowedMentionsTypes } from '../../deps.js' - -export function editMessage (bot: Bot) { - const editMessage = bot.helpers.editMessage - - bot.helpers.editMessage = async function (channelId, messageId, content) { - if (content.allowedMentions) { - if (content.allowedMentions.users?.length) { - if ( - content.allowedMentions.parse?.includes( - AllowedMentionsTypes.UserMentions - ) - ) { - content.allowedMentions.parse = content.allowedMentions.parse.filter(( - p - ) => p !== 'users') - } - - if (content.allowedMentions.users.length > 100) { - content.allowedMentions.users = content.allowedMentions.users.slice( - 0, - 100 - ) - } - } - - if (content.allowedMentions.roles?.length) { - if ( - content.allowedMentions.parse?.includes( - AllowedMentionsTypes.RoleMentions - ) - ) { - content.allowedMentions.parse = content.allowedMentions.parse.filter(( - p - ) => p !== 'roles') - } - - if (content.allowedMentions.roles.length > 100) { - content.allowedMentions.roles = content.allowedMentions.roles.slice( - 0, - 100 - ) - } - } - } - - content.embeds?.splice(10) - - if ( - content.content && - !bot.utils.validateLength(content.content, { max: 2000 }) - ) { - throw new Error( - 'A message content can not contain more than 2000 characters.' - ) - } - - return await editMessage(channelId, messageId, content) - } -} diff --git a/packages/old/plugins/validations/src/messages/mod.ts b/packages/old/plugins/validations/src/messages/mod.ts deleted file mode 100644 index 712516316..000000000 --- a/packages/old/plugins/validations/src/messages/mod.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Bot } from '../../deps.js' -import { deleteMessages } from './deleteMessages.js' -import { editMessage } from './editMessage.js' -import { sendMessage } from './sendMessage.js' - -export function messages (bot: Bot) { - deleteMessages(bot) - editMessage(bot) - sendMessage(bot) - - // TODO: validations getMessages - // if (options?.limit && (options.limit < 0 || options.limit > 100)) { - // throw new Error(rest.constants.Errors.INVALID_GET_MESSAGES_LIMIT) - // } -} diff --git a/packages/old/plugins/validations/src/messages/sendMessage.ts b/packages/old/plugins/validations/src/messages/sendMessage.ts deleted file mode 100644 index 23d2d0a5c..000000000 --- a/packages/old/plugins/validations/src/messages/sendMessage.ts +++ /dev/null @@ -1,69 +0,0 @@ -import type { Bot } from '../../deps.js'; -import { AllowedMentionsTypes } from '../../deps.js' -import { validateComponents } from '../components.js' - -export function sendMessage (bot: Bot) { - const sendMessage = bot.helpers.sendMessage - - bot.helpers.sendMessage = async function (channelId, content) { - if ( - content.content && - !bot.utils.validateLength(content.content, { max: 2000 }) - ) { - throw new Error('The content should not exceed 2000 characters.') - } - - if (content.allowedMentions) { - if (content.allowedMentions.users?.length) { - if ( - content.allowedMentions.parse?.includes( - AllowedMentionsTypes.UserMentions - ) - ) { - content.allowedMentions.parse = content.allowedMentions.parse.filter(( - p - ) => p !== 'users') - } - - if (content.allowedMentions.users.length > 100) { - content.allowedMentions.users = content.allowedMentions.users.slice( - 0, - 100 - ) - } - } - - if (content.allowedMentions.roles?.length) { - if ( - content.allowedMentions.parse?.includes( - AllowedMentionsTypes.RoleMentions - ) - ) { - content.allowedMentions.parse = content.allowedMentions.parse.filter(( - p - ) => p !== 'roles') - } - - if (content.allowedMentions.roles.length > 100) { - content.allowedMentions.roles = content.allowedMentions.roles.slice( - 0, - 100 - ) - } - } - } - - if (content.components) validateComponents(bot, content.components) - - if ( - !content.content?.length && !content.embeds?.length && !content.components?.length && (content.file == null) && - !content.stickerIds?.length - ) { - throw new Error( - 'When sending a message, you must provide a value for at least one of content, embeds, stickerIds, components, or file.' - ) - } - - return await sendMessage(channelId, content) - } -} diff --git a/packages/old/plugins/validations/src/misc/editBotProfile.ts b/packages/old/plugins/validations/src/misc/editBotProfile.ts deleted file mode 100644 index f288d73a1..000000000 --- a/packages/old/plugins/validations/src/misc/editBotProfile.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { Bot } from '../../deps.js' - -export function editBotProfile (bot: Bot) { - const editBotProfile = bot.helpers.editBotProfile - - bot.helpers.editBotProfile = async function (options) { - // Nothing was edited - if (!options.username && options.botAvatarURL === undefined) { - throw new Error( - 'There was no change to the username or avatar found in the request.' - ) - } - // Check username requirements if username was provided - if (options.username) { - if (options.username.length > 32) { - throw new Error( - 'A username for the bot must be less than 32 characters.' - ) - } - if (options.username.length < 2) { - throw new Error( - 'A username for the bot can not be less than 2 characters.' - ) - } - if ( - ['@', '#', ':', '```'].some((char) => options.username!.includes(char)) - ) { - throw new Error('A bot username can not include @ # : or ```') - } - if (['discordtag', 'everyone', 'here'].includes(options.username)) { - throw new Error( - 'A bot username can not be set to `discordtag` `everyone` and `here`' - ) - } - } - - return await editBotProfile(options) - } -} diff --git a/packages/old/plugins/validations/src/misc/mod.ts b/packages/old/plugins/validations/src/misc/mod.ts deleted file mode 100644 index 8abab19b9..000000000 --- a/packages/old/plugins/validations/src/misc/mod.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Bot } from '../../deps.js' -import { editBotProfile } from './editBotProfile.js' - -export function misc (bot: Bot) { - editBotProfile(bot) -} diff --git a/packages/old/plugins/validations/src/stickers/createGuildSticker.ts b/packages/old/plugins/validations/src/stickers/createGuildSticker.ts deleted file mode 100644 index d0ee5b98d..000000000 --- a/packages/old/plugins/validations/src/stickers/createGuildSticker.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Bot } from '../../../../bot.js' - -export function createGuildSticker (bot: Bot) { - const createGuildSticker = bot.helpers.createGuildSticker - bot.helpers.createGuildSticker = async (guildId, options) => { - if (!bot.utils.validateLength(options.name, { min: 2, max: 30 })) { - throw new Error('Sticker name length must be between 2 and 30 characters') - } - // description of the sticker (empty or 2-100 characters) - if (options.description !== '' && !bot.utils.validateLength(options.description, { min: 2, max: 100 })) { - throw new Error( - 'Sticker description must be empty or sticker description length must be between 2 and 100 characters' - ) - } - if (!bot.utils.validateLength(options.tags, { max: 200 })) { - throw new Error('Sticker tags length must be less than 200 characters') - } - return await createGuildSticker(guildId, options) - } -} diff --git a/packages/old/plugins/validations/src/stickers/editGuildSticker.ts b/packages/old/plugins/validations/src/stickers/editGuildSticker.ts deleted file mode 100644 index e12fb92b8..000000000 --- a/packages/old/plugins/validations/src/stickers/editGuildSticker.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { Bot } from '../../../../bot.js' - -export function editGuildSticker (bot: Bot) { - const editGuildSticker = bot.helpers.editGuildSticker - bot.helpers.editGuildSticker = async (guildId, stickerId, options) => { - if (options.name && !bot.utils.validateLength(options.name, { min: 2, max: 30 })) { - throw new Error('Sticker name length must be between 2 and 30 characters') - } - // description of the sticker (empty or 2-100 characters) - if ( - options.description && options.description !== '' && - !bot.utils.validateLength(options.description, { min: 2, max: 100 }) - ) { - throw new Error( - 'Sticker description must be empty or sticker description length must be between 2 and 100 characters' - ) - } - if (options.tags && !bot.utils.validateLength(options.tags, { max: 200 })) { - throw new Error('Sticker tags length must be less than 200 characters') - } - return await editGuildSticker(guildId, stickerId, options) - } -} diff --git a/packages/old/plugins/validations/src/stickers/mod.ts b/packages/old/plugins/validations/src/stickers/mod.ts deleted file mode 100644 index b486fa921..000000000 --- a/packages/old/plugins/validations/src/stickers/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Bot } from '../../../../bot.js' -import { createGuildSticker } from './createGuildSticker.js' -import { editGuildSticker } from './editGuildSticker.js' - -export function stickers (bot: Bot) { - createGuildSticker(bot) - editGuildSticker(bot) -} diff --git a/packages/old/plugins/validations/src/webhooks/createWebhook.ts b/packages/old/plugins/validations/src/webhooks/createWebhook.ts deleted file mode 100644 index 8c22572c6..000000000 --- a/packages/old/plugins/validations/src/webhooks/createWebhook.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Bot } from '../../deps.js' - -export function createWebhook (bot: Bot) { - const createWebhook = bot.helpers.createWebhook - - bot.helpers.createWebhook = async function (channelId, options) { - if ( - // Specific usernames that discord does not allow - options.name === 'clyde' || - !bot.utils.validateLength(options.name, { min: 2, max: 32 }) - ) { - throw new Error( - 'The webhook name can not be clyde and it must be between 2 and 32 characters long.' - ) - } - - return await createWebhook(channelId, options) - } -} diff --git a/packages/old/plugins/validations/src/webhooks/editWebhook.ts b/packages/old/plugins/validations/src/webhooks/editWebhook.ts deleted file mode 100644 index 1b3393dbe..000000000 --- a/packages/old/plugins/validations/src/webhooks/editWebhook.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Bot } from '../../deps.js' - -export function editWebhook (bot: Bot) { - const editWebhook = bot.helpers.editWebhook - - bot.helpers.editWebhook = async function (webhookId, options) { - if (options.name) { - if ( - // Specific usernames that discord does not allow - options.name === 'clyde' || - !bot.utils.validateLength(options.name, { min: 2, max: 32 }) - ) { - throw new Error( - 'The webhook name can not be clyde and it must be between 2 and 32 characters long.' - ) - } - } - - return await editWebhook(webhookId, options) - } -} diff --git a/packages/old/plugins/validations/src/webhooks/editWebhookMessage.ts b/packages/old/plugins/validations/src/webhooks/editWebhookMessage.ts deleted file mode 100644 index be369cf1d..000000000 --- a/packages/old/plugins/validations/src/webhooks/editWebhookMessage.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { Bot } from '../../deps.js'; -import { AllowedMentionsTypes } from '../../deps.js' -import { validateComponents } from '../components.js' - -export function editWebhookMessage (bot: Bot) { - const editWebhookMessage = bot.helpers.editWebhookMessage - - bot.helpers.editWebhookMessage = async function (webhookId, webhookToken, messageId, options) { - if (options.content && !bot.utils.validateLength(options.content, { max: 2000 })) { - throw Error('The content can not exceed 2000 characters.') - } - - if ((options.embeds) && options.embeds.length > 10) options.embeds.splice(10) - - if (options.allowedMentions) { - if (options.allowedMentions.users?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.UserMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'users') - } - - if (options.allowedMentions.users.length > 100) { - options.allowedMentions.users = options.allowedMentions.users.slice(0, 100) - } - } - - if (options.allowedMentions.roles?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.RoleMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'roles') - } - - if (options.allowedMentions.roles.length > 100) { - options.allowedMentions.roles = options.allowedMentions.roles.slice(0, 100) - } - } - } - - if (options.components) validateComponents(bot, options.components) - - return await editWebhookMessage(webhookId, webhookToken, messageId, options) - } -} diff --git a/packages/old/plugins/validations/src/webhooks/mod.ts b/packages/old/plugins/validations/src/webhooks/mod.ts deleted file mode 100644 index 08acdaf95..000000000 --- a/packages/old/plugins/validations/src/webhooks/mod.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Bot } from '../../deps.js' -import { createWebhook } from './createWebhook.js' -import { editWebhook } from './editWebhook.js' -import { editWebhookMessage } from './editWebhookMessage.js' -import { sendWebhookMessage } from './sendWebhookMessage.js' - -export function webhooks (bot: Bot) { - createWebhook(bot) - editWebhookMessage(bot) - editWebhook(bot) - sendWebhookMessage(bot) -} diff --git a/packages/old/plugins/validations/src/webhooks/sendWebhookMessage.ts b/packages/old/plugins/validations/src/webhooks/sendWebhookMessage.ts deleted file mode 100644 index 816d968ae..000000000 --- a/packages/old/plugins/validations/src/webhooks/sendWebhookMessage.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { Bot } from '../../deps.js'; -import { AllowedMentionsTypes } from '../../deps.js' -import { validateComponents } from '../components.js' - -export function sendWebhookMessage (bot: Bot) { - const sendWebhookMessage = bot.helpers.sendWebhookMessage - - bot.helpers.sendWebhookMessage = async function (webhookId, webhookToken, options) { - if (options.content && !bot.utils.validateLength(options.content, { max: 2000 })) { - throw new Error('The content should not exceed 2000 characters.') - } - - if (options.allowedMentions) { - if (options.allowedMentions.users?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.UserMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'users') - } - - if (options.allowedMentions.users.length > 100) { - options.allowedMentions.users = options.allowedMentions.users.slice(0, 100) - } - } - - if (options.allowedMentions.roles?.length) { - if (options.allowedMentions.parse?.includes(AllowedMentionsTypes.RoleMentions)) { - options.allowedMentions.parse = options.allowedMentions.parse.filter((p) => p !== 'roles') - } - - if (options.allowedMentions.roles.length > 100) { - options.allowedMentions.roles = options.allowedMentions.roles.slice(0, 100) - } - } - } - - if (options.components) validateComponents(bot, options.components) - - if (!options.content && (options.file == null) && (options.embeds == null)) { - throw new Error('You must provide a value for at least one of content, embeds, or file.') - } - - return await sendWebhookMessage(webhookId, webhookToken, options) - } -} diff --git a/packages/old/plugins/validations/tests/empty.spec.ts b/packages/old/plugins/validations/tests/empty.spec.ts deleted file mode 100644 index f0a766d36..000000000 --- a/packages/old/plugins/validations/tests/empty.spec.ts +++ /dev/null @@ -1 +0,0 @@ -export { } diff --git a/packages/old/plugins/validations/tsconfig.json b/packages/old/plugins/validations/tsconfig.json deleted file mode 100644 index 50e6ef6eb..000000000 --- a/packages/old/plugins/validations/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "tsconfig/base.json", - "compilerOptions": { - "outDir": "./dist", - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist", - "test", - "tests" - ] -} \ No newline at end of file diff --git a/packages/old/plugins/validations/tsconfig.test.json b/packages/old/plugins/validations/tsconfig.test.json deleted file mode 100644 index eeb80c521..000000000 --- a/packages/old/plugins/validations/tsconfig.test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "tsconfig/test.json", - "include": [ - "tests", - ], - "exclude": [ - "node_modules", - "dist", - "src" - ] -} \ No newline at end of file diff --git a/packages/old/rest/.c8rc.json b/packages/old/rest/.c8rc.json deleted file mode 100644 index f135073e4..000000000 --- a/packages/old/rest/.c8rc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "all": true, - "src": "src", - "reporter": ["text", "lcov"], - "include": ["src/**/*.ts"], - "exclude": ["tests"] -} diff --git a/packages/old/rest/.mocharc.json b/packages/old/rest/.mocharc.json deleted file mode 100644 index 4689d4a04..000000000 --- a/packages/old/rest/.mocharc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": "ts-node/register", - "loader": "ts-node/esm", - "recursive": true, - "timeout": 2000, - "watch-extensions": "ts", - "watch-files": ["src", "tests"], - "enable-source-maps": true, - "parallel": false -} diff --git a/packages/old/rest/.swcrc b/packages/old/rest/.swcrc deleted file mode 100644 index 5ae43bb99..000000000 --- a/packages/old/rest/.swcrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "minify": true, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2022", - "keepClassNames": true, - "loose": true, - "minify": { - "compress": { - "unused": true - }, - "mangle": true - } - }, - "module": { - "type": "es6", - "strict": false, - "strictMode": true, - "lazy": false, - "noInterop": false - }, - "sourceMaps": "inline" -} \ No newline at end of file diff --git a/packages/old/rest/README.md b/packages/old/rest/README.md deleted file mode 100644 index 461a3265e..000000000 --- a/packages/old/rest/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Discordeno Rest - -A standalone and server-less REST module with functionality of REST, independently. - -- Easily host on any serverless infrastructure. - - Easy to use and setup with Cloudflare Workers (FREE for 100K requests per day!) -- Freedom from global rate limit errors - - As your bot grows, you want to handle global rate limits better. Shards don't communicate fast enough to truly - handle it properly so this allows 1 rest handler across the entire bot. - - In fact, you can host multiple instances of your bot and all connect to the same rest server. -- REST does not rest! - - Separate rest means if your bot for whatever reason crashes, your requests that are queued will still keep going and - will not be lost. - - Seamless updates! When you want to update and reboot the bot, you could potentially lose tons of messages or - responses that are in queue. Using this you could restart your bot without ever worrying about losing any responses. -- Scalability! Scalability! Scalability! diff --git a/packages/old/rest/package.json b/packages/old/rest/package.json deleted file mode 100644 index 719432a02..000000000 --- a/packages/old/rest/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@discordeno/rest", - "version": "18.0.0-alpha.1", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "type": "module", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/discordeno/discordeno.git" - }, - "scripts": { - "build": "swc --delete-dir-on-start src --out-dir dist", - "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist", - "release-build": "yarn build && yarn build:type", - "fmt": "eslint --fix \"src/**/*.ts*\"", - "lint": "eslint \"src/**/*.ts*\"", - "test:unit-coverage": "c8 mocha --no-warnings 'tests/unit/**/*.spec.ts'", - "test:unit": "c8 --r lcov mocha --no-warnings 'tests/unit/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js rest", - "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist/unit", - "test:e2e": "c8 --r lcov mocha --no-warnings --jobs 1 --t 30000 'tests/e2e/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js rest", - "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/unit/**/*.spec.ts'", - "test:type": "tsc --noEmit", - "test:test-type": "tsc --project tsconfig.test.json" - }, - "dependencies": { - "@discordeno/constant": "18.0.0-alpha.1", - "@discordeno/transformer": "18.0.0-alpha.1", - "@discordeno/utils": "18.0.0-alpha.1", - "dotenv": "^16.0.3" - }, - "devDependencies": { - "@discordeno/types": "18.0.0-alpha.1", - "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.21", - "@types/chai": "^4", - "@types/chai-as-promised": "^7", - "@types/mocha": "^10", - "@types/node": "^18.11.9", - "@types/sinon": "^10.0.13", - "c8": "^7.12.0", - "chai": "^4.3.7", - "chai-as-promised": "^7.1.1", - "eslint": "^8.0.1", - "eslint-config-discordeno": "*", - "mocha": "^10.1.0", - "sinon": "^15.0.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "typescript": "^4.9.3", - "why-is-node-running": "^2.2.2" - } -} \ No newline at end of file diff --git a/packages/old/rest/src/README.md b/packages/old/rest/src/README.md deleted file mode 100644 index 461a3265e..000000000 --- a/packages/old/rest/src/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Discordeno Rest - -A standalone and server-less REST module with functionality of REST, independently. - -- Easily host on any serverless infrastructure. - - Easy to use and setup with Cloudflare Workers (FREE for 100K requests per day!) -- Freedom from global rate limit errors - - As your bot grows, you want to handle global rate limits better. Shards don't communicate fast enough to truly - handle it properly so this allows 1 rest handler across the entire bot. - - In fact, you can host multiple instances of your bot and all connect to the same rest server. -- REST does not rest! - - Separate rest means if your bot for whatever reason crashes, your requests that are queued will still keep going and - will not be lost. - - Seamless updates! When you want to update and reboot the bot, you could potentially lose tons of messages or - responses that are in queue. Using this you could restart your bot without ever worrying about losing any responses. -- Scalability! Scalability! Scalability! diff --git a/packages/old/rest/src/checkRateLimits.ts b/packages/old/rest/src/checkRateLimits.ts deleted file mode 100644 index eba711616..000000000 --- a/packages/old/rest/src/checkRateLimits.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { RestManager } from './restManager.js' - -/** Check the rate limits for a url or a bucket. */ -export function checkRateLimits ( - rest: RestManager, - url: string -): number | false { - const ratelimited = rest.rateLimitedPaths.get(url) - const global = rest.rateLimitedPaths.get('global') - const now = Date.now() - - if (ratelimited !== undefined && now < ratelimited.resetTimestamp) { - return ratelimited.resetTimestamp - now - } - if (global !== undefined && now < global.resetTimestamp) { - return global.resetTimestamp - now - } - - return false -} diff --git a/packages/old/rest/src/cleanupQueues.ts b/packages/old/rest/src/cleanupQueues.ts deleted file mode 100644 index c655671d1..000000000 --- a/packages/old/rest/src/cleanupQueues.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { QueueBucket } from './createQueueBucket.js' -import type { RestManager } from './restManager.js' - -/** Cleans up the queues by checking if there is nothing left and removing it. */ -export function cleanupQueues (rest: RestManager): void { - for (const [key, queue] of rest.pathQueues) { - // rest.debug(`[REST - cleanupQueues] Running for of loop. ${key}`); - if (!isQueueClearable(queue)) continue - - // REMOVE IT FROM CACHE - setTimeout(() => { - clearQueue(rest, key, queue) - }, 5000) - } - - // NO QUEUE LEFT, DISABLE THE QUEUE - if (rest.pathQueues.size === 0) rest.processingQueue = false -} - -export function clearQueue ( - rest: RestManager, - key: string, - queue: QueueBucket -): void { - if (!isQueueClearable(queue)) return - - rest.pathQueues.delete(key) -} - -export function isQueueClearable (queue: QueueBucket): boolean { - if (queue.firstRequest) return false - if (queue.waiting.length > 0) return false - if (queue.pending.length > 0) return false - if (queue.interval === 0) return false - if (queue.processing) return false - if (queue.processingPending) return false - - return true -} diff --git a/packages/old/rest/src/convertRestError.ts b/packages/old/rest/src/convertRestError.ts deleted file mode 100644 index ddf86a7ce..000000000 --- a/packages/old/rest/src/convertRestError.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { RestRequestRejection } from './rest.js' - -export function convertRestError ( - errorStack: Error, - data: RestRequestRejection -): Error { - errorStack.message = `[${data.status}] ${data.error}\n${data.body ?? ''}` - return errorStack -} diff --git a/packages/old/rest/src/createInvalidRequestBucket.ts b/packages/old/rest/src/createInvalidRequestBucket.ts deleted file mode 100644 index 4457f1013..000000000 --- a/packages/old/rest/src/createInvalidRequestBucket.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { delay } from '@discordeno/utils' - -/** - * A invalid request bucket is used in a similar manner as a leaky bucket but a invalid request bucket can be refilled as needed. - * It's purpose is to make sure the bot does not hit the limit to getting a 1 hr ban. - * - * @param options The options used to configure this bucket. - * @returns RefillingBucket - */ -export function createInvalidRequestBucket(options: InvalidRequestBucketOptions): InvalidRequestBucket { - const bucket: InvalidRequestBucket = { - current: options.current ?? 0, - max: options.max ?? 10000, - interval: options.interval ?? 600000, - timeoutId: options.timeoutId, - safety: options.safety ?? 1, - errorStatuses: options.errorStatuses ?? [401, 403, 429], - requested: options.requested ?? 0, - processing: false, - - waiting: [], - - requestsAllowed: function () { - return bucket.max - bucket.current - bucket.requested - bucket.safety - }, - - isRequestAllowed: function () { - return bucket.requestsAllowed() > 0 - }, - - waitUntilRequestAvailable: async function () { - // eslint-disable-next-line no-async-promise-executor - return await new Promise(async (resolve) => { - // If whatever amount of requests is left is more than the safety margin, allow the request - if (bucket.isRequestAllowed()) { - bucket.requested++ - resolve() - } else { - bucket.waiting.push(resolve) - await bucket.processWaiting() - } - }) - }, - - processWaiting: async function () { - // If already processing, that loop will handle all waiting requests. - if (bucket.processing) { - return - } - - // Mark as processing so other loops don't start - bucket.processing = true - - while (bucket.waiting.length > 0) { - if (bucket.isRequestAllowed()) { - bucket.requested++ - // Resolve the next item in the queue - bucket.waiting.shift()?.() - } else { - await delay(1000) - } - } - - // Mark as false so next pending request can be triggered by new loop. - bucket.processing = false - }, - - handleCompletedRequest: function (code, sharedScope) { - // Since request is complete, we can remove one from requested. - bucket.requested-- - // Since it is as a valid request, we don't need to do anything - if (!bucket.errorStatuses.includes(code)) return - // Shared scope is not considered invalid - if (code === 429 && sharedScope) return - - // INVALID REQUEST WAS MADE - - // Mark a request has been invalid - bucket.current++ - // If a timeout was not started, start a timeout to reset this bucket - if (bucket.timeoutId === undefined) { - bucket.timeoutId = setTimeout(() => { - bucket.current = 0 - bucket.timeoutId = undefined - }, bucket.interval) - } - }, - } - - return bucket -} - -export interface InvalidRequestBucketOptions { - /** current invalid amount */ - current?: number - /** max invalid requests allowed until ban. Defaults to 10,000 */ - max?: number - /** The time that discord allows to make the max number of invalid requests. Defaults to 10 minutes */ - interval?: number - /** timer to reset to 0 */ - timeoutId?: NodeJS.Timeout - /** how safe to be from max. Defaults to 1 */ - safety?: number - /** The request statuses that count as an invalid request. */ - errorStatuses?: number[] - /** The amount of requests that were requested from this bucket. */ - requested?: number -} - -export interface InvalidRequestBucket { - /** current invalid amount */ - current: number - /** max invalid requests allowed until ban. Defaults to 10,000 */ - max: number - /** The time that discord allows to make the max number of invalid requests. Defaults to 10 minutes */ - interval: number - /** timer to reset to 0 */ - timeoutId: NodeJS.Timeout | undefined - /** how safe to be from max. Defaults to 1 */ - safety: number - /** The request statuses that count as an invalid request. */ - errorStatuses: number[] - /** The amount of requests that were requested from this bucket. */ - requested: number - /** The requests that are currently pending. */ - waiting: Array<(value: void | PromiseLike) => void> - /** Whether or not the waiting queue is already processing. */ - processing: boolean - - /** Gives the number of requests that are currently allowed. */ - requestsAllowed: () => number - /** Checks if a request is allowed at this time. */ - isRequestAllowed: () => boolean - /** Waits until a request is available */ - waitUntilRequestAvailable: () => Promise - /** Begins processing the waiting queue of requests. */ - processWaiting: () => Promise - /** Handler for whenever a request is validated. This should update the requested values or trigger any other necessary stuff. */ - handleCompletedRequest: (code: number, sharedScope: boolean) => void -} diff --git a/packages/old/rest/src/createQueueBucket.ts b/packages/old/rest/src/createQueueBucket.ts deleted file mode 100644 index bb3990d16..000000000 --- a/packages/old/rest/src/createQueueBucket.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { delay } from '@discordeno/utils' -import type { RestPayload, RestRequest } from './rest.js' -import type { RestManager } from './restManager.js' - -/** - * A queue bucket is used in a similar manner as a leaky bucket. - * - * @param options The options used to configure this bucket. - * @returns RefillingBucket - */ -export function createQueueBucket ( - rest: RestManager, - options: QueueBucketOptions -): QueueBucket { - const bucket: QueueBucket = { - remaining: options.remaining ?? 1, - max: options.max ?? 1, - interval: options.interval ?? 0, - timeoutId: options.timeoutId, - processing: false, - processingPending: false, - firstRequest: true, - - waiting: [], - pending: [], - - isRequestAllowed: function () { - return bucket.remaining > 0 - }, - - waitUntilRequestAvailable: async function () { - // eslint-disable-next-line no-async-promise-executor - return await new Promise(async (resolve) => { - // If whatever amount of requests is left is more than the safety margin, allow the request - if (bucket.isRequestAllowed()) { - // bucket.remaining++; - resolve() - } else { - bucket.waiting.push(resolve) - await bucket.processWaiting() - } - }) - }, - - processWaiting: async function () { - // If already processing, that loop will handle all waiting requests. - if (bucket.processing) { - return - } - - // Mark as processing so other loops don't start - bucket.processing = true - - while (bucket.waiting.length > 0) { - if (bucket.isRequestAllowed()) { - // Resolve the next item in the queue - bucket.waiting.shift()?.() - } else { - await delay(1000) - } - } - - // Mark as false so next pending request can be triggered by new loop. - bucket.processing = false - }, - - processPending: async function () { - // If already processing, that loop will handle all pending requests. - if (bucket.processingPending) { - return - } - - // Mark as processing so other loops don't start - bucket.processingPending = true - - while (bucket.pending.length > 0) { - if (bucket.firstRequest || bucket.isRequestAllowed()) { - const queuedRequest = bucket.pending[0] - if (queuedRequest) { - const basicURL = rest.simplifyUrl( - queuedRequest.request.url, - queuedRequest.request.method - ) - - // IF THIS URL IS STILL RATE LIMITED, TRY AGAIN - const urlResetIn = rest.checkRateLimits(rest, basicURL) - if (urlResetIn !== false) { - setTimeout(() => { - bucket.processPending() - }, urlResetIn) - break - } - - // IF A BUCKET EXISTS, CHECK THE BUCKET'S RATE LIMITS - const bucketResetIn = - queuedRequest.payload.bucketId !== undefined - ? rest.checkRateLimits(rest, queuedRequest.payload.bucketId) - : false - if (bucketResetIn !== false) { - setTimeout(() => { - bucket.processPending() - }, bucketResetIn) - break - } - - bucket.firstRequest = false - bucket.remaining-- - - if ( - bucket.timeoutId === undefined && - bucket.remaining === 0 && - bucket.interval !== 0 - ) { - bucket.timeoutId = setTimeout(() => { - bucket.remaining = bucket.max - bucket.timeoutId = undefined - }, bucket.interval) - } - - // Remove from queue, we are executing it. - bucket.pending.shift() - rest.processGlobalQueue(rest, { - ...queuedRequest, - urlToUse: queuedRequest.request.url, - basicURL - }) - } - } else { - await delay(1000) - } - } - - // Mark as false so next pending request can be triggered by new loop. - bucket.processingPending = false - rest.cleanupQueues(rest) - }, - - handleCompletedRequest: function (headers) { - if (headers.max === 0) { - bucket.remaining++ - return - } - bucket.max = headers.max - bucket.interval = headers.interval - bucket.remaining = headers.remaining - - if (bucket.remaining <= 1) { - bucket.timeoutId = setTimeout(() => { - bucket.remaining = bucket.max - bucket.timeoutId = undefined - }, headers.interval) - } - }, - - makeRequest: async function (options: BucketRequest) { - await bucket.waitUntilRequestAvailable() - bucket.pending.push(options) - bucket.processPending() - } - } - - return bucket -} - -export interface QueueBucketOptions { - /** How many requests are remaining. Defaults to 1 */ - remaining?: number - /** Max number of requests allowed in this bucket. Defaults to 1. */ - max?: number - /** The time in milliseconds that discord allows to make the max number of invalid requests. Defaults to 0 */ - interval?: number - /** timer to reset to 0 */ - timeoutId?: NodeJS.Timeout -} - -export interface QueueBucket { - /** Amount of requests that have are remaining. Defaults to 1. */ - remaining: number - /** Max requests for this bucket. Defaults to 1. */ - max: number - /** The time that discord allows to make the max number of requests. Defaults to 0 */ - interval: number - /** timer to reset to 0 */ - timeoutId: NodeJS.Timeout | undefined - /** The requests that are currently pending. */ - waiting: Array<(value: void | PromiseLike) => void> - /** The requests that are currently pending. */ - pending: BucketRequest[] - /** Whether or not the waiting queue is already processing. */ - processing: boolean - /** Whether or not the pending queue is already processing. */ - processingPending: boolean - /** Whether the first request is pending. */ - firstRequest: boolean - - /** Checks if a request is allowed at this time. */ - isRequestAllowed: () => boolean - /** Waits until a request is available */ - waitUntilRequestAvailable: () => Promise - /** Begins processing the waiting queue of requests. */ - processWaiting: () => Promise - /** Begins processing the pending queue of requests. */ - processPending: () => Promise - /** Handler for whenever a request is validated. This should update the requested values or trigger any other necessary stuff. */ - handleCompletedRequest: (headers: { - remaining: number - interval: number - max: number - }) => void - /** Adds a request to the queue. */ - makeRequest: (options: BucketRequest) => Promise -} - -export interface BucketRequest { - request: RestRequest - payload: RestPayload -} diff --git a/packages/old/rest/src/createRequestBody.ts b/packages/old/rest/src/createRequestBody.ts deleted file mode 100644 index 88730bde8..000000000 --- a/packages/old/rest/src/createRequestBody.ts +++ /dev/null @@ -1,122 +0,0 @@ -import type { FileContent } from '@discordeno/types' -import { decode, USER_AGENT } from '@discordeno/utils' -import type { RequestMethod } from './rest.js' -import type { RestManager } from './restManager.js' - -/** Creates the request body and headers that are necessary to send a request. Will handle different types of methods and everything necessary for discord. */ -export function createRequestBody ( - rest: RestManager, - options: CreateRequestBodyOptions -): { - headers: Record - body: string | FormData - method: RequestMethod - } { - const headers: Record = { - 'user-agent': USER_AGENT - } - - if (!options.unauthorized) headers.authorization = `Bot ${rest.token}` - - // SOMETIMES SPECIAL HEADERS (E.G. CUSTOM AUTHORIZATION) NEED TO BE USED - if (options.headers) { - for (const key in options.headers) { - headers[key.toLowerCase()] = options.headers[key] - } - } - - // GET METHODS SHOULD NOT HAVE A BODY - if (options.method === 'GET') { - options.body = undefined - } - - // IF A REASON IS PROVIDED ENCODE IT IN HEADERS - if (options.body?.reason) { - headers['X-Audit-Log-Reason'] = encodeURIComponent( - options.body.reason as string - ) - options.body.reason = undefined - } - - // IF A FILE/ATTACHMENT IS PRESENT WE NEED SPECIAL HANDLING - if (options.body?.file) { - const files = findFiles(options.body.file) - - const form = new FormData() - - // WHEN CREATING A STICKER, DISCORD WANTS FORM DATA ONLY - if (options.url?.endsWith('/stickers') && options.method === 'POST') { - form.append('file', files[0].blob, files[0].name) - form.append('name', options.body.name as string) - form.append('description', options.body.description as string) - form.append('tags', options.body.tags as string) - } else { - for (let i = 0; i < files.length; i++) { - form.append(`file${i}`, files[i].blob, files[i].name) - } - - form.append( - 'payload_json', - JSON.stringify({ ...options.body, file: undefined }) - ) - } - - options.body.file = form - } else if (options.body && !['GET', 'DELETE'].includes(options.method)) { - headers['Content-Type'] = 'application/json' - } - - return { - headers, - body: (options.body?.file ?? JSON.stringify(options.body)) as - | FormData - | string, - method: options.method - } -} - -export interface CreateRequestBodyOptions { - headers?: Record - method: RequestMethod - body?: Record - unauthorized?: boolean - url?: string -} - -function findFiles (file: unknown): FileContent[] { - if (!file) { - return [] - } - - const files: unknown[] = Array.isArray(file) ? file : [file] - return files.filter(coerceToFileContent) -} - -function coerceToFileContent (value: unknown): value is FileContent { - if (!value || typeof value !== 'object') { - return false - } - - const file = value as Record - if (typeof file.name !== 'string') { - return false - } - - switch (typeof file.blob) { - case 'string': { - const match = file.blob.match( - /^data:(?[a-zA-Z0-9/]*);base64,(?.*)$/ - ) - if (match?.groups === undefined) { - return false - } - const { mimeType, content } = match.groups - file.blob = new Blob([decode(content)], { type: mimeType }) - return true - } - case 'object': - return file.blob instanceof Blob - default: - return false - } -} diff --git a/packages/old/rest/src/helpers/channels/announcements/followAnnouncementChannel.ts b/packages/old/rest/src/helpers/channels/announcements/followAnnouncementChannel.ts deleted file mode 100644 index 53c3c40af..000000000 --- a/packages/old/rest/src/helpers/channels/announcements/followAnnouncementChannel.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordFollowAnnouncementChannel, DiscordFollowedChannel } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { TRANSFORMERS } from '@discordeno/transformer' - -/** - * Follows an announcement channel, allowing messages posted within it to be cross-posted into the target channel. - * - * @param rest - The rest manager to use to make the request. - * @param sourceChannelId - The ID of the announcement channel to follow. - * @param targetChannelId - The ID of the target channel - the channel to cross-post to. - * @returns An instance of {@link DiscordFollowedChannel}. - * - * @remarks - * Requires the `MANAGE_WEBHOOKS` permission in the __target channel__. - * - * Fires a _Webhooks Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#follow-announcement-channel} - */ -export async function followAnnouncementChannel ( - rest: RestManager, - sourceChannelId: BigString, - targetChannelId: BigString -): Promise { - const result = await rest.runMethod( - 'POST', - routes.CHANNEL_FOLLOW(sourceChannelId), - { - webhook_channel_id: targetChannelId - } as DiscordFollowAnnouncementChannel - ) - - return TRANSFORMERS.followedChannel(result) -} diff --git a/packages/old/rest/src/helpers/channels/announcements/index.ts b/packages/old/rest/src/helpers/channels/announcements/index.ts deleted file mode 100644 index 3bab59960..000000000 --- a/packages/old/rest/src/helpers/channels/announcements/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './followAnnouncementChannel.js' diff --git a/packages/old/rest/src/helpers/channels/createChannel.ts b/packages/old/rest/src/helpers/channels/createChannel.ts deleted file mode 100644 index 8631d800e..000000000 --- a/packages/old/rest/src/helpers/channels/createChannel.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordChannel, - DiscordCreateGuildChannel, - OverwriteReadable, - SortOrderTypes, - WithReason -} from '@discordeno/types' -import { ChannelTypes } from '@discordeno/types' -import { calculateBits } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Creates a channel within a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to create the channel within. - * @param options - The parameters for the creation of the channel. - * @returns An instance of the created {@link DiscordChannel}. - * - * @remarks - * Requires the `MANAGE_CHANNELS` permission. - * - * If setting permission overwrites, only the permissions the bot user has in the guild can be allowed or denied. - * - * Setting the `MANAGE_ROLES` permission is only possible for guild administrators. - * - * Fires a _Channel Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#create-guild-channel} - */ -export async function createChannel ( - rest: RestManager, - guildId: BigString, - options: CreateGuildChannel -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.GUILD_CHANNELS(guildId), - options - ? ({ - name: options.name, - topic: options.topic, - bitrate: options.bitrate, - user_limit: options.userLimit, - rate_limit_per_user: options.rateLimitPerUser, - position: options.position, - parent_id: options.parentId?.toString(), - nsfw: options.nsfw, - permission_overwrites: options?.permissionOverwrites?.map( - (overwrite) => ({ - id: overwrite.id.toString(), - type: overwrite.type, - allow: overwrite.allow ? calculateBits(overwrite.allow) : null, - deny: overwrite.deny ? calculateBits(overwrite.deny) : null - }) - ), - type: options?.type ?? ChannelTypes.GuildText, - default_sort_order: options.defaultSortOrder, - reason: options.reason, - default_auto_archive_duration: options?.defaultAutoArchiveDuration, - default_reaction_emoji: options.defaultReactionEmoji - ? { - emoji_id: options.defaultReactionEmoji.emojiId - ? options.defaultReactionEmoji.emojiId.toString() - : options.defaultReactionEmoji.emojiId, - emoji_name: options.defaultReactionEmoji.emojiName - } - : undefined, - - available_tags: options.availableTags - ? options.availableTags.map((availableTag) => ({ - id: availableTag.id.toString(), - name: availableTag.name, - moderated: availableTag.moderated, - emoji_name: availableTag.emojiName, - emoji_id: availableTag.emojiId - ? availableTag.emojiId.toString() - : undefined - })) - : undefined - } as DiscordCreateGuildChannel) - : {} - ) - - return TRANSFORMERS.channel(result) -} - -export interface CreateGuildChannel extends WithReason { - /** Channel name (1-100 characters) */ - name: string - /** The type of channel */ - type?: ChannelTypes - /** Channel topic (0-1024 characters) */ - topic?: string - /** The bitrate (in bits) of the voice channel (voice only) */ - bitrate?: number - /** The user limit of the voice channel (voice only) */ - userLimit?: number - /** Amount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission `manage_messages` or `manage_channel`, are unaffected */ - rateLimitPerUser?: number - /** Sorting position of the channel */ - position?: number - /** The channel's permission overwrites */ - permissionOverwrites?: OverwriteReadable[] - /** Id of the parent category for a channel */ - parentId?: BigString - /** Whether the channel is nsfw */ - nsfw?: boolean - /** Default duration (in minutes) that clients (not the API) use for newly created threads in this channel, to determine when to automatically archive the thread after the last activity */ - defaultAutoArchiveDuration?: number - /** Emoji to show in the add reaction button on a thread in a forum channel */ - defaultReactionEmoji?: { - /** The id of a guild's custom emoji. Exactly one of `emojiId` and `emojiName` must be set. */ - emojiId?: BigString | null - /** The unicode character of the emoji. Exactly one of `emojiId` and `emojiName` must be set. */ - emojiName?: string | null - } - /** Set of tags that can be used in a forum channel */ - availableTags?: Array<{ - /** The id of the tag */ - id: BigString - /** The name of the tag (0-20 characters) */ - name: string - /** whether this tag can only be added to or removed from threads by a member with the MANAGE_THREADS permission */ - moderated: boolean - /** The id of a guild's custom emoji */ - emojiId: BigString - /** The unicode character of the emoji */ - emojiName?: string - }> - /** the default sort order type used to order posts in forum channels */ - defaultSortOrder?: SortOrderTypes | null -} diff --git a/packages/old/rest/src/helpers/channels/deleteChannel.ts b/packages/old/rest/src/helpers/channels/deleteChannel.ts deleted file mode 100644 index 19953c330..000000000 --- a/packages/old/rest/src/helpers/channels/deleteChannel.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Deletes a channel from within a guild. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to delete. - * @returns An instance of the deleted {@link Channel}. - * - * @remarks - * For community guilds, the _Rules_, _Guidelines_ and _Community Update_ channels cannot be deleted. - * - * If the channel is a thread: - * - Requires the `MANAGE_THREADS` permission. - * - * - Fires a _Thread Delete_ gateway event. - * - * Otherwise: - * - Requires the `MANAGE_CHANNELS` permission. - * - * - ⚠️ Deleting a category channel does not delete its child channels. - * Instead, they will have their `parent_id` property removed, and a `Channel Update` gateway event will fire for each of them. - * - * - Fires a _Channel Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#deleteclose-channel} - */ -export async function deleteChannel ( - rest: RestManager, - channelId: BigString, - reason?: string -): Promise { - return await rest.runMethod('DELETE', routes.CHANNEL(channelId), { reason }) -} diff --git a/packages/old/rest/src/helpers/channels/deleteChannelPermissionOverride.ts b/packages/old/rest/src/helpers/channels/deleteChannelPermissionOverride.ts deleted file mode 100644 index eb33fdb26..000000000 --- a/packages/old/rest/src/helpers/channels/deleteChannelPermissionOverride.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Deletes a permission override for a user or role in a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to delete the permission override of. - * @param overwriteId - The ID of the permission override to delete. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Fires a _Channel Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#delete-channel-permission} - */ -export async function deleteChannelPermissionOverride ( - rest: RestManager, - channelId: BigString, - overwriteId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - 'DELETE', - routes.CHANNEL_OVERWRITE(channelId, overwriteId), - reason ? { reason } : undefined - ) -} diff --git a/packages/old/rest/src/helpers/channels/editChannel.ts b/packages/old/rest/src/helpers/channels/editChannel.ts deleted file mode 100644 index ad9d4a9e6..000000000 --- a/packages/old/rest/src/helpers/channels/editChannel.ts +++ /dev/null @@ -1,249 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - ChannelTypes, - DiscordChannel, - DiscordModifyChannel, - OverwriteReadable, - SortOrderTypes, - VideoQualityModes, - WithReason -} from '@discordeno/types' -import { calculateBits } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' -import { snakeToCamelCaseNested } from '../../transformer.js' - -/** - * Edits a channel's settings. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to edit. - * @param options - The parameters for the edit of the channel. - * @returns An instance of the edited {@link DiscordChannel}. - * - * @remarks - * If editing a channel of type {@link ChannelTypes.GroupDm}: - * - Fires a _Channel Update_ gateway event. - * - * If editing a thread channel: - * - Requires the `MANAGE_THREADS` permission __unless__ if setting the `archived` property to `false` when the `locked` property is also `false`, in which case only the `SEND_MESSAGES` permission is required. - * - * - Fires a _Thread Update_ gateway event. - * - * If editing a guild channel: - * - Requires the `MANAGE_CHANNELS` permission. - * - * - If modifying permission overrides: - * - Requires the `MANAGE_ROLES` permission. - * - * - Only permissions the bot user has in the guild or parent channel can be allowed/denied __unless__ the bot user has a `MANAGE_ROLES` permission override in the channel. - * - * - If modifying a channel of type {@link ChannelTypes.GuildCategory}: - * - Fires a _Channel Update_ gateway event for each child channel impacted in this change. - * - Otherwise: - * - Fires a _Channel Update_ gateway event. - */ -export async function editChannel ( - rest: RestManager, - channelId: BigString, - options: ModifyChannel -): Promise> { - if (options.name ?? options.topic) { - const request = editChannelNameTopicQueue.get(channelId) - if (request == null) { - // If this hasn't been done before simply add 1 for it - editChannelNameTopicQueue.set(channelId, { - channelId, - amount: 1, - // 10 minutes from now - timestamp: Date.now() + 600000, - items: [] - }) - } else if (request.amount === 1) { - // Start queuing future requests to this channel - request.amount = 2 - request.timestamp = Date.now() + 600000 - } else { - return await new Promise>((resolve, reject) => { - // 2 have already been used add to queue - request.items.push({ channelId, options, resolve, reject }) - if (editChannelProcessing) return - editChannelProcessing = true - processEditChannelQueue(rest) - }) - } - } - - const result = await rest.runMethod( - 'PATCH', - routes.CHANNEL(channelId), - { - name: options.name, - topic: options.topic, - bitrate: options.bitrate, - user_limit: options.userLimit, - rate_limit_per_user: options.rateLimitPerUser, - position: options.position, - parent_id: - options.parentId === null ? null : options.parentId?.toString(), - nsfw: options.nsfw, - type: options.type, - archived: options.archived, - auto_archive_duration: options.autoArchiveDuration, - locked: options.locked, - invitable: options.invitable, - permission_overwrites: options.permissionOverwrites - ? options.permissionOverwrites?.map((overwrite) => ({ - id: overwrite.id.toString(), - type: overwrite.type, - allow: overwrite.allow ? calculateBits(overwrite.allow) : null, - deny: overwrite.deny ? calculateBits(overwrite.deny) : null - })) - : undefined, - available_tags: options.availableTags - ? options.availableTags.map((availableTag) => ({ - id: availableTag.id, - name: availableTag.name, - moderated: availableTag.moderated, - emoji_id: availableTag.emojiId, - emoji_name: availableTag.emojiName - })) - : undefined, - applied_tags: options.appliedTags?.map((appliedTag) => - appliedTag.toString() - ), - default_reaction_emoji: options.defaultReactionEmoji - ? { - emoji_id: options.defaultReactionEmoji.emojiId, - emoji_name: options.defaultReactionEmoji.emojiName - } - : undefined, - default_sort_order: options.defaultSortOrder, - reason: options.reason - } as DiscordModifyChannel - ) - - return snakeToCamelCaseNested(result) -} - -interface EditChannelRequest { - amount: number - timestamp: number - channelId: BigString - items: Array<{ - channelId: BigString - options: ModifyChannel - resolve: (channel: Camelize) => void - // deno-lint-ignore no-explicit-any - reject: (error: any) => void - }> -} - -const editChannelNameTopicQueue = new Map() -let editChannelProcessing = false - -function processEditChannelQueue (rest: RestManager): void { - if (!editChannelProcessing) return - - const now = Date.now() - editChannelNameTopicQueue.forEach((request) => { - (async () => { - rest.debug('Running forEach loop in edit_channel file.') - if (now < request.timestamp) return - // 10 minutes have passed so we can reset this channel again - if (request.items.length === 0) { - editChannelNameTopicQueue.delete(request.channelId) - return - } - request.amount = 0 - // There are items to process for this request - const details = request.items.shift() - - if (details == null) return - - await rest - .editChannel(details.channelId, details.options) - .then((result) => details.resolve(result)) - .catch(details.reject) - const secondDetails = request.items.shift() - if (secondDetails == null) return - - await rest - .editChannel(secondDetails.channelId, secondDetails.options) - .then((result) => secondDetails.resolve(result)) - .catch(secondDetails.reject) - })() - }) - - if (editChannelNameTopicQueue.size) { - setTimeout(() => { - rest.debug('Running setTimeout in EDIT_CHANNEL file.') - processEditChannelQueue(rest) - }, 60000) - } else { - editChannelProcessing = false - } -} - -export interface ModifyChannel extends WithReason { - /** 1-100 character channel name */ - name?: string - /** The type of channel; only conversion between text and news is supported and only in guilds with the "NEWS" feature */ - type?: ChannelTypes - /** The position of the channel in the left-hand listing */ - position?: number | null - /** 0-1024 character channel topic */ - topic?: string | null - /** Whether the channel is nsfw */ - nsfw?: boolean | null - /** Amount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission `manage_messages` or `manage_channel`, are unaffected */ - rateLimitPerUser?: number | null - /** The bitrate (in bits) of the voice channel; 8000 to 96000 (128000 for VIP servers) */ - bitrate?: number | null - /** The user limit of the voice channel; 0 refers to no limit, 1 to 99 refers to a user limit */ - userLimit?: number | null - /** Channel or category-specific permissions */ - permissionOverwrites?: OverwriteReadable[] | null - /** Id of the new parent category for a channel */ - parentId?: BigString | null - /** Voice region id for the voice channel, automatic when set to null */ - rtcRegion?: string | null - /** The camera video quality mode of the voice channel */ - videoQualityMode?: VideoQualityModes - /** Whether the thread is archived */ - archived?: boolean - /** Duration in minutes to automatically archive the thread after recent activity */ - autoArchiveDuration?: 60 | 1440 | 4320 | 10080 - /** When a thread is locked, only users with `MANAGE_THREADS` can unarchive it */ - locked?: boolean - /** whether non-moderators can add other non-moderators to a thread; only available on private threads */ - invitable?: boolean - - /** The set of tags that can be used in a GUILD_FORUM channel */ - availableTags?: Array<{ - /** The id of the tag */ - id: string - /** The name of the tag (0-20 characters) */ - name: string - /** Whether this tag can only be added to or removed from threads by a member with the MANAGE_THREADS permission */ - moderated: boolean - /** The id of a guild's custom emoji At most one of emoji_id and emoji_name may be set. */ - emojiId: string - /** The unicode character of the emoji */ - emojiName: string - }> - /** The IDs of the set of tags that have been applied to a thread in a GUILD_FORUM channel; limited to 5 */ - appliedTags?: BigString[] - /** the emoji to show in the add reaction button on a thread in a GUILD_FORUM channel */ - defaultReactionEmoji?: { - /** The id of a guild's custom emoji */ - emojiId: string - /** The unicode character of the emoji */ - emojiName: string | null - } - /** the initial rate_limit_per_user to set on newly created threads in a channel. this field is copied to the thread at creation time and does not live update. */ - defaultThreadRateLimitPerUser?: number - /** the default sort order type used to order posts in forum channels */ - defaultSortOrder?: SortOrderTypes | null -} diff --git a/packages/old/rest/src/helpers/channels/editChannelPermissionOverrides.ts b/packages/old/rest/src/helpers/channels/editChannelPermissionOverrides.ts deleted file mode 100644 index 87eb1ad41..000000000 --- a/packages/old/rest/src/helpers/channels/editChannelPermissionOverrides.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - DiscordEditChannelPermissionOverridesOptions, - OverwriteReadable, - WithReason -} from '@discordeno/types' -import { calculateBits } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Edits the permission overrides for a user or role in a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to edit the permission overrides of. - * @param options - The permission override. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Only permissions the bot user has in the guild or parent channel can be allowed/denied __unless__ the bot user has a `MANAGE_ROLES` permission override in the channel. - * - * Fires a _Channel Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#edit-channel-permissions} - */ -export async function editChannelPermissionOverrides ( - rest: RestManager, - channelId: BigString, - options: EditChannelPermissionOverridesOptions -): Promise { - return await rest.runMethod( - 'PUT', - routes.CHANNEL_OVERWRITE(channelId, options.id), - { - allow: options.allow ? calculateBits(options.allow) : '0', - deny: options.deny ? calculateBits(options.deny) : '0', - type: options.type, - reason: options.reason - } as DiscordEditChannelPermissionOverridesOptions - ) -} - -export interface EditChannelPermissionOverridesOptions - extends OverwriteReadable, - WithReason {} diff --git a/packages/old/rest/src/helpers/channels/editChannelPositions.ts b/packages/old/rest/src/helpers/channels/editChannelPositions.ts deleted file mode 100644 index 079bfc0a7..000000000 --- a/packages/old/rest/src/helpers/channels/editChannelPositions.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordModifyGuildChannelPositions } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -export const swapChannels = editChannelPositions - -/** - * Edits the positions of a set of channels in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild in which to edit the positions of the channels. - * @param channelPositions - A set of objects defining the updated positions of the channels. - * - * @remarks - * Requires the `MANAGE_CHANNELS` permission. - * - * Fires a _Channel Update_ gateway event for every channel impacted in this change. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions} - */ -export async function editChannelPositions ( - rest: RestManager, - guildId: BigString, - channelPositions: ModifyGuildChannelPositions[] -): Promise { - return await rest.runMethod( - 'PATCH', - routes.GUILD_CHANNELS(guildId), - channelPositions.map((channelPosition) => ({ - id: channelPosition.id.toString(), - position: channelPosition.position, - lock_positions: channelPosition.lockPositions, - parent_id: channelPosition.parentId?.toString() - })) as DiscordModifyGuildChannelPositions[] - ) -} - -/** https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions */ -export interface ModifyGuildChannelPositions { - /** Channel id */ - id: BigString - /** Sorting position of the channel */ - position: number | null - /** Syncs the permission overwrites with the new parent, if moving to a new category */ - lockPositions?: boolean | null - /** The new parent ID for the channel that is moved */ - parentId?: BigString | null -} diff --git a/packages/old/rest/src/helpers/channels/forums/createForumThread.ts b/packages/old/rest/src/helpers/channels/forums/createForumThread.ts deleted file mode 100644 index bf63d6ede..000000000 --- a/packages/old/rest/src/helpers/channels/forums/createForumThread.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - AllowedMentions, - BigString, - Camelize, - DiscordChannel, - DiscordCreateForumPostWithMessage, - FileContent, - MessageComponents, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { Embed } from '../../../transformers/embed.js' - -/** - * Creates a new thread in a forum channel, and sends a message within the created thread. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the forum channel to create the thread within. - * @param options - The parameters for the creation of the thread. - * @returns An instance of {@link DiscordChannel} with a nested {@link Message} object. - * - * @remarks - * Requires the `CREATE_MESSAGES` permission. - * - * Fires a _Thread Create_ gateway event. - * Fires a _Message Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#start-thread-in-forum-channel} - * - * @experimental - */ -export async function createForumThread ( - rest: RestManager, - channelId: BigString, - options: CreateForumPostWithMessage -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.FORUM_START(channelId), - { - name: options.name, - auto_archive_duration: options.autoArchiveDuration, - rate_limit_per_user: options.rateLimitPerUser, - reason: options.reason, - message: { - content: options.content, - embeds: options.embeds?.map((embed) => - TRANSFORMERS.reverse.embed(rest, embed) - ), - allowed_mentions: options.allowedMentions - ? { - parse: options.allowedMentions?.parse, - roles: options.allowedMentions?.roles?.map((id) => id.toString()), - users: options.allowedMentions?.users?.map((id) => id.toString()), - replied_user: options.allowedMentions?.repliedUser - } - : undefined, - components: options.components?.map((component) => - TRANSFORMERS.reverse.component(rest, component) - ), - file: options.file - } - } as DiscordCreateForumPostWithMessage - ) - - return TRANSFORMERS.channel(result) -} - -export interface CreateForumPostWithMessage extends WithReason { - /** 1-100 character thread name */ - name: string - /** Duration in minutes to automatically archive the thread after recent activity */ - autoArchiveDuration: 60 | 1440 | 4320 | 10080 - /** Amount of seconds a user has to wait before sending another message (0-21600) */ - rateLimitPerUser?: number | null - /** The message contents (up to 2000 characters) */ - content?: string - /** Embedded `rich` content (up to 6000 characters) */ - embeds?: Embed[] - /** Allowed mentions for the message */ - allowedMentions?: AllowedMentions - /** The contents of the file being sent */ - file?: FileContent | FileContent[] - /** The components you would like to have sent in this message */ - components?: MessageComponents -} diff --git a/packages/old/rest/src/helpers/channels/forums/index.ts b/packages/old/rest/src/helpers/channels/forums/index.ts deleted file mode 100644 index 6849b18bf..000000000 --- a/packages/old/rest/src/helpers/channels/forums/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './createForumThread.js' diff --git a/packages/old/rest/src/helpers/channels/getChannel.ts b/packages/old/rest/src/helpers/channels/getChannel.ts deleted file mode 100644 index 8ce839a13..000000000 --- a/packages/old/rest/src/helpers/channels/getChannel.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, Camelize, DiscordChannel } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import { snakeToCamelCaseNested } from '../../transformer.js' - -/** - * Gets a channel by its ID. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to get. - * @returns An instance of {@link DiscordChannel}. - * - * @remarks - * If the channel is a thread, a {@link ThreadMember} object is included in the result. - * - * @see {@link https://discord.com/developers/docs/resources/channel#get-channel} - */ -export async function getChannel ( - rest: RestManager, - channelId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.CHANNEL(channelId) - ) - - // IF A CHANNEL DOESN'T EXIST, DISCORD RETURNS `{}` - return snakeToCamelCaseNested(result) -} diff --git a/packages/old/rest/src/helpers/channels/getChannelInvites.ts b/packages/old/rest/src/helpers/channels/getChannelInvites.ts deleted file mode 100644 index 969decafa..000000000 --- a/packages/old/rest/src/helpers/channels/getChannelInvites.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordInviteMetadata -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' -import { snakeToCamelCaseNested } from '../../transformer.js' - -/** - * Gets the list of invites for a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to get the invites of. - * @returns A collection of {@link DiscordInviteMetadata} objects assorted by invite code. - * - * @remarks - * Requires the `MANAGE_CHANNELS` permission. - * - * Only usable for guild channels. - * - * @see {@link https://discord.com/developers/docs/resources/channel#get-channel-invites} - */ -export async function getChannelInvites ( - rest: RestManager, - channelId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.CHANNEL_INVITES(channelId) - ) - - return new Collection( - results.map<[string, Camelize]>((result) => { - return [result.code, snakeToCamelCaseNested(result)] - }) - ) -} diff --git a/packages/old/rest/src/helpers/channels/getChannels.ts b/packages/old/rest/src/helpers/channels/getChannels.ts deleted file mode 100644 index 36c155b2a..000000000 --- a/packages/old/rest/src/helpers/channels/getChannels.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, Camelize, DiscordChannel } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' -import { snakeToCamelCaseNested } from '../../transformer.js' - -/** - * Gets the list of channels for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the channels of. - * @returns A collection of {@link DiscordChannel} objects assorted by channel ID. - * - * @remarks - * Excludes threads. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-channels} - */ -export async function getChannels ( - rest: RestManager, - guildId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_CHANNELS(guildId) - ) - - return new Collection( - results.map((result) => { - const channel = snakeToCamelCaseNested(result) - return [channel.id, channel] - }) - ) -} diff --git a/packages/old/rest/src/helpers/channels/index.ts b/packages/old/rest/src/helpers/channels/index.ts deleted file mode 100644 index 6eb1a0513..000000000 --- a/packages/old/rest/src/helpers/channels/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -export * from './announcements/index.js' -export * from './createChannel.js' -export * from './deleteChannel.js' -export * from './deleteChannelPermissionOverride.js' -export * from './editChannel.js' -export * from './editChannelPermissionOverrides.js' -export * from './editChannelPositions.js' -export * from './forums/index.js' -export * from './getChannel.js' -export * from './getChannelInvites.js' -export * from './getChannels.js' -export * from './stages/index.js' -export * from './threads/index.js' -export * from './triggerTypingIndicator.js' diff --git a/packages/old/rest/src/helpers/channels/stages/createStageInstance.ts b/packages/old/rest/src/helpers/channels/stages/createStageInstance.ts deleted file mode 100644 index 502334aeb..000000000 --- a/packages/old/rest/src/helpers/channels/stages/createStageInstance.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordStageInstance, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Creates a stage instance associated with a stage channel. - * - * @param rest - The rest manager to use to make the request. - * @param options - The parameters for the creation of the stage instance. - * @returns An instance of the created {@link DiscordStageInstance}. - * - * @remarks - * Requires the user to be a moderator of the stage channel. - * - * Fires a _Stage Instance Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/stage-instance#create-stage-instance} - */ -export async function createStageInstance ( - rest: RestManager, - options: CreateStageInstance -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.STAGE_INSTANCES(), - { - channel_id: options.channelId.toString(), - topic: options.topic, - send_start_notification: options.sendStartNotification, - reason: options.reason - } - ) - - return snakeToCamelCaseNested(result) -} - -export interface CreateStageInstance extends WithReason { - channelId: BigString - topic: string - /** Notify @everyone that the stage instance has started. Requires the MENTION_EVERYONE permission. */ - sendStartNotification?: boolean -} diff --git a/packages/old/rest/src/helpers/channels/stages/deleteStageInstance.ts b/packages/old/rest/src/helpers/channels/stages/deleteStageInstance.ts deleted file mode 100644 index 9ccdcfb72..000000000 --- a/packages/old/rest/src/helpers/channels/stages/deleteStageInstance.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes the stage instance associated with a stage channel, if one exists. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the stage channel the stage instance is associated with. - * - * @remarks - * Requires the user to be a moderator of the stage channel. - * - * Fires a _Stage Instance Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/stage-instance#delete-stage-instance} - */ -export async function deleteStageInstance ( - rest: RestManager, - channelId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - 'DELETE', - routes.STAGE_INSTANCE(channelId), - reason ? { reason } : undefined - ) -} diff --git a/packages/old/rest/src/helpers/channels/stages/editStageInstance.ts b/packages/old/rest/src/helpers/channels/stages/editStageInstance.ts deleted file mode 100644 index c4220111e..000000000 --- a/packages/old/rest/src/helpers/channels/stages/editStageInstance.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordStageInstance, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Edits a stage instance. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the stage channel the stage instance is associated with. - * @returns An instance of the updated {@link DiscordStageInstance}. - * - * @remarks - * Requires the user to be a moderator of the stage channel. - * - * Fires a _Stage Instance Update_ event. - * - * @see {@link https://discord.com/developers/docs/resources/stage-instance#modify-stage-instance} - */ -export async function editStageInstance ( - rest: RestManager, - channelId: BigString, - data: EditStageInstanceOptions -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.STAGE_INSTANCE(channelId), - { - topic: data.topic - } - ) - - return snakeToCamelCaseNested(result) -} - -export interface EditStageInstanceOptions extends WithReason { - /** The topic of the Stage instance (1-120 characters) */ - topic: string -} diff --git a/packages/old/rest/src/helpers/channels/stages/getStageInstance.ts b/packages/old/rest/src/helpers/channels/stages/getStageInstance.ts deleted file mode 100644 index 10806979a..000000000 --- a/packages/old/rest/src/helpers/channels/stages/getStageInstance.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordStageInstance -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Gets the stage instance associated with a stage channel, if one exists. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the stage channel the stage instance is associated with. - * @returns An instance of {@link DiscordStageInstance}. - * - * @see {@link https://discord.com/developers/docs/resources/stage-instance#get-stage-instance} - */ -export async function getStageInstance ( - rest: RestManager, - channelId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.STAGE_INSTANCE(channelId) - ) - - return snakeToCamelCaseNested(result) -} diff --git a/packages/old/rest/src/helpers/channels/stages/index.ts b/packages/old/rest/src/helpers/channels/stages/index.ts deleted file mode 100644 index daf1fbac8..000000000 --- a/packages/old/rest/src/helpers/channels/stages/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './createStageInstance.js' -export * from './deleteStageInstance.js' -export * from './editStageInstance.js' -export * from './getStageInstance.js' diff --git a/packages/old/rest/src/helpers/channels/threads/addThreadMember.ts b/packages/old/rest/src/helpers/channels/threads/addThreadMember.ts deleted file mode 100644 index 32dd1a6f3..000000000 --- a/packages/old/rest/src/helpers/channels/threads/addThreadMember.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Adds a member to a thread. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the thread to add the member to. - * @param userId - The user ID of the member to add to the thread. - * - * @remarks - * Requires the ability to send messages in the thread. - * Requires the thread not be archived. - * - * Fires a _Thread Members Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#add-thread-member} - */ -export async function addThreadMember ( - rest: RestManager, - channelId: BigString, - userId: BigString -): Promise { - return await rest.runMethod( - 'PUT', - routes.THREAD_USER(channelId, userId) - ) -} diff --git a/packages/old/rest/src/helpers/channels/threads/getActiveThreads.ts b/packages/old/rest/src/helpers/channels/threads/getActiveThreads.ts deleted file mode 100644 index 6dbb30db8..000000000 --- a/packages/old/rest/src/helpers/channels/threads/getActiveThreads.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordChannel, - DiscordListActiveThreads, - DiscordThreadMember -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Gets the list of all active threads for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the threads of. - * @returns An instance of {@link DiscordActiveThreads}. - * - * @remarks - * Returns both public and private threads. - * - * Threads are ordered by the `id` property in descending order. - * - * @see {@link https://discord.com/developers/docs/resources/guild#list-active-guild-threads} - */ -export async function getActiveThreads ( - rest: RestManager, - guildId: BigString -): Promise { - const results = await rest.runMethod( - 'GET', - routes.THREAD_ACTIVE(guildId) - ) - - return { - threads: new Collection( - results.threads.map((result) => { - const thread = snakeToCamelCaseNested(result) - return [thread.id, thread] - }) - ), - members: new Collection( - results.members.map((result) => { - const member = snakeToCamelCaseNested(result) - return [member.id!, member] - }) - ) - } -} - -export interface DiscordActiveThreads { - threads: Collection> - members: Collection> -} diff --git a/packages/old/rest/src/helpers/channels/threads/getPrivateArchivedThreads.ts b/packages/old/rest/src/helpers/channels/threads/getPrivateArchivedThreads.ts deleted file mode 100644 index e42d9f360..000000000 --- a/packages/old/rest/src/helpers/channels/threads/getPrivateArchivedThreads.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordListArchivedThreads, ListArchivedThreads } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' -import type { - DiscordArchivedThreads -} from './getPublicArchivedThreads.js' - -/** - * Gets the list of private archived threads for a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to get the archived threads for. - * @param options - The parameters for the fetching of threads. - * @returns An instance of {@link DiscordArchivedThreads}. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * Requires the `MANAGE_THREADS` permission. - * - * Returns threads of type {@link ChannelTypes.GuildPrivateThread}. - * - * Threads are ordered by the `archive_timestamp` property included in the metadata of the object in descending order. - * - * @see {@link https://discord.com/developers/docs/resources/channel#list-private-archived-threads} - */ -export async function getPrivateArchivedThreads ( - rest: RestManager, - channelId: BigString, - options?: ListArchivedThreads -): Promise { - const results = await rest.runMethod( - 'GET', - routes.THREAD_ARCHIVED_PRIVATE(channelId, options) - ) - - return { - threads: new Collection( - results.threads.map((result) => { - const thread = snakeToCamelCaseNested(result) - return [thread.id, thread] - }) - ), - members: new Collection( - results.members.map((result) => { - const member = snakeToCamelCaseNested(result) - return [member.id!, member] - }) - ), - hasMore: results.has_more - } -} diff --git a/packages/old/rest/src/helpers/channels/threads/getPrivateJoinedArchivedThreads.ts b/packages/old/rest/src/helpers/channels/threads/getPrivateJoinedArchivedThreads.ts deleted file mode 100644 index 212ca97ac..000000000 --- a/packages/old/rest/src/helpers/channels/threads/getPrivateJoinedArchivedThreads.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordListArchivedThreads, ListArchivedThreads } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' -import type { - DiscordArchivedThreads -} from './getPublicArchivedThreads.js' - -/** - * Gets the list of private archived threads the bot is a member of for a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to get the archived threads for. - * @param options - The parameters for the fetching of threads. - * @returns An instance of {@link DiscordArchivedThreads}. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * Returns threads of type {@link ChannelTypes.GuildPrivateThread}. - * - * Threads are ordered by the `id` property in descending order. - * - * @see {@link https://discord.com/developers/docs/resources/channel#list-joined-private-archived-threads} - */ -export async function getPrivateJoinedArchivedThreads ( - rest: RestManager, - channelId: BigString, - options?: ListArchivedThreads -): Promise { - const results = await rest.runMethod( - 'GET', - routes.THREAD_ARCHIVED_PRIVATE_JOINED(channelId, options) - ) - - return { - threads: new Collection( - results.threads.map((result) => { - const thread = snakeToCamelCaseNested(result) - return [thread.id, thread] - }) - ), - members: new Collection( - results.members.map((result) => { - const member = snakeToCamelCaseNested(result) - return [member.id!, member] - }) - ), - hasMore: results.has_more - } -} diff --git a/packages/old/rest/src/helpers/channels/threads/getPublicArchivedThreads.ts b/packages/old/rest/src/helpers/channels/threads/getPublicArchivedThreads.ts deleted file mode 100644 index b6123ff3f..000000000 --- a/packages/old/rest/src/helpers/channels/threads/getPublicArchivedThreads.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordListArchivedThreads, ListArchivedThreads } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' -import type { DiscordActiveThreads } from './getActiveThreads.js' - -/** - * Gets the list of public archived threads for a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to get the archived threads for. - * @param options - The parameters for the fetching of threads. - * @returns An instance of {@link ArchivedThreads}. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * If called on a channel of type {@link ChannelTypes.GuildText}, returns threads of type {@link ChannelTypes.GuildPublicThread}. - * If called on a channel of type {@link ChannelTypes.GuildNews}, returns threads of type {@link ChannelTypes.GuildNewsThread}. - * - * Threads are ordered by the `archive_timestamp` property included in the metadata of the object in descending order. - * - * @see {@link https://discord.com/developers/docs/resources/channel#list-public-archived-threads} - */ -export async function getPublicArchivedThreads ( - rest: RestManager, - channelId: BigString, - options?: ListArchivedThreads -): Promise { - const results = await rest.runMethod( - 'GET', - routes.THREAD_ARCHIVED_PUBLIC(channelId, options) - ) - - return { - threads: new Collection( - results.threads.map((result) => { - const thread = snakeToCamelCaseNested(result) - return [thread.id, thread] - }) - ), - members: new Collection( - results.members.map((result) => { - const member = snakeToCamelCaseNested(result) - return [member.id!, member] - }) - ), - hasMore: results.has_more - } -} - -export type DiscordArchivedThreads = DiscordActiveThreads & { - hasMore: boolean -} diff --git a/packages/old/rest/src/helpers/channels/threads/getThreadMember.ts b/packages/old/rest/src/helpers/channels/threads/getThreadMember.ts deleted file mode 100644 index a715d1a38..000000000 --- a/packages/old/rest/src/helpers/channels/threads/getThreadMember.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordThreadMember -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Gets a thread member by their user ID. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the thread to get the thread member of. - * @param userId - The user ID of the thread member to get. - * @returns An instance of {@link DiscordThreadMember}. - * - * @see {@link https://discord.com/developers/docs/resources/channel#get-thread-member} - */ -export async function getThreadMember ( - rest: RestManager, - channelId: BigString, - userId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.THREAD_USER(channelId, userId) - ) - - return snakeToCamelCaseNested(result) -} diff --git a/packages/old/rest/src/helpers/channels/threads/getThreadMembers.ts b/packages/old/rest/src/helpers/channels/threads/getThreadMembers.ts deleted file mode 100644 index 50f4ef632..000000000 --- a/packages/old/rest/src/helpers/channels/threads/getThreadMembers.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordThreadMember -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Gets the list of thread members for a thread. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the thread to get the thread members of. - * @returns A collection of {@link DiscordThreadMember} assorted by user ID. - * - * @remarks - * Requires the application to have the `GUILD_MEMBERS` privileged intent enabled. - * - * @see {@link https://discord.com/developers/docs/resources/channel#list-thread-members} - */ -export async function getThreadMembers ( - rest: RestManager, - channelId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.THREAD_MEMBERS(channelId) - ) - - return new Collection( - results.map((result) => { - const member = snakeToCamelCaseNested(result) - return [member.id!, member] - }) - ) -} diff --git a/packages/old/rest/src/helpers/channels/threads/index.ts b/packages/old/rest/src/helpers/channels/threads/index.ts deleted file mode 100644 index 0cdef48ae..000000000 --- a/packages/old/rest/src/helpers/channels/threads/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from './addThreadMember.js' -export * from './getActiveThreads.js' -export * from './getPrivateArchivedThreads.js' -export * from './getPrivateJoinedArchivedThreads.js' -export * from './getPublicArchivedThreads.js' -export * from './getThreadMember.js' -export * from './getThreadMembers.js' -export * from './joinThread.js' -export * from './leaveThread.js' -export * from './removeThreadMember.js' -export * from './startThreadWithMessage.js' -export * from './startThreadWithoutMessage.js' diff --git a/packages/old/rest/src/helpers/channels/threads/joinThread.ts b/packages/old/rest/src/helpers/channels/threads/joinThread.ts deleted file mode 100644 index dd8332f27..000000000 --- a/packages/old/rest/src/helpers/channels/threads/joinThread.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Adds the bot user to a thread. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the thread to add the bot user to. - * - * @remarks - * Requires the thread not be archived. - * - * Fires a _Thread Members Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#join-thread} - */ -export async function joinThread ( - rest: RestManager, - channelId: BigString -): Promise { - return await rest.runMethod( - 'PUT', - routes.THREAD_ME(channelId) - ) -} diff --git a/packages/old/rest/src/helpers/channels/threads/leaveThread.ts b/packages/old/rest/src/helpers/channels/threads/leaveThread.ts deleted file mode 100644 index 9c044e5f9..000000000 --- a/packages/old/rest/src/helpers/channels/threads/leaveThread.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Removes the bot user from a thread. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the thread to remove the bot user from. - * - * @remarks - * Requires the thread not be archived. - * - * Fires a _Thread Members Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#leave-thread} - */ -export async function leaveThread ( - rest: RestManager, - channelId: BigString -): Promise { - return await rest.runMethod( - 'DELETE', - routes.THREAD_ME(channelId) - ) -} diff --git a/packages/old/rest/src/helpers/channels/threads/removeThreadMember.ts b/packages/old/rest/src/helpers/channels/threads/removeThreadMember.ts deleted file mode 100644 index afac7ec2f..000000000 --- a/packages/old/rest/src/helpers/channels/threads/removeThreadMember.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Removes a member from a thread. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the thread to remove the thread member of. - * @param userId - The user ID of the thread member to remove. - * - * @remarks - * If the thread is of type {@link ChannelTypes.GuildPrivateThread}, requires to be the creator of the thread. - * Otherwise, requires the `MANAGE_THREADS` permission. - * - * Requires the thread not be archived. - * - * Fires a _Thread Members Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#remove-thread-member} - */ -export async function removeThreadMember ( - rest: RestManager, - channelId: BigString, - userId: BigString -): Promise { - return await rest.runMethod( - 'DELETE', - routes.THREAD_USER(channelId, userId) - ) -} diff --git a/packages/old/rest/src/helpers/channels/threads/startThreadWithMessage.ts b/packages/old/rest/src/helpers/channels/threads/startThreadWithMessage.ts deleted file mode 100644 index 7c3b570f2..000000000 --- a/packages/old/rest/src/helpers/channels/threads/startThreadWithMessage.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - DiscordChannel, - DiscordStartThreadWithMessage, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Creates a thread, using an existing message as its point of origin. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel in which to create the thread. - * @param messageId - The ID of the message to use as the thread's point of origin. - * @param options - The parameters to use for the creation of the thread. - * @returns An instance of the created {@link Channel | Thread}. - * - * @remarks - * If called on a channel of type {@link ChannelTypes.GuildText}, creates a {@link ChannelTypes.GuildPublicThread}. - * If called on a channel of type {@link ChannelTypes.GuildNews}, creates a {@link ChannelTypes.GuildNewsThread}. - * Does not work on channels of type {@link ChannelTypes.GuildForum}. - * - * The ID of the created thread will be the same as the ID of the source message. - * - * Fires a _Thread Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#start-thread-from-message} - */ -export async function startThreadWithMessage ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - options: StartThreadWithMessage -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.THREAD_START_PUBLIC(channelId, messageId), - { - name: options.name, - auto_archive_duration: options.autoArchiveDuration, - rate_limit_per_user: options.rateLimitPerUser, - reason: options.reason - } as DiscordStartThreadWithMessage - ) - - return snakeToCamelCaseNested(result) -} - -export interface StartThreadWithMessage extends WithReason { - /** 1-100 character thread name */ - name: string - /** Duration in minutes to automatically archive the thread after recent activity */ - autoArchiveDuration: 60 | 1440 | 4320 | 10080 - /** Amount of seconds a user has to wait before sending another message (0-21600) */ - rateLimitPerUser?: number | null -} diff --git a/packages/old/rest/src/helpers/channels/threads/startThreadWithoutMessage.ts b/packages/old/rest/src/helpers/channels/threads/startThreadWithoutMessage.ts deleted file mode 100644 index c33b3ce3f..000000000 --- a/packages/old/rest/src/helpers/channels/threads/startThreadWithoutMessage.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - Camelize, - ChannelTypes, - DiscordChannel, - DiscordStartThreadWithoutMessage, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { snakeToCamelCaseNested } from '../../../transformer.js' - -/** - * Creates a thread without using a message as the thread's point of origin. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel in which to create the thread. - * @param options - The parameters to use for the creation of the thread. - * @returns An instance of the created {@link DiscordChannel | Thread}. - * - * @remarks - * Creating a private thread requires the server to be boosted. - * - * Fires a _Thread Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#start-thread-without-message} - */ -export async function startThreadWithoutMessage ( - rest: RestManager, - channelId: BigString, - options: StartThreadWithoutMessage -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.THREAD_START_PRIVATE(channelId), - { - name: options.name, - auto_archive_duration: options.autoArchiveDuration, - rate_limit_per_user: options.rateLimitPerUser, - type: options.type, - invitable: options.invitable, - reason: options.reason - } as DiscordStartThreadWithoutMessage - ) - - return snakeToCamelCaseNested(result) -} - -export interface StartThreadWithoutMessage extends WithReason { - /** 1-100 character thread name */ - name: string - /** Duration in minutes to automatically archive the thread after recent activity */ - autoArchiveDuration: 60 | 1440 | 4320 | 10080 - /** Amount of seconds a user has to wait before sending another message (0-21600) */ - rateLimitPerUser?: number | null - /** the type of thread to create */ - type: - | ChannelTypes.AnnouncementThread - | ChannelTypes.PublicThread - | ChannelTypes.PrivateThread - /** whether non-moderators can add other non-moderators to a thread; only available when creating a private thread */ - invitable?: boolean -} diff --git a/packages/old/rest/src/helpers/channels/triggerTypingIndicator.ts b/packages/old/rest/src/helpers/channels/triggerTypingIndicator.ts deleted file mode 100644 index a1c345178..000000000 --- a/packages/old/rest/src/helpers/channels/triggerTypingIndicator.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -export const startTyping = triggerTypingIndicator - -/** - * Triggers a typing indicator for the bot user. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel in which to trigger the typing indicator. - * - * @remarks - * Generally, bots should _not_ use this route. - * - * Fires a _Typing Start_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#trigger-typing-indicator} - */ -export async function triggerTypingIndicator ( - rest: RestManager, - channelId: BigString -): Promise { - return await rest.runMethod( - 'POST', - routes.CHANNEL_TYPING(channelId) - ) -} diff --git a/packages/old/rest/src/helpers/emojis/createEmoji.ts b/packages/old/rest/src/helpers/emojis/createEmoji.ts deleted file mode 100644 index 055316f84..000000000 --- a/packages/old/rest/src/helpers/emojis/createEmoji.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordCreateGuildEmoji, - DiscordEmoji, - WithReason -} from '@discordeno/types' -import { urlToBase64 } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Creates an emoji in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild in which to create the emoji. - * @param options - The parameters for the creation of the emoji. - * @returns An instance of the created {@link DiscordEmoji}. - * - * @remarks - * Requires the `MANAGE_EMOJIS_AND_STICKERS` permission. - * - * Emojis have a maximum file size of 256 kilobits. Attempting to upload a larger emoji will cause the route to return 400 Bad Request. - * - * Fires a _Guild Emojis Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/emoji#create-guild-emoji} - */ -export async function createEmoji ( - rest: RestManager, - guildId: BigString, - options: CreateGuildEmoji -): Promise> { - if (options.image && !options.image.startsWith('data:image/')) { - options.image = await urlToBase64(options.image) - } - - const result = await rest.runMethod( - 'POST', - routes.GUILD_EMOJIS(guildId), - { - name: options.name, - image: options.image, - roles: options.roles?.map((role) => role.toString()), - reason: options.reason - } as DiscordCreateGuildEmoji - ) - - return TRANSFORMERS.emoji(result) -} - -/** https://discord.com/developers/docs/resources/emoji#create-guild-emoji */ -export interface CreateGuildEmoji extends WithReason { - /** Name of the emoji */ - name: string - /** The 128x128 emoji image. Emojis and animated emojis have a maximum file size of 256kb. Attempting to upload an emoji larger than this limit will fail and return 400 Bad Request and an error message, but not a JSON status code. If a URL is provided to the image parameter, Discordeno will automatically convert it to a base64 string internally. */ - image: string - /** Roles allowed to use this emoji */ - roles?: BigString[] -} diff --git a/packages/old/rest/src/helpers/emojis/deleteEmoji.ts b/packages/old/rest/src/helpers/emojis/deleteEmoji.ts deleted file mode 100644 index 9f64aa743..000000000 --- a/packages/old/rest/src/helpers/emojis/deleteEmoji.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Deletes an emoji from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild from which to delete the emoji. - * @param id - The ID of the emoji to delete. - * - * @remarks - * Requires the `MANAGE_EMOJIS_AND_STICKERS` permission. - * - * Fires a _Guild Emojis Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/emoji#delete-guild-emoji} - */ -export async function deleteEmoji ( - rest: RestManager, - guildId: BigString, - id: BigString, - reason?: string -): Promise { - return await rest.runMethod( - 'DELETE', - routes.GUILD_EMOJI(guildId, id), - { - reason - } - ) -} diff --git a/packages/old/rest/src/helpers/emojis/editEmoji.ts b/packages/old/rest/src/helpers/emojis/editEmoji.ts deleted file mode 100644 index 995771a7c..000000000 --- a/packages/old/rest/src/helpers/emojis/editEmoji.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordEmoji, - DiscordModifyGuildEmoji, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Edits an emoji. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild in which to edit the emoji. - * @param id - The ID of the emoji to edit. - * @param options - The parameters for the edit of the emoji. - * @returns An instance of the updated {@link DiscordEmoji}. - * - * @remarks - * Requires the `MANAGE_EMOJIS_AND_STICKERS` permission. - * - * Fires a `Guild Emojis Update` gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/emoji#modify-guild-emoji} - */ -export async function editEmoji ( - rest: RestManager, - guildId: BigString, - id: BigString, - options: ModifyGuildEmoji -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.GUILD_EMOJI(guildId, id), - { - name: options.name, - // NEED TERNARY TO SUPPORT NULL AS VALID - roles: options.roles - ? options.roles.map((role) => role.toString()) - : options.roles, - reason: options.reason - } as DiscordModifyGuildEmoji - ) - - return TRANSFORMERS.emoji(result) -} - -/** https://discord.com/developers/docs/resources/emoji#modify-guild-emoji */ -export interface ModifyGuildEmoji extends WithReason { - /** Name of the emoji */ - name?: string - /** Roles allowed to use this emoji */ - roles?: BigString[] | null -} diff --git a/packages/old/rest/src/helpers/emojis/getEmoji.ts b/packages/old/rest/src/helpers/emojis/getEmoji.ts deleted file mode 100644 index d9c2bd1b6..000000000 --- a/packages/old/rest/src/helpers/emojis/getEmoji.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordEmoji } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Gets an emoji by its ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild from which to get the emoji. - * @param emojiId - The ID of the emoji to get. - * @returns An instance of {@link DiscordEmoji}. - * - * @see {@link https://discord.com/developers/docs/resources/emoji#get-guild-emoji} - */ -export async function getEmoji ( - rest: RestManager, - guildId: BigString, - emojiId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.GUILD_EMOJI(guildId, emojiId) - ) - - return TRANSFORMERS.emoji(result) -} diff --git a/packages/old/rest/src/helpers/emojis/getEmojiUrl.ts b/packages/old/rest/src/helpers/emojis/getEmojiUrl.ts deleted file mode 100644 index ae45ff573..000000000 --- a/packages/old/rest/src/helpers/emojis/getEmojiUrl.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Builds a URL to an emoji in the Discord CDN. - * - * @param emojiId - The ID of the emoji to access. - * @param animated - Whether the emoji is animated or static. - * @returns The link to the resource. - */ -export function getEmojiURL ( - _rest: RestManager, - emojiId: BigString, - animated = false -): string { - return `https://cdn.discordapp.com/emojis/${emojiId}.${ - animated ? 'gif' : 'png' - }` -} diff --git a/packages/old/rest/src/helpers/emojis/getEmojis.ts b/packages/old/rest/src/helpers/emojis/getEmojis.ts deleted file mode 100644 index f396e3427..000000000 --- a/packages/old/rest/src/helpers/emojis/getEmojis.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordEmoji } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Gets the list of emojis for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild which to get the emojis of. - * @returns A collection of {@link DiscordEmoji} objects assorted by emoji ID. - * - * @see {@link https://discord.com/developers/docs/resources/emoji#list-guild-emojis} - */ -export async function getEmojis ( - rest: RestManager, - guildId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_EMOJIS(guildId) - ) - - return new Collection( - results.map((result) => { - const emoji = TRANSFORMERS.emoji(result) - return [emoji.id!, emoji] - }) - ) -} diff --git a/packages/old/rest/src/helpers/emojis/index.ts b/packages/old/rest/src/helpers/emojis/index.ts deleted file mode 100644 index 20170f756..000000000 --- a/packages/old/rest/src/helpers/emojis/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './createEmoji.js' -export * from './deleteEmoji.js' -export * from './editEmoji.js' -export * from './getEmoji.js' -export * from './getEmojis.js' -export * from './getEmojiUrl.js' diff --git a/packages/old/rest/src/helpers/guilds/automod/createAutomodRule.ts b/packages/old/rest/src/helpers/guilds/automod/createAutomodRule.ts deleted file mode 100644 index 518b16bda..000000000 --- a/packages/old/rest/src/helpers/guilds/automod/createAutomodRule.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - AutoModerationActionType, - AutoModerationEventTypes, - AutoModerationTriggerTypes, - BigString, - Camelize, - DiscordAutoModerationRule, - DiscordAutoModerationRuleTriggerMetadataPresets, - DiscordCreateAutomoderationRule, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Creates an automod rule in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to create the rule in. - * @param options - The parameters for the creation of the rule. - * @returns An instance of the created {@link DiscordAutoModerationRule}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * Fires an _Auto Moderation Rule Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/auto-moderation#create-auto-moderation-rule} - */ -export async function createAutomodRule ( - rest: RestManager, - guildId: BigString, - options: CreateAutoModerationRuleOptions -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.AUTOMOD_RULES(guildId), - { - name: options.name, - event_type: options.eventType, - trigger_type: options.triggerType, - trigger_metadata: { - keyword_filter: options.triggerMetadata.keywordFilter, - presets: options.triggerMetadata.presets, - allow_list: options.triggerMetadata.allowList, - mention_total_limit: options.triggerMetadata.mentionTotalLimit - }, - actions: options.actions.map((action) => ({ - type: action.type, - metadata: action.metadata - ? { - channel_id: action.metadata.channelId?.toString(), - duration_seconds: action.metadata.durationSeconds - } - : undefined - })), - enabled: options.enabled ?? true, - exempt_roles: options.exemptRoles?.map((id) => id.toString()), - exempt_channels: options.exemptChannels?.map((id) => id.toString()), - reason: options.reason - } as DiscordCreateAutomoderationRule - ) - - return TRANSFORMERS.automodRule(result) -} - -export interface CreateAutoModerationRuleOptions extends WithReason { - /** The name of the rule. */ - name: string - /** The type of event to trigger the rule on. */ - eventType: AutoModerationEventTypes - /** The type of trigger to use for the rule. */ - triggerType: AutoModerationTriggerTypes - /** The metadata to use for the trigger. */ - triggerMetadata: { - /** The keywords needed to match. Only present when TriggerType.Keyword */ - keywordFilter?: string[] - /** The pre-defined lists of words to match from. Only present when TriggerType.KeywordPreset */ - presets?: DiscordAutoModerationRuleTriggerMetadataPresets[] - /** The substrings which will exempt from triggering the preset trigger type. Only present when TriggerType.KeywordPreset */ - allowList?: string[] - /** Total number of mentions (role & user) allowed per message (Maximum of 50). Only present when TriggerType.MentionSpam */ - mentionTotalLimit?: number - } - /** The actions that will trigger for this rule */ - actions: Array<{ - /** The type of action to take when a rule is triggered */ - type: AutoModerationActionType - /** additional metadata needed during execution for this specific action type */ - metadata?: { - /** The id of channel to which user content should be logged. Only in SendAlertMessage */ - channelId?: BigString - /** Timeout duration in seconds. Max is 2419200(4 weeks). Only supported for TriggerType.Keyword */ - durationSeconds?: number - } - }> - /** Whether the rule should be enabled, true by default. */ - enabled?: boolean - /** The role ids that should not be effected by the rule */ - exemptRoles?: BigString[] - /** The channel ids that should not be effected by the rule. */ - exemptChannels?: BigString[] -} diff --git a/packages/old/rest/src/helpers/guilds/automod/deleteAutomodRule.ts b/packages/old/rest/src/helpers/guilds/automod/deleteAutomodRule.ts deleted file mode 100644 index 946c3a37d..000000000 --- a/packages/old/rest/src/helpers/guilds/automod/deleteAutomodRule.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes an automod rule. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to delete the rule from. - * @param ruleId - The ID of the automod rule to delete. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * Fires an _Auto Moderation Rule Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/auto-moderation#delete-auto-moderation-rule} - */ -export async function deleteAutomodRule ( - rest: RestManager, - guildId: BigString, - ruleId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - 'DELETE', - routes.AUTOMOD_RULE(guildId, ruleId), - { reason } - ) -} diff --git a/packages/old/rest/src/helpers/guilds/automod/editAutomodRule.ts b/packages/old/rest/src/helpers/guilds/automod/editAutomodRule.ts deleted file mode 100644 index 7769d20a1..000000000 --- a/packages/old/rest/src/helpers/guilds/automod/editAutomodRule.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - AutoModerationActionType, - AutoModerationEventTypes, - BigString, - Camelize, - DiscordAutoModerationRule, - DiscordAutoModerationRuleTriggerMetadataPresets, - DiscordModifyAutomoderationRule, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Edits an automod rule. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the rule in. - * @param ruleId - The ID of the rule to edit. - * @param options - The parameters for the edit of the rule. - * @returns An instance of the edited {@link DiscordAutoModerationRule}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * Fires an _Auto Moderation Rule Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/auto-moderation#modify-auto-moderation-rule} - */ -export async function editAutomodRule ( - rest: RestManager, - guildId: BigString, - ruleId: BigString, - options: Partial -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.AUTOMOD_RULE(guildId, ruleId), - { - name: options.name, - event_type: options.eventType, - trigger_metadata: options.triggerMetadata - ? { - keyword_filter: options.triggerMetadata.keywordFilter, - presets: options.triggerMetadata.presets, - allow_list: options.triggerMetadata.allowList, - mention_total_limit: options.triggerMetadata.mentionTotalLimit - } - : undefined, - actions: options.actions?.map((action) => ({ - type: action.type, - metadata: { - channel_id: action.metadata.channelId?.toString(), - duration_seconds: action.metadata.durationSeconds - } - })), - enabled: options.enabled ?? true, - exempt_roles: options.exemptRoles?.map((id) => id.toString()), - exempt_channels: options.exemptChannels?.map((id) => id.toString()), - reason: options.reason - } as DiscordModifyAutomoderationRule - ) - - return TRANSFORMERS.automodRule(result) -} - -export interface EditAutoModerationRuleOptions extends WithReason { - /** The name of the rule. */ - name: string - /** The type of event to trigger the rule on. */ - eventType: AutoModerationEventTypes - /** The metadata to use for the trigger. */ - triggerMetadata: { - /** The keywords needed to match. Only present when TriggerType.Keyword */ - keywordFilter?: string[] - // TODO: This may need a special type or enum - /** The pre-defined lists of words to match from. Only present when TriggerType.KeywordPreset */ - presets?: DiscordAutoModerationRuleTriggerMetadataPresets[] - /** The substrings which will exempt from triggering the preset trigger type. Only present when TriggerType.KeywordPreset */ - allowList?: string[] - /** Total number of mentions (role & user) allowed per message (Maximum of 50) */ - mentionTotalLimit: number - } - /** The actions that will trigger for this rule */ - actions: Array<{ - /** The type of action to take when a rule is triggered */ - type: AutoModerationActionType - /** additional metadata needed during execution for this specific action type */ - metadata: { - /** The id of channel to which user content should be logged. Only in SendAlertMessage */ - channelId?: BigString - /** Timeout duration in seconds. Only supported for TriggerType.Keyword */ - durationSeconds?: number - } - }> - /** Whether the rule should be enabled. */ - enabled?: boolean - /** The role ids that should not be effected by the rule */ - exemptRoles?: BigString[] - /** The channel ids that should not be effected by the rule. */ - exemptChannels?: BigString[] -} diff --git a/packages/old/rest/src/helpers/guilds/automod/getAutomodRule.ts b/packages/old/rest/src/helpers/guilds/automod/getAutomodRule.ts deleted file mode 100644 index 492215b3e..000000000 --- a/packages/old/rest/src/helpers/guilds/automod/getAutomodRule.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordAutoModerationRule } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets an automod rule by its ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the rule of. - * @param ruleId - The ID of the rule to get. - * @returns An instance of {@link DiscordAutoModerationRule}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * @see {@link https://discord.com/developers/docs/resources/auto-moderation#get-auto-moderation-rule} - */ -export async function getAutomodRule ( - rest: RestManager, - guildId: BigString, - ruleId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.AUTOMOD_RULE(guildId, ruleId) - ) - - return TRANSFORMERS.automodRule(result) -} diff --git a/packages/old/rest/src/helpers/guilds/automod/getAutomodRules.ts b/packages/old/rest/src/helpers/guilds/automod/getAutomodRules.ts deleted file mode 100644 index 9bc1f13e0..000000000 --- a/packages/old/rest/src/helpers/guilds/automod/getAutomodRules.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordAutoModerationRule } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets the list of automod rules for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the rules from. - * @returns A collection of {@link DiscordAutoModerationRule} objects assorted by rule ID. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * @see {@link https://discord.com/developers/docs/resources/auto-moderation#list-auto-moderation-rules-for-guild} - */ -export async function getAutomodRules ( - rest: RestManager, - guildId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.AUTOMOD_RULES(guildId) - ) - - return new Collection( - results.map((result) => { - const rule = TRANSFORMERS.automodRule(result) - return [rule.id, rule] - }) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/automod/index.ts b/packages/old/rest/src/helpers/guilds/automod/index.ts deleted file mode 100644 index 99f43e0e3..000000000 --- a/packages/old/rest/src/helpers/guilds/automod/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './createAutomodRule.js' -export * from './deleteAutomodRule.js' -export * from './editAutomodRule.js' -export * from './getAutomodRule.js' -export * from './getAutomodRules.js' diff --git a/packages/old/rest/src/helpers/guilds/createGuild.ts b/packages/old/rest/src/helpers/guilds/createGuild.ts deleted file mode 100644 index 5a9d7f30f..000000000 --- a/packages/old/rest/src/helpers/guilds/createGuild.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - Camelize, - DefaultMessageNotificationLevels, - DiscordCreateGuild, - DiscordGuild, - ExplicitContentFilterLevels, - SystemChannelFlags, - VerificationLevels -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Channel } from '../../transformers/channel.js' -import type { Role } from '../../transformers/role.js' - -/** - * Creates a guild. - * - * @param rest - The rest manager to use to make the request. - * @param options - The parameters for the creation of the guild. - * @returns An instance of the created {@link DiscordGuild}. - * - * @remarks - * ⚠️ This route can only be used by bots in __fewer than 10 guilds__. - * - * Fires a _Guild Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#create-guild} - */ -export async function createGuild ( - rest: RestManager, - options: CreateGuild -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.GUILDS(), - { - name: options.name, - afk_channel_id: options.afkChannelId, - afk_timeout: options.afkTimeout, - channels: options.channels, - default_message_notifications: options.defaultMessageNotifications, - explicit_content_filter: options.explicitContentFilter, - icon: options.icon, - roles: options.roles, - system_channel_flags: options.systemChannelFlags, - system_channel_id: options.systemChannelId, - verification_level: options.verificationLevel - } as DiscordCreateGuild - ) - - return { - id: result.id, - name: result.name, - icon: result.icon, - iconHash: result.icon_hash, - splash: result.splash, - discoverySplash: result.discovery_splash, - ownerId: result.owner_id, - afkChannelId: result.afk_channel_id, - afkTimeout: result.afk_timeout, - widgetEnabled: result.widget_enabled, - widgetChannelId: result.widget_channel_id, - verificationLevel: result.verification_level, - defaultMessageNotifications: result.default_message_notifications, - explicitContentFilter: result.explicit_content_filter, - roles: result.roles.map((role) => ({ - id: role.id, - name: role.name, - color: role.color, - hoist: role.hoist, - icon: role.icon, - unicodeEmoji: role.unicode_emoji, - position: role.position, - permissions: role.permissions, - managed: role.managed, - mentionable: role.mentionable, - tags: role.tags && { - botId: role.tags.bot_id, - integrationId: role.tags.integration_id, - premiumSubscriber: role.tags.premium_subscriber, - guildConnections: role.tags.guild_connections - } - })), - emojis: result.emojis, - features: result.features, - mfaLevel: result.mfa_level, - applicationId: result.application_id, - systemChannelId: result.system_channel_id, - systemChannelFlags: result.system_channel_flags, - rulesChannelId: result.rules_channel_id, - maxPresences: result.max_presences, - maxMembers: result.max_members, - vanityUrlCode: result.vanity_url_code, - description: result.description, - banner: result.banner, - premiumTier: result.premium_tier, - premiumSubscriptionCount: result.premium_subscription_count, - preferredLocale: result.preferred_locale, - publicUpdatesChannelId: result.public_updates_channel_id, - maxVideoChannelUsers: result.max_video_channel_users, - approximateMemberCount: result.approximate_member_count, - approximatePresenceCount: result.approximate_presence_count, - welcomeScreen: result.welcome_screen && { - description: result.welcome_screen.description, - welcomeChannels: result.welcome_screen.welcome_channels.map( - (welcomeScreenChannel) => ({ - channelId: welcomeScreenChannel.channel_id, - description: welcomeScreenChannel.description, - emojiId: welcomeScreenChannel.emoji_id, - emojiName: welcomeScreenChannel.emoji_name - }) - ) - }, - nsfwLevel: result.nsfw_level, - stickers: result.stickers?.map((sticker) => ({ - id: sticker.id, - packId: sticker.pack_id, - name: sticker.name, - description: sticker.description, - tags: sticker.tags, - type: sticker.type, - formatType: sticker.format_type, - available: sticker.available, - guildId: sticker.guild_id, - user: sticker.user && { - id: sticker.user.id, - username: sticker.user.username, - discriminator: sticker.user.discriminator, - avatar: sticker.user.avatar, - bot: sticker.user.bot, - system: sticker.user.system, - mfaEnabled: sticker.user.mfa_enabled, - banner: sticker.user.banner, - accentColor: sticker.user.accent_color, - locale: sticker.user.locale, - verified: sticker.user.verified, - email: sticker.user.email, - flags: sticker.user.flags, - premiumType: sticker.user.premium_type, - publicFlags: sticker.user.public_flags - }, - sortValue: sticker.sort_value - })), - premiumProgressBarEnabled: result.premium_progress_bar_enabled - } -} - -/** https://discord.com/developers/docs/resources/guild#create-guild */ -export interface CreateGuild { - /** Name of the guild (1-100 characters) */ - name: string - /** Base64 128x128 image for the guild icon */ - icon?: string - /** Verification level */ - verificationLevel?: VerificationLevels - /** Default message notification level */ - defaultMessageNotifications?: DefaultMessageNotificationLevels - /** Explicit content filter level */ - explicitContentFilter?: ExplicitContentFilterLevels - /** New guild roles (first role is the everyone role) */ - roles?: Role[] - /** New guild's channels */ - channels?: Array> - /** Id for afk channel */ - afkChannelId?: string - /** Afk timeout in seconds */ - afkTimeout?: number - /** The id of the channel where guild notices such as welcome messages and boost events are posted */ - systemChannelId?: string - /** System channel flags */ - systemChannelFlags?: SystemChannelFlags -} diff --git a/packages/old/rest/src/helpers/guilds/deleteGuild.ts b/packages/old/rest/src/helpers/guilds/deleteGuild.ts deleted file mode 100644 index 552806293..000000000 --- a/packages/old/rest/src/helpers/guilds/deleteGuild.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Deletes a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to delete. - * - * @remarks - * The bot user must be the owner of the guild. - * - * Fires a _Guild Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#delete-guild} - */ -export async function deleteGuild ( - rest: RestManager, - guildId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD(guildId) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/editGuild.ts b/packages/old/rest/src/helpers/guilds/editGuild.ts deleted file mode 100644 index 89ad8d3e1..000000000 --- a/packages/old/rest/src/helpers/guilds/editGuild.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DefaultMessageNotificationLevels, - DiscordGuild, - DiscordModifyGuild, - ExplicitContentFilterLevels, - GuildFeatures, - SystemChannelFlags, - VerificationLevels -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -// TODO: Put the `shardId` parameter before `options`. - -/** - * Edits a guild's settings. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit. - * @param shardId - The ID of the shard the guild is in. - * @param options - The parameters for the edit of the guild. - * @returns An instance of the edited {@link Guild}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * If attempting to add or remove the {@link GuildFeatures.Community} feature: - * - Requires the `ADMINISTRATOR` permission. - * - * Fires a _Guild Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild} - */ -export async function editGuild ( - rest: RestManager, - guildId: BigString, - options: ModifyGuild -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.GUILD(guildId), - { - name: options.name, - verification_levels: options.verificationLevel, - default_message_notifications: options.defaultMessageNotifications, - explicit_content_filter: options.explicitContentFilter, - afk_channel_id: options.afkChannelId - ? options.afkChannelId.toString() - : options.afkChannelId, - afk_timeout: options.afkTimeout, - icon: options.icon, - owner_id: options.ownerId ? options.ownerId.toString() : options.ownerId, - splash: options.splash, - discovery_splash: options.discoverySplash, - banner: options.banner, - system_channel_id: options.systemChannelId - ? options.systemChannelId.toString() - : options.systemChannelId, - system_channel_flags: options.systemChannelFlags, - rules_channel_id: options.rulesChannelId - ? options.rulesChannelId.toString() - : options.rulesChannelId, - public_updates_channel_id: options.publicUpdatesChannelId - ? options.publicUpdatesChannelId.toString() - : options.publicUpdatesChannelId, - preferred_locale: options.preferredLocale, - features: options.features, - premium_progress_bar_enabled: options.premiumProgressBarEnabled - } as DiscordModifyGuild - ) - - return TRANSFORMERS.guild(result) -} - -/** https://discord.com/developers/docs/resources/guild#modify-guild */ -export interface ModifyGuild { - /** Guild name */ - name?: string - /** Verification level */ - verificationLevel?: VerificationLevels | null - /** Default message notification filter level */ - defaultMessageNotifications?: DefaultMessageNotificationLevels | null - /** Explicit content filter level */ - explicitContentFilter?: ExplicitContentFilterLevels | null - /** Id for afk channel */ - afkChannelId?: BigString | null - /** Afk timeout in seconds */ - afkTimeout?: number - /** Base64 1024x1024 png/jpeg/gif image for the guild icon (can be animated gif when the server has the `ANIMATED_ICON` feature) */ - icon?: string | null - /** User id to transfer guild ownership to (must be owner) */ - ownerId?: BigString - /** Base64 16:9 png/jpeg image for the guild splash (when the server has `INVITE_SPLASH` feature) */ - splash?: string | null - /** Base64 16:9 png/jpeg image for the guild discovery spash (when the server has the `DISCOVERABLE` feature) */ - discoverySplash?: string | null - /** Base64 16:9 png/jpeg image for the guild banner (when the server has BANNER feature) */ - banner?: string | null - /** The id of the channel where guild notices such as welcome messages and boost events are posted */ - systemChannelId?: BigString | null - /** System channel flags */ - systemChannelFlags?: SystemChannelFlags - /** The id of the channel where Community guilds display rules and/or guidelines */ - rulesChannelId?: BigString | null - /** The id of the channel where admins and moderators of Community guilds receive notices from Discord */ - publicUpdatesChannelId?: BigString | null - /** The preferred locale of a Community guild used in server discovery and notices from Discord; defaults to "en-US" */ - preferredLocale?: string | null - /** Enabled guild features */ - features?: GuildFeatures[] - /** Whether the guild's boost progress bar should be enabled */ - premiumProgressBarEnabled?: boolean -} diff --git a/packages/old/rest/src/helpers/guilds/editGuildMfaLevel.ts b/packages/old/rest/src/helpers/guilds/editGuildMfaLevel.ts deleted file mode 100644 index 155b401e8..000000000 --- a/packages/old/rest/src/helpers/guilds/editGuildMfaLevel.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - DiscordEditGuildMFALevel, - MfaLevels -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** Modify a guild's MFA level. Requires guild ownership. */ -export async function editGuildMfaLevel ( - rest: RestManager, - guildId: BigString, - mfaLevel: MfaLevels, - reason?: string -): Promise { - return await rest.runMethod( - - 'POST', - routes.GUILD_MFA_LEVEL(guildId), - { level: mfaLevel, reason } as DiscordEditGuildMFALevel - ) -} diff --git a/packages/old/rest/src/helpers/guilds/editWelcomeScreen.ts b/packages/old/rest/src/helpers/guilds/editWelcomeScreen.ts deleted file mode 100644 index 6f4391de6..000000000 --- a/packages/old/rest/src/helpers/guilds/editWelcomeScreen.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordModifyGuildWelcomeScreen, DiscordWelcomeScreen } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Edits a guild's welcome screen. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the welcome screen of. - * @param options - The parameters for the edit of the welcome screen. - * @returns An instance of the edited {@link WelcomeScreen}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * Fires a _Guild Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-welcome-screen} - */ -export async function editWelcomeScreen ( - rest: RestManager, - guildId: BigString, - options: ModifyGuildWelcomeScreen -): Promise> { - const result = await rest.runMethod( - - 'PATCH', - routes.GUILD_WELCOME_SCREEN(guildId), - { - enabled: options.enabled, - welcome_screen: options.welcomeScreen?.map((welcomeScreen) => ({ - channel_id: welcomeScreen.channelId.toString(), - description: welcomeScreen.description, - emoji_id: welcomeScreen.emojiId?.toString(), - emoji_name: welcomeScreen.emojiName - })), - description: options.description - } as DiscordModifyGuildWelcomeScreen - ) - - return TRANSFORMERS.welcomeScreen(result) -} - -/** https://discord.com/developers/docs/resources/guild#modify-guild-welcome-screen */ -export interface ModifyGuildWelcomeScreen { - /** Whether the welcome screen is enabled */ - enabled?: boolean | null - /** Channels linked in the welcome screen and their display options */ - welcomeScreen?: WelcomeScreenChannel[] | null - /** The server description to show in the welcome screen */ - description?: string | null -} - -export interface WelcomeScreenChannel { - /** The channel's id */ - channelId: BigString - /** The emoji id, if the emoji is custom */ - emojiId?: BigString - /** The emoji name if custom, the unicode character if standard, or `null` if no emoji is set */ - emojiName?: string - /** The description shown for the channel */ - description: string -} diff --git a/packages/old/rest/src/helpers/guilds/events/createScheduledEvent.ts b/packages/old/rest/src/helpers/guilds/events/createScheduledEvent.ts deleted file mode 100644 index b068a55ac..000000000 --- a/packages/old/rest/src/helpers/guilds/events/createScheduledEvent.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordCreateScheduledEvent, - DiscordScheduledEvent, ScheduledEventEntityType, WithReason -} from '@discordeno/types' -import { - ScheduledEventPrivacyLevel -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Creates a scheduled event in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to create the scheduled event in. - * @param options - The parameters for the creation of the scheduled event. - * @returns An instance of the created {@link ScheduledEvent}. - * - * @remarks - * Requires the `MANAGE_EVENTS` permission. - * - * A guild can only have a maximum of 100 events with a status of {@link ScheduledEventStatus.Active} or {@link ScheduledEventStatus.Scheduled} (inclusive). - * - * Fires a _Guild Scheduled Event Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#create-guild-scheduled-event} - */ -export async function createScheduledEvent ( - rest: RestManager, - guildId: BigString, - options: CreateScheduledEvent -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.GUILD_SCHEDULED_EVENTS(guildId), - { - channel_id: options.channelId?.toString(), - entity_metadata: options.location - ? { location: options.location } - : undefined, - name: options.name, - description: options.description, - scheduled_start_time: new Date(options.scheduledStartTime).toISOString(), - scheduled_end_time: options.scheduledEndTime - ? new Date(options.scheduledEndTime).toISOString() - : undefined, - privacy_level: - options.privacyLevel ?? ScheduledEventPrivacyLevel.GuildOnly, - entity_type: options.entityType, - reason: options.reason - } as DiscordCreateScheduledEvent - ) - - return TRANSFORMERS.event(result) -} - -export interface CreateScheduledEvent extends WithReason { - /** the channel id of the scheduled event. */ - channelId?: BigString - /** location of the event. Required for events with `entityType: ScheduledEventEntityType.External` */ - location?: string - /** the name of the scheduled event */ - name: string - /** the description of the scheduled event */ - description: string - /** the time the scheduled event will start */ - scheduledStartTime: string - /** the time the scheduled event will end if it does end. Required for events with `entityType: ScheduledEventEntityType.External` */ - scheduledEndTime?: string - /** the privacy level of the scheduled event */ - privacyLevel?: ScheduledEventPrivacyLevel - /** the type of hosting entity associated with a scheduled event */ - entityType: ScheduledEventEntityType -} diff --git a/packages/old/rest/src/helpers/guilds/events/deleteScheduledEvent.ts b/packages/old/rest/src/helpers/guilds/events/deleteScheduledEvent.ts deleted file mode 100644 index c38379854..000000000 --- a/packages/old/rest/src/helpers/guilds/events/deleteScheduledEvent.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes a scheduled event from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to delete the scheduled event from. - * @param eventId - The ID of the scheduled event to delete. - * - * @remarks - * Requires the `MANAGE_EVENTS` permission. - * - * Fires a _Guild Scheduled Event Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#delete-guild-scheduled-event} - */ -export async function deleteScheduledEvent ( - rest: RestManager, - guildId: BigString, - eventId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD_SCHEDULED_EVENT(guildId, eventId) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/events/editScheduledEvent.ts b/packages/old/rest/src/helpers/guilds/events/editScheduledEvent.ts deleted file mode 100644 index 1d8e4fa55..000000000 --- a/packages/old/rest/src/helpers/guilds/events/editScheduledEvent.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordEditScheduledEvent, - DiscordScheduledEvent, - ScheduledEventEntityType, - ScheduledEventPrivacyLevel, - ScheduledEventStatus, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Edits a scheduled event. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the scheduled event in. - * @param eventId - The ID of the scheduled event to edit. - * @returns An instance of the edited {@link ScheduledEvent}. - * - * @remarks - * Requires the `MANAGE_EVENTS` permission. - * - * To start or end an event, modify the event's `status` property. - * - * The `entity_metadata` property is discarded for events whose `entity_type` is not {@link ScheduledEventEntityType.External}. - * - * Fires a _Guild Scheduled Event Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#modify-guild-scheduled-event} - */ -export async function editScheduledEvent ( - rest: RestManager, - guildId: BigString, - eventId: BigString, - options: Partial -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.GUILD_SCHEDULED_EVENT(guildId, eventId), - { - channel_id: - options.channelId === null ? null : options.channelId?.toString(), - entity_metadata: options.location ? { location: options.location } : null, - name: options.name, - description: options.description, - scheduled_start_time: options.scheduledStartTime - ? new Date(options.scheduledStartTime).toISOString() - : undefined, - scheduled_end_time: options.scheduledEndTime - ? new Date(options.scheduledEndTime).toISOString() - : undefined, - privacy_level: options.privacyLevel, - entity_type: options.entityType, - status: options.status, - reason: options.reason - } as DiscordEditScheduledEvent - ) - - return TRANSFORMERS.event(result) -} - -export interface EditScheduledEvent extends WithReason { - /** the channel id of the scheduled event. null if switching to external event. */ - channelId: BigString | null - /** location of the event */ - location?: string - /** the name of the scheduled event */ - name: string - /** the description of the scheduled event */ - description?: string - /** the time the scheduled event will start */ - scheduledStartTime: string - /** the time the scheduled event will end if it does end. */ - scheduledEndTime?: string - /** the privacy level of the scheduled event */ - privacyLevel: ScheduledEventPrivacyLevel - /** the type of hosting entity associated with a scheduled event */ - entityType: ScheduledEventEntityType - /** the status of the scheduled event */ - status: ScheduledEventStatus -} diff --git a/packages/old/rest/src/helpers/guilds/events/getScheduledEvent.ts b/packages/old/rest/src/helpers/guilds/events/getScheduledEvent.ts deleted file mode 100644 index 41457e79d..000000000 --- a/packages/old/rest/src/helpers/guilds/events/getScheduledEvent.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordScheduledEvent } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets a scheduled event by its ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the scheduled event from. - * @param eventId - The ID of the scheduled event to get. - * @param options - The parameters for the fetching of the scheduled event. - * @returns An instance of {@link ScheduledEvent}. - * - * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#get-guild-scheduled-event} - */ -export async function getScheduledEvent ( - rest: RestManager, - guildId: BigString, - eventId: BigString, - options?: { withUserCount?: boolean } -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.GUILD_SCHEDULED_EVENT( - guildId, - eventId, - options?.withUserCount - ) - ) - - return TRANSFORMERS.event(result) -} diff --git a/packages/old/rest/src/helpers/guilds/events/getScheduledEventUsers.ts b/packages/old/rest/src/helpers/guilds/events/getScheduledEventUsers.ts deleted file mode 100644 index 04f6d9e48..000000000 --- a/packages/old/rest/src/helpers/guilds/events/getScheduledEventUsers.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordMember, DiscordUser, GetScheduledEventUsers } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' - -// TODO: This endpoint discards certain data from the result. -// Create `ScheduledEventUser` type and parse the data to it. - -/** - * Gets the list of subscribers to a scheduled event from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the subscribers to the scheduled event from. - * @param eventId - The ID of the scheduled event to get the subscribers of. - * @param options - The parameters for the fetching of the subscribers. - * @returns A collection of {@link User} objects assorted by user ID. - * - * @remarks - * Requires the `MANAGE_EVENTS` permission. - * - * Users are ordered by their IDs in _ascending_ order. - * - * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#get-guild-scheduled-event-users} - */ -export async function getScheduledEventUsers ( - rest: RestManager, - guildId: BigString, - eventId: BigString, - options?: GetScheduledEventUsers & { withMember?: false } -): Promise>> -export async function getScheduledEventUsers ( - rest: RestManager, - guildId: BigString, - eventId: BigString, - options?: GetScheduledEventUsers & { withMember: true } -): Promise, member: Camelize }>> -export async function getScheduledEventUsers ( - rest: RestManager, - guildId: BigString, - eventId: BigString, - options?: GetScheduledEventUsers -): Promise< - Collection> | Collection, member: Camelize }> - > { - const url = routes.GUILD_SCHEDULED_EVENT_USERS( - guildId, - eventId, - options - ) - - const results = await rest.runMethod< - Array<{ user: DiscordUser, member?: DiscordMember }> - >('GET', url) - - if (!options?.withMember) { - return new Collection( - results.map((result) => { - const user = TRANSFORMERS.user(result.user) - return [user.id, user] - }) - ) - } - - return new Collection( - results.map((result) => { - const user = TRANSFORMERS.user(result.user) - const member = TRANSFORMERS.member(result.member) - - return [user.id, { member, user }] - }) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/events/getScheduledEvents.ts b/packages/old/rest/src/helpers/guilds/events/getScheduledEvents.ts deleted file mode 100644 index 743151557..000000000 --- a/packages/old/rest/src/helpers/guilds/events/getScheduledEvents.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordScheduledEvent } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets the list of scheduled events for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the scheduled events from. - * @param options - The parameters for the fetching of the scheduled events. - * @returns A collection of {@link ScheduledEvent} objects assorted by event ID. - * - * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#list-scheduled-events-for-guild} - */ -export async function getScheduledEvents ( - rest: RestManager, - guildId: BigString, - options?: GetScheduledEvents -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_SCHEDULED_EVENTS( - guildId, - options?.withUserCount - ) - ) - - return new Collection( - results.map((result) => { - const event = TRANSFORMERS.event(result) - return [event.id, event] - }) - ) -} - -export interface GetScheduledEvents { - /** include number of users subscribed to each event */ - withUserCount?: boolean -} diff --git a/packages/old/rest/src/helpers/guilds/events/index.ts b/packages/old/rest/src/helpers/guilds/events/index.ts deleted file mode 100644 index 5502b9a8f..000000000 --- a/packages/old/rest/src/helpers/guilds/events/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './createScheduledEvent.js' -export * from './deleteScheduledEvent.js' -export * from './editScheduledEvent.js' -export * from './getScheduledEvent.js' -export * from './getScheduledEvents.js' -export * from './getScheduledEventUsers.js' diff --git a/packages/old/rest/src/helpers/guilds/getAuditLog.ts b/packages/old/rest/src/helpers/guilds/getAuditLog.ts deleted file mode 100644 index f64e441f0..000000000 --- a/packages/old/rest/src/helpers/guilds/getAuditLog.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordAuditLog, - GetGuildAuditLog -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Gets a guild's audit log. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the audit log of. - * @param options - The parameters for the fetching of the audit log. - * @returns An instance of {@link AuditLog}. - * - * @remarks - * Requires the `VIEW_AUDIT_LOG` permission. - * - * @see {@link https://discord.com/developers/docs/resources/audit-log#get-guild-audit-log} - */ -export async function getAuditLog ( - rest: RestManager, - guildId: BigString, - options?: GetGuildAuditLog -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.GUILD_AUDIT_LOGS(guildId, options) - ) - - return TRANSFORMERS.auditlogs.log(result) -} diff --git a/packages/old/rest/src/helpers/guilds/getBan.ts b/packages/old/rest/src/helpers/guilds/getBan.ts deleted file mode 100644 index 40b0fc51c..000000000 --- a/packages/old/rest/src/helpers/guilds/getBan.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordBan } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -// TODO: Move `Ban` into its own transformer file. - -/** - * Gets a ban by user ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the ban from. - * @param userId - The ID of the user to get the ban for. - * @returns An instance of {@link DiscordBan}. - * - * @remarks - * Requires the `BAN_MEMBERS` permission. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-ban} - */ -export async function getBan ( - rest: RestManager, - guildId: BigString, - userId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.GUILD_BAN(guildId, userId) - ) - - return { - reason: result.reason, - user: TRANSFORMERS.user(result.user) - } -} diff --git a/packages/old/rest/src/helpers/guilds/getBans.ts b/packages/old/rest/src/helpers/guilds/getBans.ts deleted file mode 100644 index 6ecc0f4a1..000000000 --- a/packages/old/rest/src/helpers/guilds/getBans.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordBan, - GetBans -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Gets the list of bans for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the list of bans for. - * @param options - The parameters for the fetching of the list of bans. - * @returns A collection of {@link DiscordBan} objects assorted by user ID. - * - * @remarks - * Requires the `BAN_MEMBERS` permission. - * - * Users are ordered by their IDs in _ascending_ order. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-bans} - */ -export async function getBans ( - rest: RestManager, - guildId: BigString, - options?: GetBans -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_BANS(guildId, options) - ) - - return new Collection( - results.map<[string, Camelize]>((result) => { - const user = TRANSFORMERS.user(result.user) - return [ - user.id, - { - reason: result.reason, - user - } - ] - }) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/getGuild.ts b/packages/old/rest/src/helpers/guilds/getGuild.ts deleted file mode 100644 index 8e1d17ef2..000000000 --- a/packages/old/rest/src/helpers/guilds/getGuild.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordGuild } from '@discordeno/types' -import type { RestManager } from '../../../../rest/src/restManager.js' - -/** - * Gets a guild by its ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get. - * @param options - The parameters for the fetching of the guild. - * @returns An instance of {@link Guild}. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild} - */ -export async function getGuild ( - rest: RestManager, - guildId: BigString, - options: { counts?: boolean } = { - counts: true - } -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.GUILD(guildId, options.counts) - ) - - return TRANSFORMERS.guild(result) -} diff --git a/packages/old/rest/src/helpers/guilds/getGuildBannerUrl.ts b/packages/old/rest/src/helpers/guilds/getGuildBannerUrl.ts deleted file mode 100644 index 1a281df25..000000000 --- a/packages/old/rest/src/helpers/guilds/getGuildBannerUrl.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, ImageFormat, ImageSize } from '@discordeno/types' -import { formatImageURL, iconBigintToHash } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -// TODO: Move `banner` from `options` into the parameters and rename to `imageHash`. - -/** - * Builds a URL to the guild banner stored in the Discord CDN. - * - * @param rest - The rest manager to use to build the URL. - * @param guildId - The ID of the guild to get the link to the banner for. - * @param options - The parameters for the building of the URL. - * @returns The link to the resource or `undefined` if no banner has been set. - */ -export function getGuildBannerURL ( - rest: RestManager, - guildId: BigString, - options: { - banner?: string | bigint - size?: ImageSize - format?: ImageFormat - } -): string | undefined { - return options.banner - ? formatImageURL( - routes.GUILD_BANNER( - guildId, - typeof options.banner === 'string' - ? options.banner - : iconBigintToHash(options.banner) - ), - options.size ?? 128, - options.format - ) - : undefined -} diff --git a/packages/old/rest/src/helpers/guilds/getGuildIconUrl.ts b/packages/old/rest/src/helpers/guilds/getGuildIconUrl.ts deleted file mode 100644 index 23cddc84f..000000000 --- a/packages/old/rest/src/helpers/guilds/getGuildIconUrl.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, ImageFormat, ImageSize } from '@discordeno/types' -import { formatImageURL, iconBigintToHash } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Builds a URL to the guild icon stored in the Discord CDN. - * - * @param rest - The rest manager to use to build the URL. - * @param guildId - The ID of the guild to get the link to the banner for. - * @param options - The parameters for the building of the URL. - * @returns The link to the resource or `undefined` if no banner has been set. - */ -export function getGuildIconURL ( - rest: RestManager, - guildId: BigString, - imageHash: BigString | undefined, - options?: { - size?: ImageSize - format?: ImageFormat - } -): string | undefined { - return imageHash - ? formatImageURL( - routes.GUILD_ICON( - guildId, - typeof imageHash === 'string' - ? imageHash - : iconBigintToHash(imageHash) - ), - options?.size ?? 128, - options?.format - ) - : undefined -} diff --git a/packages/old/rest/src/helpers/guilds/getGuildPreview.ts b/packages/old/rest/src/helpers/guilds/getGuildPreview.ts deleted file mode 100644 index e74252588..000000000 --- a/packages/old/rest/src/helpers/guilds/getGuildPreview.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - DiscordGuildPreview, - GuildFeatures -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Emoji } from '../../transformers/emoji.js' -import type { Sticker } from '../../transformers/sticker.js' - -export interface GuildPreview { - id: BigString - name?: string - icon?: string - splash?: string - discoverySplash?: string - emojis?: Emoji[] - features: GuildFeatures[] - approximateMemberCount: number - approximatePresenceCount: number - description?: string - stickers: Sticker[] -} - -// TODO: Move `GuildPreview` into its own transformer file. - -/** - * Gets the preview of a guild by a guild's ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the preview of. - * @returns An instance of {@link GuildPreview}. - * - * @remarks - * If the bot user is not in the guild, the guild must be lurkable. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-preview} - */ -export async function getGuildPreview ( - rest: RestManager, - guildId: BigString -): Promise { - const result = await rest.runMethod( - 'GET', - routes.GUILD_PREVIEW(guildId) - ) - - return TRANSFORMERS.preview(result) -} diff --git a/packages/old/rest/src/helpers/guilds/getGuildSplashUrl.ts b/packages/old/rest/src/helpers/guilds/getGuildSplashUrl.ts deleted file mode 100644 index 9cc0dab7e..000000000 --- a/packages/old/rest/src/helpers/guilds/getGuildSplashUrl.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, ImageFormat, ImageSize } from '@discordeno/types' -import { formatImageURL, iconBigintToHash } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Builds the URL to a guild splash stored in the Discord CDN. - * - * @param rest - The rest manager to use to build the URL. - * @param guildId - The ID of the guild to get the splash of. - * @param imageHash - The hash identifying the splash image. - * @param options - The parameters for the building of the URL. - * @returns The link to the resource or `undefined` if the guild does not have a splash image set. - */ -export function getGuildSplashURL ( - rest: RestManager, - guildId: BigString, - imageHash: BigString | undefined, - options?: { - size?: ImageSize - format?: ImageFormat - } -): string | undefined { - return imageHash - ? formatImageURL( - routes.GUILD_SPLASH( - guildId, - typeof imageHash === 'string' - ? imageHash - : iconBigintToHash(imageHash) - ), - options?.size ?? 128, - options?.format - ) - : undefined -} diff --git a/packages/old/rest/src/helpers/guilds/getPruneCount.ts b/packages/old/rest/src/helpers/guilds/getPruneCount.ts deleted file mode 100644 index 309c01c9f..000000000 --- a/packages/old/rest/src/helpers/guilds/getPruneCount.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, GetGuildPruneCountQuery } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -interface DiscordPrunedCount { - pruned: number -} - -/** - * Gets the number of members that would be kicked from a guild during pruning. - * - * @param rest - The rest manager used to make the request - * @param guildId - The ID of the guild to get the prune count of. - * @param options - The parameters for the fetching of the prune count. - * @returns A number indicating the number of members that would be kicked. - * - * @remarks - * Requires the `KICK_MEMBERS` permission. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-prune-count} - */ -export async function getPruneCount ( - rest: RestManager, - guildId: BigString, - options?: GetGuildPruneCountQuery -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.GUILD_PRUNE(guildId, options) - ) - - return result.pruned -} diff --git a/packages/old/rest/src/helpers/guilds/getVanityUrl.ts b/packages/old/rest/src/helpers/guilds/getVanityUrl.ts deleted file mode 100644 index 4ee27b558..000000000 --- a/packages/old/rest/src/helpers/guilds/getVanityUrl.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -export interface VanityUrl { - code: string | null - uses: number -} - -// TODO: Move `VanityUrl` into its own transformer file. - -/** - * Gets information about the vanity url of a guild. - * - * @param rest - The rest manager used to make the request - * @param guildId - The ID of the guild to get the vanity url information for. - * @returns An instance of {@link VanityUrl}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * The `code` property will be `null` if the guild does not have a set vanity url. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-vanity-url} - */ -export async function getVanityUrl ( - rest: RestManager, - guildId: BigString -): Promise { - return await rest.runMethod( - - 'GET', - routes.GUILD_VANITY_URL(guildId) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/getWelcomeScreen.ts b/packages/old/rest/src/helpers/guilds/getWelcomeScreen.ts deleted file mode 100644 index 69ee5036e..000000000 --- a/packages/old/rest/src/helpers/guilds/getWelcomeScreen.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, DiscordWelcomeScreen } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { WelcomeScreen } from '../../transformers/welcomeScreen.js' - -/** - * Gets the welcome screen for a guild. - * - * @param rest - The rest manager used to make the request - * @param guildId - The ID of the guild to get the welcome screen for. - * @returns An instance of {@link WelcomeScreen}. - * - * @remarks - * If the welcome screen is not enabled: - * - Requires the `MANAGE_GUILD` permission. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-welcome-screen} - */ -export async function getWelcomeScreen ( - rest: RestManager, - guildId: BigString -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.GUILD_WELCOME_SCREEN(guildId) - ) - - return TRANSFORMERS.welcomeScreen(result) -} diff --git a/packages/old/rest/src/helpers/guilds/index.ts b/packages/old/rest/src/helpers/guilds/index.ts deleted file mode 100644 index 59f2bec84..000000000 --- a/packages/old/rest/src/helpers/guilds/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -export * from './automod/index.js' -export * from './createGuild.js' -export * from './deleteGuild.js' -export * from './editGuild.js' -export * from './editGuildMfaLevel.js' -export * from './editWelcomeScreen.js' -export * from './events/index.js' -export * from './getAuditLog.js' -export * from './getBan.js' -export * from './getBans.js' -export * from './getGuild.js' -export * from './getGuildBannerUrl.js' -export * from './getGuildIconUrl.js' -export * from './getGuildPreview.js' -export * from './getGuildSplashUrl.js' -export * from './getPruneCount.js' -export * from './getVanityUrl.js' -export * from './getWelcomeScreen.js' -export * from './integrations/index.js' -export * from './invites/index.js' -export * from './leaveGuild.js' -export * from './voice/index.js' -export * from './widget/index.js' diff --git a/packages/old/rest/src/helpers/guilds/integrations/deleteIntegration.ts b/packages/old/rest/src/helpers/guilds/integrations/deleteIntegration.ts deleted file mode 100644 index 14d8498ee..000000000 --- a/packages/old/rest/src/helpers/guilds/integrations/deleteIntegration.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes an integration attached to a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild from which to delete the integration. - * @param integrationId - The ID of the integration to delete from the guild. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * Deletes all webhooks associated with the integration, and kicks the associated bot if there is one. - * - * Fires a _Guild Integrations Update_ gateway event. - * Fires a _Integration Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#delete-guild-integration} - */ -export async function deleteIntegration ( - rest: RestManager, - guildId: BigString, - integrationId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD_INTEGRATION(guildId, integrationId) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/integrations/getIntegrations.ts b/packages/old/rest/src/helpers/guilds/integrations/getIntegrations.ts deleted file mode 100644 index bbf1228ec..000000000 --- a/packages/old/rest/src/helpers/guilds/integrations/getIntegrations.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, DiscordIntegration } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { Integration } from '../../../transformers/integration.js' - -/** - * Gets the list of integrations attached to a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the list of integrations from. - * @returns A collection of {@link Integration} objects assorted by integration ID. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-integrations} - */ -export async function getIntegrations ( - rest: RestManager, - guildId: BigString -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.GUILD_INTEGRATIONS(guildId) - ) - - return new Collection( - results.map((result) => { - const integration = TRANSFORMERS.integration(result) - return [integration.id, integration] - }) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/integrations/index.ts b/packages/old/rest/src/helpers/guilds/integrations/index.ts deleted file mode 100644 index c6b9ef597..000000000 --- a/packages/old/rest/src/helpers/guilds/integrations/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './deleteIntegration.js' -export * from './getIntegrations.js' diff --git a/packages/old/rest/src/helpers/guilds/invites/createInvite.ts b/packages/old/rest/src/helpers/guilds/invites/createInvite.ts deleted file mode 100644 index 20d2a9fa5..000000000 --- a/packages/old/rest/src/helpers/guilds/invites/createInvite.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, DiscordCreateChannelInvite, DiscordInvite, TargetTypes, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { BaseInvite } from './getInvite.js' - -/** - * Creates an invite to a channel in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to create the invite to. - * @param options - The parameters for the creation of the invite. - * @returns An instance of the created {@link BaseInvite | Invite}. - * - * @remarks - * Requires the `CREATE_INSTANT_INVITE` permission. - * - * Fires an _Invite Create_ gateway event. - * - * @privateRemarks - * The request body is not optional, and an empty JSON object must be sent regardless of whether any fields are being transmitted. - * - * @see {@link https://discord.com/developers/docs/resources/channel#create-channel-invite} - */ -export async function createInvite ( - rest: RestManager, - channelId: BigString, - options: CreateChannelInvite = {} -): Promise { - const result = await rest.runMethod( - - 'POST', - routes.CHANNEL_INVITES(channelId), - { - max_age: options.maxAge, - max_uses: options.maxUses, - temporary: options.temporary, - unique: options.unique, - target_type: options.targetType, - target_user_id: options.targetUserId?.toString(), - target_application_id: options.targetApplicationId?.toString(), - reason: options.reason - } as DiscordCreateChannelInvite - ) - - return TRANSFORMERS.invites.invite(result) -} - -export interface CreateChannelInvite extends WithReason { - /** Duration of invite in seconds before expiry, or 0 for never. Between 0 and 604800 (7 days). Default: 86400 (24 hours) */ - maxAge?: number - /** Max number of users or 0 for unlimited. Between 0 and 100. Default: 0 */ - maxUses?: number - /** Whether this invite only grants temporary membership. Default: false */ - temporary?: boolean - /** If true, don't try to reuse similar invite (useful for creating many unique one time use invites). Default: false */ - unique?: boolean - /** The type of target for this voice channel invite */ - targetType?: TargetTypes - /** The id of the user whose stream to display for this invite, required if `target_type` is 1, the user must be streaming in the channel */ - targetUserId?: BigString - /** The id of the embedded application to open for this invite, required if `target_type` is 2, the application must have the `EMBEDDED` flag */ - targetApplicationId?: BigString -} diff --git a/packages/old/rest/src/helpers/guilds/invites/deleteInvite.ts b/packages/old/rest/src/helpers/guilds/invites/deleteInvite.ts deleted file mode 100644 index 32fe5f42b..000000000 --- a/packages/old/rest/src/helpers/guilds/invites/deleteInvite.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes an invite to a channel. - * - * @param rest - The rest manager to use to make the request. - * @param inviteCode - The invite code of the invite to delete. - * - * @remarks - * Requires the `MANAGE_CHANNELS` permission. - * - * Fires an _Invite Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#delete-channel-invite} - */ -export async function deleteInvite ( - rest: RestManager, - inviteCode: string, - reason?: string -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.INVITE(inviteCode), - reason ? { reason } : undefined - ) -} diff --git a/packages/old/rest/src/helpers/guilds/invites/getInvite.ts b/packages/old/rest/src/helpers/guilds/invites/getInvite.ts deleted file mode 100644 index 0c47ab289..000000000 --- a/packages/old/rest/src/helpers/guilds/invites/getInvite.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { Camelize, DiscordInviteMetadata, GetInvite } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets an invite to a channel by its invite code. - * - * @param rest - The rest manager to use to make the request. - * @param inviteCode - The invite code of the invite to get. - * @param options - The parameters for the fetching of the invite. - * @returns An instance of {@link BaseInvite | Invite}. - * - * @see {@link https://discord.com/developers/docs/resources/invite#get-invite} - */ -export async function getInvite ( - rest: RestManager, - inviteCode: string, - options?: GetInvite -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.INVITE(inviteCode, options) - ) - - return TRANSFORMERS.invites.metadata(result) -} diff --git a/packages/old/rest/src/helpers/guilds/invites/getInvites.ts b/packages/old/rest/src/helpers/guilds/invites/getInvites.ts deleted file mode 100644 index 1061253cf..000000000 --- a/packages/old/rest/src/helpers/guilds/invites/getInvites.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordInviteMetadata } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets the list of invites for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the invites from. - * @returns A collection of {@link InviteMetadata | Invite} objects assorted by invite code. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * @see {@link https://discord.com/developers/docs/resources/invite#get-invites} - */ -export async function getInvites ( - rest: RestManager, - guildId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_INVITES(guildId) - ) - - return new Collection( - results.map<[string, Camelize]>((result) => { - const inviteMetadata = TRANSFORMERS.invites.metadata(result) - return [inviteMetadata.code, inviteMetadata] - }) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/invites/index.ts b/packages/old/rest/src/helpers/guilds/invites/index.ts deleted file mode 100644 index fa1aa2bd4..000000000 --- a/packages/old/rest/src/helpers/guilds/invites/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './createInvite.js' -export * from './deleteInvite.js' -export * from './getInvite.js' -export * from './getInvites.js' diff --git a/packages/old/rest/src/helpers/guilds/leaveGuild.ts b/packages/old/rest/src/helpers/guilds/leaveGuild.ts deleted file mode 100644 index 977f02eea..000000000 --- a/packages/old/rest/src/helpers/guilds/leaveGuild.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Leaves a guild. - * - * @param rest - The rest manager used to make the request - * @param guildId - The ID of the guild to leave. - * - * @remarks - * Fires a _Guild Delete_ event. - * - * @see {@link https://discord.com/developers/docs/resources/user#leave-guild} - */ -export async function leaveGuild ( - rest: RestManager, - guildId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD_LEAVE(guildId) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/voice/editVoiceState.ts b/packages/old/rest/src/helpers/guilds/voice/editVoiceState.ts deleted file mode 100644 index 380dfafae..000000000 --- a/packages/old/rest/src/helpers/guilds/voice/editVoiceState.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordEditOwnVoiceState, DiscordEditUserVoiceState } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -export const updateBotVoiceState = editOwnVoiceState - -/** - * Edits the voice state of the bot user. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild in which to edit the voice state of the bot user. - * @param options - The parameters for the edit of the voice state. - * - * @remarks - * The {@link EditOwnVoiceState.channelId | channelId} property of the {@link options} object parameter must point to a stage channel, and the bot user must already have joined it. - * - * If attempting to unmute oneself: - * - Requires the `MUTE_MEMBERS` permission. - * - * If attempting to request to speak: - * - Requires the `REQUEST_TO_SPEAK` permission. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-current-user-voice-state} - */ -export async function editOwnVoiceState ( - rest: RestManager, - guildId: BigString, - options: EditOwnVoiceState -): Promise { - return await rest.runMethod( - - 'PATCH', - routes.UPDATE_VOICE_STATE(guildId), - { - channel_id: options.channelId, - suppress: options.suppress, - request_to_speak_timestamp: options.requestToSpeakTimestamp - ? new Date(options.requestToSpeakTimestamp).toISOString() - : options.requestToSpeakTimestamp - } as DiscordEditOwnVoiceState - ) -} - -// TODO: Make the `userId` property of `options` its own parameter. - -/** - * Edits the voice state of another user. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild in which to edit the voice state of the bot user. - * @param options - The parameters for the edit of the voice state. - * - * @remarks - * The {@link EditOwnVoiceState.channelId | channelId} property of the {@link options} object parameter must point to a stage channel, and the user must already have joined it. - * - * Requires the `MUTE_MEMBERS` permission. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-current-user-voice-state} - */ -export async function editUserVoiceState ( - rest: RestManager, - guildId: BigString, - options: EditUserVoiceState -): Promise { - return await rest.runMethod( - - 'PATCH', - routes.UPDATE_VOICE_STATE(guildId, options.userId), - { - channel_id: options.channelId, - suppress: options.suppress, - user_id: options.userId - } as DiscordEditUserVoiceState - ) -} - -/** https://discord.com/developers/docs/resources/guild#update-current-user-voice-state */ -export interface EditOwnVoiceState { - /** The id of the channel the user is currently in */ - channelId: BigString - /** Toggles the user's suppress state */ - suppress?: boolean - /** Sets the user's request to speak */ - requestToSpeakTimestamp?: number | null -} - -/** https://discord.com/developers/docs/resources/guild#update-user-voice-state */ -export interface EditUserVoiceState { - /** The id of the channel the user is currently in */ - channelId: BigString - /** Toggles the user's suppress state */ - suppress?: boolean - /** The user id to target */ - userId: BigString -} diff --git a/packages/old/rest/src/helpers/guilds/voice/getAvailableVoiceRegions.ts b/packages/old/rest/src/helpers/guilds/voice/getAvailableVoiceRegions.ts deleted file mode 100644 index 56e327f21..000000000 --- a/packages/old/rest/src/helpers/guilds/voice/getAvailableVoiceRegions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { DiscordVoiceRegion } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { VoiceRegions } from '../../../transformers/voiceRegion.js' - -/** - * Gets the list of available voice regions. - * - * @param rest - The rest manager to use to make the request. - * @returns A collection of {@link VoiceRegions | VoiceRegion} objects assorted by voice region ID. - */ -export async function getAvailableVoiceRegions ( - rest: RestManager -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.VOICE_REGIONS() - ) - - return new Collection( - results.map((result) => { - const region = TRANSFORMERS.voiceRegion(result) - return [region.id, region] - }) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/voice/getVoiceRegions.ts b/packages/old/rest/src/helpers/guilds/voice/getVoiceRegions.ts deleted file mode 100644 index 9953285e2..000000000 --- a/packages/old/rest/src/helpers/guilds/voice/getVoiceRegions.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, DiscordVoiceRegion } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { VoiceRegions } from '../../../transformers/voiceRegion.js' - -/** - * Gets the list of voice regions for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the voice regions for. - * @returns A collection of {@link VoiceRegions | VoiceRegion} objects assorted by voice region ID. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-voice-regions} - */ -export async function getVoiceRegions ( - rest: RestManager, - guildId: BigString -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.GUILD_REGIONS(guildId) - ) - - return new Collection( - results.map((result) => { - const region = TRANSFORMERS.voice(result) - return [region.id, region] - }) - ) -} diff --git a/packages/old/rest/src/helpers/guilds/voice/index.ts b/packages/old/rest/src/helpers/guilds/voice/index.ts deleted file mode 100644 index d48947f05..000000000 --- a/packages/old/rest/src/helpers/guilds/voice/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './editVoiceState.js' -export * from './getAvailableVoiceRegions.js' -export * from './getVoiceRegions.js' diff --git a/packages/old/rest/src/helpers/guilds/widget/editWidgetSettings.ts b/packages/old/rest/src/helpers/guilds/widget/editWidgetSettings.ts deleted file mode 100644 index 2f09554a0..000000000 --- a/packages/old/rest/src/helpers/guilds/widget/editWidgetSettings.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordEditGuildWidgetSettings, DiscordGuildWidgetSettings } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { GuildWidgetSettings } from '../../../transformers/widgetSettings.js' - -// TODO: Use `options` instead of `enabled` and `channelId`. - -/** - * Edits the settings of a guild's widget. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the settings of the widget of. - * @returns An instance of the edited {@link GuildWidgetSettings}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * Fires a _Guild Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-widget} - */ -export async function editWidgetSettings ( - rest: RestManager, - guildId: BigString, - enabled: boolean, - channelId?: string | null -): Promise> { - const result = await rest.runMethod( - - 'PATCH', - routes.GUILD_WIDGET(guildId), - { - enabled, - channel_id: channelId - } as DiscordEditGuildWidgetSettings - ) - - return TRANSFORMERS.widgetSettings(result) -} diff --git a/packages/old/rest/src/helpers/guilds/widget/getWidget.ts b/packages/old/rest/src/helpers/guilds/widget/getWidget.ts deleted file mode 100644 index 5cce8b16b..000000000 --- a/packages/old/rest/src/helpers/guilds/widget/getWidget.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordGuildWidget } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets the guild widget by guild ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the widget of. - * @returns An instance of {@link GuildWidget}. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-widget} - */ -export async function getWidget ( - rest: RestManager, - guildId: BigString -): Promise> { - const result = await rest.runMethod( - - 'GET', - routes.GUILD_WIDGET_JSON(guildId) - ) - - return TRANSFORMERS.widget(result) -} diff --git a/packages/old/rest/src/helpers/guilds/widget/getWidgetImageUrl.ts b/packages/old/rest/src/helpers/guilds/widget/getWidgetImageUrl.ts deleted file mode 100644 index c80f2f1ac..000000000 --- a/packages/old/rest/src/helpers/guilds/widget/getWidgetImageUrl.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Builds a URL to the guild widget image stored in the Discord CDN. - * - * @param rest - The rest manager to use to build the URL. - * @param guildId - The ID of the guild to get the link to the widget image for. - * @param options - The parameters for the building of the URL. - * @returns The link to the resource. - */ -export function getWidgetImageURL ( - rest: RestManager, - guildId: BigString, - options?: GetGuildWidgetImageQuery -): string { - return routes.GUILD_WIDGET_IMAGE(guildId, options?.style) -} - -/** https://discord.com/developers/docs/resources/guild#get-guild-widget-image-query-string-params */ -export interface GetGuildWidgetImageQuery { - /** - * Style of the widget returned, default: shield - * - * Shield: Widget with Discord icon and guild members online count. - * Banner1: Large image with guild icon, name and online count. "POWERED BY DISCORD" as the footer of the widget - * Banner2: Smaller widget style with guild icon, name and online count. Split on the right with Discord logo - * Banner3: Large image with guild icon, name and online count. In the footer, Discord logo on the left and "Chat Now" on the right - * Banner4: Large Discord logo at the top of the widget. Guild icon, name and online count in the middle portion of the widget and a "JOIN MY SERVER" button at the bottom - */ - style?: 'shield' | 'banner1' | 'banner2' | 'banner3' | 'banner4' -} diff --git a/packages/old/rest/src/helpers/guilds/widget/getWidgetSettings.ts b/packages/old/rest/src/helpers/guilds/widget/getWidgetSettings.ts deleted file mode 100644 index c2336a8b1..000000000 --- a/packages/old/rest/src/helpers/guilds/widget/getWidgetSettings.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordGuildWidgetSettings } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Gets the settings of a guild's widget. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the widget of. - * @returns An instance of {@link GuildWidgetSettings}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-widget-settings} - */ -export async function getWidgetSettings ( - rest: RestManager, - guildId: BigString -): Promise> { - const result = await rest.runMethod( - - 'GET', - routes.GUILD_WIDGET(guildId) - ) - - return TRANSFORMERS.widgetSettings(result) -} diff --git a/packages/old/rest/src/helpers/guilds/widget/index.ts b/packages/old/rest/src/helpers/guilds/widget/index.ts deleted file mode 100644 index 9be195699..000000000 --- a/packages/old/rest/src/helpers/guilds/widget/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './editWidgetSettings.js' -export * from './getWidget.js' -export * from './getWidgetImageUrl.js' -export * from './getWidgetSettings.js' diff --git a/packages/old/rest/src/helpers/index.ts b/packages/old/rest/src/helpers/index.ts deleted file mode 100644 index a372e2cc3..000000000 --- a/packages/old/rest/src/helpers/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export * from './channels/index.js' -export * from './emojis/index.js' -export * from './guilds/index.js' -export * from './interactions/index.js' -export * from './members/index.js' -export * from './messages/index.js' -export * from './misc/index.js' -export * from './roles/index.js' -export * from './stickers/index.js' -export * from './templates/index.js' -export * from './webhooks/index.js' diff --git a/packages/old/rest/src/helpers/interactions/commands/createGlobalApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/createGlobalApplicationCommand.ts deleted file mode 100644 index 3d4983695..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/createGlobalApplicationCommand.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { Camelize, DiscordApplicationCommand } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' -import type { CreateApplicationCommand } from '../../../types.js' - -/** - * Creates an application command accessible globally; across different guilds and channels. - * - * @param rest - The rest manager to use to make the request. - * @param command - The command to create. - * @returns An instance of the created {@link ApplicationCommand}. - * - * @remarks - * ⚠️ Creating a command with the same name as an existing command for your application will overwrite the old command. - * ⚠️ Global commands once created are cached for periods of __an hour__, so changes made to existing commands will take an hour to surface. - * ⚠️ You can only create up to 200 _new_ commands daily. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#create-global-application-command} - */ -export async function createGlobalApplicationCommand ( - rest: RestManager, - command: CreateApplicationCommand -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.COMMANDS(rest.applicationId), - utils.makeCreateCommandBody(command) - ) - - return TRANSFORMERS.command(result) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/createGuildApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/createGuildApplicationCommand.ts deleted file mode 100644 index 542b48e1e..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/createGuildApplicationCommand.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordApplicationCommand } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' -import type { CreateApplicationCommand } from '../../../types.js' - -/** - * Creates an application command only accessible in a specific guild. - * - * @param rest - The rest manager to use to make the request. - * @param command - The command to create. - * @param guildId - The ID of the guild to create the command for. - * @returns An instance of the created {@link ApplicationCommand}. - * - * @remarks - * ⚠️ Creating a command with the same name as an existing command for your application will overwrite the old command. - * ⚠️ You can only create up to 200 _new_ commands daily. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#create-guild-application-command} - */ -export async function createGuildApplicationCommand ( - rest: RestManager, - command: CreateApplicationCommand, - guildId: BigString -): Promise { - const result = await rest.runMethod( - - 'POST', - routes.COMMANDS_GUILD(rest.applicationId, guildId), - rest.transformers.reverse.createApplicationCommand(rest, command) - ) - - return rest.transformers.applicationCommand(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/deleteGlobalApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/deleteGlobalApplicationCommand.ts deleted file mode 100644 index 84142a146..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/deleteGlobalApplicationCommand.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes an application command registered globally. - * - * @param rest - The rest manager to use to make the request. - * @param commandId - The ID of the command to delete. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#delete-global-application-command} - */ -export async function deleteGlobalApplicationCommand ( - rest: RestManager, - commandId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.COMMANDS_ID(rest.applicationId, commandId) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/deleteGuildApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/deleteGuildApplicationCommand.ts deleted file mode 100644 index ff9523d8a..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/deleteGuildApplicationCommand.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -// TODO: `guildId` and `commandId` should be swapped. - -/** - * Deletes an application command registered in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to delete the command from. - * @param commandId - The ID of the command to delete from the guild. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#delete-guild-application-command} - */ -export async function deleteGuildApplicationCommand ( - rest: RestManager, - commandId: BigString, - guildId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.COMMANDS_GUILD_ID( - rest.applicationId, - guildId, - commandId - ) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/editApplicationCommandPermissions.ts b/packages/old/rest/src/helpers/interactions/commands/editApplicationCommandPermissions.ts deleted file mode 100644 index c863cc2e7..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/editApplicationCommandPermissions.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - ApplicationCommandPermissionTypes, - BigString, - DiscordGuildApplicationCommandPermissions -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommandPermission } from '../../../transformers/applicationCommandPermission.js' - -// TODO: Make `options` into an object with a `permissions` field. - -/** - * Edits the permissions for a guild application command. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the command is registered in. - * @param commandId - The ID of the command to edit the permissions of. - * @param bearerToken - The bearer token to use to make the request. - * @param options - The parameters for the edit of the command permissions. - * @returns An instance of the edited {@link ApplicationCommandPermission}. - * - * @remarks - * The bearer token requires the `applications.commands.permissions.update` scope to be enabled, and to have access to the guild whose ID has been provided in the parameters. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#edit-application-command-permissions} - */ -export async function editApplicationCommandPermissions ( - rest: RestManager, - guildId: BigString, - commandId: BigString, - /** Bearer token which has the `applications.commands.permissions.update` scope and also access to this guild. */ - bearerToken: string, - options: ApplicationCommandPermissions[] -): Promise { - const result = - await rest.runMethod( - - 'PUT', - routes.COMMANDS_PERMISSION( - rest.applicationId, - guildId, - commandId - ), - { - permissions: options - }, - { - headers: { authorization: `Bearer ${bearerToken}` } - } - ) - - return rest.transformers.applicationCommandPermission(rest, result) -} - -/** https://discord.com/developers/docs/interactions/application-commands#edit-application-command-permissions */ -export interface ApplicationCommandPermissions { - /** The id of the role or user */ - id: string - /** Role or User */ - type: ApplicationCommandPermissionTypes - /** `true` to allow, `false`, to disallow */ - permission: boolean -} diff --git a/packages/old/rest/src/helpers/interactions/commands/editGlobalApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/editGlobalApplicationCommand.ts deleted file mode 100644 index 0f324828e..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/editGlobalApplicationCommand.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordApplicationCommand } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' -import type { CreateApplicationCommand } from '../../../types.js' - -/** - * Edits a global application command. - * - * @param rest - The rest manager to use to make the request. - * @param commandId - The ID of the command to edit. - * @param options - The parameters for the edit of the command. - * @returns An instance of the edited {@link ApplicationCommand}. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#edit-global-application-command} - */ -export async function editGlobalApplicationCommand ( - rest: RestManager, - commandId: BigString, - options: CreateApplicationCommand -): Promise { - const result = await rest.runMethod( - - 'PATCH', - routes.COMMANDS_ID(rest.applicationId, commandId), - rest.transformers.reverse.createApplicationCommand(rest, options) - ) - - return rest.transformers.applicationCommand(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/editGuildApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/editGuildApplicationCommand.ts deleted file mode 100644 index e28aa3a47..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/editGuildApplicationCommand.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordApplicationCommand } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' -import type { CreateApplicationCommand } from '../../../types.js' - -// TODO: Swap `commandId` and `guildId` parameters. - -/** - * Edits an application command registered in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the command is registered in. - * @param commandId - The ID of the command to edit. - * @param options - The parameters for the edit of the command. - * @returns An instance of the edited {@link ApplicationCommand}. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#edit-guild-application-command} - */ -export async function editGuildApplicationCommand ( - rest: RestManager, - commandId: BigString, - guildId: BigString, - options: CreateApplicationCommand -): Promise { - const result = await rest.runMethod( - - 'PATCH', - routes.COMMANDS_GUILD_ID( - rest.applicationId, - guildId, - commandId - ), - rest.transformers.reverse.createApplicationCommand(rest, options) - ) - - return rest.transformers.applicationCommand(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermission.ts b/packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermission.ts deleted file mode 100644 index 75c527b18..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermission.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - DiscordGuildApplicationCommandPermissions -} from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommandPermission } from '../../../transformers/applicationCommandPermission.js' - -/** - * Gets the permissions of a guild application command. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the command is registered in. - * @param commandId - The ID of the command to get the permissions of. - * @returns An instance of {@link ApplicationCommandPermission}. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#get-application-command-permissions} - */ -export async function getApplicationCommandPermission ( - rest: RestManager, - guildId: BigString, - commandId: BigString -): Promise { - const result = - await rest.runMethod( - - 'GET', - routes.COMMANDS_PERMISSION( - rest.applicationId, - guildId, - commandId - ) - ) - - return rest.transformers.applicationCommandPermission(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermissions.ts b/packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermissions.ts deleted file mode 100644 index 6a7438f2b..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/getApplicationCommandPermissions.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - BigString, - DiscordGuildApplicationCommandPermissions -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommandPermission } from '../../../transformers/applicationCommandPermission.js' - -/** - * Gets the permissions of all application commands registered in a guild by the ID of the guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the permissions objects of. - * @returns A collection of {@link ApplicationCommandPermission} objects assorted by command ID. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#get-guild-application-command-permissions} - */ -export async function getApplicationCommandPermissions ( - rest: RestManager, - guildId: BigString -): Promise> { - const results = await rest.runMethod< - DiscordGuildApplicationCommandPermissions[] - >( - - 'GET', - routes.COMMANDS_PERMISSIONS(rest.applicationId, guildId) - ) - - return new Collection( - results.map((result) => { - const permission = rest.transformers.applicationCommandPermission( - rest, - result - ) - return [permission.id, permission] - }) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommand.ts deleted file mode 100644 index 8110a29e1..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommand.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordApplicationCommand } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' - -/** - * Gets a global application command by its ID. - * - * @param rest - The rest manager to use to make the request. - * @param commandId - The ID of the command to get. - * @returns An instance of {@link ApplicationCommand}. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#get-global-application-command} - */ -export async function getGlobalApplicationCommand ( - rest: RestManager, - commandId: BigString -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.COMMANDS_ID(rest.applicationId, commandId) - ) - - return rest.transformers.applicationCommand(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommands.ts b/packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommands.ts deleted file mode 100644 index d77c31b2c..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/getGlobalApplicationCommands.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordApplicationCommand } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' - -// TODO: Implement `with_localizations` options field. - -/** - * Gets the list of your bot's global application commands. - * - * @param rest - The rest manager to use to make the request. - * @returns A collection of {@link ApplicationCommand} objects assorted by command ID. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#get-global-application-commands} - */ -export async function getGlobalApplicationCommands ( - rest: RestManager -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.COMMANDS(rest.applicationId) - ) - - return new Collection( - results.map((result) => { - const command = rest.transformers.applicationCommand(rest, result) - return [command.id, command] - }) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommand.ts b/packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommand.ts deleted file mode 100644 index 3d59a990f..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommand.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordApplicationCommand } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' - -// TODO: Swap `commandId` and `guildId` parameters. - -/** - * Gets a guild application command by its ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the command is registered in. - * @param commandId - The ID of the command to get. - * @returns An instance of {@link ApplicationCommand}. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#get-guild-application-command} - */ -export async function getGuildApplicationCommand ( - rest: RestManager, - commandId: BigString, - guildId: BigString -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.COMMANDS_GUILD_ID( - rest.applicationId, - guildId, - commandId - ) - ) - - return rest.transformers.applicationCommand(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommands.ts b/packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommands.ts deleted file mode 100644 index 08e376ba4..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/getGuildApplicationCommands.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordApplicationCommand } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' - -/** - * Gets the list of application commands registered by your bot in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the commands are registered in. - * @returns A collection of {@link ApplicationCommand} objects assorted by command ID. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#get-global-application-commandss} - */ -export async function getGuildApplicationCommands ( - rest: RestManager, - guildId: BigString -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.COMMANDS_GUILD(rest.applicationId, guildId) - ) - - return new Collection( - results.map((result) => { - const command = rest.transformers.applicationCommand(rest, result) - return [command.id, command] - }) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/index.ts b/packages/old/rest/src/helpers/interactions/commands/index.ts deleted file mode 100644 index 3f786b509..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from './createGlobalApplicationCommand.js' -export * from './createGuildApplicationCommand.js' -export * from './deleteGlobalApplicationCommand.js' -export * from './deleteGuildApplicationCommand.js' -export * from './editApplicationCommandPermissions.js' -export * from './editGlobalApplicationCommand.js' -export * from './editGuildApplicationCommand.js' -export * from './getApplicationCommandPermission.js' -export * from './getApplicationCommandPermissions.js' -export * from './getGlobalApplicationCommand.js' -export * from './getGlobalApplicationCommands.js' -export * from './getGuildApplicationCommand.js' -export * from './getGuildApplicationCommands.js' -export * from './upsertGlobalApplicationCommands.js' -export * from './upsertGuildApplicationCommands.js' diff --git a/packages/old/rest/src/helpers/interactions/commands/upsertGlobalApplicationCommands.ts b/packages/old/rest/src/helpers/interactions/commands/upsertGlobalApplicationCommands.ts deleted file mode 100644 index 492f4ff8c..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/upsertGlobalApplicationCommands.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordApplicationCommand } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' -import type { CreateApplicationCommand } from '../../../types.js' - -/** - * Re-registers the list of global application commands, overwriting the previous commands completely. - * - * @param rest - The rest manager to use to make the request. - * @param commands - The list of commands to use to overwrite the previous list. - * @returns A collection of {@link ApplicationCommand} objects assorted by command ID. - * - * @remarks - * ❗ Commands that are not present in the `commands` array will be __deleted__. - * - * ⚠️ Commands that do not already exist will count towards the daily limit of _200_ new commands. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-global-application-commands} - */ -export async function upsertGlobalApplicationCommands ( - rest: RestManager, - commands: CreateApplicationCommand[] -): Promise> { - const results = await rest.runMethod( - - 'PUT', - routes.COMMANDS(rest.applicationId), - commands.map((command) => - rest.transformers.reverse.createApplicationCommand(rest, command) - ) - ) - - return new Collection( - results.map((result) => { - const command = rest.transformers.applicationCommand(rest, result) - return [command.id, command] - }) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/commands/upsertGuildApplicationCommands.ts b/packages/old/rest/src/helpers/interactions/commands/upsertGuildApplicationCommands.ts deleted file mode 100644 index 58f4d7b6a..000000000 --- a/packages/old/rest/src/helpers/interactions/commands/upsertGuildApplicationCommands.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordApplicationCommand } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { ApplicationCommand } from '../../../transformers/applicationCommand.js' -import type { CreateApplicationCommand } from '../../../types.js' - -/** - * Re-registers the list of application commands registered in a guild, overwriting the previous commands completely. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild whose list of commands to overwrite. - * @param commands - The list of commands to use to overwrite the previous list. - * @returns A collection of {@link ApplicationCommand} objects assorted by command ID. - * - * @remarks - * ❗ Commands that are not present in the `commands` array will be __deleted__. - * - * ⚠️ Commands that do not already exist will count towards the daily limit of _200_ new commands. - * - * @see {@link https://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-guild-application-commands} - */ -export async function upsertGuildApplicationCommands ( - rest: RestManager, - guildId: BigString, - commands: CreateApplicationCommand[] -): Promise> { - const results = await rest.runMethod( - - 'PUT', - routes.COMMANDS_GUILD(rest.applicationId, guildId), - commands.map((command) => - rest.transformers.reverse.createApplicationCommand(rest, command) - ) - ) - - return new Collection( - results.map((result) => { - const command = rest.transformers.applicationCommand(rest, result) - return [command.id, command] - }) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/index.ts b/packages/old/rest/src/helpers/interactions/index.ts deleted file mode 100644 index e66d8fb8d..000000000 --- a/packages/old/rest/src/helpers/interactions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './commands/index.js' -export * from './responses/index.js' diff --git a/packages/old/rest/src/helpers/interactions/responses/deleteFollowupMessage.ts b/packages/old/rest/src/helpers/interactions/responses/deleteFollowupMessage.ts deleted file mode 100644 index 9585a71f0..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/deleteFollowupMessage.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes a follow-up message to an interaction. - * - * @param rest - The rest manager to use to make the request. - * @param token - The interaction token to use, provided in the original interaction. - * @param messageId - The ID of the message to delete. - * - * @remarks - * Unlike `deleteMessage()`, this endpoint allows the bot user to act without needing to see the channel the message is in. - * - * Fires a _Message Delete_ event. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#delete-followup-message} - */ -export async function deleteFollowupMessage ( - rest: RestManager, - token: string, - messageId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.INTERACTION_ID_TOKEN_MESSAGE_ID( - rest.applicationId, - token, - messageId - ) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/responses/deleteOriginalInteractionResponse.ts b/packages/old/rest/src/helpers/interactions/responses/deleteOriginalInteractionResponse.ts deleted file mode 100644 index 908c63e93..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/deleteOriginalInteractionResponse.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes the initial message response to an interaction. - * - * @param rest - The rest manager to use to make the request. - * @param token - The interaction token to use, provided in the original interaction. - * - * @remarks - * Unlike `deleteMessage()`, this endpoint allows the bot user to act without needing to see the channel the message is in. - * - * Fires a _Message Delete_ event. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#delete-original-interaction-response} - */ -export async function deleteOriginalInteractionResponse ( - rest: RestManager, - token: string -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.INTERACTION_ORIGINAL_ID_TOKEN( - rest.applicationId, - token - ) - ) -} diff --git a/packages/old/rest/src/helpers/interactions/responses/editFollowupMessage.ts b/packages/old/rest/src/helpers/interactions/responses/editFollowupMessage.ts deleted file mode 100644 index 3e32f97c3..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/editFollowupMessage.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordMessage } from '@discordeno/types' -import { InteractionResponseTypes } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { Message } from '../../../transformers/message.js' -import type { InteractionCallbackData } from '../../../types.js' - -/** - * Edits a follow-up message to an interaction. - * - * @param rest - The rest manager to use to make the request. - * @param token - The interaction token to use, provided in the original interaction. - * @param messageId - The ID of the message to edit. - * @param options - The parameters for the edit of the message. - * @returns An instance of the edited {@link Message}. - * - * @remarks - * Unlike `editMessage()`, this endpoint allows the bot user to act without needing to see the channel the message is in. - * - * Does not support ephemeral follow-up messages due to these being stateless. - * - * Fires a _Message Update_ event. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#edit-followup-message} - */ -export async function editFollowupMessage ( - rest: RestManager, - token: string, - messageId: BigString, - options: InteractionCallbackData -): Promise { - const result = await rest.runMethod( - - 'PATCH', - routes.WEBHOOK_MESSAGE(rest.applicationId, token, messageId), - { - messageId: messageId.toString(), - ...rest.transformers.reverse.interactionResponse(rest, { - type: InteractionResponseTypes.UpdateMessage, - data: options - }).data, - file: options.file - } - ) - - return rest.transformers.message(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/responses/editOriginalInteractionResponse.ts b/packages/old/rest/src/helpers/interactions/responses/editOriginalInteractionResponse.ts deleted file mode 100644 index 9ea9bd5bf..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/editOriginalInteractionResponse.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordMessage } from '@discordeno/types' -import { InteractionResponseTypes } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { Message } from '../../../transformers/message.js' -import type { InteractionCallbackData } from '../../../types.js' - -/** - * Edits the initial message response to an interaction. - * - * @param rest - The rest manager to use to make the request. - * @param token - The interaction token to use, provided in the original interaction. - * @param options - The parameters for the edit of the response. - * @returns An instance of the edited {@link Message}. - * - * @remarks - * Unlike `editMessage()`, this endpoint allows the bot user to act without needing to see the channel the message is in. - * - * Does not support ephemeral follow-up messages due to these being stateless. - * - * Fires a _Message Update_ event. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#edit-original-interaction-response} - */ -export async function editOriginalInteractionResponse ( - rest: RestManager, - token: string, - options: InteractionCallbackData -): Promise { - const result = await rest.runMethod( - - 'PATCH', - routes.INTERACTION_ORIGINAL_ID_TOKEN( - rest.applicationId, - token - ), - { - ...rest.transformers.reverse.interactionResponse(rest, { - type: InteractionResponseTypes.UpdateMessage, - data: options - }).data, - file: options.file - } - ) - - return rest.transformers.message(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/responses/getFollowupMessage.ts b/packages/old/rest/src/helpers/interactions/responses/getFollowupMessage.ts deleted file mode 100644 index 56636fac7..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/getFollowupMessage.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordMessage } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { Message } from '../../../transformers/message.js' - -/** - * Gets a follow-up message to an interaction by the ID of the message. - * - * @param rest - The rest manager to use to make the request. - * @param token - The interaction token to use, provided in the original interaction. - * @param messageId - The ID of the message to get. - * @returns An instance of {@link Message}. - * - * @remarks - * Unlike `getMessage()`, this endpoint allows the bot user to act without: - * - Needing to be able to see the contents of the channel that the message is in. (`READ_MESSAGES` permission.) - * - Requiring the `MESSAGE_CONTENT` intent. - * - * Does not support ephemeral follow-up messages due to these being stateless. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#get-followup-message} - */ -export async function getFollowupMessage ( - rest: RestManager, - token: string, - messageId: BigString -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.INTERACTION_ID_TOKEN_MESSAGE_ID( - rest.applicationId, - token, - messageId - ) - ) - - return rest.transformers.message(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/responses/getOriginalInteractionResponse.ts b/packages/old/rest/src/helpers/interactions/responses/getOriginalInteractionResponse.ts deleted file mode 100644 index ecc084984..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/getOriginalInteractionResponse.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordMessage } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { Message } from '../../../transformers/message.js' - -/** - * Gets the initial message response to an interaction. - * - * @param rest - The rest manager to use to make the request. - * @param token - The interaction token to use, provided in the original interaction. - * @returns An instance of {@link Message}. - * - * @remarks - * Unlike `getMessage()`, this endpoint allows the bot user to act without: - * - Needing to be able to see the contents of the channel that the message is in. (`READ_MESSAGES` permission.) - * - Requiring the `MESSAGE_CONTENT` intent. - * - * Does not support ephemeral follow-up messages due to these being stateless. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#get-original-interaction-response} - */ -export async function getOriginalInteractionResponse ( - rest: RestManager, - token: string -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.INTERACTION_ORIGINAL_ID_TOKEN( - rest.applicationId, - token - ) - ) - - return rest.transformers.message(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/responses/index.ts b/packages/old/rest/src/helpers/interactions/responses/index.ts deleted file mode 100644 index d3de98948..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './deleteFollowupMessage.js' -export * from './deleteOriginalInteractionResponse.js' -export * from './editFollowupMessage.js' -export * from './editOriginalInteractionResponse.js' -export * from './getFollowupMessage.js' -export * from './getOriginalInteractionResponse.js' -export * from './sendFollowupMessage.js' -export * from './sendInteractionResponse.js' diff --git a/packages/old/rest/src/helpers/interactions/responses/sendFollowupMessage.ts b/packages/old/rest/src/helpers/interactions/responses/sendFollowupMessage.ts deleted file mode 100644 index bf775d2e3..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/sendFollowupMessage.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordMessage } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { Message } from '../../../transformers/message.js' -import type { InteractionResponse } from '../../../types.js' - -/** - * Sends a follow-up message to an interaction. - * - * @param rest - The rest manager to use to make the request. - * @param token - The interaction token to use, provided in the original interaction. - * @param options - The parameters for the creation of the message. - * @returns An instance of the created {@link Message}. - * - * @remarks - * ⚠️ Interaction tokens are only valid for _15 minutes_. - * - * By default, mentions are suppressed. To enable mentions, pass a mention object with the callback data. - * - * Unlike `sendMessage()`, this endpoint allows the bot user to act without: - * - Needing to be able to see the contents of the channel that the message is in. (`READ_MESSAGES` permission.) - * - Requiring the `MESSAGE_CONTENT` intent. - * - * Fires a _Message Create_ event. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#create-followup-message} - */ -export async function sendFollowupMessage ( - rest: RestManager, - token: string, - options: InteractionResponse -): Promise { - const result = await rest.sendRequest(rest, { - url: routes.WEBHOOK(rest.applicationId, token), - method: 'POST', - payload: rest.createRequestBody(rest, { - method: 'POST', - body: { - ...rest.transformers.reverse.interactionResponse(rest, options).data, - file: options.data?.file - }, - // remove authorization header - headers: { Authorization: '' } - }) - }) - - return rest.transformers.message(rest, result) -} diff --git a/packages/old/rest/src/helpers/interactions/responses/sendInteractionResponse.ts b/packages/old/rest/src/helpers/interactions/responses/sendInteractionResponse.ts deleted file mode 100644 index 3126015d3..000000000 --- a/packages/old/rest/src/helpers/interactions/responses/sendInteractionResponse.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import type { InteractionResponse } from '../../../types.js' - -/** - * Sends a response to an interaction. - * - * @param rest - The rest manager to use to make the request. - * @param interactionId - The ID of the interaction to respond to. - * @param token - The interaction token to use, provided in the original interaction. - * @param options - The parameters for the creation of the message. - * @returns An instance of the created {@link Message}. - * - * @remarks - * ⚠️ Interaction tokens are only valid for _15 minutes_. - * - * By default, mentions are suppressed. To enable mentions, pass a mention object with the callback data. - * - * Unlike `sendMessage()`, this endpoint allows the bot user to act without: - * - Needing to be able to see the contents of the channel that the message is in. (`READ_MESSAGES` permission.) - * - Requiring the `MESSAGE_CONTENT` intent. - * - * Fires a _Message Create_ event. - * - * @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#create-interaction-response} - */ -export async function sendInteractionResponse ( - rest: RestManager, - interactionId: BigString, - token: string, - options: InteractionResponse -): Promise { - return await rest.sendRequest(rest, { - url: routes.INTERACTION_ID_TOKEN(interactionId, token), - method: 'POST', - payload: rest.createRequestBody(rest, { - method: 'POST', - body: { - ...rest.transformers.reverse.interactionResponse(rest, options), - file: options.data?.file - }, - // Remove authorization header - headers: { Authorization: '' } - }) - }) -} diff --git a/packages/old/rest/src/helpers/members/banMember.ts b/packages/old/rest/src/helpers/members/banMember.ts deleted file mode 100644 index aa6e019b3..000000000 --- a/packages/old/rest/src/helpers/members/banMember.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordCreateGuildBan, WithReason } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Bans a user from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to ban the user from. - * @param userId - The ID of the user to ban from the guild. - * @param options - The parameters for the creation of the ban. - * - * @remarks - * Requires the `BAN_MEMBERS` permission. - * - * Fires a _Guild Ban Add_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#create-guild-ban} - */ -export async function banMember ( - rest: RestManager, - guildId: BigString, - userId: BigString, - options?: CreateGuildBan -): Promise { - return await rest.runMethod( - - 'PUT', - routes.GUILD_BAN(guildId, userId), - { - delete_message_seconds: options?.deleteMessageSeconds, - reason: options?.reason - } as DiscordCreateGuildBan - ) -} - -/** https://discord.com/developers/docs/resources/guild#create-guild-ban */ -export interface CreateGuildBan extends WithReason { - /** Number of seconds to delete messages for, between 0 and 604800 (7 days) */ - deleteMessageSeconds?: number -} diff --git a/packages/old/rest/src/helpers/members/editBotMember.ts b/packages/old/rest/src/helpers/members/editBotMember.ts deleted file mode 100644 index 16d5fc14b..000000000 --- a/packages/old/rest/src/helpers/members/editBotMember.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordEditBotMemberOptions, - DiscordMember, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Edits the nickname of the bot user. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the nickname of the bot user in. - * @param options - The parameters for the edit of the nickname. - * @returns An instance of the edited {@link DiscordMember} - * - * @remarks - * Fires a _Guild Member Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-current-member} - */ -export async function editBotMember ( - rest: RestManager, - guildId: BigString, - options: EditBotMemberOptions -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.USER_NICK(guildId), - { - nick: options.nick, - reason: options.reason - } as DiscordEditBotMemberOptions - ) - - return TRANSFORMERS.member(result) -} - -export interface EditBotMemberOptions extends WithReason { - nick?: string | null -} diff --git a/packages/old/rest/src/helpers/members/editMember.ts b/packages/old/rest/src/helpers/members/editMember.ts deleted file mode 100644 index 41711d025..000000000 --- a/packages/old/rest/src/helpers/members/editMember.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordMember, - DiscordMemberWithUser, - DiscordModifyGuildMember -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Edits a member's properties. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the member of. - * @param userId - The user ID of the member to edit. - * @param options - The parameters for the edit of the user. - * - * @remarks - * This endpoint requires various permissions depending on what is edited about the member. - * To find out the required permission to enact a change, read the documentation of this endpoint's {@link ModifyGuildMember | parameters}. - * - * Fires a _Guild Member Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-member} - */ -export async function editMember ( - rest: RestManager, - guildId: BigString, - userId: BigString, - options: ModifyGuildMember -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.GUILD_MEMBER(guildId, userId), - { - nick: options.nick, - roles: options.roles?.map((id) => id.toString()), - mute: options.mute, - deaf: options.deaf, - channel_id: options.channelId?.toString(), - communication_disabled_until: options.communicationDisabledUntil - ? new Date(options.communicationDisabledUntil).toISOString() - : options.communicationDisabledUntil - } as DiscordModifyGuildMember - ) - - return TRANSFORMERS.member(result) -} - -/** https://discord.com/developers/docs/resources/guild#modify-guild-member */ -export interface ModifyGuildMember { - /** Value to set users nickname to. Requires the `MANAGE_NICKNAMES` permission */ - nick?: string | null - /** Array of role ids the member is assigned. Requires the `MANAGE_ROLES` permission */ - roles?: BigString[] | null - /** Whether the user is muted in voice channels. Will throw a 400 if the user is not in a voice channel. Requires the `MUTE_MEMBERS` permission */ - mute?: boolean | null - /** Whether the user is deafened in voice channels. Will throw a 400 if the user is not in a voice channel. Requires the `MOVE_MEMBERS` permission */ - deaf?: boolean | null - /** Id of channel to move user to (if they are connected to voice). Requires the `MOVE_MEMBERS` permission */ - channelId?: BigString | null - /** when the user's timeout will expire and the user will be able to communicate in the guild again (up to 28 days in the future), set to null to remove timeout. Requires the `MODERATE_MEMBERS` permission */ - communicationDisabledUntil?: number | null -} diff --git a/packages/old/rest/src/helpers/members/getAvatarUrl.ts b/packages/old/rest/src/helpers/members/getAvatarUrl.ts deleted file mode 100644 index ebd722933..000000000 --- a/packages/old/rest/src/helpers/members/getAvatarUrl.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, ImageFormat, ImageSize } from '@discordeno/types' -import { formatImageURL, iconBigintToHash } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Builds a URL to a user's avatar stored in the Discord CDN. - * - * @param rest - The rest manager to use to build the URL. - * @param userId - The ID of the user to get the avatar of. - * @param discriminator - The user's discriminator. (4-digit tag after the hashtag.) - * @param options - The parameters for the building of the URL. - * @returns The link to the resource. - */ -export function getAvatarURL ( - rest: RestManager, - userId: BigString, - discriminator: string, - options?: { - avatar: BigString | undefined - size?: ImageSize - format?: ImageFormat - } -): string { - return options?.avatar - ? formatImageURL( - routes.USER_AVATAR( - userId, - typeof options?.avatar === 'string' - ? options.avatar - : iconBigintToHash(options?.avatar) - ), - options?.size ?? 128, - options?.format - ) - : routes.USER_DEFAULT_AVATAR(Number(discriminator) % 5) -} diff --git a/packages/old/rest/src/helpers/members/getDmChannel.ts b/packages/old/rest/src/helpers/members/getDmChannel.ts deleted file mode 100644 index 83a0fec08..000000000 --- a/packages/old/rest/src/helpers/members/getDmChannel.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordChannel, DiscordGetDMChannel } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Channel } from '../../transformers/channel.js' - -/** - * Gets or creates a DM channel with a user. - * - * @param rest - The rest manager to use to make the request. - * @param userId - The ID of the user to create the DM channel with. - * @returns An instance of {@link Channel}. - * - * @see {@link https://discord.com/developers/docs/resources/user#create-dm} - */ -export async function getDmChannel ( - rest: RestManager, - userId: BigString -): Promise { - const result = await rest.runMethod( - - 'POST', - routes.USER_DM(), - { - recipient_id: userId.toString() - } as DiscordGetDMChannel - ) - - return rest.transformers.channel(rest, { channel: result }) -} diff --git a/packages/old/rest/src/helpers/members/getMember.ts b/packages/old/rest/src/helpers/members/getMember.ts deleted file mode 100644 index 09601e3f8..000000000 --- a/packages/old/rest/src/helpers/members/getMember.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordMemberWithUser -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Gets the member object by user ID. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the member object for. - * @param userId - The ID of the user to get the member object for. - * @returns An instance of {@link DiscordMemberWithUser}. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-member} - */ -export async function getMember ( - rest: RestManager, - guildId: BigString, - userId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.GUILD_MEMBER(guildId, userId) - ) - - return TRANSFORMERS.member(result) as Camelize -} diff --git a/packages/old/rest/src/helpers/members/getMembers.ts b/packages/old/rest/src/helpers/members/getMembers.ts deleted file mode 100644 index 428d53d88..000000000 --- a/packages/old/rest/src/helpers/members/getMembers.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordMemberWithUser, - ListGuildMembers -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -// TODO: make options optional - -/** - * Gets the list of members for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the list of members for. - * @param options - The parameters for the fetching of the members. - * @returns A collection of {@link DiscordMemberWithUser} objects assorted by user ID. - * - * @remarks - * Requires the `GUILD_MEMBERS` intent. - * - * ⚠️ It is not recommended to use this endpoint with very large bots. Instead, opt to use `fetchMembers()`: - * REST communication only permits 50 requests to be made per second, while gateways allow for up to 120 requests - * per minute per shard. For more information, read {@link https://discord.com/developers/docs/topics/rate-limits#rate-limits}. - * - * @see {@link https://discord.com/developers/docs/resources/guild#list-guild-members} - * @see {@link https://discord.com/developers/docs/topics/gateway#request-guild-members} - * @see {@link https://discord.com/developers/docs/topics/rate-limits#rate-limits} - */ -export async function getMembers ( - rest: RestManager, - guildId: BigString, - options: ListGuildMembers -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_MEMBERS(guildId, options) - ) - - return new Collection( - results.map((result) => { - const member = TRANSFORMERS.member( - result - ) as Camelize - return [member.user.id, member] - }) - ) -} diff --git a/packages/old/rest/src/helpers/members/index.ts b/packages/old/rest/src/helpers/members/index.ts deleted file mode 100644 index 0e7770d0c..000000000 --- a/packages/old/rest/src/helpers/members/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export * from './banMember.js' -export * from './editBotMember.js' -export * from './editMember.js' -export * from './getAvatarUrl.js' -export * from './getDmChannel.js' -export * from './getMember.js' -export * from './getMembers.js' -export * from './kickMember.js' -export * from './pruneMembers.js' -export * from './searchMembers.js' -export * from './unbanMember.js' diff --git a/packages/old/rest/src/helpers/members/kickMember.ts b/packages/old/rest/src/helpers/members/kickMember.ts deleted file mode 100644 index 8f188c007..000000000 --- a/packages/old/rest/src/helpers/members/kickMember.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Kicks a member from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to kick the member from. - * @param userId - The user ID of the member to kick from the guild. - * - * @remarks - * Requires the `KICK_MEMBERS` permission. - * - * Fires a _Guild Member Remove_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#remove-guild-member} - */ -export async function kickMember ( - rest: RestManager, - guildId: BigString, - userId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD_MEMBER(guildId, userId), - { - reason - } - ) -} diff --git a/packages/old/rest/src/helpers/members/pruneMembers.ts b/packages/old/rest/src/helpers/members/pruneMembers.ts deleted file mode 100644 index fce74d430..000000000 --- a/packages/old/rest/src/helpers/members/pruneMembers.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordBeginGuildPrune } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Initiates the process of pruning inactive members. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to prune the members of. - * @param options - The parameters for the pruning of members. - * @returns A number indicating how many members were pruned. - * - * @remarks - * Requires the `KICK_MEMBERS` permission. - * - * ❗ Requests to this endpoint will time out for large guilds. To prevent this from happening, set the {@link BeginGuildPrune.computePruneCount} property of the {@link options} object parameter to `false`. This will begin the process of pruning, and immediately return `undefined`, rather than wait for the process to complete before returning the actual count of members that have been kicked. - * - * ⚠️ By default, this process will not remove members with a role. To include the members who have a _particular subset of roles_, specify the role(s) in the {@link BeginGuildPrune.includeRoles | includeRoles} property of the {@link options} object parameter. - * - * Fires a _Guild Member Remove_ gateway event for every member kicked. - * - * @see {@link https://discord.com/developers/docs/resources/guild#begin-guild-prune} - */ -export async function pruneMembers ( - rest: RestManager, - guildId: BigString, - options: BeginGuildPrune -): Promise { - const result = await rest.runMethod<{ pruned: number | null }>( - - 'POST', - routes.GUILD_PRUNE(guildId), - { - days: options.days, - compute_prune_count: options.computePruneCount, - include_roles: options.includeRoles - } as DiscordBeginGuildPrune - ) - - return result.pruned ?? undefined -} - -/** https://discord.com/developers/docs/resources/guild#begin-guild-prune */ -export interface BeginGuildPrune { - /** Number of days to prune (1 or more), default: 7 */ - days?: number - /** Whether 'pruned' is returned, discouraged for large guilds, default: true */ - computePruneCount?: boolean - /** Role(s) ro include, default: none */ - includeRoles?: string[] -} diff --git a/packages/old/rest/src/helpers/members/searchMembers.ts b/packages/old/rest/src/helpers/members/searchMembers.ts deleted file mode 100644 index d4fa12711..000000000 --- a/packages/old/rest/src/helpers/members/searchMembers.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordMemberWithUser, - SearchMembers -} from '@discordeno/types' - -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Gets the list of members whose usernames or nicknames start with a provided string. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to search in. - * @param query - The string to match usernames or nicknames against. - * @param options - The parameters for searching through the members. - * @returns A collection of {@link DiscordMember} objects assorted by user ID. - * - * @see {@link https://discord.com/developers/docs/resources/guild#search-guild-members} - */ -export async function searchMembers ( - rest: RestManager, - guildId: BigString, - query: string, - options?: Omit -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_MEMBERS_SEARCH(guildId, query, options) - ) - - return new Collection( - results.map((result) => { - const member = TRANSFORMERS.member( - result - ) as Camelize - return [member.user.id, member] - }) - ) -} diff --git a/packages/old/rest/src/helpers/members/unbanMember.ts b/packages/old/rest/src/helpers/members/unbanMember.ts deleted file mode 100644 index 9b3e6beb9..000000000 --- a/packages/old/rest/src/helpers/members/unbanMember.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Unbans a user from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to unban the user in. - * @param userId - The ID of the user to unban. - * - * @remarks - * Requires the `BAN_MEMBERS` permission. - * - * Fires a _Guild Ban Remove_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#remove-guild-ban} - */ -export async function unbanMember ( - rest: RestManager, - guildId: BigString, - userId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD_BAN(guildId, userId) - ) -} diff --git a/packages/old/rest/src/helpers/messages/crosspostMessage.ts b/packages/old/rest/src/helpers/messages/crosspostMessage.ts deleted file mode 100644 index fc7027edb..000000000 --- a/packages/old/rest/src/helpers/messages/crosspostMessage.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordMessage } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Message } from '../../transformers/message.js' - -export const publishMessage = crosspostMessage - -/** - * Cross-posts a message posted in an announcement channel to subscribed channels. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the announcement channel. - * @param messageId - The ID of the message to cross-post. - * @returns An instance of the cross-posted {@link Message}. - * - * @remarks - * Requires the `SEND_MESSAGES` permission. - * - * If not cross-posting own message: - * - Requires the `MANAGE_MESSAGES` permission. - * - * Fires a _Message Create_ event in the guilds the subscribed channels are in. - * - * @see {@link https://discord.com/developers/docs/resources/channel#crosspost-message} - */ -export async function crosspostMessage ( - rest: RestManager, - channelId: BigString, - messageId: BigString -): Promise { - const result = await rest.runMethod( - - 'POST', - routes.CHANNEL_MESSAGE_CROSSPOST(channelId, messageId) - ) - - return rest.transformers.message(rest, result) -} diff --git a/packages/old/rest/src/helpers/messages/deleteMessage.ts b/packages/old/rest/src/helpers/messages/deleteMessage.ts deleted file mode 100644 index 87bf67191..000000000 --- a/packages/old/rest/src/helpers/messages/deleteMessage.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import { delay } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -// TODO: Remove `delayMilliseconds` parameter. - -/** - * Deletes a message from a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to delete the message from. - * @param messageId - The ID of the message to delete from the channel. - * - * @remarks - * If not deleting own message: - * - Requires the `MANAGE_MESSAGES` permission. - * - * Fires a _Message Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#delete-message} - */ -export async function deleteMessage ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reason?: string, - delayMilliseconds = 0 -): Promise { - if (delayMilliseconds) await delay(delayMilliseconds) - - return await rest.runMethod( - - 'DELETE', - routes.CHANNEL_MESSAGE(channelId, messageId), - { reason } - ) -} diff --git a/packages/old/rest/src/helpers/messages/deleteMessages.ts b/packages/old/rest/src/helpers/messages/deleteMessages.ts deleted file mode 100644 index 66dc8ab29..000000000 --- a/packages/old/rest/src/helpers/messages/deleteMessages.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordBulkDeleteMessages } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Deletes multiple messages from a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to delete the messages from. - * @param messageIds - The IDs of the messages to delete from the channel. - * - * @remarks - * Requires the `MANAGE_MESSAGES` permission. - * - * ⚠️ Messages older than 2 weeks old cannot be deleted. - * - * Fires a _Message Delete Bulk_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#bulk-delete-messages} - */ -export async function deleteMessages ( - rest: RestManager, - channelId: BigString, - messageIds: BigString[], - reason?: string -): Promise { - return await rest.runMethod( - - 'POST', - routes.CHANNEL_BULK_DELETE(channelId), - { - messages: messageIds.slice(0, 100).map((id) => id.toString()), - reason - } as DiscordBulkDeleteMessages - ) -} diff --git a/packages/old/rest/src/helpers/messages/editMessage.ts b/packages/old/rest/src/helpers/messages/editMessage.ts deleted file mode 100644 index aa14a0c1e..000000000 --- a/packages/old/rest/src/helpers/messages/editMessage.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { - AllowedMentions, - BigString, DiscordEditMessage, DiscordMessage, - FileContent, - MessageComponents -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Attachment } from '../../transformers/attachment.js' -import type { Embed } from '../../transformers/embed.js' -import type { Message } from '../../transformers/message.js' - -/** - * Edits a message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to edit the message in. - * @param messageId - The IDs of the message to edit. - * @param options - The parameters for the edit of the message. - * @returns An instance of the edited {@link Message}. - * - * @remarks - * If editing another user's message: - * - Requires the `MANAGE_MESSAGES` permission. - * - Only the {@link EditMessage.flags | flags} property of the {@link options} object parameter can be edited. - * - * Fires a _Message Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#edit-message} - */ -export async function editMessage ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - options: EditMessage -): Promise { - const result = await rest.runMethod( - - 'PATCH', - routes.CHANNEL_MESSAGE(channelId, messageId), - { - content: options.content, - embeds: options.embeds?.map((embed) => - rest.transformers.reverse.embed(rest, embed) - ), - allowed_mentions: options.allowedMentions - ? rest.transformers.reverse.allowedMentions( - rest, - options.allowedMentions - ) - : undefined, - attachments: options.attachments?.map((attachment) => - rest.transformers.reverse.attachment(rest, attachment) - ), - file: options.file, - components: options.components?.map((component) => - rest.transformers.reverse.component(rest, component) - ) - } as DiscordEditMessage - ) - - return rest.transformers.message(rest, result) -} - -/** https://discord.com/developers/docs/resources/channel#edit-message-json-params */ -export interface EditMessage { - /** The new message contents (up to 2000 characters) */ - content?: string | null - /** Embedded `rich` content (up to 6000 characters) */ - embeds?: Embed[] | null - /** Edit the flags of the message (only `SUPPRESS_EMBEDS` can currently be set/unset) */ - flags?: 4 | null - /** The contents of the file being sent/edited */ - file?: FileContent | FileContent[] | null - /** Allowed mentions for the message */ - allowedMentions?: AllowedMentions - /** When specified (adding new attachments), attachments which are not provided in this list will be removed. */ - attachments?: Attachment[] - /** The components you would like to have sent in this message */ - components?: MessageComponents -} diff --git a/packages/old/rest/src/helpers/messages/getMessage.ts b/packages/old/rest/src/helpers/messages/getMessage.ts deleted file mode 100644 index 7766ef21b..000000000 --- a/packages/old/rest/src/helpers/messages/getMessage.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordMessage } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Message } from '../../transformers/message.js' - -/** - * Gets a message from a channel by the ID of the message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel from which to get the message. - * @param messageId - The ID of the message to get. - * @returns An instance of {@link Message}. - * - * @remarks - * Requires that the bot user be able to see the contents of the channel in which the message was posted. - * - * If getting a message from a guild channel: - * - Requires the `READ_MESSAGE_HISTORY` permission. - * - * @see {@link https://discord.com/developers/docs/resources/channel#get-channel-message} - */ -export async function getMessage ( - rest: RestManager, - channelId: BigString, - messageId: BigString -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.CHANNEL_MESSAGE(channelId, messageId) - ) - - return rest.transformers.message(rest, result) -} diff --git a/packages/old/rest/src/helpers/messages/getMessages.ts b/packages/old/rest/src/helpers/messages/getMessages.ts deleted file mode 100644 index 76f0ad484..000000000 --- a/packages/old/rest/src/helpers/messages/getMessages.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordMessage, GetMessagesOptions } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' -import type { Message } from '../../transformers/message.js' - -/** - * Gets multiple messages from a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel from which to get the messages. - * @param options - The parameters for the fetching of the messages. - * @returns A collection of {@link Message} objects assorted by message ID. - * - * @remarks - * Requires that the bot user be able to see the contents of the channel in which the messages were posted. - * - * If getting a messages from a guild channel: - * - Requires the `READ_MESSAGE_HISTORY` permission. - * - * @see {@link https://discord.com/developers/docs/resources/channel#get-channel-messages} - */ -export async function getMessages ( - rest: RestManager, - channelId: BigString, - options?: GetMessagesOptions -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.CHANNEL_MESSAGES(channelId, options) - ) - - return new Collection( - results.map((result) => { - const message = rest.transformers.message(rest, result) - return [message.id, message] - }) - ) -} diff --git a/packages/old/rest/src/helpers/messages/getPinnedMessages.ts b/packages/old/rest/src/helpers/messages/getPinnedMessages.ts deleted file mode 100644 index aa9eb9c45..000000000 --- a/packages/old/rest/src/helpers/messages/getPinnedMessages.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordMessage } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' -import type { Message } from '../../transformers/message.js' - -/** - * Gets the pinned messages for a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel to get the pinned messages for. - * @returns A collection of {@link Message} objects assorted by message ID. - * - * @remarks - * Requires that the bot user be able to see the contents of the channel in which the messages were posted. - * - * If getting a message from a guild channel: - * - Requires the `READ_MESSAGE_HISTORY` permission. - * - * @see {@link https://discord.com/developers/docs/resources/channel#get-pinned-messages} - */ -export async function getPinnedMessages ( - rest: RestManager, - channelId: BigString -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.CHANNEL_PINS(channelId) - ) - - return new Collection( - results.map((result) => { - const message = rest.transformers.message(rest, result) - return [message.id, message] - }) - ) -} diff --git a/packages/old/rest/src/helpers/messages/index.ts b/packages/old/rest/src/helpers/messages/index.ts deleted file mode 100644 index e6c2b2459..000000000 --- a/packages/old/rest/src/helpers/messages/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export * from './crosspostMessage.js' -export * from './deleteMessage.js' -export * from './deleteMessages.js' -export * from './editMessage.js' -export * from './getMessage.js' -export * from './getMessages.js' -export * from './getPinnedMessages.js' -export * from './pinMessage.js' -export * from './reactions/index.js' -export * from './sendMessage.js' -export * from './unpinMessage.js' diff --git a/packages/old/rest/src/helpers/messages/pinMessage.ts b/packages/old/rest/src/helpers/messages/pinMessage.ts deleted file mode 100644 index 46b50cc8d..000000000 --- a/packages/old/rest/src/helpers/messages/pinMessage.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Pins a message in a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel where the message is to be pinned. - * @param messageId - The ID of the message to pin. - * - * @remarks - * Requires that the bot user be able to see the contents of the channel in which the messages were posted. - * - * Requires the `MANAGE_MESSAGES` permission. - * - * ⚠️ There can only be at max 50 messages pinned in a channel. - * - * Fires a _Channel Pins Update_ event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#pin-message} - */ -export async function pinMessage ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - - 'PUT', - routes.CHANNEL_PIN(channelId, messageId), - reason ? { reason } : undefined - ) -} diff --git a/packages/old/rest/src/helpers/messages/reactions/addReaction.ts b/packages/old/rest/src/helpers/messages/reactions/addReaction.ts deleted file mode 100644 index b1b10a818..000000000 --- a/packages/old/rest/src/helpers/messages/reactions/addReaction.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { processReactionString } from './getReactions.js' - -// TODO: Improve typing of the `reaction` parameter. - -/** - * Adds a reaction to a message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel the message to add a reaction to is in. - * @param messageId - The ID of the message to add a reaction to. - * @param reaction - The reaction to add to the message. - * @returns - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * If nobody else has reacted to the message: - * - Requires the `ADD_REACTIONS` permission. - * - * Fires a _Message Reaction Add_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#create-reaction} - */ -export async function addReaction ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reaction: string -): Promise { - reaction = processReactionString(reaction) - - return await rest.runMethod( - - 'PUT', - routes.CHANNEL_MESSAGE_REACTION_ME( - channelId, - messageId, - reaction - ) - ) -} diff --git a/packages/old/rest/src/helpers/messages/reactions/addReactions.ts b/packages/old/rest/src/helpers/messages/reactions/addReactions.ts deleted file mode 100644 index ae32e9d06..000000000 --- a/packages/old/rest/src/helpers/messages/reactions/addReactions.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -// TODO: Improve typing of the `reactions` parameter. - -/** - * Adds multiple a reaction to a message. - * - * This function uses the `addReaction()` helper behind the scenes. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel the message to add reactions to is in. - * @param messageId - The ID of the message to add the reactions to. - * @param reactions - The reactions to add to the message. - * @param ordered - Whether the reactions must be added in order or not. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * If nobody else has reacted to the message: - * - Requires the `ADD_REACTIONS` permission. - * - * Fires a _Message Reaction Add_ gateway event for every reaction added. - */ -export async function addReactions ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reactions: string[], - ordered = false -): Promise { - if (!ordered) { - await Promise.all( - reactions.map( - async (reaction) => - await rest.addReaction(channelId, messageId, reaction) - ) - ) - return - } - - for (const reaction of reactions) { - await rest.addReaction(channelId, messageId, reaction) - } -} diff --git a/packages/old/rest/src/helpers/messages/reactions/deleteReaction.ts b/packages/old/rest/src/helpers/messages/reactions/deleteReaction.ts deleted file mode 100644 index 5af9e12e6..000000000 --- a/packages/old/rest/src/helpers/messages/reactions/deleteReaction.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { processReactionString } from './getReactions.js' - -// TODO: Improve typing of the `reaction` parameter. - -/** - * Deletes a reaction added by the bot user from a message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel the message to delete the reaction from is in. - * @param messageId - The ID of the message to delete the reaction from. - * @param reaction - The reaction to delete from the message. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * Fires a _Message Reaction Remove_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#delete-own-reaction} - */ -export async function deleteOwnReaction ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reaction: string -): Promise { - reaction = processReactionString(reaction) - - return await rest.runMethod( - - 'DELETE', - routes.CHANNEL_MESSAGE_REACTION_ME( - channelId, - messageId, - reaction - ) - ) -} - -/** - * Deletes a user's reaction from a message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel the message to delete the reaction from is in. - * @param messageId - The ID of the message to delete the reaction from. - * @param userId - The ID of the user whose reaction to delete. - * @param reaction - The reaction to delete from the message. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * Requires the `MANAGE_MESSAGES` permission. - * - * Fires a _Message Reaction Remove_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#delete-user-reaction} - */ -export async function deleteUserReaction ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - userId: BigString, - reaction: string -): Promise { - reaction = processReactionString(reaction) - - return await rest.runMethod( - - 'DELETE', - routes.CHANNEL_MESSAGE_REACTION_USER( - channelId, - messageId, - reaction, - userId - ) - ) -} diff --git a/packages/old/rest/src/helpers/messages/reactions/deleteReactionsAll.ts b/packages/old/rest/src/helpers/messages/reactions/deleteReactionsAll.ts deleted file mode 100644 index 66a99c8f9..000000000 --- a/packages/old/rest/src/helpers/messages/reactions/deleteReactionsAll.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' - -/** - * Deletes all reactions for all emojis from a message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel the message to delete the reactions from is in. - * @param messageId - The ID of the message to delete the reactions from. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * Requires the `MANAGE_MESSAGES` permission. - * - * Fires a _Message Reaction Remove All_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#delete-all-reactions} - */ -export async function deleteReactionsAll ( - rest: RestManager, - channelId: BigString, - messageId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.CHANNEL_MESSAGE_REACTIONS(channelId, messageId) - ) -} diff --git a/packages/old/rest/src/helpers/messages/reactions/deleteReactionsEmoji.ts b/packages/old/rest/src/helpers/messages/reactions/deleteReactionsEmoji.ts deleted file mode 100644 index 53e423982..000000000 --- a/packages/old/rest/src/helpers/messages/reactions/deleteReactionsEmoji.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../../restManager.js' -import { processReactionString } from './getReactions.js' - -/** - * Deletes all reactions for an emoji from a message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel the message to delete the reactions from is in. - * @param messageId - The ID of the message to delete the reactions from. - * @param reaction - The reaction to remove from the message. - * - * @remarks - * Requires the `READ_MESSAGE_HISTORY` permission. - * - * Requires the `MANAGE_MESSAGES` permission. - * - * Fires a _Message Reaction Remove Emoji_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji} - */ -export async function deleteReactionsEmoji ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reaction: string -): Promise { - reaction = processReactionString(reaction) - - return await rest.runMethod( - - 'DELETE', - routes.CHANNEL_MESSAGE_REACTION( - channelId, - messageId, - reaction - ) - ) -} diff --git a/packages/old/rest/src/helpers/messages/reactions/getReactions.ts b/packages/old/rest/src/helpers/messages/reactions/getReactions.ts deleted file mode 100644 index 992458a58..000000000 --- a/packages/old/rest/src/helpers/messages/reactions/getReactions.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordUser, GetReactions } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../../restManager.js' -import type { User } from '../../../transformers/member.js' - -/** Get a list of users that reacted with this emoji. */ -/** - * Gets the list of users that reacted with an emoji to a message. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel the message to get the users for is in. - * @param messageId - The ID of the message to get the users for. - * @param reaction - The reaction for which to get the users. - * @param options - The parameters for the fetching of the users. - * @returns A collection of {@link User} objects assorted by user ID. - * - * @see {@link https://discord.com/developers/docs/resources/channel#get-reactions} - */ -export async function getReactions ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reaction: string, - options?: GetReactions -): Promise> { - reaction = processReactionString(reaction) - - const results = await rest.runMethod( - - 'GET', - routes.CHANNEL_MESSAGE_REACTION( - channelId, - messageId, - reaction, - options - ) - ) - - return new Collection( - results.map((result) => { - const user = rest.transformers.user(rest, result) - return [user.id, user] - }) - ) -} - -export function processReactionString (reaction: string): string { - if (reaction.startsWith('<:')) { - return reaction.substring(2, reaction.length - 1) - } - - if (reaction.startsWith('> { - const result = await rest.runMethod( - 'POST', - routes.CHANNEL_MESSAGES(channelId), - { - content: options.content, - nonce: options.nonce, - tts: options.tts, - embeds: options.embeds?.map((embed) => TRANSFORMERS.reverse.embed(embed)), - allowed_mentions: options.allowedMentions - ? { - parse: options.allowedMentions?.parse, - roles: options.allowedMentions?.roles?.map((id) => id.toString()), - users: options.allowedMentions?.users?.map((id) => id.toString()), - replied_user: options.allowedMentions?.repliedUser - } - : undefined, - file: options.file, - components: options.components?.map((component) => ({ - type: component.type, - components: component.components.map((subComponent) => { - if (subComponent.type === MessageComponentTypes.InputText) { - return { - type: subComponent.type, - style: subComponent.style, - custom_id: subComponent.customId, - label: subComponent.label, - placeholder: subComponent.placeholder, - min_length: - subComponent.minLength ?? subComponent.required === false - ? 0 - : subComponent.minLength, - max_length: subComponent.maxLength - } - } - - if (subComponent.type === MessageComponentTypes.SelectMenu) { - return { - type: subComponent.type, - custom_id: subComponent.customId, - placeholder: subComponent.placeholder, - min_values: subComponent.minValues, - max_values: subComponent.maxValues, - disabled: - 'disabled' in subComponent ? subComponent.disabled : undefined, - options: subComponent.options.map((option) => ({ - label: option.label, - value: option.value, - description: option.description, - emoji: option.emoji - ? { - id: option.emoji.id?.toString(), - name: option.emoji.name, - animated: option.emoji.animated - } - : undefined, - default: option.default - })) - } - } - - if ( - subComponent.type === MessageComponentTypes.SelectMenuChannels || - subComponent.type === MessageComponentTypes.SelectMenuRoles || - subComponent.type === MessageComponentTypes.SelectMenuUsers || - subComponent.type === MessageComponentTypes.SelectMenuUsersAndRoles - ) { - return { - type: subComponent.type, - custom_id: subComponent.customId, - placeholder: subComponent.placeholder, - min_values: subComponent.minValues, - max_values: subComponent.maxValues, - disabled: - 'disabled' in subComponent ? subComponent.disabled : undefined - } - } - - return { - type: subComponent.type, - custom_id: subComponent.customId, - label: subComponent.label, - style: subComponent.style, - emoji: - 'emoji' in subComponent && subComponent.emoji - ? { - id: subComponent.emoji.id?.toString(), - name: subComponent.emoji.name, - animated: subComponent.emoji.animated - } - : undefined, - url: 'url' in subComponent ? subComponent.url : undefined, - disabled: - 'disabled' in subComponent ? subComponent.disabled : undefined - } - }) - })), - ...(options.messageReference?.messageId - ? { - message_reference: { - message_id: options.messageReference.messageId.toString(), - channel_id: options.messageReference.channelId?.toString(), - guild_id: options.messageReference.guildId?.toString(), - fail_if_not_exists: options.messageReference.failIfNotExists - } - } - : {}), - sticker_ids: options.stickerIds?.map((sticker) => sticker.toString()) - } as DiscordCreateMessage - ) - - return TRANSFORMERS.message(result) -} - -export interface CreateMessage { - /** The message contents (up to 2000 characters) */ - content?: string - /** Can be used to verify a message was sent (up to 25 characters). Value will appear in the Message Create event. */ - nonce?: string | number - /** true if this is a TTS message */ - tts?: boolean - /** Embedded `rich` content (up to 6000 characters) */ - embeds?: DiscordEmbed[] - /** Allowed mentions for the message */ - allowedMentions?: AllowedMentions - /** Include to make your message a reply */ - messageReference?: { - /** id of the originating message */ - messageId?: BigString - /** - * id of the originating message's channel - * Note: `channel_id` is optional when creating a reply, but will always be present when receiving an event/response that includes this data model. - */ - channelId?: BigString - /** id of the originating message's guild */ - guildId?: BigString - /** When sending, whether to error if the referenced message doesn't exist instead of sending as a normal (non-reply) message, default true */ - failIfNotExists: boolean - } - /** The contents of the file being sent */ - file?: FileContent | FileContent[] - /** The components you would like to have sent in this message */ - components?: MessageComponents - /** IDs of up to 3 stickers in the server to send in the message */ - stickerIds?: - | [BigString] - | [BigString, BigString] - | [BigString, BigString, BigString] -} diff --git a/packages/old/rest/src/helpers/messages/unpinMessage.ts b/packages/old/rest/src/helpers/messages/unpinMessage.ts deleted file mode 100644 index bdcc3e51a..000000000 --- a/packages/old/rest/src/helpers/messages/unpinMessage.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Unpins a pinned message in a channel. - * - * @param rest - The rest manager to use to make the request. - * @param channelId - The ID of the channel where the message is pinned. - * @param messageId - The ID of the message to unpin. - * - * @remarks - * Requires that the bot user be able to see the contents of the channel in which the messages were posted. - * - * Requires the `MANAGE_MESSAGES` permission. - * - * Fires a _Channel Pins Update_ event. - * - * @see {@link https://discord.com/developers/docs/resources/channel#unpin-message} - */ -export async function unpinMessage ( - rest: RestManager, - channelId: BigString, - messageId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.CHANNEL_PIN(channelId, messageId), - reason ? { reason } : undefined - ) -} diff --git a/packages/old/rest/src/helpers/misc/editBotProfile.ts b/packages/old/rest/src/helpers/misc/editBotProfile.ts deleted file mode 100644 index 9ad13fdb3..000000000 --- a/packages/old/rest/src/helpers/misc/editBotProfile.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordUser } from '@discordeno/types' -import { urlToBase64 } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' -import type { User } from '../../transformers/member.js' - -/** - * Modifies the bot's username or avatar. - * NOTE: username: if changed may cause the bot's discriminator to be randomized. - */ -export async function editBotProfile ( - rest: RestManager, - options: { username?: string, botAvatarURL?: string | null } -): Promise { - const avatar = options?.botAvatarURL - ? await urlToBase64(options?.botAvatarURL) - : options?.botAvatarURL - - const result = await rest.runMethod( - - 'PATCH', - routes.USER_BOT(), - { - username: options.username?.trim(), - avatar - } - ) - - return rest.transformers.user(rest, result) -} diff --git a/packages/old/rest/src/helpers/misc/getApplicationInfo.ts b/packages/old/rest/src/helpers/misc/getApplicationInfo.ts deleted file mode 100644 index f44795e0d..000000000 --- a/packages/old/rest/src/helpers/misc/getApplicationInfo.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordApplication } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Application } from '../../transformers/application.js' - -/** Get the applications info */ -export async function getApplicationInfo ( - rest: RestManager -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.OAUTH2_APPLICATION() - ) - - return rest.transformers.application(rest, result) -} diff --git a/packages/old/rest/src/helpers/misc/getGatewayBot.ts b/packages/old/rest/src/helpers/misc/getGatewayBot.ts deleted file mode 100644 index ef3085e18..000000000 --- a/packages/old/rest/src/helpers/misc/getGatewayBot.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordGetGatewayBot, GetGatewayBot } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** Get the bots Gateway metadata that can help during the operation of large or sharded bots. */ -export async function getGatewayBot (rest: RestManager): Promise { - const result = await rest.runMethod( - - 'GET', - routes.GATEWAY_BOT() - ) - - return rest.transformers.gatewayBot(result) -} diff --git a/packages/old/rest/src/helpers/misc/getNitroStickerPacks.ts b/packages/old/rest/src/helpers/misc/getNitroStickerPacks.ts deleted file mode 100644 index cf6dd60fd..000000000 --- a/packages/old/rest/src/helpers/misc/getNitroStickerPacks.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { DiscordStickerPack } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' -import type { StickerPack } from '../../transformers/sticker.js' - -/** - * Returns the list of sticker packs available to Nitro subscribers. - * - * @param bot The bot instance to use to make the request. - * @returns A collection of {@link StickerPack} objects assorted by sticker ID. - * - * @see {@link https://discord.com/developers/docs/resources/sticker#list-nitro-sticker-packs} - */ -export async function getNitroStickerPacks ( - rest: RestManager -): Promise> { - const results = await rest.runMethod( - - 'GET', - routes.NITRO_STICKER_PACKS() - ) - - return new Collection( - results.map((result) => { - const pack = rest.transformers.stickerPack(rest, result) - return [pack.id, pack] - }) - ) -} diff --git a/packages/old/rest/src/helpers/misc/getUser.ts b/packages/old/rest/src/helpers/misc/getUser.ts deleted file mode 100644 index 46ba3d170..000000000 --- a/packages/old/rest/src/helpers/misc/getUser.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordUser } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { User } from '../../transformers/member.js' - -/** This function will return the raw user payload in the rare cases you need to fetch a user directly from the API. */ -export async function getUser ( - rest: RestManager, - userId: BigString -): Promise { - const result = await rest.runMethod( - - 'GET', - routes.USER(userId) - ) - - return rest.transformers.user(rest, result) -} diff --git a/packages/old/rest/src/helpers/misc/index.ts b/packages/old/rest/src/helpers/misc/index.ts deleted file mode 100644 index f7ba30124..000000000 --- a/packages/old/rest/src/helpers/misc/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './editBotProfile.js' -export * from './getApplicationInfo.js' -export * from './getGatewayBot.js' -export * from './getNitroStickerPacks.js' -export * from './getUser.js' diff --git a/packages/old/rest/src/helpers/roles/addRole.ts b/packages/old/rest/src/helpers/roles/addRole.ts deleted file mode 100644 index 69c6bc19b..000000000 --- a/packages/old/rest/src/helpers/roles/addRole.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Adds a role to a member. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the member to add the role to is in. - * @param userId - The user ID of the member to add the role to. - * @param roleId - The ID of the role to add to the member. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Fires a _Guild Member Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#add-guild-member-role} - */ -export async function addRole ( - rest: RestManager, - guildId: BigString, - userId: BigString, - roleId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - - 'PUT', - routes.GUILD_MEMBER_ROLE(guildId, userId, roleId), - { reason } - ) -} diff --git a/packages/old/rest/src/helpers/roles/createRole.ts b/packages/old/rest/src/helpers/roles/createRole.ts deleted file mode 100644 index 04846412a..000000000 --- a/packages/old/rest/src/helpers/roles/createRole.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordCreateGuildRole, - DiscordRole, - PermissionStrings -} from '@discordeno/types' -import { calculateBits } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Creates a role in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to create the role in. - * @param options - The parameters for the creation of the role. - * @returns An instance of the created {@link DiscordRole}. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Fires a _Guild Role Create_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#create-guild-role} - */ -export async function createRole ( - rest: RestManager, - guildId: BigString, - options: CreateGuildRole, - reason?: string -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.GUILD_ROLES(guildId), - { - name: options.name, - color: options.color, - hoist: options.hoist, - mentionable: options.mentionable, - permissions: calculateBits(options?.permissions ?? []), - icon: options.icon, - unicode_emoji: options.unicodeEmoji, - reason - } as DiscordCreateGuildRole - ) - - return TRANSFORMERS.role(result) -} - -export interface CreateGuildRole { - /** Name of the role, max 100 characters, default: "new role" */ - name?: string - /** Bitwise value of the enabled/disabled permissions, default: everyone permissions in guild */ - permissions?: PermissionStrings[] - /** RGB color value, default: 0 */ - color?: number - /** Whether the role should be displayed separately in the sidebar, default: false */ - hoist?: boolean - /** Whether the role should be mentionable, default: false */ - mentionable?: boolean - /** The role's unicode emoji (if the guild has the `ROLE_ICONS` feature) */ - unicodeEmoji?: string - /** the role's icon image (if the guild has the `ROLE_ICONS` feature) */ - icon?: string -} diff --git a/packages/old/rest/src/helpers/roles/deleteRole.ts b/packages/old/rest/src/helpers/roles/deleteRole.ts deleted file mode 100644 index e37ab7e0a..000000000 --- a/packages/old/rest/src/helpers/roles/deleteRole.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Deletes a role from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to delete the role from. - * @param roleId - The ID of the role to delete. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Fires a _Guild Role Delete_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#delete-guild-role} - */ -export async function deleteRole ( - rest: RestManager, - guildId: BigString, - roleId: BigString -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD_ROLE(guildId, roleId) - ) -} diff --git a/packages/old/rest/src/helpers/roles/editRole.ts b/packages/old/rest/src/helpers/roles/editRole.ts deleted file mode 100644 index 305f7a2f8..000000000 --- a/packages/old/rest/src/helpers/roles/editRole.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordEditGuildRole, - DiscordRole, - PermissionStrings -} from '@discordeno/types' -import { calculateBits } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Edits a role in a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the role in. - * @param roleId - The ID of the role to edit. - * @param options - The parameters for the edit of the role. - * @returns An instance of the edited {@link DiscordRole}. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Fires a _Guild Role Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-role} - */ -export async function editRole ( - rest: RestManager, - guildId: BigString, - roleId: BigString, - options: EditGuildRole -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.GUILD_ROLE(guildId, roleId), - { - name: options.name, - color: options.color, - hoist: options.hoist, - mentionable: options.mentionable, - permissions: calculateBits(options?.permissions ?? []), - icon: options.icon, - unicode_emoji: options.unicodeEmoji - } as DiscordEditGuildRole - ) - - return TRANSFORMERS.role(result) -} - -export interface EditGuildRole { - /** Name of the role, max 100 characters, default: "new role" */ - name?: string - /** Bitwise value of the enabled/disabled permissions, default: everyone permissions in guild */ - permissions?: PermissionStrings[] - /** RGB color value, default: 0 */ - color?: number - /** Whether the role should be displayed separately in the sidebar, default: false */ - hoist?: boolean - /** Whether the role should be mentionable, default: false */ - mentionable?: boolean - /** The role's unicode emoji (if the guild has the `ROLE_ICONS` feature) */ - unicodeEmoji?: string - /** the role's icon image (if the guild has the `ROLE_ICONS` feature) */ - icon?: string -} diff --git a/packages/old/rest/src/helpers/roles/editRolePositions.ts b/packages/old/rest/src/helpers/roles/editRolePositions.ts deleted file mode 100644 index a87ceb76c..000000000 --- a/packages/old/rest/src/helpers/roles/editRolePositions.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordModifyRolePositions, - DiscordRole -} from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Edits the positions of a set of roles. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to edit the role positions in. - * @param options - The parameters for the edit of the role positions. - * @returns A collection of {@link DiscordRole} objects assorted by role ID. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Fires a _Guild Role Update_ gateway event for every role impacted in this change. - * - * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-role-positions} - */ -export async function modifyRolePositions ( - rest: RestManager, - guildId: BigString, - options: ModifyRolePositions[] -): Promise>> { - const results = await rest.runMethod( - 'PATCH', - routes.GUILD_ROLES(guildId), - options as DiscordModifyRolePositions[] - ) - - return new Collection( - results.map((result) => { - const role = TRANSFORMERS.role(result) - return [role.id, role] - }) - ) -} - -export interface ModifyRolePositions { - /** The role id */ - id: BigString - /** The sorting position for the role. */ - position?: number | null -} diff --git a/packages/old/rest/src/helpers/roles/getRoles.ts b/packages/old/rest/src/helpers/roles/getRoles.ts deleted file mode 100644 index 8ca344188..000000000 --- a/packages/old/rest/src/helpers/roles/getRoles.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordRole } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Gets the list of roles for a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to get the list of roles for. - * @returns A collection of {@link DisorcRole} objects assorted by role ID. - * - * @remarks - * ⚠️ This endpoint should be used sparingly due to {@link User} objects already being included in guild payloads. - * - * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-roles} - */ -export async function getRoles ( - rest: RestManager, - guildId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_ROLES(guildId) - ) - - return new Collection( - results.map((result) => { - const role = TRANSFORMERS.role(result) - return [role.id, role] - }) - ) -} diff --git a/packages/old/rest/src/helpers/roles/index.ts b/packages/old/rest/src/helpers/roles/index.ts deleted file mode 100644 index 2c10976d6..000000000 --- a/packages/old/rest/src/helpers/roles/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './addRole.js' -export * from './createRole.js' -export * from './deleteRole.js' -export * from './editRole.js' -export * from './editRolePositions.js' -export * from './getRoles.js' -export * from './removeRole.js' diff --git a/packages/old/rest/src/helpers/roles/removeRole.ts b/packages/old/rest/src/helpers/roles/removeRole.ts deleted file mode 100644 index aa77bfdb2..000000000 --- a/packages/old/rest/src/helpers/roles/removeRole.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Removes a role from a member. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild the member to remove the role from is in. - * @param userId - The user ID of the member to remove the role from. - * @param roleId - The ID of the role to remove from the member. - * - * @remarks - * Requires the `MANAGE_ROLES` permission. - * - * Fires a _Guild Member Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild#remove-guild-member-role} - */ -export async function removeRole ( - rest: RestManager, - guildId: BigString, - userId: BigString, - roleId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - - 'DELETE', - routes.GUILD_MEMBER_ROLE(guildId, userId, roleId), - { reason } - ) -} diff --git a/packages/old/rest/src/helpers/stickers/createGuildSticker.ts b/packages/old/rest/src/helpers/stickers/createGuildSticker.ts deleted file mode 100644 index f40c08d3f..000000000 --- a/packages/old/rest/src/helpers/stickers/createGuildSticker.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - BigString, - Camelize, - DiscordCreateGuildStickerOptions, - DiscordSticker, - FileContent, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Create a new sticker for the guild. - * - * @param bot The bot instance to use to make the request. - * @param guildId The ID of the guild to get - * @return A {@link DiscordSticker} - * - * @remarks - * Requires the `MANAGE_EMOJIS_AND_STICKERS` permission. - * Fires a Guild Stickers Update Gateway event. - * Every guilds has five free sticker slots by default, and each Boost level will grant access to more slots. - * Lottie stickers can only be uploaded on guilds that have either the `VERIFIED` and/or the `PARTNERED` guild feature. - * - * @see {@link https://discord.com/developers/docs/resources/sticker#create-guild-sticker} - */ -export async function createGuildSticker ( - rest: RestManager, - guildId: BigString, - options: CreateGuildStickerOptions -): Promise> { - const result = await rest.runMethod( - 'POST', - routes.GUILD_STICKERS(guildId), - { - name: options.name, - description: options.description, - tags: options.tags, - file: options.file, - reason: options.reason - } as DiscordCreateGuildStickerOptions - ) - return TRANSFORMERS.sticker(result) -} - -export interface CreateGuildStickerOptions extends WithReason { - /** Name of the sticker (2-30 characters) */ - name: string - /** Description of the sticker (empty or 2-100 characters) */ - description: string - /** Autocomplete/suggestion tags for the sticker (max 200 characters) */ - tags: string - /** The sticker file to upload, must be a PNG, APNG, or Lottie JSON file, max 500 KB */ - file: FileContent -} diff --git a/packages/old/rest/src/helpers/stickers/deleteGuildSticker.ts b/packages/old/rest/src/helpers/stickers/deleteGuildSticker.ts deleted file mode 100644 index 2f3b3b612..000000000 --- a/packages/old/rest/src/helpers/stickers/deleteGuildSticker.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -// eslint-disable-next-line @typescript-eslint/no-unused-vars - -/** - * Delete a new sticker for the guild. - * - * @param bot The bot instance to use to make the request. - * @param guildId The ID of the guild to get - * @return A {@link DiscordSticker} - * - * @remarks - * Requires the `MANAGE_EMOJIS_AND_STICKERS` permission. - * Fires a Guild Stickers Update Gateway event. - * Every guilds has five free sticker slots by default, and each Boost level will grant access to more slots. - * Lottie stickers can only be uploaded on guilds that have either the `VERIFIED` and/or the `PARTNERED` guild feature. - * - * @see {@link https://discord.com/developers/docs/resources/sticker#delete-guild-sticker} - */ -export async function deleteGuildSticker ( - rest: RestManager, - guildId: BigString, - stickerId: BigString, - reason?: string -): Promise { - return await rest.runMethod( - 'DELETE', - routes.GUILD_STICKER(guildId, stickerId), - reason ? { reason } : undefined - ) -} diff --git a/packages/old/rest/src/helpers/stickers/editGuildSticker.ts b/packages/old/rest/src/helpers/stickers/editGuildSticker.ts deleted file mode 100644 index 02c8afb24..000000000 --- a/packages/old/rest/src/helpers/stickers/editGuildSticker.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { - AtLeastOne, - BigString, - Camelize, - DiscordEditGuildStickerOptions, - DiscordSticker, - WithReason -} from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Edit the given sticker. - * - * @param bot The bot instance to use to make the request. - * @param guildId The ID of the guild to get - * @return A {@link DiscordSticker} - * - * @remarks - * Requires the `MANAGE_EMOJIS_AND_STICKERS` permission. - * Fires a Guild Stickers Update Gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/sticker#modify-guild-sticker} - */ -export async function editGuildSticker ( - rest: RestManager, - guildId: BigString, - stickerId: BigString, - options: AtLeastOne -): Promise> { - const result = await rest.runMethod( - 'PATCH', - routes.GUILD_STICKER(guildId, stickerId), - { - name: options.name, - description: options.description, - tags: options.tags, - reason: options.reason - } as DiscordEditGuildStickerOptions - ) - return TRANSFORMERS.sticker(result) -} - -export interface EditGuildStickerOptions extends WithReason { - /** Name of the sticker (2-30 characters) */ - name?: string - /** Description of the sticker (empty or 2-100 characters) */ - description?: string | null - /** Autocomplete/suggestion tags for the sticker (max 200 characters) */ - tags?: string -} diff --git a/packages/old/rest/src/helpers/stickers/getGuildSticker.ts b/packages/old/rest/src/helpers/stickers/getGuildSticker.ts deleted file mode 100644 index 8abec84d0..000000000 --- a/packages/old/rest/src/helpers/stickers/getGuildSticker.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordSticker } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Returns a sticker object for the given guild and sticker IDs. - * - * @param bot The bot instance to use to make the request. - * @param guildId The ID of the guild to get - * @param stickerId The ID of the sticker to get - * @return A {@link DiscordSticker} - * - * @remarks Includes the user field if the bot has the `MANAGE_EMOJIS_AND_STICKERS` permission. - * - * @see {@link https://discord.com/developers/docs/resources/sticker#get-guild-sticker} - */ -export async function getGuildSticker ( - rest: RestManager, - guildId: BigString, - stickerId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.GUILD_STICKER(guildId, stickerId) - ) - return TRANSFORMERS.sticker(result) -} diff --git a/packages/old/rest/src/helpers/stickers/getGuildStickers.ts b/packages/old/rest/src/helpers/stickers/getGuildStickers.ts deleted file mode 100644 index f8e513fbb..000000000 --- a/packages/old/rest/src/helpers/stickers/getGuildStickers.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordSticker } from '@discordeno/types' -import { Collection } from '@discordeno/utils' -import type { RestManager } from '../../restManager.js' - -/** - * Returns an array of sticker objects for the given guild. - * - * @param bot The bot instance to use to make the request. - * @param guildId The ID of the guild to get - * @returns A collection of {@link DiscordSticker} objects assorted by sticker ID. - * - * @remarks Includes user fields if the bot has the `MANAGE_EMOJIS_AND_STICKERS` permission. - * - * @see {@link https://discord.com/developers/docs/resources/sticker#list-guild-stickers} - */ -export async function getGuildStickers ( - rest: RestManager, - guildId: BigString -): Promise>> { - const results = await rest.runMethod( - 'GET', - routes.GUILD_STICKERS(guildId) - ) - - return new Collection( - results.map((result) => { - const pack = TRANSFORMERS.sticker(result) - return [pack.id, pack] - }) - ) -} diff --git a/packages/old/rest/src/helpers/stickers/getSticker.ts b/packages/old/rest/src/helpers/stickers/getSticker.ts deleted file mode 100644 index 6887f522e..000000000 --- a/packages/old/rest/src/helpers/stickers/getSticker.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { routes } from '@discordeno/constant' -import TRANSFORMERS from '@discordeno/transformer' -import type { BigString, Camelize, DiscordSticker } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' - -/** - * Returns a sticker object for the given sticker ID. - * - * @param bot The bot instance to use to make the request. - * @param stickerId The ID of the sticker to get - * @returns A {@link DiscordSticker} - * - * @see {@link https://discord.com/developers/docs/resources/sticker#get-sticker} - */ -export async function getSticker ( - rest: RestManager, - stickerId: BigString -): Promise> { - const result = await rest.runMethod( - 'GET', - routes.STICKER(stickerId) - ) - - return TRANSFORMERS.sticker(result) -} diff --git a/packages/old/rest/src/helpers/stickers/index.ts b/packages/old/rest/src/helpers/stickers/index.ts deleted file mode 100644 index 0121522dc..000000000 --- a/packages/old/rest/src/helpers/stickers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './createGuildSticker.js' -export * from './deleteGuildSticker.js' -export * from './editGuildSticker.js' -export * from './getGuildSticker.js' -export * from './getGuildStickers.js' -export * from './getSticker.js' diff --git a/packages/old/rest/src/helpers/templates/createGuildTemplate.ts b/packages/old/rest/src/helpers/templates/createGuildTemplate.ts deleted file mode 100644 index 8ba5ce2f2..000000000 --- a/packages/old/rest/src/helpers/templates/createGuildTemplate.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { routes } from '@discordeno/constant' -import type { BigString, DiscordCreateTemplate, DiscordTemplate } from '@discordeno/types' -import type { RestManager } from '../../restManager.js' -import type { Template } from '../../transformers/template.js' - -/** - * Creates a template from a guild. - * - * @param rest - The rest manager to use to make the request. - * @param guildId - The ID of the guild to create the template from. - * @param options - The parameters for the creation of the template. - * @returns An instance of the created {@link Template}. - * - * @remarks - * Requires the `MANAGE_GUILD` permission. - * - * Fires a _Guild Update_ gateway event. - * - * @see {@link https://discord.com/developers/docs/resources/guild-template#create-guild-template} - */ -export async function createGuildTemplate ( - rest: RestManager, - guildId: BigString, - options: CreateTemplate -): Promise