@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.
Files changed (317) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +133 -0
  3. package/package.json +82 -0
  4. package/src/client/BaseClient.js +83 -0
  5. package/src/client/Client.js +591 -0
  6. package/src/client/WebhookClient.js +103 -0
  7. package/src/client/actions/Action.js +119 -0
  8. package/src/client/actions/ActionsManager.js +79 -0
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  10. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  11. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  12. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  13. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  14. package/src/client/actions/ChannelCreate.js +23 -0
  15. package/src/client/actions/ChannelDelete.js +23 -0
  16. package/src/client/actions/ChannelUpdate.js +33 -0
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  18. package/src/client/actions/GuildBanAdd.js +20 -0
  19. package/src/client/actions/GuildBanRemove.js +25 -0
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  21. package/src/client/actions/GuildDelete.js +44 -0
  22. package/src/client/actions/GuildEmojiCreate.js +20 -0
  23. package/src/client/actions/GuildEmojiDelete.js +19 -0
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  27. package/src/client/actions/GuildMemberRemove.js +31 -0
  28. package/src/client/actions/GuildMemberUpdate.js +44 -0
  29. package/src/client/actions/GuildRoleCreate.js +25 -0
  30. package/src/client/actions/GuildRoleDelete.js +29 -0
  31. package/src/client/actions/GuildRoleUpdate.js +39 -0
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  38. package/src/client/actions/GuildStickerCreate.js +20 -0
  39. package/src/client/actions/GuildStickerDelete.js +19 -0
  40. package/src/client/actions/GuildStickerUpdate.js +20 -0
  41. package/src/client/actions/GuildStickersUpdate.js +34 -0
  42. package/src/client/actions/GuildUpdate.js +33 -0
  43. package/src/client/actions/InteractionCreate.js +101 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +37 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +47 -0
  49. package/src/client/actions/MessageReactionAdd.js +55 -0
  50. package/src/client/actions/MessageReactionRemove.js +45 -0
  51. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  52. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  53. package/src/client/actions/MessageUpdate.js +26 -0
  54. package/src/client/actions/PresenceUpdate.js +42 -0
  55. package/src/client/actions/StageInstanceCreate.js +28 -0
  56. package/src/client/actions/StageInstanceDelete.js +31 -0
  57. package/src/client/actions/StageInstanceUpdate.js +30 -0
  58. package/src/client/actions/ThreadCreate.js +24 -0
  59. package/src/client/actions/ThreadDelete.js +26 -0
  60. package/src/client/actions/ThreadListSync.js +60 -0
  61. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  62. package/src/client/actions/ThreadMembersUpdate.js +47 -0
  63. package/src/client/actions/TypingStart.js +29 -0
  64. package/src/client/actions/UserUpdate.js +36 -0
  65. package/src/client/actions/VoiceStateUpdate.js +43 -0
  66. package/src/client/actions/WebhooksUpdate.js +20 -0
  67. package/src/client/voice/ClientVoiceManager.js +44 -0
  68. package/src/client/websocket/WebSocketManager.js +393 -0
  69. package/src/client/websocket/WebSocketShard.js +231 -0
  70. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  71. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  72. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  73. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  74. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  76. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  77. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  78. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  79. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  80. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  81. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  82. package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
  83. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  84. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  85. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  86. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  87. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  88. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  89. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  90. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  94. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  98. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  100. package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  104. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  105. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  106. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  107. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  108. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  109. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  110. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  111. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/READY.js +27 -0
  113. package/src/client/websocket/handlers/RESUMED.js +14 -0
  114. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  115. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  116. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  118. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  119. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  120. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  122. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  123. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  124. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  125. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  126. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/index.js +64 -0
  129. package/src/errors/DJSError.js +48 -0
  130. package/src/errors/ErrorCodes.js +319 -0
  131. package/src/errors/Messages.js +170 -0
  132. package/src/errors/index.js +5 -0
  133. package/src/index.js +213 -0
  134. package/src/managers/ApplicationCommandManager.js +263 -0
  135. package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
  136. package/src/managers/AutoModerationRuleManager.js +288 -0
  137. package/src/managers/BaseGuildEmojiManager.js +80 -0
  138. package/src/managers/BaseManager.js +19 -0
  139. package/src/managers/CachedManager.js +57 -0
  140. package/src/managers/CategoryChannelChildManager.js +77 -0
  141. package/src/managers/ChannelManager.js +128 -0
  142. package/src/managers/DataManager.js +61 -0
  143. package/src/managers/GuildApplicationCommandManager.js +28 -0
  144. package/src/managers/GuildBanManager.js +204 -0
  145. package/src/managers/GuildChannelManager.js +494 -0
  146. package/src/managers/GuildEmojiManager.js +174 -0
  147. package/src/managers/GuildEmojiRoleManager.js +118 -0
  148. package/src/managers/GuildForumThreadManager.js +83 -0
  149. package/src/managers/GuildInviteManager.js +213 -0
  150. package/src/managers/GuildManager.js +283 -0
  151. package/src/managers/GuildMemberManager.js +540 -0
  152. package/src/managers/GuildMemberRoleManager.js +204 -0
  153. package/src/managers/GuildScheduledEventManager.js +297 -0
  154. package/src/managers/GuildStickerManager.js +182 -0
  155. package/src/managers/GuildTextThreadManager.js +91 -0
  156. package/src/managers/MessageManager.js +259 -0
  157. package/src/managers/PermissionOverwriteManager.js +168 -0
  158. package/src/managers/PresenceManager.js +58 -0
  159. package/src/managers/ReactionManager.js +68 -0
  160. package/src/managers/ReactionUserManager.js +77 -0
  161. package/src/managers/RoleManager.js +360 -0
  162. package/src/managers/StageInstanceManager.js +154 -0
  163. package/src/managers/ThreadManager.js +204 -0
  164. package/src/managers/ThreadMemberManager.js +182 -0
  165. package/src/managers/UserManager.js +139 -0
  166. package/src/managers/VoiceStateManager.js +37 -0
  167. package/src/sharding/Shard.js +457 -0
  168. package/src/sharding/ShardClientUtil.js +285 -0
  169. package/src/sharding/ShardingManager.js +326 -0
  170. package/src/structures/ActionRow.js +46 -0
  171. package/src/structures/ActionRowBuilder.js +35 -0
  172. package/src/structures/AnonymousGuild.js +97 -0
  173. package/src/structures/ApplicationCommand.js +606 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
  175. package/src/structures/Attachment.js +140 -0
  176. package/src/structures/AttachmentBuilder.js +116 -0
  177. package/src/structures/AutoModerationActionExecution.js +116 -0
  178. package/src/structures/AutoModerationRule.js +284 -0
  179. package/src/structures/AutocompleteInteraction.js +97 -0
  180. package/src/structures/Base.js +43 -0
  181. package/src/structures/BaseChannel.js +160 -0
  182. package/src/structures/BaseGuild.js +119 -0
  183. package/src/structures/BaseGuildEmoji.js +56 -0
  184. package/src/structures/BaseGuildTextChannel.js +186 -0
  185. package/src/structures/BaseGuildVoiceChannel.js +234 -0
  186. package/src/structures/BaseInteraction.js +344 -0
  187. package/src/structures/BaseSelectMenuComponent.js +56 -0
  188. package/src/structures/ButtonBuilder.js +44 -0
  189. package/src/structures/ButtonComponent.js +65 -0
  190. package/src/structures/ButtonInteraction.js +11 -0
  191. package/src/structures/CategoryChannel.js +45 -0
  192. package/src/structures/ChannelSelectMenuBuilder.js +31 -0
  193. package/src/structures/ChannelSelectMenuComponent.js +20 -0
  194. package/src/structures/ChannelSelectMenuInteraction.js +33 -0
  195. package/src/structures/ChatInputCommandInteraction.js +41 -0
  196. package/src/structures/ClientApplication.js +193 -0
  197. package/src/structures/ClientPresence.js +82 -0
  198. package/src/structures/ClientUser.js +185 -0
  199. package/src/structures/CommandInteraction.js +224 -0
  200. package/src/structures/CommandInteractionOptionResolver.js +308 -0
  201. package/src/structures/Component.js +47 -0
  202. package/src/structures/ContextMenuCommandInteraction.js +64 -0
  203. package/src/structures/DMChannel.js +129 -0
  204. package/src/structures/DirectoryChannel.js +36 -0
  205. package/src/structures/Embed.js +220 -0
  206. package/src/structures/EmbedBuilder.js +41 -0
  207. package/src/structures/Emoji.js +108 -0
  208. package/src/structures/ForumChannel.js +264 -0
  209. package/src/structures/Guild.js +1361 -0
  210. package/src/structures/GuildAuditLogs.js +91 -0
  211. package/src/structures/GuildAuditLogsEntry.js +527 -0
  212. package/src/structures/GuildBan.js +59 -0
  213. package/src/structures/GuildChannel.js +457 -0
  214. package/src/structures/GuildEmoji.js +148 -0
  215. package/src/structures/GuildMember.js +518 -0
  216. package/src/structures/GuildPreview.js +193 -0
  217. package/src/structures/GuildPreviewEmoji.js +27 -0
  218. package/src/structures/GuildScheduledEvent.js +439 -0
  219. package/src/structures/GuildTemplate.js +241 -0
  220. package/src/structures/Integration.js +220 -0
  221. package/src/structures/IntegrationApplication.js +85 -0
  222. package/src/structures/InteractionCollector.js +263 -0
  223. package/src/structures/InteractionResponse.js +102 -0
  224. package/src/structures/InteractionWebhook.js +59 -0
  225. package/src/structures/Invite.js +322 -0
  226. package/src/structures/InviteGuild.js +22 -0
  227. package/src/structures/InviteStageInstance.js +87 -0
  228. package/src/structures/MentionableSelectMenuBuilder.js +32 -0
  229. package/src/structures/MentionableSelectMenuComponent.js +11 -0
  230. package/src/structures/MentionableSelectMenuInteraction.js +71 -0
  231. package/src/structures/Message.js +997 -0
  232. package/src/structures/MessageCollector.js +146 -0
  233. package/src/structures/MessageComponentInteraction.js +107 -0
  234. package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
  235. package/src/structures/MessageMentions.js +297 -0
  236. package/src/structures/MessagePayload.js +299 -0
  237. package/src/structures/MessageReaction.js +142 -0
  238. package/src/structures/ModalBuilder.js +34 -0
  239. package/src/structures/ModalSubmitFields.js +55 -0
  240. package/src/structures/ModalSubmitInteraction.js +121 -0
  241. package/src/structures/NewsChannel.js +32 -0
  242. package/src/structures/OAuth2Guild.js +28 -0
  243. package/src/structures/PartialGroupDMChannel.js +60 -0
  244. package/src/structures/PermissionOverwrites.js +196 -0
  245. package/src/structures/Presence.js +372 -0
  246. package/src/structures/ReactionCollector.js +229 -0
  247. package/src/structures/ReactionEmoji.js +31 -0
  248. package/src/structures/Role.js +458 -0
  249. package/src/structures/RoleSelectMenuBuilder.js +31 -0
  250. package/src/structures/RoleSelectMenuComponent.js +11 -0
  251. package/src/structures/RoleSelectMenuInteraction.js +33 -0
  252. package/src/structures/SelectMenuBuilder.js +26 -0
  253. package/src/structures/SelectMenuComponent.js +26 -0
  254. package/src/structures/SelectMenuInteraction.js +26 -0
  255. package/src/structures/SelectMenuOptionBuilder.js +26 -0
  256. package/src/structures/StageChannel.js +112 -0
  257. package/src/structures/StageInstance.js +167 -0
  258. package/src/structures/Sticker.js +272 -0
  259. package/src/structures/StickerPack.js +95 -0
  260. package/src/structures/StringSelectMenuBuilder.js +79 -0
  261. package/src/structures/StringSelectMenuComponent.js +20 -0
  262. package/src/structures/StringSelectMenuInteraction.js +21 -0
  263. package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
  264. package/src/structures/Team.js +117 -0
  265. package/src/structures/TeamMember.js +70 -0
  266. package/src/structures/TextChannel.js +33 -0
  267. package/src/structures/TextInputBuilder.js +31 -0
  268. package/src/structures/TextInputComponent.js +29 -0
  269. package/src/structures/ThreadChannel.js +606 -0
  270. package/src/structures/ThreadMember.js +113 -0
  271. package/src/structures/Typing.js +74 -0
  272. package/src/structures/User.js +331 -0
  273. package/src/structures/UserContextMenuCommandInteraction.js +29 -0
  274. package/src/structures/UserSelectMenuBuilder.js +31 -0
  275. package/src/structures/UserSelectMenuComponent.js +11 -0
  276. package/src/structures/UserSelectMenuInteraction.js +51 -0
  277. package/src/structures/VoiceChannel.js +96 -0
  278. package/src/structures/VoiceRegion.js +46 -0
  279. package/src/structures/VoiceState.js +303 -0
  280. package/src/structures/Webhook.js +481 -0
  281. package/src/structures/WelcomeChannel.js +60 -0
  282. package/src/structures/WelcomeScreen.js +49 -0
  283. package/src/structures/Widget.js +88 -0
  284. package/src/structures/WidgetMember.js +99 -0
  285. package/src/structures/interfaces/Application.js +108 -0
  286. package/src/structures/interfaces/Collector.js +335 -0
  287. package/src/structures/interfaces/InteractionResponses.js +320 -0
  288. package/src/structures/interfaces/TextBasedChannel.js +413 -0
  289. package/src/util/APITypes.js +456 -0
  290. package/src/util/ActivityFlagsBitField.js +26 -0
  291. package/src/util/ApplicationFlagsBitField.js +26 -0
  292. package/src/util/BitField.js +176 -0
  293. package/src/util/ChannelFlagsBitField.js +41 -0
  294. package/src/util/Channels.js +150 -0
  295. package/src/util/Colors.js +73 -0
  296. package/src/util/Components.js +152 -0
  297. package/src/util/Constants.js +230 -0
  298. package/src/util/DataResolver.js +140 -0
  299. package/src/util/Enums.js +13 -0
  300. package/src/util/Events.js +160 -0
  301. package/src/util/Formatters.js +413 -0
  302. package/src/util/GuildMemberFlagsBitField.js +41 -0
  303. package/src/util/IntentsBitField.js +34 -0
  304. package/src/util/LimitedCollection.js +68 -0
  305. package/src/util/MessageFlagsBitField.js +32 -0
  306. package/src/util/Options.js +216 -0
  307. package/src/util/Partials.js +44 -0
  308. package/src/util/PermissionsBitField.js +104 -0
  309. package/src/util/ShardEvents.js +27 -0
  310. package/src/util/Status.js +33 -0
  311. package/src/util/Sweepers.js +467 -0
  312. package/src/util/SystemChannelFlagsBitField.js +43 -0
  313. package/src/util/ThreadMemberFlagsBitField.js +31 -0
  314. package/src/util/Transformers.js +36 -0
  315. package/src/util/UserFlagsBitField.js +32 -0
  316. package/src/util/Util.js +394 -0
  317. package/src/util/WebSocketShardEvents.js +25 -0
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ const Partials = require('../../util/Partials');
4
+
5
+ /*
6
+
7
+ ABOUT ACTIONS
8
+
9
+ Actions are similar to WebSocket Packet Handlers, but since introducing
10
+ the REST API methods, in order to prevent rewriting code to handle data,
11
+ "actions" have been introduced. They're basically what Packet Handlers
12
+ used to be but they're strictly for manipulating data and making sure
13
+ that WebSocket events don't clash with REST methods.
14
+
15
+ */
16
+
17
+ class GenericAction {
18
+ constructor(client) {
19
+ this.client = client;
20
+ }
21
+
22
+ handle(data) {
23
+ return data;
24
+ }
25
+
26
+ getPayload(data, manager, id, partialType, cache) {
27
+ const existing = manager.cache.get(id);
28
+ if (!existing && this.client.options.partials.includes(partialType)) {
29
+ return manager._add(data, cache);
30
+ }
31
+ return existing;
32
+ }
33
+
34
+ getChannel(data) {
35
+ const id = data.channel_id ?? data.id;
36
+ return (
37
+ data[this.client.actions.injectedChannel] ??
38
+ this.getPayload(
39
+ {
40
+ id,
41
+ guild_id: data.guild_id,
42
+ recipients: [data.author ?? data.user ?? { id: data.user_id }],
43
+ },
44
+ this.client.channels,
45
+ id,
46
+ Partials.Channel,
47
+ )
48
+ );
49
+ }
50
+
51
+ getMessage(data, channel, cache) {
52
+ const id = data.message_id ?? data.id;
53
+ return (
54
+ data[this.client.actions.injectedMessage] ??
55
+ this.getPayload(
56
+ {
57
+ id,
58
+ channel_id: channel.id,
59
+ guild_id: data.guild_id ?? channel.guild?.id,
60
+ },
61
+ channel.messages,
62
+ id,
63
+ Partials.Message,
64
+ cache,
65
+ )
66
+ );
67
+ }
68
+
69
+ getReaction(data, message, user) {
70
+ const id = data.emoji.id ?? decodeURIComponent(data.emoji.name);
71
+ return this.getPayload(
72
+ {
73
+ emoji: data.emoji,
74
+ count: message.partial ? null : 0,
75
+ me: user?.id === this.client.user.id,
76
+ },
77
+ message.reactions,
78
+ id,
79
+ Partials.Reaction,
80
+ );
81
+ }
82
+
83
+ getMember(data, guild) {
84
+ return this.getPayload(data, guild.members, data.user.id, Partials.GuildMember);
85
+ }
86
+
87
+ getUser(data) {
88
+ const id = data.user_id;
89
+ return data[this.client.actions.injectedUser] ?? this.getPayload({ id }, this.client.users, id, Partials.User);
90
+ }
91
+
92
+ getUserFromMember(data) {
93
+ if (data.guild_id && data.member?.user) {
94
+ const guild = this.client.guilds.cache.get(data.guild_id);
95
+ if (guild) {
96
+ return guild.members._add(data.member).user;
97
+ } else {
98
+ return this.client.users._add(data.member.user);
99
+ }
100
+ }
101
+ return this.getUser(data);
102
+ }
103
+
104
+ getScheduledEvent(data, guild) {
105
+ const id = data.guild_scheduled_event_id ?? data.id;
106
+ return this.getPayload(
107
+ { id, guild_id: data.guild_id ?? guild.id },
108
+ guild.scheduledEvents,
109
+ id,
110
+ Partials.GuildScheduledEvent,
111
+ );
112
+ }
113
+
114
+ getThreadMember(id, manager) {
115
+ return this.getPayload({ user_id: id }, manager, id, Partials.ThreadMember, false);
116
+ }
117
+ }
118
+
119
+ module.exports = GenericAction;
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ class ActionsManager {
4
+ // These symbols represent fully built data that we inject at times when calling actions manually.
5
+ // Action#getUser, for example, will return the injected data (which is assumed to be a built structure)
6
+ // instead of trying to make it from provided data
7
+ injectedUser = Symbol('djs.actions.injectedUser');
8
+ injectedChannel = Symbol('djs.actions.injectedChannel');
9
+ injectedMessage = Symbol('djs.actions.injectedMessage');
10
+
11
+ constructor(client) {
12
+ this.client = client;
13
+
14
+ this.register(require('./ApplicationCommandPermissionsUpdate'));
15
+ this.register(require('./AutoModerationActionExecution'));
16
+ this.register(require('./AutoModerationRuleCreate'));
17
+ this.register(require('./AutoModerationRuleDelete'));
18
+ this.register(require('./AutoModerationRuleUpdate'));
19
+ this.register(require('./ChannelCreate'));
20
+ this.register(require('./ChannelDelete'));
21
+ this.register(require('./ChannelUpdate'));
22
+ this.register(require('./GuildAuditLogEntryCreate'));
23
+ this.register(require('./GuildBanAdd'));
24
+ this.register(require('./GuildBanRemove'));
25
+ this.register(require('./GuildChannelsPositionUpdate'));
26
+ this.register(require('./GuildDelete'));
27
+ this.register(require('./GuildEmojiCreate'));
28
+ this.register(require('./GuildEmojiDelete'));
29
+ this.register(require('./GuildEmojiUpdate'));
30
+ this.register(require('./GuildEmojisUpdate'));
31
+ this.register(require('./GuildIntegrationsUpdate'));
32
+ this.register(require('./GuildMemberRemove'));
33
+ this.register(require('./GuildMemberUpdate'));
34
+ this.register(require('./GuildRoleCreate'));
35
+ this.register(require('./GuildRoleDelete'));
36
+ this.register(require('./GuildRoleUpdate'));
37
+ this.register(require('./GuildRolesPositionUpdate'));
38
+ this.register(require('./GuildScheduledEventCreate'));
39
+ this.register(require('./GuildScheduledEventDelete'));
40
+ this.register(require('./GuildScheduledEventUpdate'));
41
+ this.register(require('./GuildScheduledEventUserAdd'));
42
+ this.register(require('./GuildScheduledEventUserRemove'));
43
+ this.register(require('./GuildStickerCreate'));
44
+ this.register(require('./GuildStickerDelete'));
45
+ this.register(require('./GuildStickerUpdate'));
46
+ this.register(require('./GuildStickersUpdate'));
47
+ this.register(require('./GuildUpdate'));
48
+ this.register(require('./InteractionCreate'));
49
+ this.register(require('./InviteCreate'));
50
+ this.register(require('./InviteDelete'));
51
+ this.register(require('./MessageCreate'));
52
+ this.register(require('./MessageDelete'));
53
+ this.register(require('./MessageDeleteBulk'));
54
+ this.register(require('./MessageReactionAdd'));
55
+ this.register(require('./MessageReactionRemove'));
56
+ this.register(require('./MessageReactionRemoveAll'));
57
+ this.register(require('./MessageReactionRemoveEmoji'));
58
+ this.register(require('./MessageUpdate'));
59
+ this.register(require('./PresenceUpdate'));
60
+ this.register(require('./StageInstanceCreate'));
61
+ this.register(require('./StageInstanceDelete'));
62
+ this.register(require('./StageInstanceUpdate'));
63
+ this.register(require('./ThreadCreate'));
64
+ this.register(require('./ThreadDelete'));
65
+ this.register(require('./ThreadListSync'));
66
+ this.register(require('./ThreadMemberUpdate'));
67
+ this.register(require('./ThreadMembersUpdate'));
68
+ this.register(require('./TypingStart'));
69
+ this.register(require('./UserUpdate'));
70
+ this.register(require('./VoiceStateUpdate'));
71
+ this.register(require('./WebhooksUpdate'));
72
+ }
73
+
74
+ register(Action) {
75
+ this[Action.name.replace(/Action$/, '')] = new Action(this.client);
76
+ }
77
+ }
78
+
79
+ module.exports = ActionsManager;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ /**
7
+ * The data received in the {@link Client#event:applicationCommandPermissionsUpdate} event
8
+ * @typedef {Object} ApplicationCommandPermissionsUpdateData
9
+ * @property {Snowflake} id The id of the command or global entity that was updated
10
+ * @property {Snowflake} guildId The id of the guild in which permissions were updated
11
+ * @property {Snowflake} applicationId The id of the application that owns the command or entity being updated
12
+ * @property {ApplicationCommandPermissions[]} permissions The updated permissions
13
+ */
14
+
15
+ class ApplicationCommandPermissionsUpdateAction extends Action {
16
+ handle(data) {
17
+ const client = this.client;
18
+ /**
19
+ * Emitted whenever permissions for an application command in a guild were updated.
20
+ * <warn>This includes permission updates for other applications in addition to the logged in client,
21
+ * check `data.applicationId` to verify which application the update is for</warn>
22
+ * @event Client#applicationCommandPermissionsUpdate
23
+ * @param {ApplicationCommandPermissionsUpdateData} data The updated permissions
24
+ */
25
+ client.emit(Events.ApplicationCommandPermissionsUpdate, {
26
+ permissions: data.permissions,
27
+ id: data.id,
28
+ guildId: data.guild_id,
29
+ applicationId: data.application_id,
30
+ });
31
+ }
32
+ }
33
+
34
+ module.exports = ApplicationCommandPermissionsUpdateAction;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const AutoModerationActionExecution = require('../../structures/AutoModerationActionExecution');
5
+ const Events = require('../../util/Events');
6
+
7
+ class AutoModerationActionExecutionAction extends Action {
8
+ handle(data) {
9
+ const { client } = this;
10
+ const guild = client.guilds.cache.get(data.guild_id);
11
+
12
+ if (guild) {
13
+ /**
14
+ * Emitted whenever an auto moderation rule is triggered.
15
+ * <info>This event requires the {@link PermissionFlagsBits.ManageGuild} permission.</info>
16
+ * @event Client#autoModerationActionExecution
17
+ * @param {AutoModerationActionExecution} autoModerationActionExecution The data of the execution
18
+ */
19
+ client.emit(Events.AutoModerationActionExecution, new AutoModerationActionExecution(data, guild));
20
+ }
21
+
22
+ return {};
23
+ }
24
+ }
25
+
26
+ module.exports = AutoModerationActionExecutionAction;
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class AutoModerationRuleCreateAction extends Action {
7
+ handle(data) {
8
+ const { client } = this;
9
+ const guild = client.guilds.cache.get(data.guild_id);
10
+
11
+ if (guild) {
12
+ const autoModerationRule = guild.autoModerationRules._add(data);
13
+
14
+ /**
15
+ * Emitted whenever an auto moderation rule is created.
16
+ * <info>This event requires the {@link PermissionFlagsBits.ManageGuild} permission.</info>
17
+ * @event Client#autoModerationRuleCreate
18
+ * @param {AutoModerationRule} autoModerationRule The created auto moderation rule
19
+ */
20
+ client.emit(Events.AutoModerationRuleCreate, autoModerationRule);
21
+ }
22
+
23
+ return {};
24
+ }
25
+ }
26
+
27
+ module.exports = AutoModerationRuleCreateAction;
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class AutoModerationRuleDeleteAction extends Action {
7
+ handle(data) {
8
+ const { client } = this;
9
+ const guild = client.guilds.cache.get(data.guild_id);
10
+
11
+ if (guild) {
12
+ const autoModerationRule = guild.autoModerationRules.cache.get(data.id);
13
+
14
+ if (autoModerationRule) {
15
+ guild.autoModerationRules.cache.delete(autoModerationRule.id);
16
+
17
+ /**
18
+ * Emitted whenever an auto moderation rule is deleted.
19
+ * <info>This event requires the {@link PermissionFlagsBits.ManageGuild} permission.</info>
20
+ * @event Client#autoModerationRuleDelete
21
+ * @param {AutoModerationRule} autoModerationRule The deleted auto moderation rule
22
+ */
23
+ client.emit(Events.AutoModerationRuleDelete, autoModerationRule);
24
+ }
25
+ }
26
+
27
+ return {};
28
+ }
29
+ }
30
+
31
+ module.exports = AutoModerationRuleDeleteAction;
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class AutoModerationRuleUpdateAction extends Action {
7
+ handle(data) {
8
+ const { client } = this;
9
+ const guild = client.guilds.cache.get(data.guild_id);
10
+
11
+ if (guild) {
12
+ const oldAutoModerationRule = guild.autoModerationRules.cache.get(data.id)?._clone() ?? null;
13
+ const newAutoModerationRule = guild.autoModerationRules._add(data);
14
+
15
+ /**
16
+ * Emitted whenever an auto moderation rule gets updated.
17
+ * <info>This event requires the {@link PermissionFlagsBits.ManageGuild} permission.</info>
18
+ * @event Client#autoModerationRuleUpdate
19
+ * @param {?AutoModerationRule} oldAutoModerationRule The auto moderation rule before the update
20
+ * @param {AutoModerationRule} newAutoModerationRule The auto moderation rule after the update
21
+ */
22
+ client.emit(Events.AutoModerationRuleUpdate, oldAutoModerationRule, newAutoModerationRule);
23
+ }
24
+
25
+ return {};
26
+ }
27
+ }
28
+
29
+ module.exports = AutoModerationRuleUpdateAction;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class ChannelCreateAction extends Action {
7
+ handle(data) {
8
+ const client = this.client;
9
+ const existing = client.channels.cache.has(data.id);
10
+ const channel = client.channels._add(data);
11
+ if (!existing && channel) {
12
+ /**
13
+ * Emitted whenever a guild channel is created.
14
+ * @event Client#channelCreate
15
+ * @param {GuildChannel} channel The channel that was created
16
+ */
17
+ client.emit(Events.ChannelCreate, channel);
18
+ }
19
+ return { channel };
20
+ }
21
+ }
22
+
23
+ module.exports = ChannelCreateAction;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class ChannelDeleteAction extends Action {
7
+ handle(data) {
8
+ const client = this.client;
9
+ const channel = client.channels.cache.get(data.id);
10
+
11
+ if (channel) {
12
+ client.channels._remove(channel.id);
13
+ /**
14
+ * Emitted whenever a channel is deleted.
15
+ * @event Client#channelDelete
16
+ * @param {DMChannel|GuildChannel} channel The channel that was deleted
17
+ */
18
+ client.emit(Events.ChannelDelete, channel);
19
+ }
20
+ }
21
+ }
22
+
23
+ module.exports = ChannelDeleteAction;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const { createChannel } = require('../../util/Channels');
5
+
6
+ class ChannelUpdateAction extends Action {
7
+ handle(data) {
8
+ const client = this.client;
9
+
10
+ let channel = client.channels.cache.get(data.id);
11
+ if (channel) {
12
+ const old = channel._update(data);
13
+
14
+ if (channel.type !== data.type) {
15
+ const newChannel = createChannel(this.client, data, channel.guild);
16
+ for (const [id, message] of channel.messages.cache) newChannel.messages.cache.set(id, message);
17
+ channel = newChannel;
18
+ this.client.channels.cache.set(channel.id, channel);
19
+ }
20
+
21
+ return {
22
+ old,
23
+ updated: channel,
24
+ };
25
+ } else {
26
+ client.channels._add(data);
27
+ }
28
+
29
+ return {};
30
+ }
31
+ }
32
+
33
+ module.exports = ChannelUpdateAction;
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const GuildAuditLogsEntry = require('../../structures/GuildAuditLogsEntry');
5
+ const Events = require('../../util/Events');
6
+
7
+ class GuildAuditLogEntryCreateAction extends Action {
8
+ handle(data) {
9
+ const client = this.client;
10
+ const guild = client.guilds.cache.get(data.guild_id);
11
+ let auditLogEntry;
12
+
13
+ if (guild) {
14
+ auditLogEntry = new GuildAuditLogsEntry(guild, data);
15
+
16
+ /**
17
+ * Emitted whenever a guild audit log entry is created.
18
+ * @event Client#guildAuditLogEntryCreate
19
+ * @param {GuildAuditLogsEntry} auditLogEntry The entry that was created
20
+ * @param {Guild} guild The guild where the entry was created
21
+ */
22
+ client.emit(Events.GuildAuditLogEntryCreate, auditLogEntry, guild);
23
+ }
24
+
25
+ return { auditLogEntry };
26
+ }
27
+ }
28
+
29
+ module.exports = GuildAuditLogEntryCreateAction;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class GuildBanAdd extends Action {
7
+ handle(data) {
8
+ const client = this.client;
9
+ const guild = client.guilds.cache.get(data.guild_id);
10
+
11
+ /**
12
+ * Emitted whenever a member is banned from a guild.
13
+ * @event Client#guildBanAdd
14
+ * @param {GuildBan} ban The ban that occurred
15
+ */
16
+ if (guild) client.emit(Events.GuildBanAdd, guild.bans._add(data));
17
+ }
18
+ }
19
+
20
+ module.exports = GuildBanAdd;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const GuildBan = require('../../structures/GuildBan');
5
+ const Events = require('../../util/Events');
6
+
7
+ class GuildBanRemove extends Action {
8
+ handle(data) {
9
+ const client = this.client;
10
+ const guild = client.guilds.cache.get(data.guild_id);
11
+
12
+ /**
13
+ * Emitted whenever a member is unbanned from a guild.
14
+ * @event Client#guildBanRemove
15
+ * @param {GuildBan} ban The ban that was removed
16
+ */
17
+ if (guild) {
18
+ const ban = guild.bans.cache.get(data.user.id) ?? new GuildBan(client, data, guild);
19
+ guild.bans.cache.delete(ban.user.id);
20
+ client.emit(Events.GuildBanRemove, ban);
21
+ }
22
+ }
23
+ }
24
+
25
+ module.exports = GuildBanRemove;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+
5
+ class GuildChannelsPositionUpdate extends Action {
6
+ handle(data) {
7
+ const client = this.client;
8
+
9
+ const guild = client.guilds.cache.get(data.guild_id);
10
+ if (guild) {
11
+ for (const partialChannel of data.channels) {
12
+ const channel = guild.channels.cache.get(partialChannel.id);
13
+ if (channel) channel.rawPosition = partialChannel.position;
14
+ }
15
+ }
16
+
17
+ return { guild };
18
+ }
19
+ }
20
+
21
+ module.exports = GuildChannelsPositionUpdate;
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class GuildDeleteAction extends Action {
7
+ handle(data) {
8
+ const client = this.client;
9
+
10
+ let guild = client.guilds.cache.get(data.id);
11
+ if (guild) {
12
+ if (data.unavailable) {
13
+ // Guild is unavailable
14
+ guild.available = false;
15
+
16
+ /**
17
+ * Emitted whenever a guild becomes unavailable, likely due to a server outage.
18
+ * @event Client#guildUnavailable
19
+ * @param {Guild} guild The guild that has become unavailable
20
+ */
21
+ client.emit(Events.GuildUnavailable, guild);
22
+
23
+ // Stops the GuildDelete packet thinking a guild was actually deleted,
24
+ // handles emitting of event itself
25
+ return;
26
+ }
27
+
28
+ for (const channel of guild.channels.cache.values()) this.client.channels._remove(channel.id);
29
+ client.voice.adapters.get(data.id)?.destroy();
30
+
31
+ // Delete guild
32
+ client.guilds.cache.delete(guild.id);
33
+
34
+ /**
35
+ * Emitted whenever a guild kicks the client or the guild is deleted/left.
36
+ * @event Client#guildDelete
37
+ * @param {Guild} guild The guild that was deleted
38
+ */
39
+ client.emit(Events.GuildDelete, guild);
40
+ }
41
+ }
42
+ }
43
+
44
+ module.exports = GuildDeleteAction;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class GuildEmojiCreateAction extends Action {
7
+ handle(guild, createdEmoji) {
8
+ const already = guild.emojis.cache.has(createdEmoji.id);
9
+ const emoji = guild.emojis._add(createdEmoji);
10
+ /**
11
+ * Emitted whenever a custom emoji is created in a guild.
12
+ * @event Client#emojiCreate
13
+ * @param {GuildEmoji} emoji The emoji that was created
14
+ */
15
+ if (!already) this.client.emit(Events.GuildEmojiCreate, emoji);
16
+ return { emoji };
17
+ }
18
+ }
19
+
20
+ module.exports = GuildEmojiCreateAction;
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class GuildEmojiDeleteAction extends Action {
7
+ handle(emoji) {
8
+ emoji.guild.emojis.cache.delete(emoji.id);
9
+ /**
10
+ * Emitted whenever a custom emoji is deleted in a guild.
11
+ * @event Client#emojiDelete
12
+ * @param {GuildEmoji} emoji The emoji that was deleted
13
+ */
14
+ this.client.emit(Events.GuildEmojiDelete, emoji);
15
+ return { emoji };
16
+ }
17
+ }
18
+
19
+ module.exports = GuildEmojiDeleteAction;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+ const Events = require('../../util/Events');
5
+
6
+ class GuildEmojiUpdateAction extends Action {
7
+ handle(current, data) {
8
+ const old = current._update(data);
9
+ /**
10
+ * Emitted whenever a custom emoji is updated in a guild.
11
+ * @event Client#emojiUpdate
12
+ * @param {GuildEmoji} oldEmoji The old emoji
13
+ * @param {GuildEmoji} newEmoji The new emoji
14
+ */
15
+ this.client.emit(Events.GuildEmojiUpdate, old, current);
16
+ return { emoji: current };
17
+ }
18
+ }
19
+
20
+ module.exports = GuildEmojiUpdateAction;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ const Action = require('./Action');
4
+
5
+ class GuildEmojisUpdateAction extends Action {
6
+ handle(data) {
7
+ const guild = this.client.guilds.cache.get(data.guild_id);
8
+ if (!guild?.emojis) return;
9
+
10
+ const deletions = new Map(guild.emojis.cache);
11
+
12
+ for (const emoji of data.emojis) {
13
+ // Determine type of emoji event
14
+ const cachedEmoji = guild.emojis.cache.get(emoji.id);
15
+ if (cachedEmoji) {
16
+ deletions.delete(emoji.id);
17
+ if (!cachedEmoji.equals(emoji)) {
18
+ // Emoji updated
19
+ this.client.actions.GuildEmojiUpdate.handle(cachedEmoji, emoji);
20
+ }
21
+ } else {
22
+ // Emoji added
23
+ this.client.actions.GuildEmojiCreate.handle(guild, emoji);
24
+ }
25
+ }
26
+
27
+ for (const emoji of deletions.values()) {
28
+ // Emoji deleted
29
+ this.client.actions.GuildEmojiDelete.handle(emoji);
30
+ }
31
+ }
32
+ }
33
+
34
+ module.exports = GuildEmojisUpdateAction;