@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,27 @@
1
+ 'use strict';
2
+
3
+ const BaseGuildEmoji = require('./BaseGuildEmoji');
4
+
5
+ /**
6
+ * Represents an instance of an emoji belonging to a public guild obtained through Discord's preview endpoint.
7
+ * @extends {BaseGuildEmoji}
8
+ */
9
+ class GuildPreviewEmoji extends BaseGuildEmoji {
10
+ /**
11
+ * The public guild this emoji is part of
12
+ * @type {GuildPreview}
13
+ * @name GuildPreviewEmoji#guild
14
+ */
15
+
16
+ constructor(client, data, guild) {
17
+ super(client, data, guild);
18
+
19
+ /**
20
+ * The roles this emoji is active for
21
+ * @type {Snowflake[]}
22
+ */
23
+ this.roles = data.roles;
24
+ }
25
+ }
26
+
27
+ module.exports = GuildPreviewEmoji;
@@ -0,0 +1,439 @@
1
+ 'use strict';
2
+
3
+ const { DiscordSnowflake } = require('@sapphire/snowflake');
4
+ const { GuildScheduledEventStatus, GuildScheduledEventEntityType, RouteBases } = require('discord-api-types/v10');
5
+ const Base = require('./Base');
6
+ const { DiscordjsError, ErrorCodes } = require('../errors');
7
+
8
+ /**
9
+ * Represents a scheduled event in a {@link Guild}.
10
+ * @extends {Base}
11
+ */
12
+ class GuildScheduledEvent extends Base {
13
+ constructor(client, data) {
14
+ super(client);
15
+
16
+ /**
17
+ * The id of the guild scheduled event
18
+ * @type {Snowflake}
19
+ */
20
+ this.id = data.id;
21
+
22
+ /**
23
+ * The id of the guild this guild scheduled event belongs to
24
+ * @type {Snowflake}
25
+ */
26
+ this.guildId = data.guild_id;
27
+
28
+ this._patch(data);
29
+ }
30
+
31
+ _patch(data) {
32
+ if ('channel_id' in data) {
33
+ /**
34
+ * The channel id in which the scheduled event will be hosted,
35
+ * or `null` if entity type is {@link GuildScheduledEventEntityType.External}
36
+ * @type {?Snowflake}
37
+ */
38
+ this.channelId = data.channel_id;
39
+ } else {
40
+ this.channelId ??= null;
41
+ }
42
+
43
+ if ('creator_id' in data) {
44
+ /**
45
+ * The id of the user that created this guild scheduled event
46
+ * @type {?Snowflake}
47
+ */
48
+ this.creatorId = data.creator_id;
49
+ } else {
50
+ this.creatorId ??= null;
51
+ }
52
+
53
+ /**
54
+ * The name of the guild scheduled event
55
+ * @type {string}
56
+ */
57
+ this.name = data.name;
58
+
59
+ if ('description' in data) {
60
+ /**
61
+ * The description of the guild scheduled event
62
+ * @type {?string}
63
+ */
64
+ this.description = data.description;
65
+ } else {
66
+ this.description ??= null;
67
+ }
68
+
69
+ /**
70
+ * The timestamp the guild scheduled event will start at
71
+ * <info>This can be potentially `null` only when it's an {@link AuditLogEntryTarget}</info>
72
+ * @type {?number}
73
+ */
74
+ this.scheduledStartTimestamp = data.scheduled_start_time ? Date.parse(data.scheduled_start_time) : null;
75
+
76
+ /**
77
+ * The timestamp the guild scheduled event will end at,
78
+ * or `null` if the event does not have a scheduled time to end
79
+ * @type {?number}
80
+ */
81
+ this.scheduledEndTimestamp = data.scheduled_end_time ? Date.parse(data.scheduled_end_time) : null;
82
+
83
+ /**
84
+ * The privacy level of the guild scheduled event
85
+ * @type {GuildScheduledEventPrivacyLevel}
86
+ */
87
+ this.privacyLevel = data.privacy_level;
88
+
89
+ /**
90
+ * The status of the guild scheduled event
91
+ * @type {GuildScheduledEventStatus}
92
+ */
93
+ this.status = data.status;
94
+
95
+ /**
96
+ * The type of hosting entity associated with the scheduled event
97
+ * @type {GuildScheduledEventEntityType}
98
+ */
99
+ this.entityType = data.entity_type;
100
+
101
+ if ('entity_id' in data) {
102
+ /**
103
+ * The id of the hosting entity associated with the scheduled event
104
+ * @type {?Snowflake}
105
+ */
106
+ this.entityId = data.entity_id;
107
+ } else {
108
+ this.entityId ??= null;
109
+ }
110
+
111
+ if ('user_count' in data) {
112
+ /**
113
+ * The number of users who are subscribed to this guild scheduled event
114
+ * @type {?number}
115
+ */
116
+ this.userCount = data.user_count;
117
+ } else {
118
+ this.userCount ??= null;
119
+ }
120
+
121
+ if ('creator' in data) {
122
+ /**
123
+ * The user that created this guild scheduled event
124
+ * @type {?User}
125
+ */
126
+ this.creator = this.client.users._add(data.creator);
127
+ } else {
128
+ this.creator ??= this.client.users.resolve(this.creatorId);
129
+ }
130
+
131
+ /* eslint-disable max-len */
132
+ /**
133
+ * Represents the additional metadata for a {@link GuildScheduledEvent}
134
+ * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata}
135
+ * @typedef {Object} GuildScheduledEventEntityMetadata
136
+ * @property {?string} location The location of the guild scheduled event
137
+ */
138
+ /* eslint-enable max-len */
139
+
140
+ if ('entity_metadata' in data) {
141
+ if (data.entity_metadata) {
142
+ /**
143
+ * Additional metadata
144
+ * @type {?GuildScheduledEventEntityMetadata}
145
+ */
146
+ this.entityMetadata = {
147
+ location: data.entity_metadata.location ?? this.entityMetadata?.location ?? null,
148
+ };
149
+ } else {
150
+ this.entityMetadata = null;
151
+ }
152
+ } else {
153
+ this.entityMetadata ??= null;
154
+ }
155
+
156
+ if ('image' in data) {
157
+ /**
158
+ * The cover image hash for this scheduled event
159
+ * @type {?string}
160
+ */
161
+ this.image = data.image;
162
+ } else {
163
+ this.image ??= null;
164
+ }
165
+ }
166
+
167
+ /**
168
+ * The URL of this scheduled event's cover image
169
+ * @param {BaseImageURLOptions} [options={}] Options for image URL
170
+ * @returns {?string}
171
+ */
172
+ coverImageURL(options = {}) {
173
+ return this.image && this.client.rest.cdn.guildScheduledEventCover(this.id, this.image, options);
174
+ }
175
+
176
+ /**
177
+ * The timestamp the guild scheduled event was created at
178
+ * @type {number}
179
+ * @readonly
180
+ */
181
+ get createdTimestamp() {
182
+ return DiscordSnowflake.timestampFrom(this.id);
183
+ }
184
+
185
+ /**
186
+ * The time the guild scheduled event was created at
187
+ * @type {Date}
188
+ * @readonly
189
+ */
190
+ get createdAt() {
191
+ return new Date(this.createdTimestamp);
192
+ }
193
+
194
+ /**
195
+ * The time the guild scheduled event will start at
196
+ * <info>This can be potentially `null` only when it's an {@link AuditLogEntryTarget}</info>
197
+ * @type {?Date}
198
+ * @readonly
199
+ */
200
+ get scheduledStartAt() {
201
+ return this.scheduledStartTimestamp && new Date(this.scheduledStartTimestamp);
202
+ }
203
+
204
+ /**
205
+ * The time the guild scheduled event will end at,
206
+ * or `null` if the event does not have a scheduled time to end
207
+ * @type {?Date}
208
+ * @readonly
209
+ */
210
+ get scheduledEndAt() {
211
+ return this.scheduledEndTimestamp && new Date(this.scheduledEndTimestamp);
212
+ }
213
+
214
+ /**
215
+ * The channel associated with this scheduled event
216
+ * @type {?(VoiceChannel|StageChannel)}
217
+ * @readonly
218
+ */
219
+ get channel() {
220
+ return this.client.channels.resolve(this.channelId);
221
+ }
222
+
223
+ /**
224
+ * The guild this scheduled event belongs to
225
+ * @type {?Guild}
226
+ * @readonly
227
+ */
228
+ get guild() {
229
+ return this.client.guilds.resolve(this.guildId);
230
+ }
231
+
232
+ /**
233
+ * The URL to the guild scheduled event
234
+ * @type {string}
235
+ * @readonly
236
+ */
237
+ get url() {
238
+ return `${RouteBases.scheduledEvent}/${this.guildId}/${this.id}`;
239
+ }
240
+
241
+ /**
242
+ * Options used to create an invite URL to a {@link GuildScheduledEvent}
243
+ * @typedef {InviteCreateOptions} GuildScheduledEventInviteURLCreateOptions
244
+ * @property {GuildInvitableChannelResolvable} [channel] The channel to create the invite in.
245
+ * <warn>This is required when the `entityType` of `GuildScheduledEvent` is
246
+ * {@link GuildScheduledEventEntityType.External}, gets ignored otherwise</warn>
247
+ */
248
+
249
+ /**
250
+ * Creates an invite URL to this guild scheduled event.
251
+ * @param {GuildScheduledEventInviteURLCreateOptions} [options] The options to create the invite
252
+ * @returns {Promise<string>}
253
+ */
254
+ async createInviteURL(options) {
255
+ let channelId = this.channelId;
256
+ if (this.entityType === GuildScheduledEventEntityType.External) {
257
+ if (!options?.channel) throw new DiscordjsError(ErrorCodes.InviteOptionsMissingChannel);
258
+ channelId = this.guild.channels.resolveId(options.channel);
259
+ if (!channelId) throw new DiscordjsError(ErrorCodes.GuildChannelResolve);
260
+ }
261
+ const invite = await this.guild.invites.create(channelId, options);
262
+ return `${RouteBases.invite}/${invite.code}?event=${this.id}`;
263
+ }
264
+
265
+ /**
266
+ * Edits this guild scheduled event.
267
+ * @param {GuildScheduledEventEditOptions} options The options to edit the guild scheduled event
268
+ * @returns {Promise<GuildScheduledEvent>}
269
+ * @example
270
+ * // Edit a guild scheduled event
271
+ * guildScheduledEvent.edit({ name: 'Party' })
272
+ * .then(guildScheduledEvent => console.log(guildScheduledEvent))
273
+ * .catch(console.error);
274
+ */
275
+ edit(options) {
276
+ return this.guild.scheduledEvents.edit(this.id, options);
277
+ }
278
+
279
+ /**
280
+ * Deletes this guild scheduled event.
281
+ * @returns {Promise<GuildScheduledEvent>}
282
+ * @example
283
+ * // Delete a guild scheduled event
284
+ * guildScheduledEvent.delete()
285
+ * .then(guildScheduledEvent => console.log(guildScheduledEvent))
286
+ * .catch(console.error);
287
+ */
288
+ async delete() {
289
+ await this.guild.scheduledEvents.delete(this.id);
290
+ return this;
291
+ }
292
+
293
+ /**
294
+ * Sets a new name for the guild scheduled event.
295
+ * @param {string} name The new name of the guild scheduled event
296
+ * @param {string} [reason] The reason for changing the name
297
+ * @returns {Promise<GuildScheduledEvent>}
298
+ * @example
299
+ * // Set name of a guild scheduled event
300
+ * guildScheduledEvent.setName('Birthday Party')
301
+ * .then(guildScheduledEvent => console.log(`Set the name to: ${guildScheduledEvent.name}`))
302
+ * .catch(console.error);
303
+ */
304
+ setName(name, reason) {
305
+ return this.edit({ name, reason });
306
+ }
307
+
308
+ /**
309
+ * Sets a new time to schedule the event at.
310
+ * @param {DateResolvable} scheduledStartTime The time to schedule the event at
311
+ * @param {string} [reason] The reason for changing the scheduled start time
312
+ * @returns {Promise<GuildScheduledEvent>}
313
+ * @example
314
+ * // Set start time of a guild scheduled event
315
+ * guildScheduledEvent.setScheduledStartTime('2022-09-24T00:00:00+05:30')
316
+ * .then(guildScheduledEvent => console.log(`Set the start time to: ${guildScheduledEvent.scheduledStartTime}`))
317
+ * .catch(console.error);
318
+ */
319
+ setScheduledStartTime(scheduledStartTime, reason) {
320
+ return this.edit({ scheduledStartTime, reason });
321
+ }
322
+
323
+ // TODO: scheduledEndTime gets reset on passing null but it hasn't been documented
324
+ /**
325
+ * Sets a new time to end the event at.
326
+ * @param {DateResolvable} scheduledEndTime The time to end the event at
327
+ * @param {string} [reason] The reason for changing the scheduled end time
328
+ * @returns {Promise<GuildScheduledEvent>}
329
+ * @example
330
+ * // Set end time of a guild scheduled event
331
+ * guildScheduledEvent.setScheduledEndTime('2022-09-25T00:00:00+05:30')
332
+ * .then(guildScheduledEvent => console.log(`Set the end time to: ${guildScheduledEvent.scheduledEndTime}`))
333
+ * .catch(console.error);
334
+ */
335
+ setScheduledEndTime(scheduledEndTime, reason) {
336
+ return this.edit({ scheduledEndTime, reason });
337
+ }
338
+
339
+ /**
340
+ * Sets the new description of the guild scheduled event.
341
+ * @param {string} description The description of the guild scheduled event
342
+ * @param {string} [reason] The reason for changing the description
343
+ * @returns {Promise<GuildScheduledEvent>}
344
+ * @example
345
+ * // Set description of a guild scheduled event
346
+ * guildScheduledEvent.setDescription('A virtual birthday party')
347
+ * .then(guildScheduledEvent => console.log(`Set the description to: ${guildScheduledEvent.description}`))
348
+ * .catch(console.error);
349
+ */
350
+ setDescription(description, reason) {
351
+ return this.edit({ description, reason });
352
+ }
353
+
354
+ /**
355
+ * Sets the new status of the guild scheduled event.
356
+ * <info>If you're working with TypeScript, use this method in conjunction with status type-guards
357
+ * like {@link GuildScheduledEvent#isScheduled} to get only valid status as suggestion</info>
358
+ * @param {GuildScheduledEventStatus} status The status of the guild scheduled event
359
+ * @param {string} [reason] The reason for changing the status
360
+ * @returns {Promise<GuildScheduledEvent>}
361
+ * @example
362
+ * // Set status of a guild scheduled event
363
+ * guildScheduledEvent.setStatus(GuildScheduledEventStatus.Active)
364
+ * .then(guildScheduledEvent => console.log(`Set the status to: ${guildScheduledEvent.status}`))
365
+ * .catch(console.error);
366
+ */
367
+ setStatus(status, reason) {
368
+ return this.edit({ status, reason });
369
+ }
370
+
371
+ /**
372
+ * Sets the new location of the guild scheduled event.
373
+ * @param {string} location The location of the guild scheduled event
374
+ * @param {string} [reason] The reason for changing the location
375
+ * @returns {Promise<GuildScheduledEvent>}
376
+ * @example
377
+ * // Set location of a guild scheduled event
378
+ * guildScheduledEvent.setLocation('Earth')
379
+ * .then(guildScheduledEvent => console.log(`Set the location to: ${guildScheduledEvent.entityMetadata.location}`))
380
+ * .catch(console.error);
381
+ */
382
+ setLocation(location, reason) {
383
+ return this.edit({ entityMetadata: { location }, reason });
384
+ }
385
+
386
+ /**
387
+ * Fetches subscribers of this guild scheduled event.
388
+ * @param {FetchGuildScheduledEventSubscribersOptions} [options] Options for fetching the subscribers
389
+ * @returns {Promise<Collection<Snowflake, GuildScheduledEventUser>>}
390
+ */
391
+ fetchSubscribers(options) {
392
+ return this.guild.scheduledEvents.fetchSubscribers(this.id, options);
393
+ }
394
+
395
+ /**
396
+ * When concatenated with a string, this automatically concatenates the event's URL instead of the object.
397
+ * @returns {string}
398
+ * @example
399
+ * // Logs: Event: https://discord.com/events/412345678901234567/499876543211234567
400
+ * console.log(`Event: ${guildScheduledEvent}`);
401
+ */
402
+ toString() {
403
+ return this.url;
404
+ }
405
+
406
+ /**
407
+ * Indicates whether this guild scheduled event has an {@link GuildScheduledEventStatus.Active} status.
408
+ * @returns {boolean}
409
+ */
410
+ isActive() {
411
+ return this.status === GuildScheduledEventStatus.Active;
412
+ }
413
+
414
+ /**
415
+ * Indicates whether this guild scheduled event has a {@link GuildScheduledEventStatus.Canceled} status.
416
+ * @returns {boolean}
417
+ */
418
+ isCanceled() {
419
+ return this.status === GuildScheduledEventStatus.Canceled;
420
+ }
421
+
422
+ /**
423
+ * Indicates whether this guild scheduled event has a {@link GuildScheduledEventStatus.Completed} status.
424
+ * @returns {boolean}
425
+ */
426
+ isCompleted() {
427
+ return this.status === GuildScheduledEventStatus.Completed;
428
+ }
429
+
430
+ /**
431
+ * Indicates whether this guild scheduled event has a {@link GuildScheduledEventStatus.Scheduled} status.
432
+ * @returns {boolean}
433
+ */
434
+ isScheduled() {
435
+ return this.status === GuildScheduledEventStatus.Scheduled;
436
+ }
437
+ }
438
+
439
+ exports.GuildScheduledEvent = GuildScheduledEvent;
@@ -0,0 +1,241 @@
1
+ 'use strict';
2
+
3
+ const { setTimeout, clearTimeout } = require('node:timers');
4
+ const { RouteBases, Routes } = require('discord-api-types/v10');
5
+ const Base = require('./Base');
6
+ const DataResolver = require('../util/DataResolver');
7
+ const Events = require('../util/Events');
8
+
9
+ /**
10
+ * Represents the template for a guild.
11
+ * @extends {Base}
12
+ */
13
+ class GuildTemplate extends Base {
14
+ /**
15
+ * A regular expression that matches guild template links.
16
+ * The `code` group property is present on the `exec()` result of this expression.
17
+ * @type {RegExp}
18
+ * @memberof GuildTemplate
19
+ */
20
+ static GuildTemplatesPattern = /discord(?:app)?\.(?:com\/template|new)\/(?<code>[\w-]{2,255})/i;
21
+
22
+ constructor(client, data) {
23
+ super(client);
24
+ this._patch(data);
25
+ }
26
+
27
+ _patch(data) {
28
+ if ('code' in data) {
29
+ /**
30
+ * The unique code of this template
31
+ * @type {string}
32
+ */
33
+ this.code = data.code;
34
+ }
35
+
36
+ if ('name' in data) {
37
+ /**
38
+ * The name of this template
39
+ * @type {string}
40
+ */
41
+ this.name = data.name;
42
+ }
43
+
44
+ if ('description' in data) {
45
+ /**
46
+ * The description of this template
47
+ * @type {?string}
48
+ */
49
+ this.description = data.description;
50
+ }
51
+
52
+ if ('usage_count' in data) {
53
+ /**
54
+ * The amount of times this template has been used
55
+ * @type {number}
56
+ */
57
+ this.usageCount = data.usage_count;
58
+ }
59
+
60
+ if ('creator_id' in data) {
61
+ /**
62
+ * The id of the user that created this template
63
+ * @type {Snowflake}
64
+ */
65
+ this.creatorId = data.creator_id;
66
+ }
67
+
68
+ if ('creator' in data) {
69
+ /**
70
+ * The user that created this template
71
+ * @type {User}
72
+ */
73
+ this.creator = this.client.users._add(data.creator);
74
+ }
75
+
76
+ if ('created_at' in data) {
77
+ /**
78
+ * The timestamp of when this template was created at
79
+ * @type {number}
80
+ */
81
+ this.createdTimestamp = Date.parse(data.created_at);
82
+ }
83
+
84
+ if ('updated_at' in data) {
85
+ /**
86
+ * The timestamp of when this template was last synced to the guild
87
+ * @type {number}
88
+ */
89
+ this.updatedTimestamp = Date.parse(data.updated_at);
90
+ }
91
+
92
+ if ('source_guild_id' in data) {
93
+ /**
94
+ * The id of the guild that this template belongs to
95
+ * @type {Snowflake}
96
+ */
97
+ this.guildId = data.source_guild_id;
98
+ }
99
+
100
+ if ('serialized_source_guild' in data) {
101
+ /**
102
+ * The data of the guild that this template would create
103
+ * @type {APIGuild}
104
+ */
105
+ this.serializedGuild = data.serialized_source_guild;
106
+ }
107
+
108
+ /**
109
+ * Whether this template has unsynced changes
110
+ * @type {?boolean}
111
+ */
112
+ this.unSynced = 'is_dirty' in data ? Boolean(data.is_dirty) : null;
113
+
114
+ return this;
115
+ }
116
+
117
+ /**
118
+ * Creates a guild based on this template.
119
+ * <warn>This is only available to bots in fewer than 10 guilds.</warn>
120
+ * @param {string} name The name of the guild
121
+ * @param {BufferResolvable|Base64Resolvable} [icon] The icon for the guild
122
+ * @returns {Promise<Guild>}
123
+ */
124
+ async createGuild(name, icon) {
125
+ const { client } = this;
126
+ const data = await client.rest.post(Routes.template(this.code), {
127
+ body: {
128
+ name,
129
+ icon: await DataResolver.resolveImage(icon),
130
+ },
131
+ });
132
+
133
+ if (client.guilds.cache.has(data.id)) return client.guilds.cache.get(data.id);
134
+
135
+ return new Promise(resolve => {
136
+ const resolveGuild = guild => {
137
+ client.off(Events.GuildCreate, handleGuild);
138
+ client.decrementMaxListeners();
139
+ resolve(guild);
140
+ };
141
+
142
+ const handleGuild = guild => {
143
+ if (guild.id === data.id) {
144
+ clearTimeout(timeout);
145
+ resolveGuild(guild);
146
+ }
147
+ };
148
+
149
+ client.incrementMaxListeners();
150
+ client.on(Events.GuildCreate, handleGuild);
151
+
152
+ const timeout = setTimeout(() => resolveGuild(client.guilds._add(data)), 10_000).unref();
153
+ });
154
+ }
155
+
156
+ /**
157
+ * Options used to edit a guild template.
158
+ * @typedef {Object} GuildTemplateEditOptions
159
+ * @property {string} [name] The name of this template
160
+ * @property {string} [description] The description of this template
161
+ */
162
+
163
+ /**
164
+ * Updates the metadata of this template.
165
+ * @param {GuildTemplateEditOptions} [options] Options for editing the template
166
+ * @returns {Promise<GuildTemplate>}
167
+ */
168
+ async edit({ name, description } = {}) {
169
+ const data = await this.client.rest.patch(Routes.guildTemplate(this.guildId, this.code), {
170
+ body: { name, description },
171
+ });
172
+ return this._patch(data);
173
+ }
174
+
175
+ /**
176
+ * Deletes this template.
177
+ * @returns {Promise<GuildTemplate>}
178
+ */
179
+ async delete() {
180
+ await this.client.rest.delete(Routes.guildTemplate(this.guildId, this.code));
181
+ return this;
182
+ }
183
+
184
+ /**
185
+ * Syncs this template to the current state of the guild.
186
+ * @returns {Promise<GuildTemplate>}
187
+ */
188
+ async sync() {
189
+ const data = await this.client.rest.put(Routes.guildTemplate(this.guildId, this.code));
190
+ return this._patch(data);
191
+ }
192
+
193
+ /**
194
+ * The time when this template was created at
195
+ * @type {Date}
196
+ * @readonly
197
+ */
198
+ get createdAt() {
199
+ return new Date(this.createdTimestamp);
200
+ }
201
+
202
+ /**
203
+ * The time when this template was last synced to the guild
204
+ * @type {Date}
205
+ * @readonly
206
+ */
207
+ get updatedAt() {
208
+ return new Date(this.updatedTimestamp);
209
+ }
210
+
211
+ /**
212
+ * The guild that this template belongs to
213
+ * @type {?Guild}
214
+ * @readonly
215
+ */
216
+ get guild() {
217
+ return this.client.guilds.resolve(this.guildId);
218
+ }
219
+
220
+ /**
221
+ * The URL of this template
222
+ * @type {string}
223
+ * @readonly
224
+ */
225
+ get url() {
226
+ return `${RouteBases.template}/${this.code}`;
227
+ }
228
+
229
+ /**
230
+ * When concatenated with a string, this automatically returns the template's code instead of the template object.
231
+ * @returns {string}
232
+ * @example
233
+ * // Logs: Template: FKvmczH2HyUf
234
+ * console.log(`Template: ${guildTemplate}!`);
235
+ */
236
+ toString() {
237
+ return this.code;
238
+ }
239
+ }
240
+
241
+ module.exports = GuildTemplate;