@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,91 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const ApplicationCommand = require('./ApplicationCommand');
5
+ const GuildAuditLogsEntry = require('./GuildAuditLogsEntry');
6
+ const Integration = require('./Integration');
7
+ const Webhook = require('./Webhook');
8
+ const { flatten } = require('../util/Util');
9
+
10
+ /**
11
+ * Audit logs entries are held in this class.
12
+ */
13
+ class GuildAuditLogs {
14
+ constructor(guild, data) {
15
+ if (data.users) for (const user of data.users) guild.client.users._add(user);
16
+ if (data.threads) for (const thread of data.threads) guild.client.channels._add(thread, guild);
17
+ /**
18
+ * Cached webhooks
19
+ * @type {Collection<Snowflake, Webhook>}
20
+ * @private
21
+ */
22
+ this.webhooks = new Collection();
23
+ if (data.webhooks) {
24
+ for (const hook of data.webhooks) {
25
+ this.webhooks.set(hook.id, new Webhook(guild.client, hook));
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Cached integrations
31
+ * @type {Collection<Snowflake|string, Integration>}
32
+ * @private
33
+ */
34
+ this.integrations = new Collection();
35
+ if (data.integrations) {
36
+ for (const integration of data.integrations) {
37
+ this.integrations.set(integration.id, new Integration(guild.client, integration, guild));
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Cached {@link GuildScheduledEvent}s.
43
+ * @type {Collection<Snowflake, GuildScheduledEvent>}
44
+ * @private
45
+ */
46
+ this.guildScheduledEvents = data.guild_scheduled_events.reduce(
47
+ (guildScheduledEvents, guildScheduledEvent) =>
48
+ guildScheduledEvents.set(guildScheduledEvent.id, guild.scheduledEvents._add(guildScheduledEvent)),
49
+ new Collection(),
50
+ );
51
+
52
+ /**
53
+ * Cached application commands, includes application commands from other applications
54
+ * @type {Collection<Snowflake, ApplicationCommand>}
55
+ * @private
56
+ */
57
+ this.applicationCommands = new Collection();
58
+ if (data.application_commands) {
59
+ for (const command of data.application_commands) {
60
+ this.applicationCommands.set(command.id, new ApplicationCommand(guild.client, command, guild));
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Cached auto moderation rules.
66
+ * @type {Collection<Snowflake, AutoModerationRule>}
67
+ * @private
68
+ */
69
+ this.autoModerationRules = data.auto_moderation_rules.reduce(
70
+ (autoModerationRules, autoModerationRule) =>
71
+ autoModerationRules.set(autoModerationRule.id, guild.autoModerationRules._add(autoModerationRule)),
72
+ new Collection(),
73
+ );
74
+
75
+ /**
76
+ * The entries for this guild's audit logs
77
+ * @type {Collection<Snowflake, GuildAuditLogsEntry>}
78
+ */
79
+ this.entries = new Collection();
80
+ for (const item of data.audit_log_entries) {
81
+ const entry = new GuildAuditLogsEntry(guild, item, this);
82
+ this.entries.set(entry.id, entry);
83
+ }
84
+ }
85
+
86
+ toJSON() {
87
+ return flatten(this);
88
+ }
89
+ }
90
+
91
+ module.exports = GuildAuditLogs;
@@ -0,0 +1,527 @@
1
+ 'use strict';
2
+
3
+ const { DiscordSnowflake } = require('@sapphire/snowflake');
4
+ const { AuditLogOptionsType, AuditLogEvent } = require('discord-api-types/v10');
5
+ const AutoModerationRule = require('./AutoModerationRule');
6
+ const { GuildScheduledEvent } = require('./GuildScheduledEvent');
7
+ const Integration = require('./Integration');
8
+ const Invite = require('./Invite');
9
+ const { StageInstance } = require('./StageInstance');
10
+ const { Sticker } = require('./Sticker');
11
+ const Webhook = require('./Webhook');
12
+ const Partials = require('../util/Partials');
13
+ const { flatten } = require('../util/Util');
14
+
15
+ const Targets = {
16
+ All: 'All',
17
+ Guild: 'Guild',
18
+ GuildScheduledEvent: 'GuildScheduledEvent',
19
+ Channel: 'Channel',
20
+ User: 'User',
21
+ Role: 'Role',
22
+ Invite: 'Invite',
23
+ Webhook: 'Webhook',
24
+ Emoji: 'Emoji',
25
+ Message: 'Message',
26
+ Integration: 'Integration',
27
+ StageInstance: 'StageInstance',
28
+ Sticker: 'Sticker',
29
+ Thread: 'Thread',
30
+ ApplicationCommand: 'ApplicationCommand',
31
+ AutoModeration: 'AutoModeration',
32
+ Unknown: 'Unknown',
33
+ };
34
+
35
+ /**
36
+ * The target of a guild audit log entry. It can be one of:
37
+ * * A guild
38
+ * * A channel
39
+ * * A user
40
+ * * A role
41
+ * * An invite
42
+ * * A webhook
43
+ * * An emoji
44
+ * * A message
45
+ * * An integration
46
+ * * A stage instance
47
+ * * A sticker
48
+ * * A guild scheduled event
49
+ * * A thread
50
+ * * An application command
51
+ * * An auto moderation rule
52
+ * * An object with an id key if target was deleted or fake entity
53
+ * * An object where the keys represent either the new value or the old value
54
+ * @typedef {?(Object|Guild|BaseChannel|User|Role|Invite|Webhook|GuildEmoji|Message|Integration|StageInstance|Sticker|
55
+ * GuildScheduledEvent|ApplicationCommand|AutoModerationRule)} AuditLogEntryTarget
56
+ */
57
+
58
+ /**
59
+ * The action type of an entry, e.g. `Create`. Here are the available types:
60
+ * * Create
61
+ * * Delete
62
+ * * Update
63
+ * * All
64
+ * @typedef {string} AuditLogActionType
65
+ */
66
+
67
+ /**
68
+ * The target type of an entry. Here are the available types:
69
+ * * Guild
70
+ * * Channel
71
+ * * User
72
+ * * Role
73
+ * * Invite
74
+ * * Webhook
75
+ * * Emoji
76
+ * * Message
77
+ * * Integration
78
+ * * StageInstance
79
+ * * Sticker
80
+ * * Thread
81
+ * * GuildScheduledEvent
82
+ * * ApplicationCommandPermission
83
+ * @typedef {string} AuditLogTargetType
84
+ */
85
+
86
+ /**
87
+ * Audit logs entry.
88
+ */
89
+ class GuildAuditLogsEntry {
90
+ /**
91
+ * Key mirror of all available audit log targets.
92
+ * @type {Object<string, string>}
93
+ * @memberof GuildAuditLogsEntry
94
+ */
95
+ static Targets = Targets;
96
+
97
+ constructor(guild, data, logs) {
98
+ /**
99
+ * The target type of this entry
100
+ * @type {AuditLogTargetType}
101
+ */
102
+ this.targetType = GuildAuditLogsEntry.targetType(data.action_type);
103
+ const targetType = this.targetType;
104
+
105
+ /**
106
+ * The action type of this entry
107
+ * @type {AuditLogActionType}
108
+ */
109
+ this.actionType = GuildAuditLogsEntry.actionType(data.action_type);
110
+
111
+ /**
112
+ * The type of action that occurred.
113
+ * @type {AuditLogEvent}
114
+ */
115
+ this.action = data.action_type;
116
+
117
+ /**
118
+ * The reason of this entry
119
+ * @type {?string}
120
+ */
121
+ this.reason = data.reason ?? null;
122
+
123
+ /**
124
+ * The id of the user that executed this entry
125
+ * @type {?Snowflake}
126
+ */
127
+ this.executorId = data.user_id;
128
+
129
+ /**
130
+ * The user that executed this entry
131
+ * @type {?User}
132
+ */
133
+ this.executor = data.user_id
134
+ ? guild.client.options.partials.includes(Partials.User)
135
+ ? guild.client.users._add({ id: data.user_id })
136
+ : guild.client.users.cache.get(data.user_id) ?? null
137
+ : null;
138
+
139
+ /**
140
+ * An entry in the audit log representing a specific change.
141
+ * @typedef {Object} AuditLogChange
142
+ * @property {string} key The property that was changed, e.g. `nick` for nickname changes
143
+ * <warn>For application command permissions updates the key is the id of the user, channel,
144
+ * role, or a permission constant that was updated instead of an actual property name</warn>
145
+ * @property {*} [old] The old value of the change, e.g. for nicknames, the old nickname
146
+ * @property {*} [new] The new value of the change, e.g. for nicknames, the new nickname
147
+ */
148
+
149
+ /**
150
+ * Specific property changes
151
+ * @type {AuditLogChange[]}
152
+ */
153
+ this.changes = data.changes?.map(c => ({ key: c.key, old: c.old_value, new: c.new_value })) ?? [];
154
+
155
+ /**
156
+ * The entry's id
157
+ * @type {Snowflake}
158
+ */
159
+ this.id = data.id;
160
+
161
+ /**
162
+ * Any extra data from the entry
163
+ * @type {?(Object|Role|GuildMember)}
164
+ */
165
+ this.extra = null;
166
+ switch (data.action_type) {
167
+ case AuditLogEvent.MemberPrune:
168
+ this.extra = {
169
+ removed: Number(data.options.members_removed),
170
+ days: Number(data.options.delete_member_days),
171
+ };
172
+ break;
173
+
174
+ case AuditLogEvent.MemberMove:
175
+ case AuditLogEvent.MessageDelete:
176
+ case AuditLogEvent.MessageBulkDelete:
177
+ this.extra = {
178
+ channel: guild.channels.cache.get(data.options.channel_id) ?? { id: data.options.channel_id },
179
+ count: Number(data.options.count),
180
+ };
181
+ break;
182
+
183
+ case AuditLogEvent.MessagePin:
184
+ case AuditLogEvent.MessageUnpin:
185
+ this.extra = {
186
+ channel: guild.client.channels.cache.get(data.options.channel_id) ?? { id: data.options.channel_id },
187
+ messageId: data.options.message_id,
188
+ };
189
+ break;
190
+
191
+ case AuditLogEvent.MemberDisconnect:
192
+ this.extra = {
193
+ count: Number(data.options.count),
194
+ };
195
+ break;
196
+
197
+ case AuditLogEvent.ChannelOverwriteCreate:
198
+ case AuditLogEvent.ChannelOverwriteUpdate:
199
+ case AuditLogEvent.ChannelOverwriteDelete:
200
+ switch (data.options.type) {
201
+ case AuditLogOptionsType.Role:
202
+ this.extra = guild.roles.cache.get(data.options.id) ?? {
203
+ id: data.options.id,
204
+ name: data.options.role_name,
205
+ type: AuditLogOptionsType.Role,
206
+ };
207
+ break;
208
+
209
+ case AuditLogOptionsType.Member:
210
+ this.extra = guild.members.cache.get(data.options.id) ?? {
211
+ id: data.options.id,
212
+ type: AuditLogOptionsType.Member,
213
+ };
214
+ break;
215
+
216
+ default:
217
+ break;
218
+ }
219
+ break;
220
+
221
+ case AuditLogEvent.StageInstanceCreate:
222
+ case AuditLogEvent.StageInstanceDelete:
223
+ case AuditLogEvent.StageInstanceUpdate:
224
+ this.extra = {
225
+ channel: guild.client.channels.cache.get(data.options?.channel_id) ?? { id: data.options?.channel_id },
226
+ };
227
+ break;
228
+
229
+ case AuditLogEvent.ApplicationCommandPermissionUpdate:
230
+ this.extra = {
231
+ applicationId: data.options.application_id,
232
+ };
233
+ break;
234
+
235
+ case AuditLogEvent.AutoModerationBlockMessage:
236
+ case AuditLogEvent.AutoModerationFlagToChannel:
237
+ case AuditLogEvent.AutoModerationUserCommunicationDisabled:
238
+ this.extra = {
239
+ autoModerationRuleName: data.options.auto_moderation_rule_name,
240
+ autoModerationRuleTriggerType: data.options.auto_moderation_rule_trigger_type,
241
+ };
242
+ break;
243
+
244
+ default:
245
+ break;
246
+ }
247
+
248
+ /**
249
+ * The id of the target of this entry
250
+ * @type {?Snowflake}
251
+ */
252
+ this.targetId = data.target_id;
253
+
254
+ /**
255
+ * The target of this entry
256
+ * @type {?AuditLogEntryTarget}
257
+ */
258
+ this.target = null;
259
+ if (targetType === Targets.Unknown) {
260
+ this.target = this.changes.reduce((o, c) => {
261
+ o[c.key] = c.new ?? c.old;
262
+ return o;
263
+ }, {});
264
+ this.target.id = data.target_id;
265
+ // MemberDisconnect and similar types do not provide a target_id.
266
+ } else if (targetType === Targets.User && data.target_id) {
267
+ this.target = guild.client.options.partials.includes(Partials.User)
268
+ ? guild.client.users._add({ id: data.target_id })
269
+ : guild.client.users.cache.get(data.target_id) ?? null;
270
+ } else if (targetType === Targets.Guild) {
271
+ this.target = guild.client.guilds.cache.get(data.target_id);
272
+ } else if (targetType === Targets.Webhook) {
273
+ this.target =
274
+ logs?.webhooks.get(data.target_id) ??
275
+ new Webhook(
276
+ guild.client,
277
+ this.changes.reduce(
278
+ (o, c) => {
279
+ o[c.key] = c.new ?? c.old;
280
+ return o;
281
+ },
282
+ {
283
+ id: data.target_id,
284
+ guild_id: guild.id,
285
+ },
286
+ ),
287
+ );
288
+ } else if (targetType === Targets.Invite) {
289
+ let change = this.changes.find(c => c.key === 'code');
290
+ change = change.new ?? change.old;
291
+
292
+ this.target =
293
+ guild.invites.cache.get(change) ??
294
+ new Invite(
295
+ guild.client,
296
+ this.changes.reduce(
297
+ (o, c) => {
298
+ o[c.key] = c.new ?? c.old;
299
+ return o;
300
+ },
301
+ { guild },
302
+ ),
303
+ );
304
+ } else if (targetType === Targets.Message) {
305
+ // Discord sends a channel id for the MessageBulkDelete action type.
306
+ this.target =
307
+ data.action_type === AuditLogEvent.MessageBulkDelete
308
+ ? guild.channels.cache.get(data.target_id) ?? { id: data.target_id }
309
+ : guild.client.users.cache.get(data.target_id) ?? null;
310
+ } else if (targetType === Targets.Integration) {
311
+ this.target =
312
+ logs?.integrations.get(data.target_id) ??
313
+ new Integration(
314
+ guild.client,
315
+ this.changes.reduce(
316
+ (o, c) => {
317
+ o[c.key] = c.new ?? c.old;
318
+ return o;
319
+ },
320
+ { id: data.target_id },
321
+ ),
322
+ guild,
323
+ );
324
+ } else if (targetType === Targets.Channel || targetType === Targets.Thread) {
325
+ this.target =
326
+ guild.channels.cache.get(data.target_id) ??
327
+ this.changes.reduce(
328
+ (o, c) => {
329
+ o[c.key] = c.new ?? c.old;
330
+ return o;
331
+ },
332
+ { id: data.target_id },
333
+ );
334
+ } else if (targetType === Targets.StageInstance) {
335
+ this.target =
336
+ guild.stageInstances.cache.get(data.target_id) ??
337
+ new StageInstance(
338
+ guild.client,
339
+ this.changes.reduce(
340
+ (o, c) => {
341
+ o[c.key] = c.new ?? c.old;
342
+ return o;
343
+ },
344
+ {
345
+ id: data.target_id,
346
+ channel_id: data.options?.channel_id,
347
+ guild_id: guild.id,
348
+ },
349
+ ),
350
+ );
351
+ } else if (targetType === Targets.Sticker) {
352
+ this.target =
353
+ guild.stickers.cache.get(data.target_id) ??
354
+ new Sticker(
355
+ guild.client,
356
+ this.changes.reduce(
357
+ (o, c) => {
358
+ o[c.key] = c.new ?? c.old;
359
+ return o;
360
+ },
361
+ { id: data.target_id },
362
+ ),
363
+ );
364
+ } else if (targetType === Targets.GuildScheduledEvent) {
365
+ this.target =
366
+ guild.scheduledEvents.cache.get(data.target_id) ??
367
+ new GuildScheduledEvent(
368
+ guild.client,
369
+ this.changes.reduce(
370
+ (o, c) => {
371
+ o[c.key] = c.new ?? c.old;
372
+ return o;
373
+ },
374
+ { id: data.target_id, guild_id: guild.id },
375
+ ),
376
+ );
377
+ } else if (targetType === Targets.ApplicationCommand) {
378
+ this.target = logs?.applicationCommands.get(data.target_id) ?? { id: data.target_id };
379
+ } else if (targetType === Targets.AutoModeration) {
380
+ this.target =
381
+ guild.autoModerationRules.cache.get(data.target_id) ??
382
+ new AutoModerationRule(
383
+ guild.client,
384
+ this.changes.reduce(
385
+ (o, c) => {
386
+ o[c.key] = c.new ?? c.old;
387
+ return o;
388
+ },
389
+ { id: data.target_id, guild_id: guild.id },
390
+ ),
391
+ guild,
392
+ );
393
+ } else if (data.target_id) {
394
+ this.target = guild[`${targetType.toLowerCase()}s`]?.cache.get(data.target_id) ?? { id: data.target_id };
395
+ }
396
+ }
397
+
398
+ /**
399
+ * Finds the target type of a guild audit log entry.
400
+ * @param {AuditLogEvent} target The action target
401
+ * @returns {AuditLogTargetType}
402
+ */
403
+ static targetType(target) {
404
+ if (target < 10) return Targets.Guild;
405
+ if (target < 20) return Targets.Channel;
406
+ if (target < 30) return Targets.User;
407
+ if (target < 40) return Targets.Role;
408
+ if (target < 50) return Targets.Invite;
409
+ if (target < 60) return Targets.Webhook;
410
+ if (target < 70) return Targets.Emoji;
411
+ if (target < 80) return Targets.Message;
412
+ if (target < 83) return Targets.Integration;
413
+ if (target < 86) return Targets.StageInstance;
414
+ if (target < 100) return Targets.Sticker;
415
+ if (target < 110) return Targets.GuildScheduledEvent;
416
+ if (target < 120) return Targets.Thread;
417
+ if (target < 130) return Targets.ApplicationCommand;
418
+ if (target >= 140 && target < 150) return Targets.AutoModeration;
419
+ return Targets.Unknown;
420
+ }
421
+
422
+ /**
423
+ * Finds the action type from the guild audit log entry action.
424
+ * @param {AuditLogEvent} action The action target
425
+ * @returns {AuditLogActionType}
426
+ */
427
+ static actionType(action) {
428
+ if (
429
+ [
430
+ AuditLogEvent.ChannelCreate,
431
+ AuditLogEvent.ChannelOverwriteCreate,
432
+ AuditLogEvent.MemberBanRemove,
433
+ AuditLogEvent.BotAdd,
434
+ AuditLogEvent.RoleCreate,
435
+ AuditLogEvent.InviteCreate,
436
+ AuditLogEvent.WebhookCreate,
437
+ AuditLogEvent.EmojiCreate,
438
+ AuditLogEvent.MessagePin,
439
+ AuditLogEvent.IntegrationCreate,
440
+ AuditLogEvent.StageInstanceCreate,
441
+ AuditLogEvent.StickerCreate,
442
+ AuditLogEvent.GuildScheduledEventCreate,
443
+ AuditLogEvent.ThreadCreate,
444
+ AuditLogEvent.AutoModerationRuleCreate,
445
+ AuditLogEvent.AutoModerationBlockMessage,
446
+ ].includes(action)
447
+ ) {
448
+ return 'Create';
449
+ }
450
+
451
+ if (
452
+ [
453
+ AuditLogEvent.ChannelDelete,
454
+ AuditLogEvent.ChannelOverwriteDelete,
455
+ AuditLogEvent.MemberKick,
456
+ AuditLogEvent.MemberPrune,
457
+ AuditLogEvent.MemberBanAdd,
458
+ AuditLogEvent.MemberDisconnect,
459
+ AuditLogEvent.RoleDelete,
460
+ AuditLogEvent.InviteDelete,
461
+ AuditLogEvent.WebhookDelete,
462
+ AuditLogEvent.EmojiDelete,
463
+ AuditLogEvent.MessageDelete,
464
+ AuditLogEvent.MessageBulkDelete,
465
+ AuditLogEvent.MessageUnpin,
466
+ AuditLogEvent.IntegrationDelete,
467
+ AuditLogEvent.StageInstanceDelete,
468
+ AuditLogEvent.StickerDelete,
469
+ AuditLogEvent.GuildScheduledEventDelete,
470
+ AuditLogEvent.ThreadDelete,
471
+ AuditLogEvent.AutoModerationRuleDelete,
472
+ ].includes(action)
473
+ ) {
474
+ return 'Delete';
475
+ }
476
+
477
+ if (
478
+ [
479
+ AuditLogEvent.GuildUpdate,
480
+ AuditLogEvent.ChannelUpdate,
481
+ AuditLogEvent.ChannelOverwriteUpdate,
482
+ AuditLogEvent.MemberUpdate,
483
+ AuditLogEvent.MemberRoleUpdate,
484
+ AuditLogEvent.MemberMove,
485
+ AuditLogEvent.RoleUpdate,
486
+ AuditLogEvent.InviteUpdate,
487
+ AuditLogEvent.WebhookUpdate,
488
+ AuditLogEvent.EmojiUpdate,
489
+ AuditLogEvent.IntegrationUpdate,
490
+ AuditLogEvent.StageInstanceUpdate,
491
+ AuditLogEvent.StickerUpdate,
492
+ AuditLogEvent.GuildScheduledEventUpdate,
493
+ AuditLogEvent.ThreadUpdate,
494
+ AuditLogEvent.ApplicationCommandPermissionUpdate,
495
+ AuditLogEvent.AutoModerationRuleUpdate,
496
+ ].includes(action)
497
+ ) {
498
+ return 'Update';
499
+ }
500
+
501
+ return 'All';
502
+ }
503
+
504
+ /**
505
+ * The timestamp this entry was created at
506
+ * @type {number}
507
+ * @readonly
508
+ */
509
+ get createdTimestamp() {
510
+ return DiscordSnowflake.timestampFrom(this.id);
511
+ }
512
+
513
+ /**
514
+ * The time this entry was created at
515
+ * @type {Date}
516
+ * @readonly
517
+ */
518
+ get createdAt() {
519
+ return new Date(this.createdTimestamp);
520
+ }
521
+
522
+ toJSON() {
523
+ return flatten(this, { createdTimestamp: true });
524
+ }
525
+ }
526
+
527
+ module.exports = GuildAuditLogsEntry;
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ const Base = require('./Base');
4
+
5
+ /**
6
+ * Represents a ban in a guild on Discord.
7
+ * @extends {Base}
8
+ */
9
+ class GuildBan extends Base {
10
+ constructor(client, data, guild) {
11
+ super(client);
12
+
13
+ /**
14
+ * The guild in which the ban is
15
+ * @type {Guild}
16
+ */
17
+ this.guild = guild;
18
+
19
+ this._patch(data);
20
+ }
21
+
22
+ _patch(data) {
23
+ if ('user' in data) {
24
+ /**
25
+ * The user this ban applies to
26
+ * @type {User}
27
+ */
28
+ this.user = this.client.users._add(data.user, true);
29
+ }
30
+
31
+ if ('reason' in data) {
32
+ /**
33
+ * The reason for the ban
34
+ * @type {?string}
35
+ */
36
+ this.reason = data.reason;
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Whether this GuildBan is partial. If the reason is not provided the value is null
42
+ * @type {boolean}
43
+ * @readonly
44
+ */
45
+ get partial() {
46
+ return !('reason' in this);
47
+ }
48
+
49
+ /**
50
+ * Fetches this GuildBan.
51
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
52
+ * @returns {Promise<GuildBan>}
53
+ */
54
+ fetch(force = true) {
55
+ return this.guild.bans.fetch({ user: this.user, cache: true, force });
56
+ }
57
+ }
58
+
59
+ module.exports = GuildBan;