@velliajs/discord 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +133 -0
- package/package.json +82 -0
- package/src/client/BaseClient.js +83 -0
- package/src/client/Client.js +591 -0
- package/src/client/WebhookClient.js +103 -0
- package/src/client/actions/Action.js +119 -0
- package/src/client/actions/ActionsManager.js +79 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +23 -0
- package/src/client/actions/ChannelUpdate.js +33 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +44 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +19 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +31 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +29 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +19 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +101 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +37 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +47 -0
- package/src/client/actions/MessageReactionAdd.js +55 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +42 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +31 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +26 -0
- package/src/client/actions/ThreadListSync.js +60 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +47 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +36 -0
- package/src/client/actions/VoiceStateUpdate.js +43 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +44 -0
- package/src/client/websocket/WebSocketManager.js +393 -0
- package/src/client/websocket/WebSocketShard.js +231 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +27 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +64 -0
- package/src/errors/DJSError.js +48 -0
- package/src/errors/ErrorCodes.js +319 -0
- package/src/errors/Messages.js +170 -0
- package/src/errors/index.js +5 -0
- package/src/index.js +213 -0
- package/src/managers/ApplicationCommandManager.js +263 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
- package/src/managers/AutoModerationRuleManager.js +288 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/CachedManager.js +57 -0
- package/src/managers/CategoryChannelChildManager.js +77 -0
- package/src/managers/ChannelManager.js +128 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +494 -0
- package/src/managers/GuildEmojiManager.js +174 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +83 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +283 -0
- package/src/managers/GuildMemberManager.js +540 -0
- package/src/managers/GuildMemberRoleManager.js +204 -0
- package/src/managers/GuildScheduledEventManager.js +297 -0
- package/src/managers/GuildStickerManager.js +182 -0
- package/src/managers/GuildTextThreadManager.js +91 -0
- package/src/managers/MessageManager.js +259 -0
- package/src/managers/PermissionOverwriteManager.js +168 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +68 -0
- package/src/managers/ReactionUserManager.js +77 -0
- package/src/managers/RoleManager.js +360 -0
- package/src/managers/StageInstanceManager.js +154 -0
- package/src/managers/ThreadManager.js +204 -0
- package/src/managers/ThreadMemberManager.js +182 -0
- package/src/managers/UserManager.js +139 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/sharding/Shard.js +457 -0
- package/src/sharding/ShardClientUtil.js +285 -0
- package/src/sharding/ShardingManager.js +326 -0
- package/src/structures/ActionRow.js +46 -0
- package/src/structures/ActionRowBuilder.js +35 -0
- package/src/structures/AnonymousGuild.js +97 -0
- package/src/structures/ApplicationCommand.js +606 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
- package/src/structures/Attachment.js +140 -0
- package/src/structures/AttachmentBuilder.js +116 -0
- package/src/structures/AutoModerationActionExecution.js +116 -0
- package/src/structures/AutoModerationRule.js +284 -0
- package/src/structures/AutocompleteInteraction.js +97 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseChannel.js +160 -0
- package/src/structures/BaseGuild.js +119 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +186 -0
- package/src/structures/BaseGuildVoiceChannel.js +234 -0
- package/src/structures/BaseInteraction.js +344 -0
- package/src/structures/BaseSelectMenuComponent.js +56 -0
- package/src/structures/ButtonBuilder.js +44 -0
- package/src/structures/ButtonComponent.js +65 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CategoryChannel.js +45 -0
- package/src/structures/ChannelSelectMenuBuilder.js +31 -0
- package/src/structures/ChannelSelectMenuComponent.js +20 -0
- package/src/structures/ChannelSelectMenuInteraction.js +33 -0
- package/src/structures/ChatInputCommandInteraction.js +41 -0
- package/src/structures/ClientApplication.js +193 -0
- package/src/structures/ClientPresence.js +82 -0
- package/src/structures/ClientUser.js +185 -0
- package/src/structures/CommandInteraction.js +224 -0
- package/src/structures/CommandInteractionOptionResolver.js +308 -0
- package/src/structures/Component.js +47 -0
- package/src/structures/ContextMenuCommandInteraction.js +64 -0
- package/src/structures/DMChannel.js +129 -0
- package/src/structures/DirectoryChannel.js +36 -0
- package/src/structures/Embed.js +220 -0
- package/src/structures/EmbedBuilder.js +41 -0
- package/src/structures/Emoji.js +108 -0
- package/src/structures/ForumChannel.js +264 -0
- package/src/structures/Guild.js +1361 -0
- package/src/structures/GuildAuditLogs.js +91 -0
- package/src/structures/GuildAuditLogsEntry.js +527 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildChannel.js +457 -0
- package/src/structures/GuildEmoji.js +148 -0
- package/src/structures/GuildMember.js +518 -0
- package/src/structures/GuildPreview.js +193 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +439 -0
- package/src/structures/GuildTemplate.js +241 -0
- package/src/structures/Integration.js +220 -0
- package/src/structures/IntegrationApplication.js +85 -0
- package/src/structures/InteractionCollector.js +263 -0
- package/src/structures/InteractionResponse.js +102 -0
- package/src/structures/InteractionWebhook.js +59 -0
- package/src/structures/Invite.js +322 -0
- package/src/structures/InviteGuild.js +22 -0
- package/src/structures/InviteStageInstance.js +87 -0
- package/src/structures/MentionableSelectMenuBuilder.js +32 -0
- package/src/structures/MentionableSelectMenuComponent.js +11 -0
- package/src/structures/MentionableSelectMenuInteraction.js +71 -0
- package/src/structures/Message.js +997 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +107 -0
- package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
- package/src/structures/MessageMentions.js +297 -0
- package/src/structures/MessagePayload.js +299 -0
- package/src/structures/MessageReaction.js +142 -0
- package/src/structures/ModalBuilder.js +34 -0
- package/src/structures/ModalSubmitFields.js +55 -0
- package/src/structures/ModalSubmitInteraction.js +121 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +60 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +372 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +458 -0
- package/src/structures/RoleSelectMenuBuilder.js +31 -0
- package/src/structures/RoleSelectMenuComponent.js +11 -0
- package/src/structures/RoleSelectMenuInteraction.js +33 -0
- package/src/structures/SelectMenuBuilder.js +26 -0
- package/src/structures/SelectMenuComponent.js +26 -0
- package/src/structures/SelectMenuInteraction.js +26 -0
- package/src/structures/SelectMenuOptionBuilder.js +26 -0
- package/src/structures/StageChannel.js +112 -0
- package/src/structures/StageInstance.js +167 -0
- package/src/structures/Sticker.js +272 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StringSelectMenuBuilder.js +79 -0
- package/src/structures/StringSelectMenuComponent.js +20 -0
- package/src/structures/StringSelectMenuInteraction.js +21 -0
- package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
- package/src/structures/Team.js +117 -0
- package/src/structures/TeamMember.js +70 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputBuilder.js +31 -0
- package/src/structures/TextInputComponent.js +29 -0
- package/src/structures/ThreadChannel.js +606 -0
- package/src/structures/ThreadMember.js +113 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +331 -0
- package/src/structures/UserContextMenuCommandInteraction.js +29 -0
- package/src/structures/UserSelectMenuBuilder.js +31 -0
- package/src/structures/UserSelectMenuComponent.js +11 -0
- package/src/structures/UserSelectMenuInteraction.js +51 -0
- package/src/structures/VoiceChannel.js +96 -0
- package/src/structures/VoiceRegion.js +46 -0
- package/src/structures/VoiceState.js +303 -0
- package/src/structures/Webhook.js +481 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +49 -0
- package/src/structures/Widget.js +88 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +108 -0
- package/src/structures/interfaces/Collector.js +335 -0
- package/src/structures/interfaces/InteractionResponses.js +320 -0
- package/src/structures/interfaces/TextBasedChannel.js +413 -0
- package/src/util/APITypes.js +456 -0
- package/src/util/ActivityFlagsBitField.js +26 -0
- package/src/util/ApplicationFlagsBitField.js +26 -0
- package/src/util/BitField.js +176 -0
- package/src/util/ChannelFlagsBitField.js +41 -0
- package/src/util/Channels.js +150 -0
- package/src/util/Colors.js +73 -0
- package/src/util/Components.js +152 -0
- package/src/util/Constants.js +230 -0
- package/src/util/DataResolver.js +140 -0
- package/src/util/Enums.js +13 -0
- package/src/util/Events.js +160 -0
- package/src/util/Formatters.js +413 -0
- package/src/util/GuildMemberFlagsBitField.js +41 -0
- package/src/util/IntentsBitField.js +34 -0
- package/src/util/LimitedCollection.js +68 -0
- package/src/util/MessageFlagsBitField.js +32 -0
- package/src/util/Options.js +216 -0
- package/src/util/Partials.js +44 -0
- package/src/util/PermissionsBitField.js +104 -0
- package/src/util/ShardEvents.js +27 -0
- package/src/util/Status.js +33 -0
- package/src/util/Sweepers.js +467 -0
- package/src/util/SystemChannelFlagsBitField.js +43 -0
- package/src/util/ThreadMemberFlagsBitField.js +31 -0
- package/src/util/Transformers.js +36 -0
- package/src/util/UserFlagsBitField.js +32 -0
- package/src/util/Util.js +394 -0
- package/src/util/WebSocketShardEvents.js +25 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class MessageCreateAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
const channel = this.getChannel(data);
|
|
10
|
+
if (channel) {
|
|
11
|
+
if (!channel.isTextBased()) return {};
|
|
12
|
+
|
|
13
|
+
if (channel.isThread()) {
|
|
14
|
+
channel.messageCount++;
|
|
15
|
+
channel.totalMessageSent++;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const existing = channel.messages.cache.get(data.id);
|
|
19
|
+
if (existing) return { message: existing };
|
|
20
|
+
const message = channel.messages._add(data);
|
|
21
|
+
channel.lastMessageId = data.id;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Emitted whenever a message is created.
|
|
25
|
+
* @event Client#messageCreate
|
|
26
|
+
* @param {Message} message The created message
|
|
27
|
+
*/
|
|
28
|
+
client.emit(Events.MessageCreate, message);
|
|
29
|
+
|
|
30
|
+
return { message };
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = MessageCreateAction;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class MessageDeleteAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
const channel = this.getChannel(data);
|
|
10
|
+
let message;
|
|
11
|
+
if (channel) {
|
|
12
|
+
if (!channel.isTextBased()) return {};
|
|
13
|
+
|
|
14
|
+
if (channel.isThread()) channel.messageCount--;
|
|
15
|
+
|
|
16
|
+
message = this.getMessage(data, channel);
|
|
17
|
+
if (message) {
|
|
18
|
+
channel.messages.cache.delete(message.id);
|
|
19
|
+
/**
|
|
20
|
+
* Emitted whenever a message is deleted.
|
|
21
|
+
* @event Client#messageDelete
|
|
22
|
+
* @param {Message} message The deleted message
|
|
23
|
+
*/
|
|
24
|
+
client.emit(Events.MessageDelete, message);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return { message };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
module.exports = MessageDeleteAction;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const Action = require('./Action');
|
|
5
|
+
const Events = require('../../util/Events');
|
|
6
|
+
|
|
7
|
+
class MessageDeleteBulkAction extends Action {
|
|
8
|
+
handle(data) {
|
|
9
|
+
const client = this.client;
|
|
10
|
+
const channel = client.channels.cache.get(data.channel_id);
|
|
11
|
+
|
|
12
|
+
if (channel) {
|
|
13
|
+
if (!channel.isTextBased()) return {};
|
|
14
|
+
|
|
15
|
+
if (channel.isThread()) channel.messageCount -= data.ids.length;
|
|
16
|
+
|
|
17
|
+
const ids = data.ids;
|
|
18
|
+
const messages = new Collection();
|
|
19
|
+
for (const id of ids) {
|
|
20
|
+
const message = this.getMessage(
|
|
21
|
+
{
|
|
22
|
+
id,
|
|
23
|
+
guild_id: data.guild_id,
|
|
24
|
+
},
|
|
25
|
+
channel,
|
|
26
|
+
false,
|
|
27
|
+
);
|
|
28
|
+
if (message) {
|
|
29
|
+
messages.set(message.id, message);
|
|
30
|
+
channel.messages.cache.delete(id);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Emitted whenever messages are deleted in bulk.
|
|
36
|
+
* @event Client#messageDeleteBulk
|
|
37
|
+
* @param {Collection<Snowflake, Message>} messages The deleted messages, mapped by their id
|
|
38
|
+
* @param {GuildTextBasedChannel} channel The channel that the messages were deleted in
|
|
39
|
+
*/
|
|
40
|
+
if (messages.size > 0) client.emit(Events.MessageBulkDelete, messages, channel);
|
|
41
|
+
return { messages };
|
|
42
|
+
}
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = MessageDeleteBulkAction;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
const Partials = require('../../util/Partials');
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
{ user_id: 'id',
|
|
9
|
+
message_id: 'id',
|
|
10
|
+
emoji: { name: '�', id: null },
|
|
11
|
+
channel_id: 'id',
|
|
12
|
+
// If originating from a guild
|
|
13
|
+
guild_id: 'id',
|
|
14
|
+
member: { ..., user: { ... } } }
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
class MessageReactionAdd extends Action {
|
|
18
|
+
handle(data, fromStructure = false) {
|
|
19
|
+
if (!data.emoji) return false;
|
|
20
|
+
|
|
21
|
+
const user = this.getUserFromMember(data);
|
|
22
|
+
if (!user) return false;
|
|
23
|
+
|
|
24
|
+
// Verify channel
|
|
25
|
+
const channel = this.getChannel(data);
|
|
26
|
+
if (!channel?.isTextBased()) return false;
|
|
27
|
+
|
|
28
|
+
// Verify message
|
|
29
|
+
const message = this.getMessage(data, channel);
|
|
30
|
+
if (!message) return false;
|
|
31
|
+
|
|
32
|
+
// Verify reaction
|
|
33
|
+
const includePartial = this.client.options.partials.includes(Partials.Reaction);
|
|
34
|
+
if (message.partial && !includePartial) return false;
|
|
35
|
+
const reaction = message.reactions._add({
|
|
36
|
+
emoji: data.emoji,
|
|
37
|
+
count: message.partial ? null : 0,
|
|
38
|
+
me: user.id === this.client.user.id,
|
|
39
|
+
});
|
|
40
|
+
if (!reaction) return false;
|
|
41
|
+
reaction._add(user);
|
|
42
|
+
if (fromStructure) return { message, reaction, user };
|
|
43
|
+
/**
|
|
44
|
+
* Emitted whenever a reaction is added to a cached message.
|
|
45
|
+
* @event Client#messageReactionAdd
|
|
46
|
+
* @param {MessageReaction} messageReaction The reaction object
|
|
47
|
+
* @param {User} user The user that applied the guild or reaction emoji
|
|
48
|
+
*/
|
|
49
|
+
this.client.emit(Events.MessageReactionAdd, reaction, user);
|
|
50
|
+
|
|
51
|
+
return { message, reaction, user };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
module.exports = MessageReactionAdd;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
{ user_id: 'id',
|
|
8
|
+
message_id: 'id',
|
|
9
|
+
emoji: { name: '�', id: null },
|
|
10
|
+
channel_id: 'id',
|
|
11
|
+
guild_id: 'id' }
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
class MessageReactionRemove extends Action {
|
|
15
|
+
handle(data) {
|
|
16
|
+
if (!data.emoji) return false;
|
|
17
|
+
|
|
18
|
+
const user = this.getUser(data);
|
|
19
|
+
if (!user) return false;
|
|
20
|
+
|
|
21
|
+
// Verify channel
|
|
22
|
+
const channel = this.getChannel(data);
|
|
23
|
+
if (!channel?.isTextBased()) return false;
|
|
24
|
+
|
|
25
|
+
// Verify message
|
|
26
|
+
const message = this.getMessage(data, channel);
|
|
27
|
+
if (!message) return false;
|
|
28
|
+
|
|
29
|
+
// Verify reaction
|
|
30
|
+
const reaction = this.getReaction(data, message, user);
|
|
31
|
+
if (!reaction) return false;
|
|
32
|
+
reaction._remove(user);
|
|
33
|
+
/**
|
|
34
|
+
* Emitted whenever a reaction is removed from a cached message.
|
|
35
|
+
* @event Client#messageReactionRemove
|
|
36
|
+
* @param {MessageReaction} messageReaction The reaction object
|
|
37
|
+
* @param {User} user The user whose emoji or reaction emoji was removed
|
|
38
|
+
*/
|
|
39
|
+
this.client.emit(Events.MessageReactionRemove, reaction, user);
|
|
40
|
+
|
|
41
|
+
return { message, reaction, user };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
module.exports = MessageReactionRemove;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class MessageReactionRemoveAll extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
// Verify channel
|
|
9
|
+
const channel = this.getChannel(data);
|
|
10
|
+
if (!channel?.isTextBased()) return false;
|
|
11
|
+
|
|
12
|
+
// Verify message
|
|
13
|
+
const message = this.getMessage(data, channel);
|
|
14
|
+
if (!message) return false;
|
|
15
|
+
|
|
16
|
+
// Copy removed reactions to emit for the event.
|
|
17
|
+
const removed = message.reactions.cache.clone();
|
|
18
|
+
|
|
19
|
+
message.reactions.cache.clear();
|
|
20
|
+
this.client.emit(Events.MessageReactionRemoveAll, message, removed);
|
|
21
|
+
|
|
22
|
+
return { message };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Emitted whenever all reactions are removed from a cached message.
|
|
28
|
+
* @event Client#messageReactionRemoveAll
|
|
29
|
+
* @param {Message} message The message the reactions were removed from
|
|
30
|
+
* @param {Collection<string|Snowflake, MessageReaction>} reactions The cached message reactions that were removed.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
module.exports = MessageReactionRemoveAll;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class MessageReactionRemoveEmoji extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const channel = this.getChannel(data);
|
|
9
|
+
if (!channel?.isTextBased()) return false;
|
|
10
|
+
|
|
11
|
+
const message = this.getMessage(data, channel);
|
|
12
|
+
if (!message) return false;
|
|
13
|
+
|
|
14
|
+
const reaction = this.getReaction(data, message);
|
|
15
|
+
if (!reaction) return false;
|
|
16
|
+
if (!message.partial) message.reactions.cache.delete(reaction.emoji.id ?? reaction.emoji.name);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Emitted when a bot removes an emoji reaction from a cached message.
|
|
20
|
+
* @event Client#messageReactionRemoveEmoji
|
|
21
|
+
* @param {MessageReaction} reaction The reaction that was removed
|
|
22
|
+
*/
|
|
23
|
+
this.client.emit(Events.MessageReactionRemoveEmoji, reaction);
|
|
24
|
+
return { reaction };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = MessageReactionRemoveEmoji;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
|
|
5
|
+
class MessageUpdateAction extends Action {
|
|
6
|
+
handle(data) {
|
|
7
|
+
const channel = this.getChannel(data);
|
|
8
|
+
if (channel) {
|
|
9
|
+
if (!channel.isTextBased()) return {};
|
|
10
|
+
|
|
11
|
+
const { id, channel_id, guild_id, author, timestamp, type } = data;
|
|
12
|
+
const message = this.getMessage({ id, channel_id, guild_id, author, timestamp, type }, channel);
|
|
13
|
+
if (message) {
|
|
14
|
+
const old = message._update(data);
|
|
15
|
+
return {
|
|
16
|
+
old,
|
|
17
|
+
updated: message,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = MessageUpdateAction;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class PresenceUpdateAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
let user = this.client.users.cache.get(data.user.id);
|
|
9
|
+
if (!user && data.user.username) user = this.client.users._add(data.user);
|
|
10
|
+
if (!user) return;
|
|
11
|
+
|
|
12
|
+
if (data.user.username) {
|
|
13
|
+
if (!user._equals(data.user)) this.client.actions.UserUpdate.handle(data.user);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const guild = this.client.guilds.cache.get(data.guild_id);
|
|
17
|
+
if (!guild) return;
|
|
18
|
+
|
|
19
|
+
const oldPresence = guild.presences.cache.get(user.id)?._clone() ?? null;
|
|
20
|
+
let member = guild.members.cache.get(user.id);
|
|
21
|
+
if (!member && data.status !== 'offline') {
|
|
22
|
+
member = guild.members._add({
|
|
23
|
+
user,
|
|
24
|
+
deaf: false,
|
|
25
|
+
mute: false,
|
|
26
|
+
});
|
|
27
|
+
this.client.emit(Events.GuildMemberAvailable, member);
|
|
28
|
+
}
|
|
29
|
+
const newPresence = guild.presences._add(Object.assign(data, { guild }));
|
|
30
|
+
if (this.client.listenerCount(Events.PresenceUpdate) && !newPresence.equals(oldPresence)) {
|
|
31
|
+
/**
|
|
32
|
+
* Emitted whenever a guild member's presence (e.g. status, activity) is changed.
|
|
33
|
+
* @event Client#presenceUpdate
|
|
34
|
+
* @param {?Presence} oldPresence The presence before the update, if one at all
|
|
35
|
+
* @param {Presence} newPresence The presence after the update
|
|
36
|
+
*/
|
|
37
|
+
this.client.emit(Events.PresenceUpdate, oldPresence, newPresence);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
module.exports = PresenceUpdateAction;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class StageInstanceCreateAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
const channel = this.getChannel(data);
|
|
10
|
+
|
|
11
|
+
if (channel) {
|
|
12
|
+
const stageInstance = channel.guild.stageInstances._add(data);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Emitted whenever a stage instance is created.
|
|
16
|
+
* @event Client#stageInstanceCreate
|
|
17
|
+
* @param {StageInstance} stageInstance The created stage instance
|
|
18
|
+
*/
|
|
19
|
+
client.emit(Events.StageInstanceCreate, stageInstance);
|
|
20
|
+
|
|
21
|
+
return { stageInstance };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = StageInstanceCreateAction;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class StageInstanceDeleteAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
const channel = this.getChannel(data);
|
|
10
|
+
|
|
11
|
+
if (channel) {
|
|
12
|
+
const stageInstance = channel.guild.stageInstances._add(data);
|
|
13
|
+
if (stageInstance) {
|
|
14
|
+
channel.guild.stageInstances.cache.delete(stageInstance.id);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Emitted whenever a stage instance is deleted.
|
|
18
|
+
* @event Client#stageInstanceDelete
|
|
19
|
+
* @param {StageInstance} stageInstance The deleted stage instance
|
|
20
|
+
*/
|
|
21
|
+
client.emit(Events.StageInstanceDelete, stageInstance);
|
|
22
|
+
|
|
23
|
+
return { stageInstance };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = StageInstanceDeleteAction;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class StageInstanceUpdateAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
const channel = this.getChannel(data);
|
|
10
|
+
|
|
11
|
+
if (channel) {
|
|
12
|
+
const oldStageInstance = channel.guild.stageInstances.cache.get(data.id)?._clone() ?? null;
|
|
13
|
+
const newStageInstance = channel.guild.stageInstances._add(data);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Emitted whenever a stage instance gets updated - e.g. change in topic or privacy level
|
|
17
|
+
* @event Client#stageInstanceUpdate
|
|
18
|
+
* @param {?StageInstance} oldStageInstance The stage instance before the update
|
|
19
|
+
* @param {StageInstance} newStageInstance The stage instance after the update
|
|
20
|
+
*/
|
|
21
|
+
client.emit(Events.StageInstanceUpdate, oldStageInstance, newStageInstance);
|
|
22
|
+
|
|
23
|
+
return { oldStageInstance, newStageInstance };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = StageInstanceUpdateAction;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class ThreadCreateAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
const existing = client.channels.cache.has(data.id);
|
|
10
|
+
const thread = client.channels._add(data);
|
|
11
|
+
if (!existing && thread) {
|
|
12
|
+
/**
|
|
13
|
+
* Emitted whenever a thread is created or when the client user is added to a thread.
|
|
14
|
+
* @event Client#threadCreate
|
|
15
|
+
* @param {ThreadChannel} thread The thread that was created
|
|
16
|
+
* @param {boolean} newlyCreated Whether the thread was newly created
|
|
17
|
+
*/
|
|
18
|
+
client.emit(Events.ThreadCreate, thread, data.newly_created ?? false);
|
|
19
|
+
}
|
|
20
|
+
return { thread };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = ThreadCreateAction;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class ThreadDeleteAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
const thread = client.channels.cache.get(data.id);
|
|
10
|
+
|
|
11
|
+
if (thread) {
|
|
12
|
+
client.channels._remove(thread.id);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Emitted whenever a thread is deleted.
|
|
16
|
+
* @event Client#threadDelete
|
|
17
|
+
* @param {ThreadChannel} thread The thread that was deleted
|
|
18
|
+
*/
|
|
19
|
+
client.emit(Events.ThreadDelete, thread);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return { thread };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = ThreadDeleteAction;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const Action = require('./Action');
|
|
5
|
+
const Events = require('../../util/Events');
|
|
6
|
+
|
|
7
|
+
class ThreadListSyncAction extends Action {
|
|
8
|
+
handle(data) {
|
|
9
|
+
const client = this.client;
|
|
10
|
+
|
|
11
|
+
const guild = client.guilds.cache.get(data.guild_id);
|
|
12
|
+
if (!guild) return {};
|
|
13
|
+
|
|
14
|
+
if (data.channel_ids) {
|
|
15
|
+
for (const id of data.channel_ids) {
|
|
16
|
+
const channel = client.channels.resolve(id);
|
|
17
|
+
if (channel) this.removeStale(channel);
|
|
18
|
+
}
|
|
19
|
+
} else {
|
|
20
|
+
for (const channel of guild.channels.cache.values()) {
|
|
21
|
+
this.removeStale(channel);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const syncedThreads = data.threads.reduce((coll, rawThread) => {
|
|
26
|
+
const thread = client.channels._add(rawThread);
|
|
27
|
+
return coll.set(thread.id, thread);
|
|
28
|
+
}, new Collection());
|
|
29
|
+
|
|
30
|
+
for (const rawMember of Object.values(data.members)) {
|
|
31
|
+
// Discord sends the thread id as id in this object
|
|
32
|
+
const thread = client.channels.cache.get(rawMember.id);
|
|
33
|
+
if (thread) {
|
|
34
|
+
thread.members._add(rawMember);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Emitted whenever the client user gains access to a text or news channel that contains threads
|
|
40
|
+
* @event Client#threadListSync
|
|
41
|
+
* @param {Collection<Snowflake, ThreadChannel>} threads The threads that were synced
|
|
42
|
+
* @param {Guild} guild The guild that the threads were synced in
|
|
43
|
+
*/
|
|
44
|
+
client.emit(Events.ThreadListSync, syncedThreads, guild);
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
syncedThreads,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
removeStale(channel) {
|
|
52
|
+
channel.threads?.cache.forEach(thread => {
|
|
53
|
+
if (!thread.archived) {
|
|
54
|
+
this.client.channels._remove(thread.id);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
module.exports = ThreadListSyncAction;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Events = require('../../util/Events');
|
|
5
|
+
|
|
6
|
+
class ThreadMemberUpdateAction extends Action {
|
|
7
|
+
handle(data) {
|
|
8
|
+
const client = this.client;
|
|
9
|
+
// Discord sends the thread id as id in this object
|
|
10
|
+
const thread = client.channels.cache.get(data.id);
|
|
11
|
+
if (thread) {
|
|
12
|
+
const member = thread.members.cache.get(data.user_id);
|
|
13
|
+
if (!member) {
|
|
14
|
+
const newMember = thread.members._add(data);
|
|
15
|
+
return { newMember };
|
|
16
|
+
}
|
|
17
|
+
const old = member._update(data);
|
|
18
|
+
/**
|
|
19
|
+
* Emitted whenever the client user's thread member is updated.
|
|
20
|
+
* @event Client#threadMemberUpdate
|
|
21
|
+
* @param {ThreadMember} oldMember The member before the update
|
|
22
|
+
* @param {ThreadMember} newMember The member after the update
|
|
23
|
+
*/
|
|
24
|
+
client.emit(Events.ThreadMemberUpdate, old, member);
|
|
25
|
+
}
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = ThreadMemberUpdateAction;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const Action = require('./Action');
|
|
5
|
+
const Events = require('../../util/Events');
|
|
6
|
+
|
|
7
|
+
class ThreadMembersUpdateAction extends Action {
|
|
8
|
+
handle(data) {
|
|
9
|
+
const client = this.client;
|
|
10
|
+
const thread = client.channels.cache.get(data.id);
|
|
11
|
+
if (thread) {
|
|
12
|
+
thread.memberCount = data.member_count;
|
|
13
|
+
const addedMembers = new Collection();
|
|
14
|
+
const removedMembers = new Collection();
|
|
15
|
+
|
|
16
|
+
data.added_members?.reduce(
|
|
17
|
+
(_addedMembers, addedMember) => _addedMembers.set(addedMember.user_id, thread.members._add(addedMember)),
|
|
18
|
+
addedMembers,
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
data.removed_member_ids?.reduce((removedMembersIds, removedMembersId) => {
|
|
22
|
+
const threadMember = this.getThreadMember(removedMembersId, thread.members);
|
|
23
|
+
if (threadMember) removedMembersIds.set(threadMember.id, threadMember);
|
|
24
|
+
thread.members.cache.delete(removedMembersId);
|
|
25
|
+
return removedMembersIds;
|
|
26
|
+
}, removedMembers);
|
|
27
|
+
|
|
28
|
+
if (addedMembers.size === 0 && removedMembers.size === 0) {
|
|
29
|
+
// Uncached thread member(s) left.
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Emitted whenever members are added or removed from a thread.
|
|
35
|
+
* <info>This event requires the {@link GatewayIntentBits.GuildMembers} privileged gateway intent.</info>
|
|
36
|
+
* @event Client#threadMembersUpdate
|
|
37
|
+
* @param {Collection<Snowflake, ThreadMember>} addedMembers The members that were added
|
|
38
|
+
* @param {Collection<Snowflake, ThreadMember>} removedMembers The members that were removed
|
|
39
|
+
* @param {ThreadChannel} thread The thread where members got updated
|
|
40
|
+
*/
|
|
41
|
+
client.emit(Events.ThreadMembersUpdate, addedMembers, removedMembers, thread);
|
|
42
|
+
}
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = ThreadMembersUpdateAction;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Action = require('./Action');
|
|
4
|
+
const Typing = require('../../structures/Typing');
|
|
5
|
+
const Events = require('../../util/Events');
|
|
6
|
+
|
|
7
|
+
class TypingStart extends Action {
|
|
8
|
+
handle(data) {
|
|
9
|
+
const channel = this.getChannel(data);
|
|
10
|
+
if (!channel) return;
|
|
11
|
+
|
|
12
|
+
if (!channel.isTextBased()) {
|
|
13
|
+
this.client.emit(Events.Warn, `Discord sent a typing packet to a ${channel.type} channel ${channel.id}`);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const user = this.getUserFromMember(data);
|
|
18
|
+
if (user) {
|
|
19
|
+
/**
|
|
20
|
+
* Emitted whenever a user starts typing in a channel.
|
|
21
|
+
* @event Client#typingStart
|
|
22
|
+
* @param {Typing} typing The typing state
|
|
23
|
+
*/
|
|
24
|
+
this.client.emit(Events.TypingStart, new Typing(channel, user, data));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = TypingStart;
|