@ovencord/discord.js 14.16.3

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 (332) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +148 -0
  3. package/package.json +73 -0
  4. package/src/client/Client.ts +967 -0
  5. package/src/client/actions/Action.ts +141 -0
  6. package/src/client/actions/ActionsManager.ts +138 -0
  7. package/src/client/actions/ChannelCreate.ts +21 -0
  8. package/src/client/actions/ChannelDelete.ts +20 -0
  9. package/src/client/actions/ChannelUpdate.ts +38 -0
  10. package/src/client/actions/GuildChannelsPositionUpdate.ts +17 -0
  11. package/src/client/actions/GuildEmojiCreate.ts +17 -0
  12. package/src/client/actions/GuildEmojiDelete.ts +16 -0
  13. package/src/client/actions/GuildEmojiUpdate.ts +17 -0
  14. package/src/client/actions/GuildEmojisUpdate.ts +30 -0
  15. package/src/client/actions/GuildMemberRemove.ts +29 -0
  16. package/src/client/actions/GuildMemberUpdate.ts +41 -0
  17. package/src/client/actions/GuildRoleCreate.ts +23 -0
  18. package/src/client/actions/GuildRoleDelete.ts +26 -0
  19. package/src/client/actions/GuildRolesPositionUpdate.ts +17 -0
  20. package/src/client/actions/GuildScheduledEventDelete.ts +28 -0
  21. package/src/client/actions/GuildScheduledEventUserAdd.ts +29 -0
  22. package/src/client/actions/GuildScheduledEventUserRemove.ts +29 -0
  23. package/src/client/actions/GuildSoundboardSoundDelete.ts +26 -0
  24. package/src/client/actions/GuildStickerCreate.ts +17 -0
  25. package/src/client/actions/GuildStickerDelete.ts +16 -0
  26. package/src/client/actions/GuildStickerUpdate.ts +17 -0
  27. package/src/client/actions/GuildStickersUpdate.ts +30 -0
  28. package/src/client/actions/GuildUpdate.ts +30 -0
  29. package/src/client/actions/InteractionCreate.ts +104 -0
  30. package/src/client/actions/MessageCreate.ts +38 -0
  31. package/src/client/actions/MessageDelete.ts +29 -0
  32. package/src/client/actions/MessageDeleteBulk.ts +45 -0
  33. package/src/client/actions/MessagePollVoteAdd.ts +37 -0
  34. package/src/client/actions/MessagePollVoteRemove.ts +35 -0
  35. package/src/client/actions/MessageReactionAdd.ts +68 -0
  36. package/src/client/actions/MessageReactionRemove.ts +47 -0
  37. package/src/client/actions/MessageReactionRemoveAll.ts +30 -0
  38. package/src/client/actions/MessageReactionRemoveEmoji.ts +25 -0
  39. package/src/client/actions/MessageUpdate.ts +22 -0
  40. package/src/client/actions/StageInstanceCreate.ts +25 -0
  41. package/src/client/actions/StageInstanceDelete.ts +28 -0
  42. package/src/client/actions/StageInstanceUpdate.ts +27 -0
  43. package/src/client/actions/ThreadCreate.ts +22 -0
  44. package/src/client/actions/ThreadMembersUpdate.ts +45 -0
  45. package/src/client/actions/TypingStart.ts +26 -0
  46. package/src/client/actions/UserUpdate.ts +33 -0
  47. package/src/client/voice/ClientVoiceManager.ts +46 -0
  48. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts +19 -0
  49. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.ts +17 -0
  50. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.ts +18 -0
  51. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.ts +21 -0
  52. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.ts +20 -0
  53. package/src/client/websocket/handlers/CHANNEL_CREATE.ts +4 -0
  54. package/src/client/websocket/handlers/CHANNEL_DELETE.ts +4 -0
  55. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.ts +22 -0
  56. package/src/client/websocket/handlers/CHANNEL_UPDATE.ts +16 -0
  57. package/src/client/websocket/handlers/ENTITLEMENT_CREATE.ts +14 -0
  58. package/src/client/websocket/handlers/ENTITLEMENT_DELETE.ts +18 -0
  59. package/src/client/websocket/handlers/ENTITLEMENT_UPDATE.ts +16 -0
  60. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.ts +19 -0
  61. package/src/client/websocket/handlers/GUILD_BAN_ADD.ts +15 -0
  62. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.ts +20 -0
  63. package/src/client/websocket/handlers/GUILD_CREATE.ts +34 -0
  64. package/src/client/websocket/handlers/GUILD_DELETE.ts +36 -0
  65. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.ts +4 -0
  66. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.ts +15 -0
  67. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.ts +40 -0
  68. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.ts +17 -0
  69. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.ts +4 -0
  70. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.ts +4 -0
  71. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.ts +4 -0
  72. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.ts +4 -0
  73. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.ts +21 -0
  74. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.ts +17 -0
  75. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.ts +4 -0
  76. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.ts +19 -0
  77. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.ts +4 -0
  78. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts +4 -0
  79. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.ts +24 -0
  80. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.ts +18 -0
  81. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.ts +4 -0
  82. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.ts +20 -0
  83. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.ts +4 -0
  84. package/src/client/websocket/handlers/GUILD_UPDATE.ts +4 -0
  85. package/src/client/websocket/handlers/INTERACTION_CREATE.ts +4 -0
  86. package/src/client/websocket/handlers/INVITE_CREATE.ts +20 -0
  87. package/src/client/websocket/handlers/INVITE_DELETE.ts +23 -0
  88. package/src/client/websocket/handlers/MESSAGE_CREATE.ts +4 -0
  89. package/src/client/websocket/handlers/MESSAGE_DELETE.ts +4 -0
  90. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.ts +4 -0
  91. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.ts +4 -0
  92. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.ts +4 -0
  93. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.ts +4 -0
  94. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.ts +4 -0
  95. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.ts +4 -0
  96. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.ts +4 -0
  97. package/src/client/websocket/handlers/MESSAGE_UPDATE.ts +16 -0
  98. package/src/client/websocket/handlers/PRESENCE_UPDATE.ts +42 -0
  99. package/src/client/websocket/handlers/RATE_LIMITED.ts +23 -0
  100. package/src/client/websocket/handlers/READY.ts +29 -0
  101. package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.ts +24 -0
  102. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.ts +4 -0
  103. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.ts +4 -0
  104. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.ts +4 -0
  105. package/src/client/websocket/handlers/SUBSCRIPTION_CREATE.ts +14 -0
  106. package/src/client/websocket/handlers/SUBSCRIPTION_DELETE.ts +16 -0
  107. package/src/client/websocket/handlers/SUBSCRIPTION_UPDATE.ts +16 -0
  108. package/src/client/websocket/handlers/THREAD_CREATE.ts +4 -0
  109. package/src/client/websocket/handlers/THREAD_DELETE.ts +17 -0
  110. package/src/client/websocket/handlers/THREAD_LIST_SYNC.ts +50 -0
  111. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.ts +4 -0
  112. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.ts +25 -0
  113. package/src/client/websocket/handlers/THREAD_UPDATE.ts +16 -0
  114. package/src/client/websocket/handlers/TYPING_START.ts +4 -0
  115. package/src/client/websocket/handlers/USER_UPDATE.ts +4 -0
  116. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.ts +16 -0
  117. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.ts +5 -0
  118. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.ts +37 -0
  119. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.ts +16 -0
  120. package/src/client/websocket/handlers/index.ts +74 -0
  121. package/src/errors/DJSError.ts +50 -0
  122. package/src/errors/ErrorCodes.ts +277 -0
  123. package/src/errors/Messages.ts +155 -0
  124. package/src/errors/index.ts +6 -0
  125. package/src/index.ts +241 -0
  126. package/src/managers/ApplicationCommandManager.ts +303 -0
  127. package/src/managers/ApplicationCommandPermissionsManager.ts +453 -0
  128. package/src/managers/ApplicationEmojiManager.ts +149 -0
  129. package/src/managers/AutoModerationRuleManager.ts +307 -0
  130. package/src/managers/BaseManager.ts +13 -0
  131. package/src/managers/CachedManager.ts +56 -0
  132. package/src/managers/CategoryChannelChildManager.ts +81 -0
  133. package/src/managers/ChannelManager.ts +194 -0
  134. package/src/managers/DMMessageManager.ts +15 -0
  135. package/src/managers/DataManager.ts +38 -0
  136. package/src/managers/EntitlementManager.ts +182 -0
  137. package/src/managers/GuildApplicationCommandManager.ts +29 -0
  138. package/src/managers/GuildBanManager.ts +221 -0
  139. package/src/managers/GuildChannelManager.ts +552 -0
  140. package/src/managers/GuildEmojiManager.ts +262 -0
  141. package/src/managers/GuildEmojiRoleManager.ts +134 -0
  142. package/src/managers/GuildForumThreadManager.ts +84 -0
  143. package/src/managers/GuildInviteManager.ts +236 -0
  144. package/src/managers/GuildManager.ts +265 -0
  145. package/src/managers/GuildMemberManager.ts +619 -0
  146. package/src/managers/GuildMemberRoleManager.ts +230 -0
  147. package/src/managers/GuildMessageManager.ts +31 -0
  148. package/src/managers/GuildScheduledEventManager.ts +330 -0
  149. package/src/managers/GuildSoundboardSoundManager.ts +157 -0
  150. package/src/managers/GuildStickerManager.ts +192 -0
  151. package/src/managers/GuildTextThreadManager.ts +91 -0
  152. package/src/managers/MessageManager.ts +352 -0
  153. package/src/managers/PartialGroupDMMessageManager.ts +15 -0
  154. package/src/managers/PermissionOverwriteManager.ts +174 -0
  155. package/src/managers/PollAnswerVoterManager.ts +59 -0
  156. package/src/managers/PresenceManager.ts +60 -0
  157. package/src/managers/ReactionManager.ts +72 -0
  158. package/src/managers/ReactionUserManager.ts +82 -0
  159. package/src/managers/RoleManager.ts +432 -0
  160. package/src/managers/StageInstanceManager.ts +166 -0
  161. package/src/managers/SubscriptionManager.ts +83 -0
  162. package/src/managers/ThreadManager.ts +210 -0
  163. package/src/managers/ThreadMemberManager.ts +194 -0
  164. package/src/managers/UserManager.ts +139 -0
  165. package/src/managers/VoiceStateManager.ts +61 -0
  166. package/src/sharding/Shard.ts +513 -0
  167. package/src/sharding/ShardClientUtil.ts +293 -0
  168. package/src/sharding/ShardingManager.ts +374 -0
  169. package/src/structures/ActionRow.ts +31 -0
  170. package/src/structures/AnnouncementChannel.ts +25 -0
  171. package/src/structures/AnonymousGuild.ts +110 -0
  172. package/src/structures/ApplicationCommand.ts +675 -0
  173. package/src/structures/ApplicationEmoji.ts +189 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.ts +54 -0
  175. package/src/structures/Attachment.ts +189 -0
  176. package/src/structures/AuthorizingIntegrationOwners.ts +63 -0
  177. package/src/structures/AutoModerationActionExecution.ts +138 -0
  178. package/src/structures/AutoModerationRule.ts +325 -0
  179. package/src/structures/AutocompleteInteraction.ts +115 -0
  180. package/src/structures/Base.ts +37 -0
  181. package/src/structures/BaseChannel.ts +188 -0
  182. package/src/structures/BaseGuild.ts +134 -0
  183. package/src/structures/BaseGuildEmoji.ts +113 -0
  184. package/src/structures/BaseGuildTextChannel.ts +230 -0
  185. package/src/structures/BaseGuildVoiceChannel.ts +270 -0
  186. package/src/structures/BaseInteraction.ts +393 -0
  187. package/src/structures/BaseInvite.ts +192 -0
  188. package/src/structures/BaseSelectMenuComponent.ts +58 -0
  189. package/src/structures/ButtonComponent.ts +68 -0
  190. package/src/structures/ButtonInteraction.ts +8 -0
  191. package/src/structures/CategoryChannel.ts +46 -0
  192. package/src/structures/ChannelSelectMenuComponent.ts +18 -0
  193. package/src/structures/ChannelSelectMenuInteraction.ts +34 -0
  194. package/src/structures/ChatInputCommandInteraction.ts +43 -0
  195. package/src/structures/ClientApplication.ts +470 -0
  196. package/src/structures/ClientPresence.ts +87 -0
  197. package/src/structures/ClientUser.ts +219 -0
  198. package/src/structures/CommandInteraction.ts +193 -0
  199. package/src/structures/CommandInteractionOptionResolver.ts +336 -0
  200. package/src/structures/Component.ts +59 -0
  201. package/src/structures/ContainerComponent.ts +63 -0
  202. package/src/structures/ContextMenuCommandInteraction.ts +68 -0
  203. package/src/structures/DMChannel.ts +148 -0
  204. package/src/structures/DirectoryChannel.ts +40 -0
  205. package/src/structures/Embed.ts +251 -0
  206. package/src/structures/Emoji.ts +61 -0
  207. package/src/structures/Entitlement.ts +206 -0
  208. package/src/structures/FileComponent.ts +41 -0
  209. package/src/structures/ForumChannel.ts +31 -0
  210. package/src/structures/GroupDMInvite.ts +34 -0
  211. package/src/structures/Guild.ts +1605 -0
  212. package/src/structures/GuildAuditLogs.ts +99 -0
  213. package/src/structures/GuildAuditLogsEntry.ts +557 -0
  214. package/src/structures/GuildBan.ts +65 -0
  215. package/src/structures/GuildChannel.ts +515 -0
  216. package/src/structures/GuildEmoji.ts +159 -0
  217. package/src/structures/GuildInvite.ts +233 -0
  218. package/src/structures/GuildMember.ts +643 -0
  219. package/src/structures/GuildOnboarding.ts +73 -0
  220. package/src/structures/GuildOnboardingPrompt.ts +93 -0
  221. package/src/structures/GuildOnboardingPromptOption.ts +100 -0
  222. package/src/structures/GuildPreview.ts +218 -0
  223. package/src/structures/GuildPreviewEmoji.ts +28 -0
  224. package/src/structures/GuildScheduledEvent.ts +593 -0
  225. package/src/structures/GuildTemplate.ts +229 -0
  226. package/src/structures/Integration.ts +257 -0
  227. package/src/structures/IntegrationApplication.ts +84 -0
  228. package/src/structures/InteractionCallback.ts +86 -0
  229. package/src/structures/InteractionCallbackResource.ts +57 -0
  230. package/src/structures/InteractionCallbackResponse.ts +35 -0
  231. package/src/structures/InteractionCollector.ts +260 -0
  232. package/src/structures/InteractionWebhook.ts +65 -0
  233. package/src/structures/InviteGuild.ts +22 -0
  234. package/src/structures/LabelComponent.ts +51 -0
  235. package/src/structures/MediaChannel.ts +8 -0
  236. package/src/structures/MediaGalleryComponent.ts +31 -0
  237. package/src/structures/MediaGalleryItem.ts +54 -0
  238. package/src/structures/MentionableSelectMenuComponent.ts +8 -0
  239. package/src/structures/MentionableSelectMenuInteraction.ts +76 -0
  240. package/src/structures/Message.ts +1202 -0
  241. package/src/structures/MessageCollector.ts +155 -0
  242. package/src/structures/MessageComponentInteraction.ts +132 -0
  243. package/src/structures/MessageContextMenuCommandInteraction.ts +18 -0
  244. package/src/structures/MessageMentions.ts +327 -0
  245. package/src/structures/MessagePayload.ts +325 -0
  246. package/src/structures/MessageReaction.ts +219 -0
  247. package/src/structures/ModalComponentResolver.ts +237 -0
  248. package/src/structures/ModalSubmitInteraction.ts +260 -0
  249. package/src/structures/OAuth2Guild.ts +30 -0
  250. package/src/structures/PartialGroupDMChannel.ts +151 -0
  251. package/src/structures/PermissionOverwrites.ts +222 -0
  252. package/src/structures/Poll.ts +195 -0
  253. package/src/structures/PollAnswer.ts +100 -0
  254. package/src/structures/Presence.ts +448 -0
  255. package/src/structures/PrimaryEntryPointCommandInteraction.ts +8 -0
  256. package/src/structures/ReactionCollector.ts +245 -0
  257. package/src/structures/ReactionEmoji.ts +30 -0
  258. package/src/structures/Role.ts +543 -0
  259. package/src/structures/RoleSelectMenuComponent.ts +8 -0
  260. package/src/structures/RoleSelectMenuInteraction.ts +34 -0
  261. package/src/structures/SKU.ts +62 -0
  262. package/src/structures/SectionComponent.ts +44 -0
  263. package/src/structures/SeparatorComponent.ts +29 -0
  264. package/src/structures/SoundboardSound.ts +176 -0
  265. package/src/structures/StageChannel.ts +118 -0
  266. package/src/structures/StageInstance.ts +173 -0
  267. package/src/structures/Sticker.ts +300 -0
  268. package/src/structures/StickerPack.ts +111 -0
  269. package/src/structures/StringSelectMenuComponent.ts +18 -0
  270. package/src/structures/StringSelectMenuInteraction.ts +21 -0
  271. package/src/structures/Subscription.ts +138 -0
  272. package/src/structures/Team.ts +131 -0
  273. package/src/structures/TeamMember.ts +77 -0
  274. package/src/structures/TextChannel.ts +33 -0
  275. package/src/structures/TextDisplayComponent.ts +18 -0
  276. package/src/structures/TextInputComponent.ts +28 -0
  277. package/src/structures/ThreadChannel.ts +680 -0
  278. package/src/structures/ThreadMember.ts +125 -0
  279. package/src/structures/ThreadOnlyChannel.ts +276 -0
  280. package/src/structures/ThumbnailComponent.ts +51 -0
  281. package/src/structures/Typing.ts +81 -0
  282. package/src/structures/UnfurledMediaItem.ts +33 -0
  283. package/src/structures/User.ts +511 -0
  284. package/src/structures/UserContextMenuCommandInteraction.ts +28 -0
  285. package/src/structures/UserSelectMenuComponent.ts +8 -0
  286. package/src/structures/UserSelectMenuInteraction.ts +54 -0
  287. package/src/structures/VoiceChannel.ts +119 -0
  288. package/src/structures/VoiceChannelEffect.ts +92 -0
  289. package/src/structures/VoiceRegion.ts +52 -0
  290. package/src/structures/VoiceState.ts +346 -0
  291. package/src/structures/Webhook.ts +526 -0
  292. package/src/structures/WelcomeChannel.ts +67 -0
  293. package/src/structures/WelcomeScreen.ts +53 -0
  294. package/src/structures/Widget.ts +110 -0
  295. package/src/structures/WidgetMember.ts +124 -0
  296. package/src/structures/interfaces/Application.ts +179 -0
  297. package/src/structures/interfaces/Collector.ts +372 -0
  298. package/src/structures/interfaces/InteractionResponses.ts +384 -0
  299. package/src/structures/interfaces/TextBasedChannel.ts +430 -0
  300. package/src/util/APITypes.ts +690 -0
  301. package/src/util/ActivityFlagsBitField.ts +26 -0
  302. package/src/util/ApplicationFlagsBitField.ts +43 -0
  303. package/src/util/AttachmentFlagsBitField.ts +26 -0
  304. package/src/util/BitField.ts +178 -0
  305. package/src/util/ChannelFlagsBitField.ts +43 -0
  306. package/src/util/Channels.ts +165 -0
  307. package/src/util/Colors.ts +72 -0
  308. package/src/util/Components.ts +285 -0
  309. package/src/util/Constants.ts +251 -0
  310. package/src/util/DataResolver.ts +146 -0
  311. package/src/util/Enums.ts +10 -0
  312. package/src/util/Events.ts +178 -0
  313. package/src/util/GuildMemberFlagsBitField.ts +43 -0
  314. package/src/util/IntentsBitField.ts +35 -0
  315. package/src/util/InviteFlagsBitField.ts +26 -0
  316. package/src/util/Invites.ts +27 -0
  317. package/src/util/LimitedCollection.ts +73 -0
  318. package/src/util/MessageFlagsBitField.ts +43 -0
  319. package/src/util/Options.ts +215 -0
  320. package/src/util/Partials.ts +50 -0
  321. package/src/util/PermissionsBitField.ts +113 -0
  322. package/src/util/RoleFlagsBitField.ts +26 -0
  323. package/src/util/SKUFlagsBitField.ts +26 -0
  324. package/src/util/ShardEvents.ts +26 -0
  325. package/src/util/Status.ts +16 -0
  326. package/src/util/Sweepers.ts +532 -0
  327. package/src/util/Symbols.ts +1 -0
  328. package/src/util/SystemChannelFlagsBitField.ts +45 -0
  329. package/src/util/ThreadMemberFlagsBitField.ts +33 -0
  330. package/src/util/Transformers.ts +123 -0
  331. package/src/util/UserFlagsBitField.ts +33 -0
  332. package/src/util/Util.ts +519 -0
@@ -0,0 +1,262 @@
1
+ import { Collection } from '@ovencord/collection';
2
+ import { Routes, PermissionFlagsBits } from 'discord-api-types/v10';
3
+ import { DiscordjsError, DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
4
+ import { ApplicationEmoji } from '../structures/ApplicationEmoji.js';
5
+ import { GuildEmoji } from '../structures/GuildEmoji.js';
6
+ import { ReactionEmoji } from '../structures/ReactionEmoji.js';
7
+ import { resolveImage } from '../util/DataResolver.js';
8
+ import { parseEmoji } from '../util/Util.js';
9
+ import { CachedManager } from './CachedManager.js';
10
+
11
+ /**
12
+ * Manages API methods for GuildEmojis and stores their cache.
13
+ *
14
+ * @extends {CachedManager}
15
+ */
16
+ export class GuildEmojiManager extends CachedManager {
17
+ public guild: any;
18
+ constructor(guild, iterable) {
19
+ super(guild.client, GuildEmoji, iterable);
20
+
21
+ /**
22
+ * The guild this manager belongs to
23
+ *
24
+ * @type {Guild}
25
+ */
26
+ this.guild = guild;
27
+ }
28
+
29
+ _add(data, cache) {
30
+ return super._add(data, cache, { extras: [this.guild] });
31
+ }
32
+
33
+ /**
34
+ * The cache of GuildEmojis
35
+ *
36
+ * @type {Collection<Snowflake, GuildEmoji>}
37
+ * @name GuildEmojiManager#cache
38
+ */
39
+
40
+ /**
41
+ * Data that can be resolved into a GuildEmoji object. This can be:
42
+ * - A Snowflake
43
+ * - A GuildEmoji object
44
+ * - A ReactionEmoji object
45
+ * - An ApplicationEmoji object
46
+ *
47
+ * @typedef {Snowflake|GuildEmoji|ReactionEmoji|ApplicationEmoji} EmojiResolvable
48
+ */
49
+
50
+ /**
51
+ * Resolves an EmojiResolvable to an Emoji object.
52
+ *
53
+ * @param {EmojiResolvable} emoji The Emoji resolvable to identify
54
+ * @returns {?GuildEmoji}
55
+ */
56
+ resolve(emoji) {
57
+ if (emoji instanceof ReactionEmoji) return super.cache.get(emoji.id) ?? null;
58
+ if (emoji instanceof ApplicationEmoji) return super.cache.get(emoji.id) ?? null;
59
+ return super.resolve(emoji);
60
+ }
61
+
62
+ /**
63
+ * Resolves an EmojiResolvable to an Emoji id string.
64
+ *
65
+ * @param {EmojiResolvable} emoji The Emoji resolvable to identify
66
+ * @returns {?Snowflake}
67
+ */
68
+ resolveId(emoji) {
69
+ if (emoji instanceof ReactionEmoji) return emoji.id;
70
+ if (emoji instanceof ApplicationEmoji) return emoji.id;
71
+ return super.resolveId(emoji);
72
+ }
73
+
74
+ /**
75
+ * Data that can be resolved to give an emoji identifier. This can be:
76
+ * - An EmojiResolvable
77
+ * - The `<a:name:id>`, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji
78
+ * - The Unicode representation of an emoji
79
+ *
80
+ * @typedef {string|EmojiResolvable} EmojiIdentifierResolvable
81
+ */
82
+
83
+ /**
84
+ * Resolves an EmojiResolvable to an emoji identifier.
85
+ *
86
+ * @param {EmojiIdentifierResolvable} emoji The emoji resolvable to resolve
87
+ * @returns {?string}
88
+ */
89
+ resolveIdentifier(emoji) {
90
+ const emojiResolvable = this.resolve(emoji);
91
+ if (emojiResolvable) return emojiResolvable.identifier;
92
+ if (emoji instanceof ReactionEmoji) return emoji.identifier;
93
+ if (emoji instanceof ApplicationEmoji) return emoji.identifier;
94
+ if (typeof emoji === 'string') {
95
+ const res = parseEmoji(emoji);
96
+ let identifier = emoji;
97
+ if (res?.name.length) {
98
+ identifier = `${res.animated ? 'a:' : ''}${res.name}${res.id ? `:${res.id}` : ''}`;
99
+ }
100
+
101
+ if (!identifier.includes('%')) return encodeURIComponent(identifier);
102
+ return identifier;
103
+ }
104
+
105
+ return null;
106
+ }
107
+
108
+ /**
109
+ * Options used for creating an emoji in a guild.
110
+ *
111
+ * @typedef {Object} GuildEmojiCreateOptions
112
+ * @property {BufferResolvable|Base64Resolvable} attachment The image for the emoji
113
+ * @property {string} name The name for the emoji
114
+ * @property {Collection<Snowflake, Role>|RoleResolvable[]} [roles] The roles to limit the emoji to
115
+ * @property {string} [reason] The reason for creating the emoji
116
+ */
117
+
118
+ /**
119
+ * Creates a new custom emoji in the guild.
120
+ *
121
+ * @param {GuildEmojiCreateOptions} options Options for creating the emoji
122
+ * @returns {Promise<Emoji>} The created emoji
123
+ * @example
124
+ * // Create a new emoji from a URL
125
+ * guild.emojis.create({ attachment: 'https://i.imgur.com/w3duR07.png', name: 'rip' })
126
+ * .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
127
+ * .catch(console.error);
128
+ * @example
129
+ * // Create a new emoji from a file on your computer
130
+ * guild.emojis.create({ attachment: './memes/banana.png', name: 'banana' })
131
+ * .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
132
+ * .catch(console.error);
133
+ */
134
+ async create({ attachment, name, roles, reason }) {
135
+ const image = await resolveImage(attachment);
136
+ if (!image) throw new DiscordjsTypeError(ErrorCodes.ReqResourceType);
137
+
138
+ const body = { image, name };
139
+ if (roles) {
140
+ if (!Array.isArray(roles) && !(roles instanceof Collection)) {
141
+ throw new DiscordjsTypeError(
142
+ ErrorCodes.InvalidType,
143
+ 'options.roles',
144
+ 'Array or Collection of Roles or Snowflakes',
145
+ true,
146
+ );
147
+ }
148
+
149
+ body.roles = [];
150
+ for (const role of roles.values()) {
151
+ const resolvedRole = this.guild.roles.resolveId(role);
152
+ if (!resolvedRole) {
153
+ throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array or Collection', 'options.roles', role);
154
+ }
155
+
156
+ body.roles.push(resolvedRole);
157
+ }
158
+ }
159
+
160
+ const emoji = await this.client.rest.post(Routes.guildEmojis(this.guild.id), { body, reason });
161
+ return this.client.actions.GuildEmojiCreate.handle(this.guild, emoji).emoji;
162
+ }
163
+
164
+ /**
165
+ * Obtains one or more emojis from Discord, or the emoji cache if they're already available.
166
+ *
167
+ * @param {Snowflake} [id] The emoji's id
168
+ * @param {BaseFetchOptions} [options] Additional options for this fetch
169
+ * @returns {Promise<GuildEmoji|Collection<Snowflake, GuildEmoji>>}
170
+ * @example
171
+ * // Fetch all emojis from the guild
172
+ * message.guild.emojis.fetch()
173
+ * .then(emojis => console.log(`There are ${emojis.size} emojis.`))
174
+ * .catch(console.error);
175
+ * @example
176
+ * // Fetch a single emoji
177
+ * message.guild.emojis.fetch('222078108977594368')
178
+ * .then(emoji => console.log(`The emoji name is: ${emoji.name}`))
179
+ * .catch(console.error);
180
+ */
181
+ async fetch(id, { cache = true, force = false } = {}) {
182
+ if (id) {
183
+ if (!force) {
184
+ const existing = this.cache.get(id);
185
+ if (existing) return existing;
186
+ }
187
+
188
+ const emoji = await this.client.rest.get(Routes.guildEmoji(this.guild.id, id));
189
+ return this._add(emoji, cache);
190
+ }
191
+
192
+ const data = await this.client.rest.get(Routes.guildEmojis(this.guild.id));
193
+ const emojis = new Collection();
194
+ for (const emoji of data) emojis.set(emoji.id, this._add(emoji, cache));
195
+ return emojis;
196
+ }
197
+
198
+ /**
199
+ * Deletes an emoji.
200
+ *
201
+ * @param {EmojiResolvable} emoji The Emoji resolvable to delete
202
+ * @param {string} [reason] Reason for deleting the emoji
203
+ * @returns {Promise<void>}
204
+ */
205
+ async delete(emoji, reason) {
206
+ const id = this.resolveId(emoji);
207
+ if (!id) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'emoji', 'EmojiResolvable', true);
208
+ await this.client.rest.delete(Routes.guildEmoji(this.guild.id, id), { reason });
209
+ }
210
+
211
+ /**
212
+ * Edits an emoji.
213
+ *
214
+ * @param {EmojiResolvable} emoji The Emoji resolvable to edit
215
+ * @param {GuildEmojiEditOptions} options The options to provide
216
+ * @returns {Promise<GuildEmoji>}
217
+ */
218
+ async edit(emoji, options) {
219
+ const id = this.resolveId(emoji);
220
+ if (!id) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'emoji', 'EmojiResolvable', true);
221
+ const roles = options.roles?.map(role => this.guild.roles.resolveId(role));
222
+ const newData = await this.client.rest.patch(Routes.guildEmoji(this.guild.id, id), {
223
+ body: {
224
+ name: options.name,
225
+ roles,
226
+ },
227
+ reason: options.reason,
228
+ });
229
+ const existing = this.cache.get(id);
230
+ if (existing) {
231
+ const clone = existing._clone();
232
+ clone._patch(newData);
233
+ return clone;
234
+ }
235
+
236
+ return this._add(newData);
237
+ }
238
+
239
+ /**
240
+ * Fetches the author for this emoji
241
+ *
242
+ * @param {EmojiResolvable} emoji The emoji to fetch the author of
243
+ * @returns {Promise<User>}
244
+ */
245
+ async fetchAuthor(emoji) {
246
+ const resolvedEmoji = this.resolve(emoji);
247
+ if (!resolvedEmoji) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'emoji', 'EmojiResolvable', true);
248
+ if (resolvedEmoji.managed) {
249
+ throw new DiscordjsError(ErrorCodes.EmojiManaged);
250
+ }
251
+
252
+ const { me } = this.guild.members;
253
+ if (!me) throw new DiscordjsError(ErrorCodes.GuildUncachedMe);
254
+ if (!me.permissions.any(PermissionFlagsBits.CreateGuildExpressions | PermissionFlagsBits.ManageGuildExpressions)) {
255
+ throw new DiscordjsError(ErrorCodes.MissingGuildExpressionsPermission, this.guild);
256
+ }
257
+
258
+ const data = await this.client.rest.get(Routes.guildEmoji(this.guild.id, resolvedEmoji.id));
259
+ resolvedEmoji._patch(data);
260
+ return resolvedEmoji.author;
261
+ }
262
+ }
@@ -0,0 +1,134 @@
1
+ import { Collection } from '@ovencord/collection';
2
+ import { DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
3
+ import { Role } from '../structures/Role.js';
4
+ import { DataManager } from './DataManager.js';
5
+
6
+ /**
7
+ * Manages API methods for roles belonging to emojis and stores their cache.
8
+ *
9
+ * @extends {DataManager}
10
+ */
11
+ export class GuildEmojiRoleManager extends DataManager {
12
+ public emoji: any;
13
+ public guild: any;
14
+ constructor(emoji) {
15
+ super(emoji.client, Role);
16
+
17
+ /**
18
+ * The emoji belonging to this manager
19
+ *
20
+ * @type {GuildEmoji}
21
+ */
22
+ this.emoji = emoji;
23
+ /**
24
+ * The guild belonging to this manager
25
+ *
26
+ * @type {Guild}
27
+ */
28
+ this.guild = emoji.guild;
29
+ }
30
+
31
+ /**
32
+ * The cache of roles belonging to this emoji
33
+ *
34
+ * @type {Collection<Snowflake, Role>}
35
+ * @readonly
36
+ */
37
+ get cache() {
38
+ const cache = new Collection();
39
+ for (const roleId of this.emoji._roles) {
40
+ const role = this.guild.roles.cache.get(roleId);
41
+ if (role !== undefined) {
42
+ cache.set(roleId, role);
43
+ }
44
+ }
45
+
46
+ return cache;
47
+ }
48
+
49
+ /**
50
+ * Adds a role (or multiple roles) to the list of roles that can use this emoji.
51
+ *
52
+ * @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to add
53
+ * @returns {Promise<GuildEmoji>}
54
+ */
55
+ async add(roleOrRoles) {
56
+ const roles = Array.isArray(roleOrRoles) || roleOrRoles instanceof Collection ? roleOrRoles : [roleOrRoles];
57
+
58
+ const resolvedRoleIds = [];
59
+ for (const role of roles.values()) {
60
+ const roleId = this.guild.roles.resolveId(role);
61
+ if (!roleId) {
62
+ throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array or Collection', 'roles', role);
63
+ }
64
+
65
+ resolvedRoleIds.push(roleId);
66
+ }
67
+
68
+ const newRoles = [...new Set(resolvedRoleIds.concat(...this.cache.keys()))];
69
+ return this.set(newRoles);
70
+ }
71
+
72
+ /**
73
+ * Removes a role (or multiple roles) from the list of roles that can use this emoji.
74
+ *
75
+ * @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to remove
76
+ * @returns {Promise<GuildEmoji>}
77
+ */
78
+ async remove(roleOrRoles) {
79
+ const roles = Array.isArray(roleOrRoles) || roleOrRoles instanceof Collection ? roleOrRoles : [roleOrRoles];
80
+
81
+ const resolvedRoleIds = [];
82
+ for (const role of roles.values()) {
83
+ const roleId = this.guild.roles.resolveId(role);
84
+ if (!roleId) {
85
+ throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array or Collection', 'roles', role);
86
+ }
87
+
88
+ resolvedRoleIds.push(roleId);
89
+ }
90
+
91
+ const newRoles = [...this.cache.keys()].filter(id => !resolvedRoleIds.includes(id));
92
+ return this.set(newRoles);
93
+ }
94
+
95
+ /**
96
+ * Sets the role(s) that can use this emoji.
97
+ *
98
+ * @param {Collection<Snowflake, Role>|RoleResolvable[]} roles The roles or role ids to apply
99
+ * @returns {Promise<GuildEmoji>}
100
+ * @example
101
+ * // Set the emoji's roles to a single role
102
+ * guildEmoji.roles.set(['391156570408615936'])
103
+ * .then(console.log)
104
+ * .catch(console.error);
105
+ * @example
106
+ * // Remove all roles from an emoji
107
+ * guildEmoji.roles.set([])
108
+ * .then(console.log)
109
+ * .catch(console.error);
110
+ */
111
+ async set(roles) {
112
+ return this.emoji.edit({ roles });
113
+ }
114
+
115
+ clone() {
116
+ const clone = new this.constructor(this.emoji);
117
+ clone._patch([...this.cache.keys()]);
118
+ return clone;
119
+ }
120
+
121
+ /**
122
+ * Patches the roles for this manager's cache
123
+ *
124
+ * @param {Snowflake[]} roles The new roles
125
+ * @private
126
+ */
127
+ _patch(roles) {
128
+ this.emoji._roles = roles;
129
+ }
130
+
131
+ valueOf() {
132
+ return this.cache;
133
+ }
134
+ }
@@ -0,0 +1,84 @@
1
+ import { Routes } from 'discord-api-types/v10';
2
+ import { DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
3
+ import { MessagePayload } from '../structures/MessagePayload.js';
4
+ import { ThreadManager } from './ThreadManager.js';
5
+
6
+ /**
7
+ * Manages API methods for threads in forum channels and stores their cache.
8
+ *
9
+ * @extends {ThreadManager}
10
+ */
11
+ export class GuildForumThreadManager extends ThreadManager {
12
+ /**
13
+ * The channel this Manager belongs to
14
+ *
15
+ * @name GuildForumThreadManager#channel
16
+ * @type {ForumChannel}
17
+ */
18
+
19
+ /**
20
+ * @typedef {BaseMessageOptions} GuildForumThreadMessageCreateOptions
21
+ * @property {StickerResolvable} [stickers] The stickers to send with the message
22
+ * @property {BitFieldResolvable} [flags] The flags to send with the message
23
+ * <info>Only {@link MessageFlags.SuppressEmbeds}, {@link MessageFlags.SuppressNotifications}, and
24
+ * {@link MessageFlags.IsVoiceMessage} can be set.</info>
25
+ */
26
+
27
+ /**
28
+ * Options for creating a thread.
29
+ *
30
+ * @typedef {StartThreadOptions} GuildForumThreadCreateOptions
31
+ * @property {GuildForumThreadMessageCreateOptions|MessagePayload} message The message associated with the thread post
32
+ * @property {Snowflake[]} [appliedTags] The tags to apply to the thread
33
+ */
34
+
35
+ /**
36
+ * Creates a new thread in the channel.
37
+ *
38
+ * @param {GuildForumThreadCreateOptions} [options] Options to create a new thread
39
+ * @returns {Promise<ThreadChannel>}
40
+ * @example
41
+ * // Create a new forum post
42
+ * forum.threads
43
+ * .create({
44
+ * name: 'Food Talk',
45
+ * autoArchiveDuration: ThreadAutoArchiveDuration.OneHour,
46
+ * message: {
47
+ * content: 'Discuss your favorite food!',
48
+ * },
49
+ * reason: 'Needed a separate thread for food',
50
+ * })
51
+ * .then(threadChannel => console.log(threadChannel))
52
+ * .catch(console.error);
53
+ */
54
+ async create({
55
+ name,
56
+ autoArchiveDuration = this.channel.defaultAutoArchiveDuration,
57
+ message,
58
+ reason,
59
+ rateLimitPerUser,
60
+ appliedTags,
61
+ } = {}) {
62
+ if (!message) {
63
+ throw new DiscordjsTypeError(ErrorCodes.GuildForumMessageRequired);
64
+ }
65
+
66
+ const { body, files } = await (message instanceof MessagePayload ? message : MessagePayload.create(this, message))
67
+ .resolveBody()
68
+ .resolveFiles();
69
+
70
+ const data = await this.client.rest.post(Routes.threads(this.channel.id), {
71
+ body: {
72
+ name,
73
+ auto_archive_duration: autoArchiveDuration,
74
+ rate_limit_per_user: rateLimitPerUser,
75
+ applied_tags: appliedTags,
76
+ message: body,
77
+ },
78
+ files,
79
+ reason,
80
+ });
81
+
82
+ return this.client.actions.ThreadCreate.handle(data).thread;
83
+ }
84
+ }