lunibee 0.1.5 → 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 (60) hide show
  1. package/README.md +13 -24
  2. package/dist/builders/commands.d.ts +37 -0
  3. package/dist/builders/components.d.ts +127 -12
  4. package/dist/builders/embed.d.ts +3 -1
  5. package/dist/builders/index.d.ts +2 -2
  6. package/dist/builders/index.js +319 -16
  7. package/dist/builders/index.js.map +8 -7
  8. package/dist/collection/index.d.ts +36 -0
  9. package/dist/collection/index.js +110 -6
  10. package/dist/collection/index.js.map +4 -4
  11. package/dist/core/events.d.ts +69 -3
  12. package/dist/core/index.d.ts +158 -90
  13. package/dist/core/index.js +1543 -1169
  14. package/dist/core/index.js.map +24 -23
  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 +5 -4
  21. package/dist/index.js +3882 -1588
  22. package/dist/index.js.map +43 -35
  23. package/dist/managers/emoji.d.ts +38 -0
  24. package/dist/managers/guild.d.ts +141 -0
  25. package/dist/managers/index.d.ts +86 -75
  26. package/dist/managers/index.js +1084 -67
  27. package/dist/managers/index.js.map +21 -16
  28. package/dist/managers/message.d.ts +7 -12
  29. package/dist/managers/user.d.ts +20 -0
  30. package/dist/rest/index.d.ts +173 -1
  31. package/dist/rest/index.js +343 -47
  32. package/dist/rest/index.js.map +8 -6
  33. package/dist/rest/redis.d.ts +37 -0
  34. package/dist/rest/routes.d.ts +26 -1
  35. package/dist/rest/store.d.ts +38 -0
  36. package/dist/rest/webhook.d.ts +2 -2
  37. package/dist/sharding/cluster.d.ts +61 -0
  38. package/dist/sharding/index.d.ts +8 -0
  39. package/dist/sharding/index.js +289 -18
  40. package/dist/sharding/index.js.map +8 -7
  41. package/dist/structures/audit-log.d.ts +26 -0
  42. package/dist/structures/base.d.ts +131 -48
  43. package/dist/structures/embed.d.ts +65 -0
  44. package/dist/structures/index.d.ts +74 -26
  45. package/dist/structures/index.js +1528 -59
  46. package/dist/structures/index.js.map +14 -8
  47. package/dist/structures/interactions.d.ts +72 -17
  48. package/dist/structures/resources.d.ts +199 -7
  49. package/dist/types/index.d.ts +605 -84
  50. package/dist/types/index.js +71 -1
  51. package/dist/types/index.js.map +3 -3
  52. package/dist/utils/index.js.map +2 -2
  53. package/dist/voice/index.d.ts +88 -0
  54. package/dist/voice/index.js +204 -5
  55. package/dist/voice/index.js.map +3 -3
  56. package/dist/ws/index.d.ts +40 -1
  57. package/dist/ws/index.js +105 -18
  58. package/dist/ws/index.js.map +4 -4
  59. package/package.json +16 -16
  60. package/dist/structures/permissions.d.ts +0 -73
@@ -53,16 +53,20 @@ class EmbedBuilder {
53
53
  return this;
54
54
  }
55
55
  addFields(...fields) {
56
- if (!fields.length)
56
+ const resolved = fields.length === 1 && Array.isArray(fields[0]) ? fields[0] : fields;
57
+ if (!resolved.length)
57
58
  throw new TypeError("At least one embed field is required.");
58
59
  const current = this.#data.fields ?? [];
59
- if (current.length + fields.length > 25)
60
+ if (current.length + resolved.length > 25)
60
61
  throw new RangeError("An embed cannot contain more than 25 fields.");
61
- for (const field of fields) {
62
+ for (const field of resolved) {
62
63
  validate(field.name, 256, "Embed field name");
63
64
  validate(field.value, 1024, "Embed field value");
64
65
  }
65
- this.#data.fields = [...current, ...fields.map((field) => ({ ...field }))];
66
+ this.#data.fields = [
67
+ ...current,
68
+ ...resolved.map((field) => ({ ...field }))
69
+ ];
66
70
  return this;
67
71
  }
68
72
  setFields(fields) {
@@ -110,6 +114,67 @@ function url(value, field) {
110
114
  throw new TypeError(`${field} must be a valid URL.`, { cause: error });
111
115
  }
112
116
  }
117
+ // packages/types/src/index.ts
118
+ var GatewayIntentBits = {
119
+ Guilds: 1 << 0,
120
+ GuildMembers: 1 << 1,
121
+ GuildModeration: 1 << 2,
122
+ GuildExpressions: 1 << 3,
123
+ GuildIntegrations: 1 << 4,
124
+ GuildWebhooks: 1 << 5,
125
+ GuildInvites: 1 << 6,
126
+ GuildVoiceStates: 1 << 7,
127
+ GuildPresences: 1 << 8,
128
+ GuildMessages: 1 << 9,
129
+ GuildMessageReactions: 1 << 10,
130
+ GuildMessageTyping: 1 << 11,
131
+ DirectMessages: 1 << 12,
132
+ DirectMessageReactions: 1 << 13,
133
+ DirectMessageTyping: 1 << 14,
134
+ MessageContent: 1 << 15,
135
+ GuildScheduledEvents: 1 << 16,
136
+ AutoModerationConfiguration: 1 << 20,
137
+ AutoModerationExecution: 1 << 21,
138
+ GuildMessagePolls: 1 << 24,
139
+ DirectMessagePolls: 1 << 25
140
+ };
141
+ var IntentBits = {
142
+ guild: 1 << 0,
143
+ guilds: 1 << 0,
144
+ guildMembers: 1 << 1,
145
+ guildModeration: 1 << 2,
146
+ guildBans: 1 << 2,
147
+ guildExpressions: 1 << 3,
148
+ guildEmojis: 1 << 3,
149
+ guildEmojisAndStickers: 1 << 3,
150
+ guildIntegrations: 1 << 4,
151
+ guildWebhooks: 1 << 5,
152
+ guildInvites: 1 << 6,
153
+ guildVoiceStates: 1 << 7,
154
+ guildPresences: 1 << 8,
155
+ guildMessages: 1 << 9,
156
+ guildMessage: 1 << 9,
157
+ guildMessageReactions: 1 << 10,
158
+ guildMessageTyping: 1 << 11,
159
+ directMessages: 1 << 12,
160
+ directMessageReactions: 1 << 13,
161
+ directMessageTyping: 1 << 14,
162
+ messageContent: 1 << 15,
163
+ guildScheduledEvents: 1 << 16,
164
+ autoModerationConfiguration: 1 << 20,
165
+ autoModerationExecution: 1 << 21,
166
+ guildMessagePolls: 1 << 24,
167
+ directMessagePolls: 1 << 25
168
+ };
169
+ var ButtonStyle = {
170
+ Primary: 1,
171
+ Secondary: 2,
172
+ Success: 3,
173
+ Danger: 4,
174
+ Link: 5,
175
+ Premium: 6
176
+ };
177
+
113
178
  // packages/builders/src/components.ts
114
179
  var ComponentType = {
115
180
  ActionRow: 1,
@@ -119,14 +184,15 @@ var ComponentType = {
119
184
  UserSelect: 5,
120
185
  RoleSelect: 6,
121
186
  MentionableSelect: 7,
122
- ChannelSelect: 8
123
- };
124
- var ButtonStyle = {
125
- Primary: 1,
126
- Secondary: 2,
127
- Success: 3,
128
- Danger: 4,
129
- Link: 5
187
+ ChannelSelect: 8,
188
+ Section: 9,
189
+ TextDisplay: 10,
190
+ Thumbnail: 11,
191
+ MediaGallery: 12,
192
+ File: 13,
193
+ Separator: 14,
194
+ ContentInventoryEntry: 16,
195
+ Container: 17
130
196
  };
131
197
  var TextInputStyle = { Short: 1, Paragraph: 2 };
132
198
 
@@ -236,7 +302,9 @@ class ButtonBuilder {
236
302
  try {
237
303
  url2 = new URL(value);
238
304
  } catch (error) {
239
- throw new TypeError("Button URL must be a valid URL.", { cause: error });
305
+ throw new TypeError("Button URL must be a valid URL.", {
306
+ cause: error
307
+ });
240
308
  }
241
309
  this.#data.style = ButtonStyle.Link;
242
310
  delete this.#data.custom_id;
@@ -292,7 +360,7 @@ class EntitySelectBuilder {
292
360
  return this;
293
361
  }
294
362
  setDefaultValues(...values) {
295
- this.#data.default_values = values;
363
+ this.#data.default_values = values.map((value) => ({ ...value }));
296
364
  return this;
297
365
  }
298
366
  toJSON() {
@@ -379,6 +447,191 @@ class TextInputBuilder {
379
447
  return structuredClone(this.#data);
380
448
  }
381
449
  }
450
+
451
+ class ContainerBuilder {
452
+ #components = [];
453
+ #accentColor;
454
+ #spoiler;
455
+ addComponents(...components) {
456
+ if (!components.length)
457
+ throw new TypeError("At least one component is required.");
458
+ this.#components.push(...components);
459
+ return this;
460
+ }
461
+ setAccentColor(color) {
462
+ if (!Number.isInteger(color) || color < 0 || color > 16777215) {
463
+ throw new RangeError("Accent color must be an integer between 0 and 16777215 (0xFFFFFF).");
464
+ }
465
+ this.#accentColor = color;
466
+ return this;
467
+ }
468
+ setSpoiler(spoiler = true) {
469
+ this.#spoiler = spoiler;
470
+ return this;
471
+ }
472
+ toJSON() {
473
+ const data = {
474
+ type: ComponentType.Container,
475
+ components: this.#components.map((c) => c.toJSON())
476
+ };
477
+ if (this.#accentColor !== undefined)
478
+ data.accent_color = this.#accentColor;
479
+ if (this.#spoiler !== undefined)
480
+ data.spoiler = this.#spoiler;
481
+ return data;
482
+ }
483
+ }
484
+
485
+ class SectionBuilder {
486
+ #components = [];
487
+ #accessory;
488
+ addComponents(...components) {
489
+ if (!components.length)
490
+ throw new TypeError("At least one component is required.");
491
+ this.#components.push(...components);
492
+ return this;
493
+ }
494
+ setAccessory(accessory) {
495
+ this.#accessory = accessory;
496
+ return this;
497
+ }
498
+ toJSON() {
499
+ return {
500
+ type: ComponentType.Section,
501
+ components: this.#components.length ? this.#components.map((c) => c.toJSON()) : undefined,
502
+ accessory: this.#accessory?.toJSON()
503
+ };
504
+ }
505
+ }
506
+
507
+ class TextDisplayBuilder {
508
+ #content = "";
509
+ setContent(content) {
510
+ validateText(content, 4000, "Text display content");
511
+ this.#content = content;
512
+ return this;
513
+ }
514
+ toJSON() {
515
+ return {
516
+ type: ComponentType.TextDisplay,
517
+ content: this.#content
518
+ };
519
+ }
520
+ }
521
+
522
+ class MediaGalleryBuilder {
523
+ #items = [];
524
+ addItems(...items) {
525
+ if (!items.length) {
526
+ throw new TypeError("At least one media gallery item is required.");
527
+ }
528
+ if (this.#items.length + items.length > 10) {
529
+ throw new RangeError("MediaGallery can only contain up to 10 items.");
530
+ }
531
+ this.#items.push(...items.map((item) => ({ media: item })));
532
+ return this;
533
+ }
534
+ toJSON() {
535
+ return {
536
+ type: ComponentType.MediaGallery,
537
+ items: structuredClone(this.#items)
538
+ };
539
+ }
540
+ }
541
+
542
+ class FileComponentBuilder {
543
+ #url = "";
544
+ #spoiler;
545
+ setUrl(url2) {
546
+ validateText(url2, 2048, "File component URL");
547
+ this.#url = url2;
548
+ return this;
549
+ }
550
+ setSpoiler(spoiler = true) {
551
+ this.#spoiler = spoiler;
552
+ return this;
553
+ }
554
+ toJSON() {
555
+ if (!this.#url)
556
+ throw new Error("File component must have a URL.");
557
+ const data = {
558
+ type: ComponentType.File,
559
+ file: { url: this.#url }
560
+ };
561
+ if (this.#spoiler !== undefined)
562
+ data.spoiler = this.#spoiler;
563
+ return data;
564
+ }
565
+ }
566
+
567
+ class SeparatorBuilder {
568
+ #spacing;
569
+ #divider;
570
+ setSpacing(spacing) {
571
+ this.#spacing = spacing;
572
+ return this;
573
+ }
574
+ setDivider(divider = true) {
575
+ this.#divider = divider;
576
+ return this;
577
+ }
578
+ toJSON() {
579
+ const data = {
580
+ type: ComponentType.Separator
581
+ };
582
+ if (this.#spacing !== undefined)
583
+ data.spacing = this.#spacing;
584
+ if (this.#divider !== undefined)
585
+ data.divider = this.#divider;
586
+ return data;
587
+ }
588
+ }
589
+
590
+ class ThumbnailBuilder {
591
+ #url = "";
592
+ #description;
593
+ #spoiler;
594
+ setUrl(url2) {
595
+ validateText(url2, 2048, "Thumbnail URL");
596
+ this.#url = url2;
597
+ return this;
598
+ }
599
+ setDescription(description) {
600
+ validateText(description, 1024, "Thumbnail description");
601
+ this.#description = description;
602
+ return this;
603
+ }
604
+ setSpoiler(spoiler = true) {
605
+ this.#spoiler = spoiler;
606
+ return this;
607
+ }
608
+ toJSON() {
609
+ const data = {
610
+ type: ComponentType.Thumbnail,
611
+ url: this.#url
612
+ };
613
+ if (this.#description !== undefined)
614
+ data.description = this.#description;
615
+ if (this.#spoiler !== undefined)
616
+ data.spoiler = this.#spoiler;
617
+ return data;
618
+ }
619
+ }
620
+
621
+ class ContentInventoryEntryBuilder {
622
+ #id = "";
623
+ setId(id) {
624
+ validateText(id, 100, "Content inventory entry ID");
625
+ this.#id = id;
626
+ return this;
627
+ }
628
+ toJSON() {
629
+ return {
630
+ type: ComponentType.ContentInventoryEntry,
631
+ id: this.#id
632
+ };
633
+ }
634
+ }
382
635
  function validateText(value, max, field) {
383
636
  if (typeof value !== "string")
384
637
  throw new TypeError(`${field} must be a string.`);
@@ -750,6 +1003,46 @@ function validateNumberRange(value, minimum, maximum, field, integerOnly = true)
750
1003
  if (!Number.isFinite(value) || integerOnly && !Number.isInteger(value) || value < minimum || value > maximum)
751
1004
  throw new RangeError(`${field} must be ${integerOnly ? "an integer" : "a number"} between ${minimum} and ${maximum}.`);
752
1005
  }
1006
+
1007
+ class ContextMenuCommandBuilder {
1008
+ data;
1009
+ constructor(type) {
1010
+ this.data = { type };
1011
+ }
1012
+ setName(name) {
1013
+ if (typeof name !== "string" || name.trim().length < 1 || name.length > 32)
1014
+ throw new RangeError("Command name must contain 1-32 characters.");
1015
+ this.data.name = name;
1016
+ return this;
1017
+ }
1018
+ setDefaultMemberPermissions(permissions) {
1019
+ this.data.default_member_permissions = permissions === null ? null : BigInt(permissions).toString();
1020
+ return this;
1021
+ }
1022
+ setDMPermission(enabled) {
1023
+ this.data.dm_permission = enabled;
1024
+ return this;
1025
+ }
1026
+ setIntegrationTypes(...types) {
1027
+ this.data.integration_types = [...types];
1028
+ return this;
1029
+ }
1030
+ toJSON() {
1031
+ return structuredClone(this.data);
1032
+ }
1033
+ }
1034
+
1035
+ class UserCommandBuilder extends ContextMenuCommandBuilder {
1036
+ constructor() {
1037
+ super(2);
1038
+ }
1039
+ }
1040
+
1041
+ class MessageCommandBuilder extends ContextMenuCommandBuilder {
1042
+ constructor() {
1043
+ super(3);
1044
+ }
1045
+ }
753
1046
  // packages/builders/src/attachment.ts
754
1047
  import { readFile } from "fs/promises";
755
1048
  import { basename } from "path";
@@ -795,7 +1088,7 @@ class AttachmentBuilder {
795
1088
  if (typeof Buffer !== "undefined" && Buffer.isBuffer(this.file)) {
796
1089
  return new Uint8Array(this.file);
797
1090
  }
798
- return new Uint8Array;
1091
+ throw new TypeError("Attachment file must be a supported binary value or file path.");
799
1092
  }
800
1093
  }
801
1094
  export {
@@ -808,21 +1101,31 @@ export {
808
1101
  ButtonStyle,
809
1102
  ChannelOptionBuilder,
810
1103
  ComponentType,
1104
+ ContainerBuilder,
1105
+ ContentInventoryEntryBuilder,
811
1106
  EmbedBuilder,
812
1107
  EntitySelectBuilder,
1108
+ FileComponentBuilder,
813
1109
  IntegerOptionBuilder,
1110
+ MediaGalleryBuilder,
814
1111
  MentionableOptionBuilder,
1112
+ MessageCommandBuilder,
815
1113
  ModalBuilder,
816
1114
  NumberOptionBuilder,
817
1115
  RoleOptionBuilder,
1116
+ SectionBuilder,
1117
+ SeparatorBuilder,
818
1118
  SlashCommandBuilder,
819
1119
  StringOptionBuilder,
820
1120
  StringSelectBuilder,
821
1121
  SubcommandBuilder,
822
1122
  SubcommandGroupBuilder,
1123
+ TextDisplayBuilder,
823
1124
  TextInputBuilder,
824
1125
  TextInputStyle,
1126
+ ThumbnailBuilder,
1127
+ UserCommandBuilder,
825
1128
  UserOptionBuilder
826
1129
  };
827
1130
 
828
- //# debugId=2D9849BFEE96124664756E2164756E21
1131
+ //# debugId=1FE9A1C7B4113D0264756E2164756E21