lunibee 0.1.6 → 0.1.7

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 (55) hide show
  1. package/README.md +3 -3
  2. package/dist/builders/commands.d.ts +37 -0
  3. package/dist/builders/components.d.ts +19 -12
  4. package/dist/builders/embed.d.ts +3 -1
  5. package/dist/builders/index.d.ts +1 -1
  6. package/dist/builders/index.js +146 -19
  7. package/dist/builders/index.js.map +8 -7
  8. package/dist/collection/index.d.ts +30 -0
  9. package/dist/collection/index.js +78 -5
  10. package/dist/collection/index.js.map +4 -4
  11. package/dist/core/events.d.ts +2 -0
  12. package/dist/core/index.d.ts +38 -0
  13. package/dist/core/index.js +754 -175
  14. package/dist/core/index.js.map +24 -22
  15. package/dist/core/permissions.d.ts +112 -53
  16. package/dist/formatters/index.d.ts +43 -3
  17. package/dist/formatters/index.js +64 -1
  18. package/dist/formatters/index.js.map +3 -3
  19. package/dist/handlers/index.js.map +2 -2
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +1762 -291
  22. package/dist/index.js.map +43 -38
  23. package/dist/managers/emoji.d.ts +38 -0
  24. package/dist/managers/guild.d.ts +112 -1
  25. package/dist/managers/index.d.ts +31 -1
  26. package/dist/managers/index.js +803 -77
  27. package/dist/managers/index.js.map +21 -20
  28. package/dist/rest/index.d.ts +101 -11
  29. package/dist/rest/index.js +301 -45
  30. package/dist/rest/index.js.map +8 -6
  31. package/dist/rest/redis.d.ts +37 -0
  32. package/dist/rest/routes.d.ts +22 -0
  33. package/dist/rest/store.d.ts +38 -0
  34. package/dist/rest/webhook.d.ts +2 -2
  35. package/dist/sharding/cluster.d.ts +61 -0
  36. package/dist/sharding/index.d.ts +8 -0
  37. package/dist/sharding/index.js +286 -18
  38. package/dist/sharding/index.js.map +8 -7
  39. package/dist/structures/audit-log.d.ts +26 -0
  40. package/dist/structures/base.d.ts +32 -0
  41. package/dist/structures/index.d.ts +29 -1
  42. package/dist/structures/index.js +1022 -86
  43. package/dist/structures/index.js.map +14 -10
  44. package/dist/structures/resources.d.ts +192 -4
  45. package/dist/types/index.d.ts +76 -0
  46. package/dist/types/index.js.map +2 -2
  47. package/dist/utils/index.js.map +2 -2
  48. package/dist/voice/index.d.ts +88 -0
  49. package/dist/voice/index.js +204 -5
  50. package/dist/voice/index.js.map +3 -3
  51. package/dist/ws/index.d.ts +40 -1
  52. package/dist/ws/index.js +102 -18
  53. package/dist/ws/index.js.map +4 -4
  54. package/package.json +16 -16
  55. package/dist/structures/permissions.d.ts +0 -73
@@ -145,6 +145,75 @@ class Collection extends Map {
145
145
  }
146
146
  return result;
147
147
  }
148
+ partition(predicate) {
149
+ const pass = new Collection;
150
+ const fail = new Collection;
151
+ for (const [key, value] of this) {
152
+ if (predicate(value, key, this))
153
+ pass.set(key, value);
154
+ else
155
+ fail.set(key, value);
156
+ }
157
+ return [pass, fail];
158
+ }
159
+ tap(fn) {
160
+ fn(this);
161
+ return this;
162
+ }
163
+ flatMap(transform) {
164
+ const result = [];
165
+ for (const [key, value] of this) {
166
+ for (const item of transform(value, key, this))
167
+ result.push(item);
168
+ }
169
+ return result;
170
+ }
171
+ reduce(fn, initialValue) {
172
+ let acc = initialValue;
173
+ for (const [key, value] of this)
174
+ acc = fn(acc, value, key, this);
175
+ return acc;
176
+ }
177
+ sorted(comparator) {
178
+ const decorated = [...this.entries()].map((entry, index) => ({
179
+ entry,
180
+ index
181
+ }));
182
+ if (comparator)
183
+ decorated.sort((x, y) => {
184
+ const comparison = comparator(x.entry[1], y.entry[1], x.entry[0], y.entry[0]);
185
+ return comparison !== 0 ? comparison : x.index - y.index;
186
+ });
187
+ const result = new Collection;
188
+ for (const { entry } of decorated)
189
+ result.set(entry[0], entry[1]);
190
+ return result;
191
+ }
192
+ random() {
193
+ const arr = [...this.values()];
194
+ if (!arr.length)
195
+ return;
196
+ return arr[Math.floor(Math.random() * arr.length)];
197
+ }
198
+ randomKey() {
199
+ const arr = [...this.keys()];
200
+ if (!arr.length)
201
+ return;
202
+ return arr[Math.floor(Math.random() * arr.length)];
203
+ }
204
+ at(index) {
205
+ const arr = [...this.values()];
206
+ const i = index < 0 ? arr.length + index : index;
207
+ return arr[i];
208
+ }
209
+ keyAt(index) {
210
+ const arr = [...this.keys()];
211
+ const i = index < 0 ? arr.length + index : index;
212
+ return arr[i];
213
+ }
214
+ toJSON() {
215
+ return [...this.entries()];
216
+ }
148
217
  }
149
218
 
150
219
  // packages/managers/src/base.ts
@@ -216,7 +285,7 @@ class ResourceManager extends Manager {
216
285
  // packages/rest/package.json
217
286
  var package_default = {
218
287
  name: "@lunibee/rest",
219
- version: "0.1.6",
288
+ version: "0.1.7",
220
289
  type: "module",
221
290
  module: "./src/index.ts",
222
291
  types: "./src/index.ts",
@@ -270,7 +339,18 @@ var Routes = {
270
339
  guildAutoModerationRule: (guildId, ruleId) => `/guilds/${snowflake(guildId, "Guild ID")}/auto-moderation/rules/${snowflake(ruleId, "Rule ID")}`,
271
340
  voiceRegions: () => "/voice/regions",
272
341
  gateway: () => "/gateway",
273
- gatewayBot: () => "/gateway/bot"
342
+ gatewayBot: () => "/gateway/bot",
343
+ guildAuditLog: (guildId) => `/guilds/${snowflake(guildId, "Guild ID")}/audit-logs`,
344
+ guildMembers: (guildId) => `/guilds/${snowflake(guildId, "Guild ID")}/members`,
345
+ guildWelcomeScreen: (guildId) => `/guilds/${snowflake(guildId, "Guild ID")}/welcome-screen`,
346
+ guildOnboarding: (guildId) => `/guilds/${snowflake(guildId, "Guild ID")}/onboarding`,
347
+ guildPrune: (guildId) => `/guilds/${snowflake(guildId, "Guild ID")}/prune`,
348
+ stageInstances: () => "/stage-instances",
349
+ stageInstanceByChannel: (channelId) => `/stage-instances/${snowflake(channelId, "Channel ID")}`,
350
+ invite: (code) => `/invites/${encodeURIComponent(code)}`,
351
+ guildVanity: (guildId) => `/guilds/${snowflake(guildId, "Guild ID")}/vanity-url`,
352
+ guildEmoji: (guildId, emojiId) => emojiId ? `/guilds/${snowflake(guildId, "Guild ID")}/emojis/${snowflake(emojiId, "Emoji ID")}` : `/guilds/${snowflake(guildId, "Guild ID")}/emojis`,
353
+ applicationEmoji: (applicationId, emojiId) => emojiId ? `/applications/${snowflake(applicationId, "Application ID")}/emojis/${snowflake(emojiId, "Emoji ID")}` : `/applications/${snowflake(applicationId, "Application ID")}/emojis`
274
354
  };
275
355
  function snowflake(value, field) {
276
356
  if (!/^\d{1,20}$/.test(value))
@@ -281,6 +361,15 @@ function snowflake(value, field) {
281
361
  var LIBRARY_VERSION = package_default.version;
282
362
  var LIBRARY_URL = "https://github.com/Ekretos/lunibee";
283
363
  var USER_AGENT = `DiscordBot (${LIBRARY_URL}, ${package_default.version})`;
364
+ var REQUEST_DATA_KEYS = new Set([
365
+ "body",
366
+ "files",
367
+ "query",
368
+ "headers",
369
+ "reason",
370
+ "auth",
371
+ "signal"
372
+ ]);
284
373
 
285
374
  // packages/structures/src/base.ts
286
375
  class BaseStructure {
@@ -424,6 +513,13 @@ class Guild extends BaseStructure {
424
513
  vanityUrlCode;
425
514
  nsfwLevel;
426
515
  discoverySplash;
516
+ rulesChannelId;
517
+ systemChannelId;
518
+ systemChannelFlags;
519
+ maxMembers;
520
+ mfaLevel;
521
+ explicitContentFilter;
522
+ defaultMessageNotifications;
427
523
  constructor(data) {
428
524
  super(data.id);
429
525
  if (!data.name)
@@ -445,6 +541,14 @@ class Guild extends BaseStructure {
445
541
  this.vanityUrlCode = data.vanity_url_code ?? null;
446
542
  this.nsfwLevel = data.nsfw_level ?? 0;
447
543
  this.discoverySplash = data.discovery_splash ?? null;
544
+ const d = data;
545
+ this.rulesChannelId = d.rules_channel_id ?? null;
546
+ this.systemChannelId = d.system_channel_id ?? null;
547
+ this.systemChannelFlags = d.system_channel_flags ?? 0;
548
+ this.maxMembers = d.max_members ?? 0;
549
+ this.mfaLevel = d.mfa_level ?? 0;
550
+ this.explicitContentFilter = d.explicit_content_filter ?? 0;
551
+ this.defaultMessageNotifications = d.default_message_notifications ?? 0;
448
552
  }
449
553
  iconURL(options = {}) {
450
554
  if (!this.icon)
@@ -466,12 +570,27 @@ class Guild extends BaseStructure {
466
570
  return null;
467
571
  return cdnURL(`/discovery-splashes/${this.id}`, this.discoverySplash, options);
468
572
  }
573
+ widgetImageURL(style = "shield") {
574
+ return `https://discord.com/api/guilds/${this.id}/widget.png?style=${style}`;
575
+ }
469
576
  hasFeature(feature) {
470
577
  return this.features.includes(feature);
471
578
  }
472
579
  get isCommunity() {
473
580
  return this.hasFeature("COMMUNITY");
474
581
  }
582
+ get isPartnered() {
583
+ return this.hasFeature("PARTNERED");
584
+ }
585
+ get isVerified() {
586
+ return this.hasFeature("VERIFIED");
587
+ }
588
+ get isBoosted() {
589
+ return this.premiumSubscriptionCount > 0;
590
+ }
591
+ get boostLevel() {
592
+ return this.premiumTier;
593
+ }
475
594
  get hasVanityUrl() {
476
595
  return this.vanityUrlCode !== null;
477
596
  }
@@ -482,7 +601,58 @@ class Guild extends BaseStructure {
482
601
  return this.name;
483
602
  }
484
603
  }
485
- // packages/structures/src/permissions.ts
604
+ // packages/core/src/permissions.ts
605
+ var Permission = {
606
+ createInstantInvite: 1n << 0n,
607
+ kickMembers: 1n << 1n,
608
+ banMembers: 1n << 2n,
609
+ administrator: 1n << 3n,
610
+ manageChannels: 1n << 4n,
611
+ manageGuild: 1n << 5n,
612
+ addReactions: 1n << 6n,
613
+ viewAuditLog: 1n << 7n,
614
+ prioritySpeaker: 1n << 8n,
615
+ stream: 1n << 9n,
616
+ viewChannel: 1n << 10n,
617
+ sendMessages: 1n << 11n,
618
+ sendTTSMessages: 1n << 12n,
619
+ manageMessages: 1n << 13n,
620
+ embedLinks: 1n << 14n,
621
+ attachFiles: 1n << 15n,
622
+ readMessageHistory: 1n << 16n,
623
+ mentionEveryone: 1n << 17n,
624
+ useExternalEmojis: 1n << 18n,
625
+ viewGuildInsights: 1n << 19n,
626
+ connect: 1n << 20n,
627
+ speak: 1n << 21n,
628
+ muteMembers: 1n << 22n,
629
+ deafenMembers: 1n << 23n,
630
+ moveMembers: 1n << 24n,
631
+ useVAD: 1n << 25n,
632
+ changeNickname: 1n << 26n,
633
+ manageNicknames: 1n << 27n,
634
+ manageRoles: 1n << 28n,
635
+ manageWebhooks: 1n << 29n,
636
+ manageGuildExpressions: 1n << 30n,
637
+ useApplicationCommands: 1n << 31n,
638
+ requestToSpeak: 1n << 32n,
639
+ manageEvents: 1n << 33n,
640
+ manageThreads: 1n << 34n,
641
+ createPublicThreads: 1n << 35n,
642
+ createPrivateThreads: 1n << 36n,
643
+ useExternalStickers: 1n << 37n,
644
+ sendMessagesInThreads: 1n << 38n,
645
+ useEmbeddedActivities: 1n << 39n,
646
+ moderateMembers: 1n << 40n,
647
+ viewCreatorMonetizationAnalytics: 1n << 41n,
648
+ useSoundboard: 1n << 42n,
649
+ createGuildExpressions: 1n << 43n,
650
+ createEvents: 1n << 44n,
651
+ useExternalSounds: 1n << 45n,
652
+ sendVoiceMessages: 1n << 46n,
653
+ sendPolls: 1n << 49n,
654
+ useExternalApps: 1n << 50n
655
+ };
486
656
  var Permissions = {
487
657
  CreateInstantInvite: 1n << 0n,
488
658
  KickMembers: 1n << 1n,
@@ -534,6 +704,57 @@ var Permissions = {
534
704
  SendPolls: 1n << 49n,
535
705
  UseExternalApps: 1n << 50n
536
706
  };
707
+ var PermissionFlagsBits = {
708
+ CreateInstantInvite: 1n << 0n,
709
+ KickMembers: 1n << 1n,
710
+ BanMembers: 1n << 2n,
711
+ Administrator: 1n << 3n,
712
+ ManageChannels: 1n << 4n,
713
+ ManageGuild: 1n << 5n,
714
+ AddReactions: 1n << 6n,
715
+ ViewAuditLog: 1n << 7n,
716
+ PrioritySpeaker: 1n << 8n,
717
+ Stream: 1n << 9n,
718
+ ViewChannel: 1n << 10n,
719
+ SendMessages: 1n << 11n,
720
+ SendTTSMessages: 1n << 12n,
721
+ ManageMessages: 1n << 13n,
722
+ EmbedLinks: 1n << 14n,
723
+ AttachFiles: 1n << 15n,
724
+ ReadMessageHistory: 1n << 16n,
725
+ MentionEveryone: 1n << 17n,
726
+ UseExternalEmojis: 1n << 18n,
727
+ ViewGuildInsights: 1n << 19n,
728
+ Connect: 1n << 20n,
729
+ Speak: 1n << 21n,
730
+ MuteMembers: 1n << 22n,
731
+ DeafenMembers: 1n << 23n,
732
+ MoveMembers: 1n << 24n,
733
+ UseVAD: 1n << 25n,
734
+ ChangeNickname: 1n << 26n,
735
+ ManageNicknames: 1n << 27n,
736
+ ManageRoles: 1n << 28n,
737
+ ManageWebhooks: 1n << 29n,
738
+ ManageGuildExpressions: 1n << 30n,
739
+ UseApplicationCommands: 1n << 31n,
740
+ RequestToSpeak: 1n << 32n,
741
+ ManageEvents: 1n << 33n,
742
+ ManageThreads: 1n << 34n,
743
+ CreatePublicThreads: 1n << 35n,
744
+ CreatePrivateThreads: 1n << 36n,
745
+ UseExternalStickers: 1n << 37n,
746
+ SendMessagesInThreads: 1n << 38n,
747
+ UseEmbeddedActivities: 1n << 39n,
748
+ ModerateMembers: 1n << 40n,
749
+ ViewCreatorMonetizationAnalytics: 1n << 41n,
750
+ UseSoundboard: 1n << 42n,
751
+ CreateGuildExpressions: 1n << 43n,
752
+ CreateEvents: 1n << 44n,
753
+ UseExternalSounds: 1n << 45n,
754
+ SendVoiceMessages: 1n << 46n,
755
+ SendPolls: 1n << 49n,
756
+ UseExternalApps: 1n << 50n
757
+ };
537
758
 
538
759
  class PermissionSet {
539
760
  bitfield;
@@ -541,8 +762,9 @@ class PermissionSet {
541
762
  try {
542
763
  if (Array.isArray(value)) {
543
764
  let bit = 0n;
544
- for (const item of value)
765
+ for (const item of value) {
545
766
  bit |= this.#resolve(item);
767
+ }
546
768
  this.bitfield = bit;
547
769
  } else if (value instanceof PermissionSet) {
548
770
  this.bitfield = value.bitfield;
@@ -558,22 +780,195 @@ class PermissionSet {
558
780
  throw new TypeError("Permission bitfield must be a valid non-negative integer.", { cause: error });
559
781
  }
560
782
  }
783
+ get createInstantInvite() {
784
+ return (this.bitfield & Permission.createInstantInvite) === Permission.createInstantInvite;
785
+ }
786
+ get kickMembers() {
787
+ return (this.bitfield & Permission.kickMembers) === Permission.kickMembers;
788
+ }
789
+ get banMembers() {
790
+ return (this.bitfield & Permission.banMembers) === Permission.banMembers;
791
+ }
792
+ get administrator() {
793
+ return (this.bitfield & Permission.administrator) === Permission.administrator;
794
+ }
795
+ get manageChannels() {
796
+ return (this.bitfield & Permission.manageChannels) === Permission.manageChannels;
797
+ }
798
+ get manageGuild() {
799
+ return (this.bitfield & Permission.manageGuild) === Permission.manageGuild;
800
+ }
801
+ get addReactions() {
802
+ return (this.bitfield & Permission.addReactions) === Permission.addReactions;
803
+ }
804
+ get viewAuditLog() {
805
+ return (this.bitfield & Permission.viewAuditLog) === Permission.viewAuditLog;
806
+ }
807
+ get prioritySpeaker() {
808
+ return (this.bitfield & Permission.prioritySpeaker) === Permission.prioritySpeaker;
809
+ }
810
+ get stream() {
811
+ return (this.bitfield & Permission.stream) === Permission.stream;
812
+ }
813
+ get viewChannel() {
814
+ return (this.bitfield & Permission.viewChannel) === Permission.viewChannel;
815
+ }
816
+ get sendMessages() {
817
+ return (this.bitfield & Permission.sendMessages) === Permission.sendMessages;
818
+ }
819
+ get sendTTSMessages() {
820
+ return (this.bitfield & Permission.sendTTSMessages) === Permission.sendTTSMessages;
821
+ }
822
+ get manageMessages() {
823
+ return (this.bitfield & Permission.manageMessages) === Permission.manageMessages;
824
+ }
825
+ get embedLinks() {
826
+ return (this.bitfield & Permission.embedLinks) === Permission.embedLinks;
827
+ }
828
+ get attachFiles() {
829
+ return (this.bitfield & Permission.attachFiles) === Permission.attachFiles;
830
+ }
831
+ get readMessageHistory() {
832
+ return (this.bitfield & Permission.readMessageHistory) === Permission.readMessageHistory;
833
+ }
834
+ get mentionEveryone() {
835
+ return (this.bitfield & Permission.mentionEveryone) === Permission.mentionEveryone;
836
+ }
837
+ get useExternalEmojis() {
838
+ return (this.bitfield & Permission.useExternalEmojis) === Permission.useExternalEmojis;
839
+ }
840
+ get viewGuildInsights() {
841
+ return (this.bitfield & Permission.viewGuildInsights) === Permission.viewGuildInsights;
842
+ }
843
+ get connect() {
844
+ return (this.bitfield & Permission.connect) === Permission.connect;
845
+ }
846
+ get speak() {
847
+ return (this.bitfield & Permission.speak) === Permission.speak;
848
+ }
849
+ get muteMembers() {
850
+ return (this.bitfield & Permission.muteMembers) === Permission.muteMembers;
851
+ }
852
+ get deafenMembers() {
853
+ return (this.bitfield & Permission.deafenMembers) === Permission.deafenMembers;
854
+ }
855
+ get moveMembers() {
856
+ return (this.bitfield & Permission.moveMembers) === Permission.moveMembers;
857
+ }
858
+ get useVAD() {
859
+ return (this.bitfield & Permission.useVAD) === Permission.useVAD;
860
+ }
861
+ get changeNickname() {
862
+ return (this.bitfield & Permission.changeNickname) === Permission.changeNickname;
863
+ }
864
+ get manageNicknames() {
865
+ return (this.bitfield & Permission.manageNicknames) === Permission.manageNicknames;
866
+ }
867
+ get manageRoles() {
868
+ return (this.bitfield & Permission.manageRoles) === Permission.manageRoles;
869
+ }
870
+ get manageWebhooks() {
871
+ return (this.bitfield & Permission.manageWebhooks) === Permission.manageWebhooks;
872
+ }
873
+ get manageGuildExpressions() {
874
+ return (this.bitfield & Permission.manageGuildExpressions) === Permission.manageGuildExpressions;
875
+ }
876
+ get useApplicationCommands() {
877
+ return (this.bitfield & Permission.useApplicationCommands) === Permission.useApplicationCommands;
878
+ }
879
+ get requestToSpeak() {
880
+ return (this.bitfield & Permission.requestToSpeak) === Permission.requestToSpeak;
881
+ }
882
+ get manageEvents() {
883
+ return (this.bitfield & Permission.manageEvents) === Permission.manageEvents;
884
+ }
885
+ get manageThreads() {
886
+ return (this.bitfield & Permission.manageThreads) === Permission.manageThreads;
887
+ }
888
+ get createPublicThreads() {
889
+ return (this.bitfield & Permission.createPublicThreads) === Permission.createPublicThreads;
890
+ }
891
+ get createPrivateThreads() {
892
+ return (this.bitfield & Permission.createPrivateThreads) === Permission.createPrivateThreads;
893
+ }
894
+ get useExternalStickers() {
895
+ return (this.bitfield & Permission.useExternalStickers) === Permission.useExternalStickers;
896
+ }
897
+ get sendMessagesInThreads() {
898
+ return (this.bitfield & Permission.sendMessagesInThreads) === Permission.sendMessagesInThreads;
899
+ }
900
+ get useEmbeddedActivities() {
901
+ return (this.bitfield & Permission.useEmbeddedActivities) === Permission.useEmbeddedActivities;
902
+ }
903
+ get moderateMembers() {
904
+ return (this.bitfield & Permission.moderateMembers) === Permission.moderateMembers;
905
+ }
906
+ get viewCreatorMonetizationAnalytics() {
907
+ return (this.bitfield & Permission.viewCreatorMonetizationAnalytics) === Permission.viewCreatorMonetizationAnalytics;
908
+ }
909
+ get useSoundboard() {
910
+ return (this.bitfield & Permission.useSoundboard) === Permission.useSoundboard;
911
+ }
912
+ get createGuildExpressions() {
913
+ return (this.bitfield & Permission.createGuildExpressions) === Permission.createGuildExpressions;
914
+ }
915
+ get createEvents() {
916
+ return (this.bitfield & Permission.createEvents) === Permission.createEvents;
917
+ }
918
+ get useExternalSounds() {
919
+ return (this.bitfield & Permission.useExternalSounds) === Permission.useExternalSounds;
920
+ }
921
+ get sendVoiceMessages() {
922
+ return (this.bitfield & Permission.sendVoiceMessages) === Permission.sendVoiceMessages;
923
+ }
924
+ get sendPolls() {
925
+ return (this.bitfield & Permission.sendPolls) === Permission.sendPolls;
926
+ }
927
+ get useExternalApps() {
928
+ return (this.bitfield & Permission.useExternalApps) === Permission.useExternalApps;
929
+ }
561
930
  has(...permissions) {
562
- return permissions.every((permission) => (this.bitfield & this.#resolve(permission)) === this.#resolve(permission));
931
+ if (permissions.length === 1) {
932
+ const p = permissions[0];
933
+ const bit = typeof p === "bigint" ? p : this.#resolve(p);
934
+ return (this.bitfield & bit) === bit;
935
+ }
936
+ for (let i = 0;i < permissions.length; i++) {
937
+ const p = permissions[i];
938
+ const bit = typeof p === "bigint" ? p : this.#resolve(p);
939
+ if ((this.bitfield & bit) !== bit)
940
+ return false;
941
+ }
942
+ return true;
563
943
  }
564
944
  any(...permissions) {
565
- return permissions.some((permission) => (this.bitfield & this.#resolve(permission)) !== 0n);
945
+ if (permissions.length === 1) {
946
+ const p = permissions[0];
947
+ const bit = typeof p === "bigint" ? p : this.#resolve(p);
948
+ return (this.bitfield & bit) !== 0n;
949
+ }
950
+ for (let i = 0;i < permissions.length; i++) {
951
+ const p = permissions[i];
952
+ const bit = typeof p === "bigint" ? p : this.#resolve(p);
953
+ if ((this.bitfield & bit) !== 0n)
954
+ return true;
955
+ }
956
+ return false;
566
957
  }
567
958
  add(...permissions) {
568
959
  let bitfield = this.bitfield;
569
- for (const permission of permissions)
570
- bitfield |= this.#resolve(permission);
960
+ for (let i = 0;i < permissions.length; i++) {
961
+ const p = permissions[i];
962
+ bitfield |= typeof p === "bigint" ? p : this.#resolve(p);
963
+ }
571
964
  return new PermissionSet(bitfield);
572
965
  }
573
966
  remove(...permissions) {
574
967
  let bitfield = this.bitfield;
575
- for (const permission of permissions)
576
- bitfield &= ~this.#resolve(permission);
968
+ for (let i = 0;i < permissions.length; i++) {
969
+ const p = permissions[i];
970
+ bitfield &= ~(typeof p === "bigint" ? p : this.#resolve(p));
971
+ }
577
972
  return new PermissionSet(bitfield);
578
973
  }
579
974
  equals(other) {
@@ -583,27 +978,31 @@ class PermissionSet {
583
978
  return this.bitfield.toString();
584
979
  }
585
980
  toArray() {
586
- return Object.keys(Permissions).filter((permission) => this.has(permission));
981
+ return Object.keys(Permission).filter((permission) => this.has(permission));
587
982
  }
588
983
  #resolve(permission) {
589
- if (permission instanceof PermissionSet)
590
- return permission.bitfield;
591
984
  if (typeof permission === "bigint")
592
985
  return permission;
593
986
  if (typeof permission === "number")
594
987
  return BigInt(permission);
988
+ if (permission instanceof PermissionSet)
989
+ return permission.bitfield;
595
990
  if (Array.isArray(permission)) {
596
991
  let bit = 0n;
597
- for (const p of permission)
598
- bit |= this.#resolve(p);
992
+ for (let i = 0;i < permission.length; i++)
993
+ bit |= this.#resolve(permission[i]);
599
994
  return bit;
600
995
  }
601
996
  if (typeof permission === "string") {
997
+ if (permission in Permission)
998
+ return Permission[permission];
602
999
  if (permission in Permissions)
603
1000
  return Permissions[permission];
604
- const matchedKey = Object.keys(Permissions).find((k) => k.toLowerCase() === permission.toLowerCase());
605
- if (matchedKey)
606
- return Permissions[matchedKey];
1001
+ if (permission in PermissionFlagsBits)
1002
+ return PermissionFlagsBits[permission];
1003
+ const lower = permission.charAt(0).toLowerCase() + permission.slice(1);
1004
+ if (lower in Permission)
1005
+ return Permission[lower];
607
1006
  return BigInt(permission);
608
1007
  }
609
1008
  return 0n;
@@ -611,63 +1010,12 @@ class PermissionSet {
611
1010
  }
612
1011
 
613
1012
  class PermissionsBitField extends PermissionSet {
1013
+ static Flags = PermissionFlagsBits;
1014
+ static All = Permission;
614
1015
  constructor(value = 0n) {
615
1016
  super(value);
616
1017
  }
617
1018
  }
618
-
619
- // packages/structures/src/resources.ts
620
- class GuildMember {
621
- user;
622
- guildId;
623
- nickname;
624
- roleIds;
625
- pending;
626
- joinedAt;
627
- permissions;
628
- constructor(data) {
629
- this.user = new User(data.user);
630
- if (!/^\d{1,20}$/.test(data.guild_id))
631
- throw new TypeError("Member guild_id must be a valid snowflake.");
632
- this.guildId = data.guild_id;
633
- this.nickname = data.nick ?? null;
634
- this.roleIds = [...data.roles ?? []];
635
- this.pending = data.pending ?? false;
636
- this.joinedAt = data.joined_at ? new Date(data.joined_at) : undefined;
637
- if (this.joinedAt?.toString() === "Invalid Date")
638
- throw new RangeError("Member joined_at must be a valid date.");
639
- this.permissions = new PermissionsBitField(data.permissions ?? 0n);
640
- }
641
- get displayName() {
642
- return this.nickname ?? this.user.displayName;
643
- }
644
- toString() {
645
- return this.user.toString();
646
- }
647
- }
648
-
649
- class Role extends BaseStructure {
650
- name;
651
- color;
652
- hoist;
653
- permissions;
654
- managed;
655
- mentionable;
656
- constructor(data) {
657
- super(data.id);
658
- if (!data.name)
659
- throw new TypeError("Role name cannot be empty.");
660
- this.name = data.name;
661
- this.color = data.color ?? 0;
662
- this.hoist = data.hoist ?? false;
663
- this.permissions = new PermissionsBitField(data.permissions ?? 0n);
664
- this.managed = data.managed ?? false;
665
- this.mentionable = data.mentionable ?? false;
666
- }
667
- toString() {
668
- return `<@&${this.id}>`;
669
- }
670
- }
671
1019
  // packages/types/src/index.ts
672
1020
  var GatewayIntentBits = {
673
1021
  Guilds: 1 << 0,
@@ -720,7 +1068,178 @@ var IntentBits = {
720
1068
  guildMessagePolls: 1 << 24,
721
1069
  directMessagePolls: 1 << 25
722
1070
  };
1071
+ // packages/structures/src/resources.ts
1072
+ function toDateOrNull(value) {
1073
+ if (!value)
1074
+ return null;
1075
+ const date = new Date(value);
1076
+ return Number.isNaN(date.getTime()) ? null : date;
1077
+ }
1078
+
1079
+ class GuildMember {
1080
+ user;
1081
+ guildId;
1082
+ nickname;
1083
+ roleIds;
1084
+ pending;
1085
+ joinedAt;
1086
+ permissions;
1087
+ avatarHash;
1088
+ premiumSince;
1089
+ timedOutUntil;
1090
+ flags;
1091
+ constructor(data) {
1092
+ this.user = new User(data.user);
1093
+ if (!/^\d{1,20}$/.test(data.guild_id))
1094
+ throw new TypeError("Member guild_id must be a valid snowflake.");
1095
+ this.guildId = data.guild_id;
1096
+ this.nickname = data.nick ?? null;
1097
+ this.roleIds = [...data.roles ?? []];
1098
+ this.pending = data.pending ?? false;
1099
+ this.joinedAt = data.joined_at ? new Date(data.joined_at) : undefined;
1100
+ if (this.joinedAt?.toString() === "Invalid Date")
1101
+ throw new RangeError("Member joined_at must be a valid date.");
1102
+ this.permissions = new PermissionsBitField(data.permissions ?? 0n);
1103
+ this.avatarHash = data.avatar ?? null;
1104
+ this.premiumSince = toDateOrNull(data.premium_since);
1105
+ this.timedOutUntil = toDateOrNull(data.communication_disabled_until);
1106
+ this.flags = data.flags ?? 0;
1107
+ }
1108
+ get displayName() {
1109
+ return this.nickname ?? this.user.displayName;
1110
+ }
1111
+ get isTimedOut() {
1112
+ return this.timedOutUntil !== null && this.timedOutUntil > new Date;
1113
+ }
1114
+ avatarURL(options = {}) {
1115
+ if (this.avatarHash)
1116
+ return cdnURL(`/guilds/${this.guildId}/users/${this.user.id}/avatars`, this.avatarHash, options);
1117
+ return this.user.avatarURL(options);
1118
+ }
1119
+ displayAvatarURL(options = {}) {
1120
+ return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
1121
+ }
1122
+ toString() {
1123
+ return this.user.toString();
1124
+ }
1125
+ }
1126
+
1127
+ class Role extends BaseStructure {
1128
+ name;
1129
+ color;
1130
+ hoist;
1131
+ permissions;
1132
+ managed;
1133
+ mentionable;
1134
+ position;
1135
+ unicodeEmoji;
1136
+ iconHash;
1137
+ tags;
1138
+ constructor(data) {
1139
+ super(data.id);
1140
+ if (!data.name)
1141
+ throw new TypeError("Role name cannot be empty.");
1142
+ this.name = data.name;
1143
+ this.color = data.color ?? 0;
1144
+ this.hoist = data.hoist ?? false;
1145
+ this.permissions = new PermissionsBitField(data.permissions ?? 0n);
1146
+ this.managed = data.managed ?? false;
1147
+ this.mentionable = data.mentionable ?? false;
1148
+ this.position = data.position ?? 0;
1149
+ this.unicodeEmoji = data.unicode_emoji ?? null;
1150
+ this.iconHash = data.icon ?? null;
1151
+ this.tags = data.tags ?? null;
1152
+ }
1153
+ get colorHex() {
1154
+ return `#${this.color.toString(16).padStart(6, "0").toUpperCase()}`;
1155
+ }
1156
+ iconURL(options = {}) {
1157
+ if (!this.iconHash)
1158
+ return null;
1159
+ return cdnURL(`/role-icons/${this.id}`, this.iconHash, options);
1160
+ }
1161
+ isEveryone(guildId) {
1162
+ return this.id === guildId;
1163
+ }
1164
+ toString() {
1165
+ return `<@&${this.id}>`;
1166
+ }
1167
+ }
1168
+ class Emoji extends BaseStructure {
1169
+ name;
1170
+ roleIds;
1171
+ user;
1172
+ requireColons;
1173
+ managed;
1174
+ animated;
1175
+ available;
1176
+ constructor(data) {
1177
+ super(data.id ?? "unicode");
1178
+ this.name = data.name;
1179
+ this.roleIds = data.roles ?? [];
1180
+ this.user = data.user ? new User(data.user) : null;
1181
+ this.requireColons = data.require_colons ?? false;
1182
+ this.managed = data.managed ?? false;
1183
+ this.animated = data.animated ?? false;
1184
+ this.available = data.available ?? true;
1185
+ }
1186
+ url(options = {}) {
1187
+ if (!this.id || this.id === "unicode")
1188
+ return null;
1189
+ const ext = options.extension ?? (this.animated ? "gif" : "png");
1190
+ const size = options.size ? `?size=${options.size}` : "";
1191
+ return `${CDN_BASE}/emojis/${this.id}.${ext}${size}`;
1192
+ }
1193
+ toString() {
1194
+ return this.id !== "unicode" ? `<${this.animated ? "a" : ""}:${this.name}:${this.id}>` : this.name ?? "";
1195
+ }
1196
+ }
1197
+
1198
+ class AutoModerationRule extends BaseStructure {
1199
+ guildId;
1200
+ name;
1201
+ creatorId;
1202
+ eventType;
1203
+ triggerType;
1204
+ triggerMetadata;
1205
+ actions;
1206
+ enabled;
1207
+ exemptRoles;
1208
+ exemptChannels;
1209
+ constructor(data) {
1210
+ super(data.id);
1211
+ if (!/^\d{1,20}$/.test(data.guild_id))
1212
+ throw new TypeError("AutoModerationRule guild_id must be a valid snowflake.");
1213
+ this.guildId = data.guild_id;
1214
+ this.name = data.name;
1215
+ this.creatorId = data.creator_id;
1216
+ this.eventType = data.event_type;
1217
+ this.triggerType = data.trigger_type;
1218
+ this.triggerMetadata = data.trigger_metadata;
1219
+ this.actions = data.actions;
1220
+ this.enabled = data.enabled;
1221
+ this.exemptRoles = data.exempt_roles;
1222
+ this.exemptChannels = data.exempt_channels;
1223
+ }
1224
+ toJSON() {
1225
+ return {
1226
+ id: this.id,
1227
+ guildId: this.guildId,
1228
+ name: this.name,
1229
+ creatorId: this.creatorId,
1230
+ eventType: this.eventType,
1231
+ triggerType: this.triggerType,
1232
+ triggerMetadata: this.triggerMetadata,
1233
+ actions: this.actions,
1234
+ enabled: this.enabled,
1235
+ exemptRoles: this.exemptRoles,
1236
+ exemptChannels: this.exemptChannels
1237
+ };
1238
+ }
1239
+ }
723
1240
  // packages/structures/src/index.ts
1241
+ var NON_SYSTEM_MESSAGE_TYPES = new Set([0, 19, 20, 23]);
1242
+
724
1243
  class Message extends BaseStructure {
725
1244
  content;
726
1245
  author;
@@ -766,6 +1285,12 @@ class Message extends BaseStructure {
766
1285
  get embedsSuppressed() {
767
1286
  return (this.flags & 4) !== 0;
768
1287
  }
1288
+ get createdTimestamp() {
1289
+ return this.timestamp.getTime();
1290
+ }
1291
+ get createdAt() {
1292
+ return this.timestamp;
1293
+ }
769
1294
  edit(options) {
770
1295
  if (!this.#context)
771
1296
  throw new Error("This message is not attached to a client.");
@@ -820,6 +1345,51 @@ class Message extends BaseStructure {
820
1345
  throw new Error("This message is not attached to a client.");
821
1346
  return this.#context.unpinMessage(this.channelId, this.id);
822
1347
  }
1348
+ get isEphemeral() {
1349
+ return (this.flags & 64) !== 0;
1350
+ }
1351
+ get isPinned() {
1352
+ return this.pinned;
1353
+ }
1354
+ get isSystemMessage() {
1355
+ return !NON_SYSTEM_MESSAGE_TYPES.has(this.type);
1356
+ }
1357
+ get isCrosspost() {
1358
+ return (this.flags & 2) !== 0;
1359
+ }
1360
+ get hasAttachments() {
1361
+ return this.attachments.length > 0;
1362
+ }
1363
+ get hasEmbeds() {
1364
+ return this.embeds.length > 0;
1365
+ }
1366
+ get hasComponents() {
1367
+ return this.components.length > 0;
1368
+ }
1369
+ suppressEmbeds() {
1370
+ return this.edit({ flags: this.flags | 4 });
1371
+ }
1372
+ toJSON() {
1373
+ return {
1374
+ id: this.id,
1375
+ content: this.content,
1376
+ channelId: this.channelId,
1377
+ guildId: this.guildId,
1378
+ flags: this.flags,
1379
+ pinned: this.pinned,
1380
+ mentionEveryone: this.mentionEveryone,
1381
+ type: this.type,
1382
+ timestamp: this.timestamp.toISOString(),
1383
+ author: { id: this.author.id, username: this.author.username },
1384
+ attachments: [...this.attachments],
1385
+ embeds: [...this.embeds],
1386
+ components: [...this.components],
1387
+ mentions: this.mentions.map((u) => u.id),
1388
+ mentionRoles: [...this.mentionRoles],
1389
+ reference: this.reference,
1390
+ referencedMessage: this.referencedMessage ? this.referencedMessage.id : this.referencedMessage
1391
+ };
1392
+ }
823
1393
  }
824
1394
 
825
1395
  // packages/managers/src/message.ts
@@ -911,6 +1481,11 @@ class UserManager extends ResourceManager {
911
1481
  }
912
1482
  }
913
1483
  // packages/managers/src/guild.ts
1484
+ function withQuery(path, params) {
1485
+ const suffix = params.toString();
1486
+ return suffix ? `${path}?${suffix}` : path;
1487
+ }
1488
+
914
1489
  class GuildManager extends ResourceManager {
915
1490
  #rest;
916
1491
  constructor(rest) {
@@ -940,7 +1515,101 @@ class GuildManager extends ResourceManager {
940
1515
  async fetchInvites(id) {
941
1516
  return this.#rest.get(Routes.guildInvites(id));
942
1517
  }
1518
+ async fetchAuditLog(guildId, options = {}) {
1519
+ const params = new URLSearchParams;
1520
+ if (options.userId)
1521
+ params.set("user_id", options.userId);
1522
+ if (options.actionType !== undefined)
1523
+ params.set("action_type", String(options.actionType));
1524
+ if (options.before)
1525
+ params.set("before", options.before);
1526
+ if (options.after)
1527
+ params.set("after", options.after);
1528
+ if (options.limit !== undefined)
1529
+ params.set("limit", String(Math.min(100, Math.max(1, options.limit))));
1530
+ return this.#rest.get(withQuery(Routes.guildAuditLog(guildId), params));
1531
+ }
1532
+ async fetchMembers(guildId, options = {}) {
1533
+ const params = new URLSearchParams;
1534
+ if (options.limit !== undefined)
1535
+ params.set("limit", String(Math.min(1000, Math.max(1, options.limit))));
1536
+ if (options.after)
1537
+ params.set("after", options.after);
1538
+ return this.#rest.get(withQuery(Routes.guildMembers(guildId), params));
1539
+ }
1540
+ async fetchAutoModerationRules(guildId) {
1541
+ const rules = await this.#rest.get(Routes.guildAutoModerationRules(guildId));
1542
+ return rules.map((r) => new AutoModerationRule(r));
1543
+ }
1544
+ async fetchAutoModerationRule(guildId, ruleId) {
1545
+ const rule = await this.#rest.get(Routes.guildAutoModerationRule(guildId, ruleId));
1546
+ return new AutoModerationRule(rule);
1547
+ }
1548
+ async createAutoModerationRule(guildId, options) {
1549
+ const rule = await this.#rest.post(Routes.guildAutoModerationRules(guildId), options);
1550
+ return new AutoModerationRule(rule);
1551
+ }
1552
+ async editAutoModerationRule(guildId, ruleId, options) {
1553
+ const rule = await this.#rest.patch(Routes.guildAutoModerationRule(guildId, ruleId), options);
1554
+ return new AutoModerationRule(rule);
1555
+ }
1556
+ async deleteAutoModerationRule(guildId, ruleId) {
1557
+ await this.#rest.delete(Routes.guildAutoModerationRule(guildId, ruleId));
1558
+ }
943
1559
  }
1560
+ var AuditLogEvent = {
1561
+ GuildUpdate: 1,
1562
+ ChannelCreate: 10,
1563
+ ChannelUpdate: 11,
1564
+ ChannelDelete: 12,
1565
+ ChannelOverwriteCreate: 13,
1566
+ ChannelOverwriteUpdate: 14,
1567
+ ChannelOverwriteDelete: 15,
1568
+ MemberKick: 20,
1569
+ MemberPrune: 21,
1570
+ MemberBanAdd: 22,
1571
+ MemberBanRemove: 23,
1572
+ MemberUpdate: 24,
1573
+ MemberRoleUpdate: 25,
1574
+ MemberMove: 26,
1575
+ MemberDisconnect: 27,
1576
+ BotAdd: 28,
1577
+ RoleCreate: 30,
1578
+ RoleUpdate: 31,
1579
+ RoleDelete: 32,
1580
+ InviteCreate: 40,
1581
+ InviteUpdate: 41,
1582
+ InviteDelete: 42,
1583
+ WebhookCreate: 50,
1584
+ WebhookUpdate: 51,
1585
+ WebhookDelete: 52,
1586
+ EmojiCreate: 60,
1587
+ EmojiUpdate: 61,
1588
+ EmojiDelete: 62,
1589
+ MessageDelete: 72,
1590
+ MessageBulkDelete: 73,
1591
+ MessagePin: 74,
1592
+ MessageUnpin: 75,
1593
+ IntegrationCreate: 80,
1594
+ IntegrationUpdate: 81,
1595
+ IntegrationDelete: 82,
1596
+ StageInstanceCreate: 83,
1597
+ StageInstanceUpdate: 84,
1598
+ StageInstanceDelete: 85,
1599
+ StickerCreate: 90,
1600
+ StickerUpdate: 91,
1601
+ StickerDelete: 92,
1602
+ ScheduledEventCreate: 100,
1603
+ ScheduledEventUpdate: 101,
1604
+ ScheduledEventDelete: 102,
1605
+ ThreadCreate: 110,
1606
+ ThreadUpdate: 111,
1607
+ ThreadDelete: 112,
1608
+ AutoModerationRuleCreate: 140,
1609
+ AutoModerationRuleUpdate: 141,
1610
+ AutoModerationRuleDelete: 142,
1611
+ AutoModerationBlockMessage: 143
1612
+ };
944
1613
  // packages/managers/src/role.ts
945
1614
  class RoleManager extends ResourceManager {
946
1615
  #rest;
@@ -1061,6 +1730,44 @@ class ApplicationCommandManager {
1061
1730
  await this.#rest.delete(Routes.guildApplicationCommand(this.#applicationId, guildId, commandId));
1062
1731
  }
1063
1732
  }
1733
+ // packages/managers/src/emoji.ts
1734
+ class EmojiManager extends Manager {
1735
+ #rest;
1736
+ #guildId;
1737
+ constructor(rest, guildId) {
1738
+ super();
1739
+ this.#rest = rest;
1740
+ this.#guildId = guildId;
1741
+ }
1742
+ async fetch(emojiId) {
1743
+ return this.upsert(await this.#rest.get(Routes.guildEmoji(this.#guildId, emojiId)));
1744
+ }
1745
+ async fetchAll() {
1746
+ const data = await this.#rest.get(Routes.guildEmoji(this.#guildId));
1747
+ return data.map((item) => this.upsert(item));
1748
+ }
1749
+ async create(options) {
1750
+ return this.upsert(await this.#rest.post(Routes.guildEmoji(this.#guildId), options));
1751
+ }
1752
+ async edit(emojiId, options) {
1753
+ return this.upsert(await this.#rest.patch(Routes.guildEmoji(this.#guildId, emojiId), options));
1754
+ }
1755
+ async deleteEmoji(emojiId) {
1756
+ await this.#rest.delete(Routes.guildEmoji(this.#guildId, emojiId));
1757
+ this.delete(emojiId);
1758
+ }
1759
+ upsert(data) {
1760
+ const key = data.id != null ? data.id : `unicode:${data.name ?? ""}`;
1761
+ const existing = this.get(key);
1762
+ const emoji = new Emoji(data);
1763
+ if (existing) {
1764
+ Object.assign(existing, emoji);
1765
+ return existing;
1766
+ }
1767
+ this.set(key, emoji);
1768
+ return emoji;
1769
+ }
1770
+ }
1064
1771
 
1065
1772
  // packages/managers/src/index.ts
1066
1773
  class ChannelManager extends Manager {
@@ -1123,8 +1830,11 @@ class ChannelManager extends Manager {
1123
1830
  }
1124
1831
  async deleteChannel(channelId) {
1125
1832
  await this.#rest.delete(Routes.channel(channelId));
1833
+ this.delete(channelId);
1834
+ }
1835
+ delete(channelId) {
1126
1836
  this.#messageManagers.delete(channelId);
1127
- super.delete(channelId);
1837
+ return super.delete(channelId);
1128
1838
  }
1129
1839
  send(channelId, options) {
1130
1840
  return this.messages(channelId).send(options);
@@ -1169,6 +1879,8 @@ class ChannelManager extends Manager {
1169
1879
  }
1170
1880
  async bulkDeleteMessages(channelId, messageIds) {
1171
1881
  const ids = [...messageIds];
1882
+ if (ids.length < 2 || ids.length > 100)
1883
+ throw new RangeError("bulkDelete requires between 2 and 100 message IDs.");
1172
1884
  await this.#rest.post(Routes.channelBulkDelete(channelId), {
1173
1885
  messages: ids
1174
1886
  });
@@ -1176,7 +1888,7 @@ class ChannelManager extends Manager {
1176
1888
  this.messages(channelId).delete(id);
1177
1889
  }
1178
1890
  async addReaction(channelId, messageId, emoji) {
1179
- await this.#rest.put(Routes.messageReactions(channelId, messageId, emoji));
1891
+ await this.#rest.put(`${Routes.messageReactions(channelId, messageId, emoji)}/@me`);
1180
1892
  }
1181
1893
  async fetchReactions(channelId, messageId, emoji, options = {}) {
1182
1894
  const params = new URLSearchParams;
@@ -1210,9 +1922,21 @@ class ChannelManager extends Manager {
1210
1922
  createThreadFromMessage(channelId, messageId, options) {
1211
1923
  return this.threads(channelId).createFromMessage(messageId, options);
1212
1924
  }
1213
- delete(channelId) {
1214
- this.#messageManagers.delete(channelId);
1215
- return super.delete(channelId);
1925
+ async fetchPage(channelId, options = {}) {
1926
+ const limit = Math.min(100, Math.max(1, options.limit ?? 50));
1927
+ const messages = await this.fetchMessages(channelId, {
1928
+ ...options,
1929
+ limit
1930
+ });
1931
+ return {
1932
+ messages,
1933
+ before: messages[0]?.id,
1934
+ after: messages[messages.length - 1]?.id,
1935
+ hasMore: messages.length === limit
1936
+ };
1937
+ }
1938
+ async bulkDelete(channelId, messageIds) {
1939
+ return this.bulkDeleteMessages(channelId, messageIds);
1216
1940
  }
1217
1941
  clear() {
1218
1942
  this.#messageManagers.clear();
@@ -1224,7 +1948,9 @@ function isMessageQuery(value) {
1224
1948
  }
1225
1949
  export {
1226
1950
  ApplicationCommandManager,
1951
+ AuditLogEvent,
1227
1952
  ChannelManager,
1953
+ EmojiManager,
1228
1954
  GuildManager,
1229
1955
  GuildMemberManager,
1230
1956
  Manager,
@@ -1235,4 +1961,4 @@ export {
1235
1961
  UserManager
1236
1962
  };
1237
1963
 
1238
- //# debugId=53F2FF9551439B3964756E2164756E21
1964
+ //# debugId=EA438691ADA8387364756E2164756E21