@jubbio/core 1.3.2 → 1.3.4

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 (130) hide show
  1. package/dist/Client.js +50 -10
  2. package/dist/rest/REST.d.ts +1 -0
  3. package/dist/rest/REST.js +1 -1
  4. package/dist/structures/Channel.d.ts +1 -1
  5. package/dist/structures/Channel.js +11 -4
  6. package/dist/structures/Guild.d.ts +1 -1
  7. package/dist/structures/Guild.js +7 -3
  8. package/dist/structures/Message.d.ts +2 -0
  9. package/dist/structures/Message.js +13 -33
  10. package/package.json +4 -14
  11. package/dist/cjs/Client.d.ts +0 -157
  12. package/dist/cjs/Client.js +0 -640
  13. package/dist/cjs/builders/ActionRowBuilder.d.ts +0 -53
  14. package/dist/cjs/builders/ActionRowBuilder.js +0 -68
  15. package/dist/cjs/builders/ButtonBuilder.d.ts +0 -77
  16. package/dist/cjs/builders/ButtonBuilder.js +0 -96
  17. package/dist/cjs/builders/EmbedBuilder.d.ts +0 -157
  18. package/dist/cjs/builders/EmbedBuilder.js +0 -208
  19. package/dist/cjs/builders/ModalBuilder.d.ts +0 -122
  20. package/dist/cjs/builders/ModalBuilder.js +0 -162
  21. package/dist/cjs/builders/SelectMenuBuilder.d.ts +0 -123
  22. package/dist/cjs/builders/SelectMenuBuilder.js +0 -165
  23. package/dist/cjs/builders/SlashCommandBuilder.d.ts +0 -197
  24. package/dist/cjs/builders/SlashCommandBuilder.js +0 -324
  25. package/dist/cjs/builders/index.d.ts +0 -9
  26. package/dist/cjs/builders/index.js +0 -26
  27. package/dist/cjs/enums.d.ts +0 -191
  28. package/dist/cjs/enums.js +0 -211
  29. package/dist/cjs/index.d.ts +0 -25
  30. package/dist/cjs/index.js +0 -130
  31. package/dist/cjs/managers/BaseManager.d.ts +0 -69
  32. package/dist/cjs/managers/BaseManager.js +0 -106
  33. package/dist/cjs/managers/ChannelManager.d.ts +0 -95
  34. package/dist/cjs/managers/ChannelManager.js +0 -205
  35. package/dist/cjs/managers/GuildMemberManager.d.ts +0 -74
  36. package/dist/cjs/managers/GuildMemberManager.js +0 -157
  37. package/dist/cjs/managers/RoleManager.d.ts +0 -84
  38. package/dist/cjs/managers/RoleManager.js +0 -207
  39. package/dist/cjs/managers/index.d.ts +0 -7
  40. package/dist/cjs/managers/index.js +0 -24
  41. package/dist/cjs/rest/REST.d.ts +0 -527
  42. package/dist/cjs/rest/REST.js +0 -904
  43. package/dist/cjs/rest/index.d.ts +0 -1
  44. package/dist/cjs/rest/index.js +0 -18
  45. package/dist/cjs/sharding/ShardingManager.d.ts +0 -179
  46. package/dist/cjs/sharding/ShardingManager.js +0 -375
  47. package/dist/cjs/sharding/index.d.ts +0 -4
  48. package/dist/cjs/sharding/index.js +0 -21
  49. package/dist/cjs/structures/Channel.d.ts +0 -122
  50. package/dist/cjs/structures/Channel.js +0 -240
  51. package/dist/cjs/structures/Collection.d.ts +0 -53
  52. package/dist/cjs/structures/Collection.js +0 -115
  53. package/dist/cjs/structures/Guild.d.ts +0 -59
  54. package/dist/cjs/structures/Guild.js +0 -94
  55. package/dist/cjs/structures/GuildMember.d.ts +0 -174
  56. package/dist/cjs/structures/GuildMember.js +0 -311
  57. package/dist/cjs/structures/Interaction.d.ts +0 -245
  58. package/dist/cjs/structures/Interaction.js +0 -450
  59. package/dist/cjs/structures/Message.d.ts +0 -98
  60. package/dist/cjs/structures/Message.js +0 -195
  61. package/dist/cjs/structures/User.d.ts +0 -37
  62. package/dist/cjs/structures/User.js +0 -65
  63. package/dist/cjs/structures/index.d.ts +0 -7
  64. package/dist/cjs/structures/index.js +0 -25
  65. package/dist/cjs/structures.d.ts +0 -1
  66. package/dist/cjs/structures.js +0 -19
  67. package/dist/cjs/types.d.ts +0 -255
  68. package/dist/cjs/types.js +0 -3
  69. package/dist/cjs/utils/BitField.d.ts +0 -66
  70. package/dist/cjs/utils/BitField.js +0 -138
  71. package/dist/cjs/utils/Collection.d.ts +0 -116
  72. package/dist/cjs/utils/Collection.js +0 -265
  73. package/dist/cjs/utils/Collector.d.ts +0 -152
  74. package/dist/cjs/utils/Collector.js +0 -314
  75. package/dist/cjs/utils/DataResolver.d.ts +0 -61
  76. package/dist/cjs/utils/DataResolver.js +0 -146
  77. package/dist/cjs/utils/Formatters.d.ts +0 -145
  78. package/dist/cjs/utils/Formatters.js +0 -213
  79. package/dist/cjs/utils/IntentsBitField.d.ts +0 -85
  80. package/dist/cjs/utils/IntentsBitField.js +0 -99
  81. package/dist/cjs/utils/Partials.d.ts +0 -104
  82. package/dist/cjs/utils/Partials.js +0 -148
  83. package/dist/cjs/utils/PermissionsBitField.d.ts +0 -118
  84. package/dist/cjs/utils/PermissionsBitField.js +0 -145
  85. package/dist/cjs/utils/SnowflakeUtil.d.ts +0 -63
  86. package/dist/cjs/utils/SnowflakeUtil.js +0 -93
  87. package/dist/cjs/utils/Sweepers.d.ts +0 -119
  88. package/dist/cjs/utils/Sweepers.js +0 -249
  89. package/dist/cjs/utils/index.d.ts +0 -13
  90. package/dist/cjs/utils/index.js +0 -30
  91. package/dist/esm/Client.js +0 -634
  92. package/dist/esm/builders/ActionRowBuilder.js +0 -64
  93. package/dist/esm/builders/ButtonBuilder.js +0 -92
  94. package/dist/esm/builders/EmbedBuilder.js +0 -204
  95. package/dist/esm/builders/ModalBuilder.js +0 -157
  96. package/dist/esm/builders/SelectMenuBuilder.js +0 -161
  97. package/dist/esm/builders/SlashCommandBuilder.js +0 -311
  98. package/dist/esm/builders/index.js +0 -10
  99. package/dist/esm/enums.js +0 -208
  100. package/dist/esm/index.js +0 -34
  101. package/dist/esm/managers/BaseManager.js +0 -100
  102. package/dist/esm/managers/ChannelManager.js +0 -200
  103. package/dist/esm/managers/GuildMemberManager.js +0 -153
  104. package/dist/esm/managers/RoleManager.js +0 -203
  105. package/dist/esm/managers/index.js +0 -8
  106. package/dist/esm/rest/REST.js +0 -900
  107. package/dist/esm/rest/index.js +0 -2
  108. package/dist/esm/sharding/ShardingManager.js +0 -366
  109. package/dist/esm/sharding/index.js +0 -5
  110. package/dist/esm/structures/Channel.js +0 -232
  111. package/dist/esm/structures/Collection.js +0 -111
  112. package/dist/esm/structures/Guild.js +0 -90
  113. package/dist/esm/structures/GuildMember.js +0 -306
  114. package/dist/esm/structures/Interaction.js +0 -438
  115. package/dist/esm/structures/Message.js +0 -191
  116. package/dist/esm/structures/User.js +0 -61
  117. package/dist/esm/structures/index.js +0 -9
  118. package/dist/esm/structures.js +0 -3
  119. package/dist/esm/types.js +0 -2
  120. package/dist/esm/utils/BitField.js +0 -134
  121. package/dist/esm/utils/Collection.js +0 -261
  122. package/dist/esm/utils/Collector.js +0 -305
  123. package/dist/esm/utils/DataResolver.js +0 -142
  124. package/dist/esm/utils/Formatters.js +0 -191
  125. package/dist/esm/utils/IntentsBitField.js +0 -93
  126. package/dist/esm/utils/Partials.js +0 -137
  127. package/dist/esm/utils/PermissionsBitField.js +0 -141
  128. package/dist/esm/utils/SnowflakeUtil.js +0 -89
  129. package/dist/esm/utils/Sweepers.js +0 -245
  130. package/dist/esm/utils/index.js +0 -14
@@ -1,94 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Guild = void 0;
4
- const Collection_1 = require("./Collection");
5
- const GuildMember_1 = require("./GuildMember");
6
- /**
7
- * Represents a guild
8
- */
9
- class Guild {
10
- /** Reference to the client */
11
- client;
12
- /** Guild ID */
13
- id;
14
- /** Guild name */
15
- name;
16
- /** Guild icon URL */
17
- icon;
18
- /** Owner ID */
19
- ownerId;
20
- /** Whether the guild is unavailable */
21
- unavailable;
22
- /** Cached members */
23
- members;
24
- /** Cached channels */
25
- channels;
26
- constructor(client, data) {
27
- this.client = client;
28
- this.id = data.id;
29
- this.name = data.name;
30
- this.icon = data.icon;
31
- this.ownerId = data.owner_id;
32
- this.unavailable = data.unavailable ?? false;
33
- this.members = new Collection_1.Collection();
34
- this.channels = new Collection_1.Collection();
35
- }
36
- /**
37
- * Get the guild icon URL
38
- */
39
- iconURL(options) {
40
- if (!this.icon)
41
- return null;
42
- return this.icon;
43
- }
44
- /**
45
- * Get the voice adapter creator for @jubbio/voice
46
- */
47
- get voiceAdapterCreator() {
48
- return this.client.voice.adapters.get(this.id);
49
- }
50
- /**
51
- * Fetch a member by ID
52
- */
53
- async fetchMember(userId) {
54
- // Check cache first
55
- const cached = this.members.get(userId);
56
- if (cached)
57
- return cached;
58
- // Fetch from API
59
- const data = await this.client.rest.getMember(this.id, userId);
60
- if (!data)
61
- throw new Error(`Member ${userId} not found in guild ${this.id}`);
62
- const member = this._addMember(data);
63
- return member;
64
- }
65
- /**
66
- * Convert to string
67
- */
68
- toString() {
69
- return this.name;
70
- }
71
- /**
72
- * Update guild data
73
- */
74
- _patch(data) {
75
- if (data.name !== undefined)
76
- this.name = data.name;
77
- if (data.icon !== undefined)
78
- this.icon = data.icon;
79
- if (data.owner_id !== undefined)
80
- this.ownerId = data.owner_id;
81
- if (data.unavailable !== undefined)
82
- this.unavailable = data.unavailable;
83
- }
84
- /**
85
- * Add a member to cache
86
- */
87
- _addMember(data) {
88
- const member = new GuildMember_1.GuildMember(this.client, this, data);
89
- this.members.set(member.id, member);
90
- return member;
91
- }
92
- }
93
- exports.Guild = Guild;
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RydWN0dXJlcy9HdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBMEM7QUFDMUMsK0NBQTRDO0FBRzVDOztHQUVHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCLDhCQUE4QjtJQUNkLE1BQU0sQ0FBUztJQUUvQixlQUFlO0lBQ0MsRUFBRSxDQUFTO0lBRTNCLGlCQUFpQjtJQUNWLElBQUksQ0FBUztJQUVwQixxQkFBcUI7SUFDZCxJQUFJLENBQVU7SUFFckIsZUFBZTtJQUNSLE9BQU8sQ0FBUztJQUV2Qix1Q0FBdUM7SUFDaEMsV0FBVyxDQUFVO0lBRTVCLHFCQUFxQjtJQUNkLE9BQU8sQ0FBa0M7SUFFaEQsc0JBQXNCO0lBQ2YsUUFBUSxDQUFpQztJQUVoRCxZQUFZLE1BQWMsRUFBRSxJQUFjO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx1QkFBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHVCQUFVLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsT0FBMkI7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQzlCLG9CQUFvQjtRQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUUxQixpQkFBaUI7UUFDakIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxNQUFNLHVCQUF1QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLElBQXVCO1FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxJQUFvQjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUEzRkQsc0JBMkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBJR3VpbGQsIEFQSUNoYW5uZWwsIEFQSUd1aWxkTWVtYmVyIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi9Db2xsZWN0aW9uJztcclxuaW1wb3J0IHsgR3VpbGRNZW1iZXIgfSBmcm9tICcuL0d1aWxkTWVtYmVyJztcclxuaW1wb3J0IHR5cGUgeyBDbGllbnQgfSBmcm9tICcuLi9DbGllbnQnO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBndWlsZFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEd1aWxkIHtcclxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBjbGllbnQgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XHJcbiAgXHJcbiAgLyoqIEd1aWxkIElEICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XHJcbiAgXHJcbiAgLyoqIEd1aWxkIG5hbWUgKi9cclxuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKiBHdWlsZCBpY29uIFVSTCAqL1xyXG4gIHB1YmxpYyBpY29uPzogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKiBPd25lciBJRCAqL1xyXG4gIHB1YmxpYyBvd25lcklkOiBzdHJpbmc7XHJcbiAgXHJcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGlzIHVuYXZhaWxhYmxlICovXHJcbiAgcHVibGljIHVuYXZhaWxhYmxlOiBib29sZWFuO1xyXG4gIFxyXG4gIC8qKiBDYWNoZWQgbWVtYmVycyAqL1xyXG4gIHB1YmxpYyBtZW1iZXJzOiBDb2xsZWN0aW9uPHN0cmluZywgR3VpbGRNZW1iZXI+O1xyXG4gIFxyXG4gIC8qKiBDYWNoZWQgY2hhbm5lbHMgKi9cclxuICBwdWJsaWMgY2hhbm5lbHM6IENvbGxlY3Rpb248c3RyaW5nLCBBUElDaGFubmVsPjtcclxuXHJcbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQsIGRhdGE6IEFQSUd1aWxkKSB7XHJcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcclxuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xyXG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xyXG4gICAgdGhpcy5pY29uID0gZGF0YS5pY29uO1xyXG4gICAgdGhpcy5vd25lcklkID0gZGF0YS5vd25lcl9pZDtcclxuICAgIHRoaXMudW5hdmFpbGFibGUgPSBkYXRhLnVuYXZhaWxhYmxlID8/IGZhbHNlO1xyXG4gICAgdGhpcy5tZW1iZXJzID0gbmV3IENvbGxlY3Rpb24oKTtcclxuICAgIHRoaXMuY2hhbm5lbHMgPSBuZXcgQ29sbGVjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBndWlsZCBpY29uIFVSTFxyXG4gICAqL1xyXG4gIGljb25VUkwob3B0aW9ucz86IHsgc2l6ZT86IG51bWJlciB9KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuaWNvbikgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSB2b2ljZSBhZGFwdGVyIGNyZWF0b3IgZm9yIEBqdWJiaW8vdm9pY2VcclxuICAgKi9cclxuICBnZXQgdm9pY2VBZGFwdGVyQ3JlYXRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLmNsaWVudC52b2ljZS5hZGFwdGVycy5nZXQodGhpcy5pZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaCBhIG1lbWJlciBieSBJRFxyXG4gICAqL1xyXG4gIGFzeW5jIGZldGNoTWVtYmVyKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxHdWlsZE1lbWJlcj4ge1xyXG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcclxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubWVtYmVycy5nZXQodXNlcklkKTtcclxuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XHJcbiAgICBcclxuICAgIC8vIEZldGNoIGZyb20gQVBJXHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQucmVzdC5nZXRNZW1iZXIodGhpcy5pZCwgdXNlcklkKTtcclxuICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKGBNZW1iZXIgJHt1c2VySWR9IG5vdCBmb3VuZCBpbiBndWlsZCAke3RoaXMuaWR9YCk7XHJcbiAgICBjb25zdCBtZW1iZXIgPSB0aGlzLl9hZGRNZW1iZXIoZGF0YSk7XHJcbiAgICByZXR1cm4gbWVtYmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCB0byBzdHJpbmdcclxuICAgKi9cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBndWlsZCBkYXRhXHJcbiAgICovXHJcbiAgX3BhdGNoKGRhdGE6IFBhcnRpYWw8QVBJR3VpbGQ+KTogdm9pZCB7XHJcbiAgICBpZiAoZGF0YS5uYW1lICE9PSB1bmRlZmluZWQpIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcclxuICAgIGlmIChkYXRhLmljb24gIT09IHVuZGVmaW5lZCkgdGhpcy5pY29uID0gZGF0YS5pY29uO1xyXG4gICAgaWYgKGRhdGEub3duZXJfaWQgIT09IHVuZGVmaW5lZCkgdGhpcy5vd25lcklkID0gZGF0YS5vd25lcl9pZDtcclxuICAgIGlmIChkYXRhLnVuYXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHRoaXMudW5hdmFpbGFibGUgPSBkYXRhLnVuYXZhaWxhYmxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbWVtYmVyIHRvIGNhY2hlXHJcbiAgICovXHJcbiAgX2FkZE1lbWJlcihkYXRhOiBBUElHdWlsZE1lbWJlcik6IEd1aWxkTWVtYmVyIHtcclxuICAgIGNvbnN0IG1lbWJlciA9IG5ldyBHdWlsZE1lbWJlcih0aGlzLmNsaWVudCwgdGhpcywgZGF0YSk7XHJcbiAgICB0aGlzLm1lbWJlcnMuc2V0KG1lbWJlci5pZCwgbWVtYmVyKTtcclxuICAgIHJldHVybiBtZW1iZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,174 +0,0 @@
1
- import { APIGuildMember } from '../types';
2
- import { User } from './User';
3
- import { Guild } from './Guild';
4
- import type { Client } from '../Client';
5
- /**
6
- * Permission flags - permission bits
7
- * Must match community-service/internal/guild/models/permissions.go (truth of source)
8
- */
9
- export declare const PermissionFlags: {
10
- readonly CreateInstantInvite: bigint;
11
- readonly KickMembers: bigint;
12
- readonly BanMembers: bigint;
13
- readonly Administrator: bigint;
14
- readonly ManageChannels: bigint;
15
- readonly ManageGuild: bigint;
16
- readonly AddReactions: bigint;
17
- readonly ViewAuditLog: bigint;
18
- readonly ViewGuildInsights: bigint;
19
- readonly Stream: bigint;
20
- readonly ViewChannel: bigint;
21
- readonly SendMessages: bigint;
22
- readonly SendTTSMessages: bigint;
23
- readonly ManageMessages: bigint;
24
- readonly EmbedLinks: bigint;
25
- readonly AttachFiles: bigint;
26
- readonly ReadMessageHistory: bigint;
27
- readonly UseExternalEmojis: bigint;
28
- readonly UseSlashCommands: bigint;
29
- readonly MentionEveryone: bigint;
30
- readonly Connect: bigint;
31
- readonly Speak: bigint;
32
- readonly MuteMembers: bigint;
33
- readonly DeafenMembers: bigint;
34
- readonly MoveMembers: bigint;
35
- readonly UseVAD: bigint;
36
- readonly ChangeCodec: bigint;
37
- readonly AudioQualityAdmin: bigint;
38
- readonly VideoCall: bigint;
39
- readonly ShareScreen: bigint;
40
- readonly ShareCamera: bigint;
41
- readonly ControlQuality: bigint;
42
- readonly RequestToSpeak: bigint;
43
- readonly ManageEvents: bigint;
44
- readonly AddMembers: bigint;
45
- readonly RemoveMembers: bigint;
46
- readonly ChangeGroupIcon: bigint;
47
- readonly ChangeDMSettings: bigint;
48
- readonly ManageGroup: bigint;
49
- readonly UseActivities: bigint;
50
- readonly ModerateMembers: bigint;
51
- readonly ManageRoles: bigint;
52
- readonly ManageEmojis: bigint;
53
- readonly PrioritySpeaker: bigint;
54
- };
55
- /**
56
- * Permissions helper class
57
- */
58
- export declare class Permissions {
59
- private bitfield;
60
- private isOwner;
61
- constructor(bits?: string | bigint | number, isOwner?: boolean);
62
- /**
63
- * Check if has a permission
64
- */
65
- has(permission: string | bigint, checkAdmin?: boolean): boolean;
66
- /**
67
- * Check if has any of the given permissions
68
- */
69
- any(permissions: (string | bigint)[], checkAdmin?: boolean): boolean;
70
- /**
71
- * Return array of permission names that are missing
72
- */
73
- missing(permissions: (string | bigint)[], checkAdmin?: boolean): string[];
74
- /**
75
- * Add permissions to this bitfield. Chainable.
76
- */
77
- add(...permissions: (string | bigint)[]): this;
78
- /**
79
- * Remove permissions from this bitfield. Chainable.
80
- */
81
- remove(...permissions: (string | bigint)[]): this;
82
- /**
83
- * Check equality with another Permissions or bigint
84
- */
85
- equals(other: Permissions | bigint | string | number): boolean;
86
- /**
87
- * Create a new Permissions with the same bits
88
- */
89
- clone(): Permissions;
90
- /**
91
- * Freeze this instance (immutable)
92
- */
93
- freeze(): Readonly<this>;
94
- /**
95
- * Get the raw bitfield
96
- */
97
- get bits(): bigint;
98
- /**
99
- * Convert to array of permission names
100
- */
101
- toArray(): string[];
102
- /**
103
- * Serialize to JSON-compatible string
104
- */
105
- toJSON(): string;
106
- /**
107
- * String representation
108
- */
109
- toString(): string;
110
- /**
111
- * Resolve a permission name or bigint to bigint
112
- */
113
- static resolve(permission: string | bigint): bigint;
114
- }
115
- /**
116
- * Represents a guild member
117
- */
118
- export declare class GuildMember {
119
- /** Reference to the client */
120
- readonly client: Client;
121
- /** Reference to the guild */
122
- readonly guild: Guild;
123
- /** The user this member represents */
124
- readonly user: User;
125
- /** Member's nickname */
126
- nickname?: string;
127
- /** Member's guild avatar */
128
- avatar?: string;
129
- /** Role IDs */
130
- roles: string[];
131
- /** Join timestamp */
132
- readonly joinedTimestamp: number;
133
- /** Voice state */
134
- voice: {
135
- channelId?: string;
136
- selfMute: boolean;
137
- selfDeaf: boolean;
138
- };
139
- /** Member permissions */
140
- permissions: Permissions;
141
- constructor(client: Client, guild: Guild, data: APIGuildMember);
142
- /**
143
- * Get the member's ID
144
- */
145
- get id(): string;
146
- /**
147
- * Get the display name (nickname or username)
148
- */
149
- get displayName(): string;
150
- /**
151
- * Get the join date
152
- */
153
- get joinedAt(): Date;
154
- /**
155
- * Check if member is in a voice channel
156
- */
157
- get inVoiceChannel(): boolean;
158
- /**
159
- * Get the member's avatar URL
160
- */
161
- avatarURL(): string | null;
162
- /**
163
- * Get the display avatar URL (member avatar or user avatar)
164
- */
165
- displayAvatarURL(): string;
166
- /**
167
- * Convert to string (mention format)
168
- */
169
- toString(): string;
170
- /**
171
- * Update member data
172
- */
173
- _patch(data: Partial<APIGuildMember>): void;
174
- }
@@ -1,311 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GuildMember = exports.Permissions = exports.PermissionFlags = void 0;
4
- const User_1 = require("./User");
5
- /**
6
- * Permission flags - permission bits
7
- * Must match community-service/internal/guild/models/permissions.go (truth of source)
8
- */
9
- exports.PermissionFlags = {
10
- // General (0-9)
11
- CreateInstantInvite: 1n << 0n,
12
- KickMembers: 1n << 1n,
13
- BanMembers: 1n << 2n,
14
- Administrator: 1n << 3n,
15
- ManageChannels: 1n << 4n,
16
- ManageGuild: 1n << 5n,
17
- AddReactions: 1n << 6n,
18
- ViewAuditLog: 1n << 7n,
19
- ViewGuildInsights: 1n << 8n,
20
- Stream: 1n << 9n,
21
- ViewChannel: 1n << 10n,
22
- // Messages (11-19)
23
- SendMessages: 1n << 11n,
24
- SendTTSMessages: 1n << 12n,
25
- ManageMessages: 1n << 13n,
26
- EmbedLinks: 1n << 14n,
27
- AttachFiles: 1n << 15n,
28
- ReadMessageHistory: 1n << 16n,
29
- UseExternalEmojis: 1n << 17n,
30
- UseSlashCommands: 1n << 18n,
31
- MentionEveryone: 1n << 19n,
32
- // Voice (20-27)
33
- Connect: 1n << 20n,
34
- Speak: 1n << 21n,
35
- MuteMembers: 1n << 22n,
36
- DeafenMembers: 1n << 23n,
37
- MoveMembers: 1n << 24n,
38
- UseVAD: 1n << 25n,
39
- ChangeCodec: 1n << 26n,
40
- AudioQualityAdmin: 1n << 27n,
41
- // Video and Screen Sharing (28-37)
42
- VideoCall: 1n << 28n,
43
- ShareScreen: 1n << 29n,
44
- ShareCamera: 1n << 30n,
45
- ControlQuality: 1n << 31n,
46
- RequestToSpeak: 1n << 32n,
47
- ManageEvents: 1n << 33n,
48
- AddMembers: 1n << 34n,
49
- RemoveMembers: 1n << 35n,
50
- ChangeGroupIcon: 1n << 36n,
51
- ChangeDMSettings: 1n << 37n,
52
- // Advanced (38-43)
53
- ManageGroup: 1n << 38n,
54
- UseActivities: 1n << 39n,
55
- ModerateMembers: 1n << 40n,
56
- ManageRoles: 1n << 41n,
57
- ManageEmojis: 1n << 42n,
58
- PrioritySpeaker: 1n << 43n,
59
- };
60
- /**
61
- * Permissions helper class
62
- */
63
- class Permissions {
64
- bitfield;
65
- isOwner;
66
- constructor(bits = 0n, isOwner = false) {
67
- if (typeof bits === 'string') {
68
- this.bitfield = BigInt(bits);
69
- }
70
- else {
71
- this.bitfield = BigInt(bits);
72
- }
73
- this.isOwner = isOwner;
74
- }
75
- /**
76
- * Check if has a permission
77
- */
78
- has(permission, checkAdmin = true) {
79
- // Owner has all permissions
80
- if (this.isOwner)
81
- return true;
82
- // Administrator has all permissions
83
- if (checkAdmin && (this.bitfield & exports.PermissionFlags.Administrator) === exports.PermissionFlags.Administrator) {
84
- return true;
85
- }
86
- const bit = Permissions.resolve(permission);
87
- return (this.bitfield & bit) === bit;
88
- }
89
- /**
90
- * Check if has any of the given permissions
91
- */
92
- any(permissions, checkAdmin = true) {
93
- // Owner has all permissions
94
- if (this.isOwner)
95
- return true;
96
- // Administrator has all permissions
97
- if (checkAdmin && (this.bitfield & exports.PermissionFlags.Administrator) === exports.PermissionFlags.Administrator) {
98
- return true;
99
- }
100
- for (const permission of permissions) {
101
- const bit = Permissions.resolve(permission);
102
- if ((this.bitfield & bit) === bit)
103
- return true;
104
- }
105
- return false;
106
- }
107
- /**
108
- * Return array of permission names that are missing
109
- */
110
- missing(permissions, checkAdmin = true) {
111
- const missing = [];
112
- for (const permission of permissions) {
113
- if (!this.has(permission, checkAdmin)) {
114
- if (typeof permission === 'string') {
115
- missing.push(permission);
116
- }
117
- else {
118
- // Reverse lookup name from bigint
119
- const name = Object.entries(exports.PermissionFlags).find(([, v]) => v === permission)?.[0];
120
- missing.push(name || permission.toString());
121
- }
122
- }
123
- }
124
- return missing;
125
- }
126
- /**
127
- * Add permissions to this bitfield. Chainable.
128
- */
129
- add(...permissions) {
130
- for (const permission of permissions) {
131
- this.bitfield |= Permissions.resolve(permission);
132
- }
133
- return this;
134
- }
135
- /**
136
- * Remove permissions from this bitfield. Chainable.
137
- */
138
- remove(...permissions) {
139
- for (const permission of permissions) {
140
- this.bitfield &= ~Permissions.resolve(permission);
141
- }
142
- return this;
143
- }
144
- /**
145
- * Check equality with another Permissions or bigint
146
- */
147
- equals(other) {
148
- if (other instanceof Permissions) {
149
- return this.bitfield === other.bitfield;
150
- }
151
- return this.bitfield === BigInt(other);
152
- }
153
- /**
154
- * Create a new Permissions with the same bits
155
- */
156
- clone() {
157
- return new Permissions(this.bitfield, this.isOwner);
158
- }
159
- /**
160
- * Freeze this instance (immutable)
161
- */
162
- freeze() {
163
- return Object.freeze(this);
164
- }
165
- /**
166
- * Get the raw bitfield
167
- */
168
- get bits() {
169
- return this.bitfield;
170
- }
171
- /**
172
- * Convert to array of permission names
173
- */
174
- toArray() {
175
- const result = [];
176
- for (const [name, bit] of Object.entries(exports.PermissionFlags)) {
177
- if ((this.bitfield & bit) === bit) {
178
- result.push(name);
179
- }
180
- }
181
- return result;
182
- }
183
- /**
184
- * Serialize to JSON-compatible string
185
- */
186
- toJSON() {
187
- return this.bitfield.toString();
188
- }
189
- /**
190
- * String representation
191
- */
192
- toString() {
193
- return this.bitfield.toString();
194
- }
195
- /**
196
- * Resolve a permission name or bigint to bigint
197
- */
198
- static resolve(permission) {
199
- if (typeof permission === 'bigint')
200
- return permission;
201
- const bit = exports.PermissionFlags[permission];
202
- if (bit === undefined) {
203
- throw new Error(`Unknown permission: ${permission}`);
204
- }
205
- return bit;
206
- }
207
- }
208
- exports.Permissions = Permissions;
209
- /**
210
- * Represents a guild member
211
- */
212
- class GuildMember {
213
- /** Reference to the client */
214
- client;
215
- /** Reference to the guild */
216
- guild;
217
- /** The user this member represents */
218
- user;
219
- /** Member's nickname */
220
- nickname;
221
- /** Member's guild avatar */
222
- avatar;
223
- /** Role IDs */
224
- roles;
225
- /** Join timestamp */
226
- joinedTimestamp;
227
- /** Voice state */
228
- voice;
229
- /** Member permissions */
230
- permissions;
231
- constructor(client, guild, data) {
232
- this.client = client;
233
- this.guild = guild;
234
- this.user = data.user ? new User_1.User(data.user) : new User_1.User({ id: '0', username: 'Unknown' });
235
- this.nickname = data.nick;
236
- this.avatar = data.avatar;
237
- this.roles = data.roles;
238
- this.joinedTimestamp = new Date(data.joined_at).getTime();
239
- this.voice = {
240
- channelId: data.voice?.channel_id,
241
- selfMute: data.voice?.self_mute ?? false,
242
- selfDeaf: data.voice?.self_deaf ?? false
243
- };
244
- // Check if user is guild owner
245
- const isOwner = guild.ownerId === this.user.id;
246
- // Parse permissions from interaction data
247
- this.permissions = new Permissions(data.permissions || '0', isOwner);
248
- }
249
- /**
250
- * Get the member's ID
251
- */
252
- get id() {
253
- return this.user.id;
254
- }
255
- /**
256
- * Get the display name (nickname or username)
257
- */
258
- get displayName() {
259
- return this.nickname || this.user.displayName || this.user.username;
260
- }
261
- /**
262
- * Get the join date
263
- */
264
- get joinedAt() {
265
- return new Date(this.joinedTimestamp);
266
- }
267
- /**
268
- * Check if member is in a voice channel
269
- */
270
- get inVoiceChannel() {
271
- return !!this.voice.channelId;
272
- }
273
- /**
274
- * Get the member's avatar URL
275
- */
276
- avatarURL() {
277
- return this.avatar || null;
278
- }
279
- /**
280
- * Get the display avatar URL (member avatar or user avatar)
281
- */
282
- displayAvatarURL() {
283
- return this.avatar || this.user.displayAvatarURL();
284
- }
285
- /**
286
- * Convert to string (mention format)
287
- */
288
- toString() {
289
- return `<@${this.id}>`;
290
- }
291
- /**
292
- * Update member data
293
- */
294
- _patch(data) {
295
- if (data.nick !== undefined)
296
- this.nickname = data.nick;
297
- if (data.avatar !== undefined)
298
- this.avatar = data.avatar;
299
- if (data.roles !== undefined)
300
- this.roles = data.roles;
301
- if (data.voice !== undefined) {
302
- this.voice = {
303
- channelId: data.voice.channel_id,
304
- selfMute: data.voice.self_mute ?? false,
305
- selfDeaf: data.voice.self_deaf ?? false
306
- };
307
- }
308
- }
309
- }
310
- exports.GuildMember = GuildMember;
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpbGRNZW1iZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RydWN0dXJlcy9HdWlsZE1lbWJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpQ0FBOEI7QUFJOUI7OztHQUdHO0FBQ1UsUUFBQSxlQUFlLEdBQUc7SUFDN0IsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFO0lBQzdCLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRTtJQUNyQixVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7SUFDcEIsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFO0lBQ3ZCLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRTtJQUN4QixXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUU7SUFDckIsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFO0lBQ3RCLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRTtJQUN0QixpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRTtJQUMzQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUU7SUFDaEIsV0FBVyxFQUFFLEVBQUUsSUFBSSxHQUFHO0lBRXRCLG1CQUFtQjtJQUNuQixZQUFZLEVBQUUsRUFBRSxJQUFJLEdBQUc7SUFDdkIsZUFBZSxFQUFFLEVBQUUsSUFBSSxHQUFHO0lBQzFCLGNBQWMsRUFBRSxFQUFFLElBQUksR0FBRztJQUN6QixVQUFVLEVBQUUsRUFBRSxJQUFJLEdBQUc7SUFDckIsV0FBVyxFQUFFLEVBQUUsSUFBSSxHQUFHO0lBQ3RCLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxHQUFHO0lBQzdCLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxHQUFHO0lBQzVCLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxHQUFHO0lBQzNCLGVBQWUsRUFBRSxFQUFFLElBQUksR0FBRztJQUUxQixnQkFBZ0I7SUFDaEIsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxFQUFFLElB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QUFJLEtBQUs7YUFDeEMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFySEQsa0NBcUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBJR3VpbGRNZW1iZXIgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL1VzZXInO1xyXG5pbXBvcnQgeyBHdWlsZCB9IGZyb20gJy4vR3VpbGQnO1xyXG5pbXBvcnQgdHlwZSB7IENsaWVudCB9IGZyb20gJy4uL0NsaWVudCc7XHJcblxyXG4vKipcclxuICogUGVybWlzc2lvbiBmbGFncyAtIHBlcm1pc3Npb24gYml0c1xyXG4gKiBNdXN0IG1hdGNoIGNvbW11bml0eS1zZXJ2aWNlL2ludGVybmFsL2d1aWxkL21vZGVscy9wZXJtaXNzaW9ucy5nbyAodHJ1dGggb2Ygc291cmNlKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFBlcm1pc3Npb25GbGFncyA9IHtcclxuICAvLyBHZW5lcmFsICgwLTkpXHJcbiAgQ3JlYXRlSW5zdGFudEludml0ZTogMW4gPDwgMG4sXHJcbiAgS2lja01lbWJlcnM6IDFuIDw8IDFuLFxyXG4gIEJhbk1lbWJlcnM6IDFuIDw8IDJuLFxyXG4gIEFkbWluaXN0cmF0b3I6IDFuIDw8IDNuLFxyXG4gIE1hbmFnZUNoYW5uZWxzOiAxbiA8PCA0bixcclxuICBNYW5hZ2VHdWlsZDogMW4gPDwgNW4sXHJcbiAgQWRkUmVhY3Rpb25zOiAxbiA8PCA2bixcclxuICBWaWV3QXVkaXRMb2c6IDFuIDw8IDduLFxyXG4gIFZpZXdHdWlsZEluc2lnaHRzOiAxbiA8PCA4bixcclxuICBTdHJlYW06IDFuIDw8IDluLFxyXG4gIFZpZXdDaGFubmVsOiAxbiA8PCAxMG4sXHJcblxyXG4gIC8vIE1lc3NhZ2VzICgxMS0xOSlcclxuICBTZW5kTWVzc2FnZXM6IDFuIDw8IDExbixcclxuICBTZW5kVFRTTWVzc2FnZXM6IDFuIDw8IDEybixcclxuICBNYW5hZ2VNZXNzYWdlczogMW4gPDwgMTNuLFxyXG4gIEVtYmVkTGlua3M6IDFuIDw8IDE0bixcclxuICBBdHRhY2hGaWxlczogMW4gPDwgMTVuLFxyXG4gIFJlYWRNZXNzYWdlSGlzdG9yeTogMW4gPDwgMTZuLFxyXG4gIFVzZUV4dGVybmFsRW1vamlzOiAxbiA8PCAxN24sXHJcbiAgVXNlU2xhc2hDb21tYW5kczogMW4gPDwgMThuLFxyXG4gIE1lbnRpb25FdmVyeW9uZTogMW4gPDwgMTluLFxyXG5cclxuICAvLyBWb2ljZSAoMjAtMjcpXHJcbiAgQ29ubmVjdDogMW4gPDwgMjBuLFxyXG4gIFNwZWFrOiAxbiA8PCAyMW4sXHJcbiAgTXV0ZU1lbWJlcnM6IDFuIDw8IDIybixcclxuICBEZWFmZW5NZW1iZXJzOiAxbiA8PCAyM24sXHJcbiAgTW92ZU1lbWJlcnM6IDFuIDw8IDI0bixcclxuICBVc2VWQUQ6IDFuIDw8IDI1bixcclxuICBDaGFuZ2VDb2RlYzogMW4gPDwgMjZuLFxyXG4gIEF1ZGlvUXVhbGl0eUFkbWluOiAxbiA8PCAyN24sXHJcblxyXG4gIC8vIFZpZGVvIGFuZCBTY3JlZW4gU2hhcmluZyAoMjgtMzcpXHJcbiAgVmlkZW9DYWxsOiAxbiA8PCAyOG4sXHJcbiAgU2hhcmVTY3JlZW46IDFuIDw8IDI5bixcclxuICBTaGFyZUNhbWVyYTogMW4gPDwgMzBuLFxyXG4gIENvbnRyb2xRdWFsaXR5OiAxbiA8PCAzMW4sXHJcbiAgUmVxdWVzdFRvU3BlYWs6IDFuIDw8IDMybixcclxuICBNYW5hZ2VFdmVudHM6IDFuIDw8IDMzbixcclxuICBBZGRNZW1iZXJzOiAxbiA8PCAzNG4sXHJcbiAgUmVtb3ZlTWVtYmVyczogMW4gPDwgMzVuLFxyXG4gIENoYW5nZUdyb3VwSWNvbjogMW4gPDwgMzZuLFxyXG4gIENoYW5nZURNU2V0dGluZ3M6IDFuIDw8IDM3bixcclxuXHJcbiAgLy8gQWR2YW5jZWQgKDM4LTQzKVxyXG4gIE1hbmFnZUdyb3VwOiAxbiA8PCAzOG4sXHJcbiAgVXNlQWN0aXZpdGllczogMW4gPDwgMzluLFxyXG4gIE1vZGVyYXRlTWVtYmVyczogMW4gPDwgNDBuLFxyXG4gIE1hbmFnZVJvbGVzOiAxbiA8PCA0MW4sXHJcbiAgTWFuYWdlRW1vamlzOiAxbiA8PCA0Mm4sXHJcbiAgUHJpb3JpdHlTcGVha2VyOiAxbiA8PCA0M24sXHJcbn0gYXMgY29uc3Q7XHJcblxyXG4vKipcclxuICogUGVybWlzc2lvbnMgaGVscGVyIGNsYXNzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnMge1xyXG4gIHByaXZhdGUgYml0ZmllbGQ6IGJpZ2ludDtcclxuICBwcml2YXRlIGlzT3duZXI6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKGJpdHM6IHN0cmluZyB8IGJpZ2ludCB8IG51bWJlciA9IDBuLCBpc093bmVyID0gZmFsc2UpIHtcclxuICAgIGlmICh0eXBlb2YgYml0cyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5iaXRmaWVsZCA9IEJpZ0ludChiaXRzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYml0ZmllbGQgPSBCaWdJbnQoYml0cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzT3duZXIgPSBpc093bmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgaGFzIGEgcGVybWlzc2lvblxyXG4gICAqL1xyXG4gIGhhcyhwZXJtaXNzaW9uOiBzdHJpbmcgfCBiaWdpbnQsIGNoZWNrQWRtaW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAvLyBPd25lciBoYXMgYWxsIHBlcm1pc3Npb25zXHJcbiAgICBpZiAodGhpcy5pc093bmVyKSByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgLy8gQWRtaW5pc3RyYXRvciBoYXMgYWxsIHBlcm1pc3Npb25zXHJcbiAgICBpZiAoY2hlY2tBZG1pbiAmJiAodGhpcy5iaXRmaWVsZCAmIFBlcm1pc3Npb25GbGFncy5BZG1pbmlzdHJhdG9yKSA9PT0gUGVybWlzc2lvbkZsYWdzLkFkbWluaXN0cmF0b3IpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IGJpdCA9IFBlcm1pc3Npb25zLnJlc29sdmUocGVybWlzc2lvbik7XHJcbiAgICByZXR1cm4gKHRoaXMuYml0ZmllbGQgJiBiaXQpID09PSBiaXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBoYXMgYW55IG9mIHRoZSBnaXZlbiBwZXJtaXNzaW9uc1xyXG4gICAqL1xyXG4gIGFueShwZXJtaXNzaW9uczogKHN0cmluZyB8IGJpZ2ludClbXSwgY2hlY2tBZG1pbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgIC8vIE93bmVyIGhhcyBhbGwgcGVybWlzc2lvbnNcclxuICAgIGlmICh0aGlzLmlzT3duZXIpIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAvLyBBZG1pbmlzdHJhdG9yIGhhcyBhbGwgcGVybWlzc2lvbnNcclxuICAgIGlmIChjaGVja0FkbWluICYmICh0aGlzLmJpdGZpZWxkICYgUGVybWlzc2lvbkZsYWdzLkFkbWluaXN0cmF0b3IpID09PSBQZXJtaXNzaW9uRmxhZ3MuQWRtaW5pc3RyYXRvcikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHBlcm1pc3Npb25zKSB7XHJcbiAgICAgIGNvbnN0IGJpdCA9IFBlcm1pc3Npb25zLnJlc29sdmUocGVybWlzc2lvbik7XHJcbiAgICAgIGlmICgodGhpcy5iaXRmaWVsZCAmIGJpdCkgPT09IGJpdCkgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhcnJheSBvZiBwZXJtaXNzaW9uIG5hbWVzIHRoYXQgYXJlIG1pc3NpbmdcclxuICAgKi9cclxuICBtaXNzaW5nKHBlcm1pc3Npb25zOiAoc3RyaW5nIHwgYmlnaW50KVtdLCBjaGVja0FkbWluID0gdHJ1ZSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IG1pc3Npbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHBlcm1pc3Npb24gb2YgcGVybWlzc2lvbnMpIHtcclxuICAgICAgaWYgKCF0aGlzLmhhcyhwZXJtaXNzaW9uLCBjaGVja0FkbWluKSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIG1pc3NpbmcucHVzaChwZXJtaXNzaW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gUmV2ZXJzZSBsb29rdXAgbmFtZSBmcm9tIGJpZ2ludFxyXG4gICAgICAgICAgY29uc3QgbmFtZSA9IE9iamVjdC5lbnRyaWVzKFBlcm1pc3Npb25GbGFncykuZmluZCgoWywgdl0pID0+IHYgPT09IHBlcm1pc3Npb24pPy5bMF07XHJcbiAgICAgICAgICBtaXNzaW5nLnB1c2gobmFtZSB8fCBwZXJtaXNzaW9uLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1pc3Npbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgcGVybWlzc2lvbnMgdG8gdGhpcyBiaXRmaWVsZC4gQ2hhaW5hYmxlLlxyXG4gICAqL1xyXG4gIGFkZCguLi5wZXJtaXNzaW9uczogKHN0cmluZyB8IGJpZ2ludClbXSk6IHRoaXMge1xyXG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHBlcm1pc3Npb25zKSB7XHJcbiAgICAgIHRoaXMuYml0ZmllbGQgfD0gUGVybWlzc2lvbnMucmVzb2x2ZShwZXJtaXNzaW9uKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIHBlcm1pc3Npb25zIGZyb20gdGhpcyBiaXRmaWVsZC4gQ2hhaW5hYmxlLlxyXG4gICAqL1xyXG4gIHJlbW92ZSguLi5wZXJtaXNzaW9uczogKHN0cmluZyB8IGJpZ2ludClbXSk6IHRoaXMge1xyXG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHBlcm1pc3Npb25zKSB7XHJcbiAgICAgIHRoaXMuYml0ZmllbGQgJj0gflBlcm1pc3Npb25zLnJlc29sdmUocGVybWlzc2lvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGVxdWFsaXR5IHdpdGggYW5vdGhlciBQZXJtaXNzaW9ucyBvciBiaWdpbnRcclxuICAgKi9cclxuICBlcXVhbHMob3RoZXI6IFBlcm1pc3Npb25zIHwgYmlnaW50IHwgc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBQZXJtaXNzaW9ucykge1xyXG4gICAgICByZXR1cm4gdGhpcy5iaXRmaWVsZCA9PT0gb3RoZXIuYml0ZmllbGQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5iaXRmaWVsZCA9PT0gQmlnSW50KG90aGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBQZXJtaXNzaW9ucyB3aXRoIHRoZSBzYW1lIGJpdHNcclxuICAgKi9cclxuICBjbG9uZSgpOiBQZXJtaXNzaW9ucyB7XHJcbiAgICByZXR1cm4gbmV3IFBlcm1pc3Npb25zKHRoaXMuYml0ZmllbGQsIHRoaXMuaXNPd25lcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGcmVlemUgdGhpcyBpbnN0YW5jZSAoaW1tdXRhYmxlKVxyXG4gICAqL1xyXG4gIGZyZWV6ZSgpOiBSZWFkb25seTx0aGlzPiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgcmF3IGJpdGZpZWxkXHJcbiAgICovXHJcbiAgZ2V0IGJpdHMoKTogYmlnaW50IHtcclxuICAgIHJldHVybiB0aGlzLmJpdGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCB0byBhcnJheSBvZiBwZXJtaXNzaW9uIG5hbWVzXHJcbiAgICovXHJcbiAgdG9BcnJheSgpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBiaXRdIG9mIE9iamVjdC5lbnRyaWVzKFBlcm1pc3Npb25GbGFncykpIHtcclxuICAgICAgaWYgKCh0aGlzLmJpdGZpZWxkICYgYml0KSA9PT0gYml0KSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2gobmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXJpYWxpemUgdG8gSlNPTi1jb21wYXRpYmxlIHN0cmluZ1xyXG4gICAqL1xyXG4gIHRvSlNPTigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuYml0ZmllbGQudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0cmluZyByZXByZXNlbnRhdGlvblxyXG4gICAqL1xyXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5iaXRmaWVsZC50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZSBhIHBlcm1pc3Npb24gbmFtZSBvciBiaWdpbnQgdG8gYmlnaW50XHJcbiAgICovXHJcbiAgc3RhdGljIHJlc29sdmUocGVybWlzc2lvbjogc3RyaW5nIHwgYmlnaW50KTogYmlnaW50IHtcclxuICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ2JpZ2ludCcpIHJldHVybiBwZXJtaXNzaW9uO1xyXG4gICAgY29uc3QgYml0ID0gUGVybWlzc2lvbkZsYWdzW3Blcm1pc3Npb24gYXMga2V5b2YgdHlwZW9mIFBlcm1pc3Npb25GbGFnc107XHJcbiAgICBpZiAoYml0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBlcm1pc3Npb246ICR7cGVybWlzc2lvbn1gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBiaXQ7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIGd1aWxkIG1lbWJlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEd1aWxkTWVtYmVyIHtcclxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBjbGllbnQgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XHJcbiAgXHJcbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgZ3VpbGQgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgZ3VpbGQ6IEd1aWxkO1xyXG4gIFxyXG4gIC8qKiBUaGUgdXNlciB0aGlzIG1lbWJlciByZXByZXNlbnRzICovXHJcbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IFVzZXI7XHJcbiAgXHJcbiAgLyoqIE1lbWJlcidzIG5pY2tuYW1lICovXHJcbiAgcHVibGljIG5pY2tuYW1lPzogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKiBNZW1iZXIncyBndWlsZCBhdmF0YXIgKi9cclxuICBwdWJsaWMgYXZhdGFyPzogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKiBSb2xlIElEcyAqL1xyXG4gIHB1YmxpYyByb2xlczogc3RyaW5nW107XHJcbiAgXHJcbiAgLyoqIEpvaW4gdGltZXN0YW1wICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGpvaW5lZFRpbWVzdGFtcDogbnVtYmVyO1xyXG4gIFxyXG4gIC8qKiBWb2ljZSBzdGF0ZSAqL1xyXG4gIHB1YmxpYyB2b2ljZToge1xyXG4gICAgY2hhbm5lbElkPzogc3RyaW5nO1xyXG4gICAgc2VsZk11dGU6IGJvb2xlYW47XHJcbiAgICBzZWxmRGVhZjogYm9vbGVhbjtcclxuICB9O1xyXG4gIFxyXG4gIC8qKiBNZW1iZXIgcGVybWlzc2lvbnMgKi9cclxuICBwdWJsaWMgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zO1xyXG5cclxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCwgZ3VpbGQ6IEd1aWxkLCBkYXRhOiBBUElHdWlsZE1lbWJlcikge1xyXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XHJcbiAgICB0aGlzLmd1aWxkID0gZ3VpbGQ7XHJcbiAgICB0aGlzLnVzZXIgPSBkYXRhLnVzZXIgPyBuZXcgVXNlcihkYXRhLnVzZXIpIDogbmV3IFVzZXIoeyBpZDogJzAnLCB1c2VybmFtZTogJ1Vua25vd24nIH0pO1xyXG4gICAgdGhpcy5uaWNrbmFtZSA9IGRhdGEubmljaztcclxuICAgIHRoaXMuYXZhdGFyID0gZGF0YS5hdmF0YXI7XHJcbiAgICB0aGlzLnJvbGVzID0gZGF0YS5yb2xlcztcclxuICAgIHRoaXMuam9pbmVkVGltZXN0YW1wID0gbmV3IERhdGUoZGF0YS5qb2luZWRfYXQpLmdldFRpbWUoKTtcclxuICAgIHRoaXMudm9pY2UgPSB7XHJcbiAgICAgIGNoYW5uZWxJZDogZGF0YS52b2ljZT8uY2hhbm5lbF9pZCxcclxuICAgICAgc2VsZk11dGU6IGRhdGEudm9pY2U/LnNlbGZfbXV0ZSA/PyBmYWxzZSxcclxuICAgICAgc2VsZkRlYWY6IGRhdGEudm9pY2U/LnNlbGZfZGVhZiA/PyBmYWxzZVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgdXNlciBpcyBndWlsZCBvd25lclxyXG4gICAgY29uc3QgaXNPd25lciA9IGd1aWxkLm93bmVySWQgPT09IHRoaXMudXNlci5pZDtcclxuICAgIFxyXG4gICAgLy8gUGFyc2UgcGVybWlzc2lvbnMgZnJvbSBpbnRlcmFjdGlvbiBkYXRhXHJcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gbmV3IFBlcm1pc3Npb25zKGRhdGEucGVybWlzc2lvbnMgfHwgJzAnLCBpc093bmVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbWVtYmVyJ3MgSURcclxuICAgKi9cclxuICBnZXQgaWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXIuaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSAobmlja25hbWUgb3IgdXNlcm5hbWUpXHJcbiAgICovXHJcbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uaWNrbmFtZSB8fCB0aGlzLnVzZXIuZGlzcGxheU5hbWUgfHwgdGhpcy51c2VyLnVzZXJuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBqb2luIGRhdGVcclxuICAgKi9cclxuICBnZXQgam9pbmVkQXQoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5qb2luZWRUaW1lc3RhbXApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgbWVtYmVyIGlzIGluIGEgdm9pY2UgY2hhbm5lbFxyXG4gICAqL1xyXG4gIGdldCBpblZvaWNlQ2hhbm5lbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMudm9pY2UuY2hhbm5lbElkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBtZW1iZXIncyBhdmF0YXIgVVJMXHJcbiAgICovXHJcbiAgYXZhdGFyVVJMKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYXZhdGFyIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGRpc3BsYXkgYXZhdGFyIFVSTCAobWVtYmVyIGF2YXRhciBvciB1c2VyIGF2YXRhcilcclxuICAgKi9cclxuICBkaXNwbGF5QXZhdGFyVVJMKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5hdmF0YXIgfHwgdGhpcy51c2VyLmRpc3BsYXlBdmF0YXJVUkwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgdG8gc3RyaW5nIChtZW50aW9uIGZvcm1hdClcclxuICAgKi9cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGA8QCR7dGhpcy5pZH0+YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBtZW1iZXIgZGF0YVxyXG4gICAqL1xyXG4gIF9wYXRjaChkYXRhOiBQYXJ0aWFsPEFQSUd1aWxkTWVtYmVyPik6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEubmljayAhPT0gdW5kZWZpbmVkKSB0aGlzLm5pY2tuYW1lID0gZGF0YS5uaWNrO1xyXG4gICAgaWYgKGRhdGEuYXZhdGFyICE9PSB1bmRlZmluZWQpIHRoaXMuYXZhdGFyID0gZGF0YS5hdmF0YXI7XHJcbiAgICBpZiAoZGF0YS5yb2xlcyAhPT0gdW5kZWZpbmVkKSB0aGlzLnJvbGVzID0gZGF0YS5yb2xlcztcclxuICAgIGlmIChkYXRhLnZvaWNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy52b2ljZSA9IHtcclxuICAgICAgICBjaGFubmVsSWQ6IGRhdGEudm9pY2UuY2hhbm5lbF9pZCxcclxuICAgICAgICBzZWxmTXV0ZTogZGF0YS52b2ljZS5zZWxmX211dGUgPz8gZmFsc2UsXHJcbiAgICAgICAgc2VsZkRlYWY6IGRhdGEudm9pY2Uuc2VsZl9kZWFmID8/IGZhbHNlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==