djs-selfbot-v13 3.1.6 → 3.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 (148) hide show
  1. package/README.md +31 -16
  2. package/package.json +15 -8
  3. package/src/client/BaseClient.js +3 -2
  4. package/src/client/Client.js +539 -187
  5. package/src/client/actions/Action.js +13 -18
  6. package/src/client/actions/ActionsManager.js +1 -7
  7. package/src/client/actions/AutoModerationActionExecution.js +0 -1
  8. package/src/client/actions/AutoModerationRuleCreate.js +0 -1
  9. package/src/client/actions/AutoModerationRuleDelete.js +0 -1
  10. package/src/client/actions/AutoModerationRuleUpdate.js +0 -1
  11. package/src/client/actions/InteractionCreate.js +115 -0
  12. package/src/client/actions/MessageCreate.js +4 -0
  13. package/src/client/actions/PresenceUpdate.js +16 -17
  14. package/src/client/websocket/WebSocketManager.js +31 -11
  15. package/src/client/websocket/WebSocketShard.js +38 -39
  16. package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
  17. package/src/client/websocket/handlers/CALL_CREATE.js +3 -3
  18. package/src/client/websocket/handlers/CALL_DELETE.js +2 -2
  19. package/src/client/websocket/handlers/CALL_UPDATE.js +2 -2
  20. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +13 -16
  21. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +11 -11
  22. package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
  23. package/src/client/websocket/handlers/GUILD_CREATE.js +0 -7
  24. package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
  25. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.js +0 -0
  26. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.js +0 -0
  27. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.js +0 -0
  28. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.js +0 -0
  29. package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
  30. package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
  31. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +0 -1
  32. package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
  33. package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
  34. package/src/client/websocket/handlers/READY.js +137 -47
  35. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +5 -7
  36. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +4 -6
  37. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +9 -32
  38. package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.js +0 -0
  39. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +8 -2
  40. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +1 -1
  41. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -1
  42. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +0 -0
  43. package/src/client/websocket/handlers/index.js +20 -15
  44. package/src/errors/Messages.js +69 -24
  45. package/src/index.js +43 -12
  46. package/src/managers/ApplicationCommandManager.js +12 -9
  47. package/src/managers/ApplicationCommandPermissionsManager.js +11 -3
  48. package/src/managers/ChannelManager.js +4 -2
  49. package/src/managers/ClientUserSettingManager.js +279 -161
  50. package/src/managers/DeveloperPortalManager.js +104 -0
  51. package/src/managers/GuildApplicationCommandManager.js +28 -0
  52. package/src/managers/GuildBanManager.js +1 -1
  53. package/src/managers/GuildChannelManager.js +0 -2
  54. package/src/managers/GuildFolderManager.js +24 -0
  55. package/src/managers/GuildForumThreadManager.js +28 -22
  56. package/src/managers/GuildMemberManager.js +216 -40
  57. package/src/managers/GuildSettingManager.js +15 -22
  58. package/src/managers/MessageManager.js +44 -42
  59. package/src/managers/PermissionOverwriteManager.js +1 -1
  60. package/src/managers/ReactionUserManager.js +5 -5
  61. package/src/managers/RelationshipManager.js +74 -81
  62. package/src/managers/SessionManager.js +57 -0
  63. package/src/managers/ThreadManager.js +45 -12
  64. package/src/managers/ThreadMemberManager.js +1 -1
  65. package/src/managers/UserManager.js +10 -6
  66. package/src/rest/APIRequest.js +20 -42
  67. package/src/rest/CaptchaSolver.js +132 -0
  68. package/src/rest/DiscordAPIError.js +16 -17
  69. package/src/rest/RESTManager.js +21 -1
  70. package/src/rest/RequestHandler.js +21 -35
  71. package/src/structures/ApplicationCommand.js +456 -19
  72. package/src/structures/ApplicationRoleConnectionMetadata.js +0 -3
  73. package/src/structures/AutoModerationRule.js +5 -5
  74. package/src/structures/AutocompleteInteraction.js +0 -1
  75. package/src/structures/BaseGuildTextChannel.js +12 -10
  76. package/src/structures/BaseGuildVoiceChannel.js +18 -16
  77. package/src/structures/{CallState.js → Call.js} +12 -17
  78. package/src/structures/CategoryChannel.js +0 -2
  79. package/src/structures/Channel.js +3 -2
  80. package/src/structures/ClientApplication.js +204 -0
  81. package/src/structures/ClientPresence.js +8 -12
  82. package/src/structures/ClientUser.js +336 -117
  83. package/src/structures/ContextMenuInteraction.js +1 -1
  84. package/src/structures/DMChannel.js +92 -29
  85. package/src/structures/DeveloperPortalApplication.js +520 -0
  86. package/src/structures/ForumChannel.js +10 -0
  87. package/src/structures/Guild.js +271 -135
  88. package/src/structures/GuildAuditLogs.js +5 -0
  89. package/src/structures/GuildChannel.js +2 -16
  90. package/src/structures/GuildFolder.js +75 -0
  91. package/src/structures/GuildMember.js +145 -27
  92. package/src/structures/Interaction.js +62 -1
  93. package/src/structures/InteractionResponse.js +114 -0
  94. package/src/structures/Invite.js +52 -35
  95. package/src/structures/Message.js +202 -222
  96. package/src/structures/MessageAttachment.js +0 -11
  97. package/src/structures/MessageButton.js +67 -1
  98. package/src/structures/MessageEmbed.js +1 -1
  99. package/src/structures/MessageMentions.js +2 -3
  100. package/src/structures/MessagePayload.js +46 -4
  101. package/src/structures/MessageReaction.js +1 -1
  102. package/src/structures/MessageSelectMenu.js +252 -1
  103. package/src/structures/Modal.js +180 -75
  104. package/src/structures/PartialGroupDMChannel.js +433 -0
  105. package/src/structures/Presence.js +2 -2
  106. package/src/structures/RichPresence.js +34 -14
  107. package/src/structures/Role.js +2 -18
  108. package/src/structures/SelectMenuInteraction.js +151 -2
  109. package/src/structures/Session.js +81 -0
  110. package/src/structures/Team.js +49 -0
  111. package/src/structures/TextInputComponent.js +70 -0
  112. package/src/structures/ThreadChannel.js +19 -0
  113. package/src/structures/User.js +345 -117
  114. package/src/structures/UserContextMenuInteraction.js +2 -2
  115. package/src/structures/VoiceState.js +39 -74
  116. package/src/structures/WebEmbed.js +52 -38
  117. package/src/structures/Webhook.js +11 -17
  118. package/src/structures/interfaces/Application.js +23 -146
  119. package/src/structures/interfaces/TextBasedChannel.js +256 -411
  120. package/src/util/ApplicationFlags.js +1 -1
  121. package/src/util/Constants.js +284 -106
  122. package/src/util/Formatters.js +2 -16
  123. package/src/util/LimitedCollection.js +1 -1
  124. package/src/util/Options.js +68 -48
  125. package/src/util/Permissions.js +0 -5
  126. package/src/util/PurchasedFlags.js +0 -2
  127. package/src/util/RemoteAuth.js +356 -221
  128. package/src/util/Sweepers.js +1 -1
  129. package/src/util/Util.js +36 -76
  130. package/src/util/Voice.js +1456 -0
  131. package/src/util/arRPC/index.js +229 -0
  132. package/src/util/arRPC/process/detectable.json +1 -0
  133. package/src/util/arRPC/process/index.js +102 -0
  134. package/src/util/arRPC/process/native/index.js +5 -0
  135. package/src/util/arRPC/process/native/linux.js +37 -0
  136. package/src/util/arRPC/process/native/win32.js +25 -0
  137. package/src/util/arRPC/transports/ipc.js +281 -0
  138. package/src/util/arRPC/transports/websocket.js +128 -0
  139. package/typings/enums.d.ts +73 -18
  140. package/typings/index.d.ts +1249 -897
  141. package/typings/rawDataTypes.d.ts +9 -68
  142. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +0 -78
  143. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +0 -12
  144. package/src/managers/UserNoteManager.js +0 -53
  145. package/src/structures/GroupDMChannel.js +0 -387
  146. package/src/util/AttachmentFlags.js +0 -38
  147. package/src/util/InviteFlags.js +0 -29
  148. package/src/util/RoleFlags.js +0 -37
@@ -1,16 +1,16 @@
1
1
  'use strict';
2
2
  const { Events } = require('../../../util/Constants');
3
3
  module.exports = (client, packet) => {
4
+ /**
5
+ * Emitted whenever a recipient is removed from a group DM.
6
+ * @event Client#channelRecipientRemove
7
+ * @param {PartialGroupDMChannel} channel Group DM channel
8
+ * @param {User} user User
9
+ */
4
10
  const channel = client.channels.cache.get(packet.d.channel_id);
5
- if (channel) {
6
- if (!channel._recipients) channel._recipients = [];
7
- channel._recipients = channel._recipients.filter(u => u.id !== packet.d.user.id);
8
- /**
9
- * Emitted whenever a recipient is removed from a group DM.
10
- * @event Client#channelRecipientRemove
11
- * @param {GroupDMChannel} channel Group DM channel
12
- * @param {User} user User
13
- */
14
- client.emit(Events.CHANNEL_RECIPIENT_REMOVE, channel, client.users._add(packet.d.user));
15
- }
11
+ if (!channel) return;
12
+ if (!channel._recipients) channel._recipients = [];
13
+ channel._recipients = channel._recipients.filter(r => r !== packet.d.user.id);
14
+ const user = client.users._add(packet.d.user);
15
+ client.emit(Events.CHANNEL_RECIPIENT_REMOVE, channel, user);
16
16
  };
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+ const { Events } = require('../../../util/Constants');
3
+
4
+ module.exports = (client, { d: data }) => {
5
+ for (const command of data.application_commands) {
6
+ const user = client.users.cache.get(command.application_id);
7
+ if (!user || !user.bot) continue;
8
+ user.application?.commands?._add(command, true);
9
+ }
10
+ client.emit(Events.GUILD_APPLICATION_COMMANDS_UPDATE, data);
11
+ };
@@ -28,13 +28,6 @@ module.exports = (client, { d: data }, shard) => {
28
28
  // A newly available guild
29
29
  guild._patch(data);
30
30
  run(client, guild);
31
-
32
- /**
33
- * Emitted whenever a guild becomes available.
34
- * @event Client#guildAvailable
35
- * @param {Guild} guild The guild that became available
36
- */
37
- client.emit(Events.GUILD_AVAILABLE, guild);
38
31
  }
39
32
  } else {
40
33
  // A new guild
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const { Events } = require('../../../util/Constants');
5
+
6
+ module.exports = (client, { d: data }) => {
7
+ const guild = client.guilds.cache.get(data.guild_id);
8
+ if (!guild) return;
9
+ const members = new Collection();
10
+ // Get Member from side Discord Channel (online counting if large server)
11
+ for (const object of data.ops) {
12
+ switch (object.op) {
13
+ case 'SYNC': {
14
+ for (const member_ of object.items) {
15
+ const member = member_.member;
16
+ if (!member) continue;
17
+ members.set(member.user.id, guild.members._add(member));
18
+ if (member.presence) {
19
+ guild.presences._add(Object.assign(member.presence, { guild }));
20
+ }
21
+ }
22
+ break;
23
+ }
24
+ case 'INVALIDATE': {
25
+ client.emit(
26
+ Events.DEBUG,
27
+ `Invalidate [${object.range[0]}, ${object.range[1]}], Fetching GuildId: ${data.guild_id}`,
28
+ );
29
+ break;
30
+ }
31
+ case 'UPDATE':
32
+ case 'INSERT': {
33
+ const member = object.item.member;
34
+ if (!member) continue;
35
+ members.set(member.user.id, guild.members._add(member));
36
+ if (member.presence) {
37
+ guild.presences._add(Object.assign(member.presence, { guild }));
38
+ }
39
+ break;
40
+ }
41
+ case 'DELETE': {
42
+ break;
43
+ }
44
+ }
45
+ }
46
+ /**
47
+ * Emitted whenever a guild member list (sidebar) is updated.
48
+ * @event Client#guildMemberListUpdate
49
+ * @param {Collection<Snowflake, GuildMember>} members Members that were updated
50
+ * @param {Guild} guild Guild
51
+ * @param {string} type Type of update (INVALIDATE | UPDATE | INSERT | DELETE | SYNC)
52
+ * @param {data} raw Raw data
53
+ */
54
+ client.emit(Events.GUILD_MEMBER_LIST_UPDATE, members, guild, data.ops[0].op, data);
55
+ };
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+ const { Events } = require('../../../util/Constants');
3
+
4
+ /**
5
+ * @typedef {Object} InteractionResponseBody
6
+ * @property {Snowflake} id Interaction ID
7
+ * @property {Snowflake} nonce nonce in POST /interactions
8
+ */
9
+
10
+ module.exports = (client, { d: data }) => {
11
+ if (client.user.bot) {
12
+ client.actions.InteractionCreate.handle(data);
13
+ } else {
14
+ client.emit(Events.INTERACTION_CREATE, data);
15
+ }
16
+ };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+ const { Events } = require('../../../util/Constants');
3
+
4
+ module.exports = (client, { d: data }) => {
5
+ /**
6
+ * Emitted whenever client user send interaction and error
7
+ * @event Client#interactionFailure
8
+ * @param {InteractionResponseBody} data data
9
+ */
10
+ client.emit(Events.INTERACTION_FAILURE, data);
11
+ client.emit('interactionResponse', {
12
+ status: false,
13
+ metadata: client._interactionCache.get(data.nonce),
14
+ error: 'No response from bot',
15
+ });
16
+ // Delete cache
17
+ client._interactionCache.delete(data.nonce);
18
+ };
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
  const Modal = require('../../../structures/Modal');
3
3
  const { Events } = require('../../../util/Constants');
4
-
5
4
  module.exports = (client, { d: data }) => {
6
5
  /**
7
6
  * Emitted whenever client user receive interaction.showModal()
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+ const { Events } = require('../../../util/Constants');
3
+
4
+ module.exports = (client, { d: data }) => {
5
+ /**
6
+ * Emitted whenever client user send interaction and success
7
+ * @event Client#interactionSuccess
8
+ * @param {InteractionResponseBody} data data
9
+ */
10
+ client.emit(Events.INTERACTION_SUCCESS, data);
11
+ // Get channel data
12
+ const cache = client._interactionCache.get(data.nonce);
13
+ if (!cache) return;
14
+ const channel = cache.guildId
15
+ ? client.guilds.cache.get(cache.guildId)?.channels.cache.get(cache.channelId)
16
+ : client.channels.cache.get(cache.channelId);
17
+ // Set data
18
+ const interaction = {
19
+ ...cache,
20
+ ...data,
21
+ };
22
+ const data_ = channel.interactions._add(interaction);
23
+ client.emit('interactionResponse', {
24
+ status: true,
25
+ metadata: data_,
26
+ error: 'Success',
27
+ });
28
+ // Delete cache
29
+ // client._interactionCache.delete(data.nonce);
30
+ };
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ const { Events } = require('../../../util/Constants');
4
+
5
+ module.exports = (client, { d: data }) => {
6
+ const channel = client.channels.cache.get(data.channel_id);
7
+ /**
8
+ * Emitted whenever message is acknowledged (mark read / unread)
9
+ * @event Client#messageAck
10
+ * @param {TextChannel} channel Channel
11
+ * @param {Snowflake} message_id Message ID
12
+ * @param {boolean} isRead Whether the message is read
13
+ * @param {Object} raw Raw data
14
+ */
15
+ client.emit(Events.MESSAGE_ACK, channel, data.message_id, !data.manual, data);
16
+ };
@@ -1,14 +1,105 @@
1
1
  'use strict';
2
2
 
3
- const USER_REQUIRED_ACTION = require('./USER_REQUIRED_ACTION_UPDATE');
4
- const { Opcodes } = require('../../../util/Constants');
5
-
6
3
  let ClientUser;
4
+ const { VoiceConnection } = require('@discordjs/voice');
5
+ const chalk = require('chalk');
6
+ const { Events, Opcodes } = require('../../../util/Constants');
7
+ const { VoiceConnection: VoiceConnection_patch } = require('../../../util/Voice');
8
+ let firstReady = false;
9
+
10
+ function patchVoice(client) {
11
+ try {
12
+ /* eslint-disable */
13
+ VoiceConnection.prototype.configureNetworking = VoiceConnection_patch.prototype.configureNetworking;
14
+ client.emit(
15
+ 'debug',
16
+ `${chalk.greenBright('[OK]')} Patched ${chalk.cyanBright(
17
+ 'VoiceConnection.prototype.configureNetworking',
18
+ )} [${chalk.bgMagentaBright('@discordjs/voice')} - ${chalk.redBright('v0.16.0')}]`,
19
+ );
20
+ /* eslint-enable */
21
+ } catch (e) {
22
+ client.emit(
23
+ 'debug',
24
+ `${chalk.redBright('[Fail]')} Patched ${chalk.cyanBright(
25
+ 'VoiceConnection.prototype.configureNetworking',
26
+ )} [${chalk.bgMagentaBright('@discordjs/voice')} - ${chalk.redBright('v0.16.0')}]\n${e.stack}`,
27
+ );
28
+ client.emit(
29
+ Events.ERROR,
30
+ `${chalk.redBright('[Fail]')} Patched ${chalk.cyanBright(
31
+ 'VoiceConnection.prototype.configureNetworking',
32
+ )} [${chalk.bgMagentaBright('@discordjs/voice')} - ${chalk.redBright('v0.16.0')}]`,
33
+ );
34
+ client.emit(
35
+ Events.ERROR,
36
+ `${chalk.redBright('[Error]')} Please install ${chalk.bgMagentaBright(
37
+ '@discordjs/voice',
38
+ )} version ${chalk.redBright('v0.16.0')}`,
39
+ );
40
+ }
41
+ }
42
+
43
+ module.exports = async (client, { d: data }, shard) => {
44
+ if (!firstReady) {
45
+ if (client.options.checkUpdate) {
46
+ client.once('update', (currentVersion, newVersion) => {
47
+ if (!newVersion) {
48
+ console.log(`
49
+ ${chalk.redBright('[WARNING]')} Cannot check new djs-selfbot-v13 version.
50
+ Current: ${chalk.blueBright(currentVersion)}
51
+
52
+ If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false
53
+
54
+ const client = new Client({
55
+ checkUpdate: false,
56
+ });
57
+
58
+ and using event update
59
+ https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`);
60
+ } else if (currentVersion !== newVersion && !currentVersion.includes('-')) {
61
+ console.log(`
62
+ ${chalk.yellowBright('[WARNING]')} New djs-selfbot-v13 version.
63
+ Current: ${chalk.redBright(currentVersion)} => Latest: ${chalk.greenBright(newVersion)}
64
+
65
+ If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false
66
+
67
+ const client = new Client({
68
+ checkUpdate: false,
69
+ });
70
+
71
+ and using event update
72
+ https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`);
73
+ } else {
74
+ console.log(
75
+ `
76
+ ${chalk.greenBright('[OK]')} djs-selfbot-v13 is up to date. Current: ${chalk.blueBright(currentVersion)}
77
+
78
+ If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false
79
+
80
+ const client = new Client({
81
+ checkUpdate: false,
82
+ });
83
+
84
+ and using event update
85
+ https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`,
86
+ );
87
+ }
88
+ });
89
+ client.checkUpdate();
90
+ }
7
91
 
8
- module.exports = (client, { d: data }, shard) => {
9
- // Check
10
- USER_REQUIRED_ACTION(client, { d: data });
92
+ if (client.options.patchVoice) {
93
+ patchVoice(client);
94
+ }
95
+
96
+ if (client.options.syncStatus) {
97
+ client.customStatusAuto(client);
98
+ }
99
+ firstReady = true;
100
+ }
11
101
 
102
+ client.session_id = data.session_id;
12
103
  if (client.user) {
13
104
  client.user._patch(data.user);
14
105
  } else {
@@ -17,8 +108,31 @@ module.exports = (client, { d: data }, shard) => {
17
108
  client.users.cache.set(client.user.id, client.user);
18
109
  }
19
110
 
111
+ client.settings._patch(data.user_settings);
112
+
113
+ client.user.connectedAccounts = data.connected_accounts ?? [];
114
+
115
+ client.relationships._setup(data.relationships);
116
+
117
+ client.user._patchNote(data.notes);
118
+
119
+ const syncTime = Date.now();
20
120
  for (const private_channel of data.private_channels) {
21
- client.channels._add(private_channel);
121
+ const channel = client.channels._add(private_channel);
122
+ // Rate limit warning
123
+ if (client.options.DMSync) {
124
+ client.ws.broadcast({
125
+ op: Opcodes.DM_UPDATE,
126
+ d: {
127
+ channel_id: channel.id,
128
+ },
129
+ });
130
+ }
131
+ }
132
+ if (client.options.DMSync) {
133
+ console.warn(
134
+ `Gateway Rate Limit Warning: Sending ${data.private_channels.length} Requests / ${Date.now() - syncTime || 1} ms`,
135
+ );
22
136
  }
23
137
 
24
138
  for (const guild of data.guilds) {
@@ -26,55 +140,31 @@ module.exports = (client, { d: data }, shard) => {
26
140
  client.guilds._add(guild);
27
141
  }
28
142
 
29
- const largeGuilds = data.guilds.filter(g => g.large);
30
- client.emit('debug', `[READY] Received ${data.guilds.length} guilds, ${largeGuilds.length} large guilds`);
31
-
32
- // User Notes
33
- client.notes._reload(data.notes);
34
-
35
- // Relationship
36
- client.relationships._setup(data.relationships);
37
-
38
- // ClientSetting
39
- client.settings._patch(data.user_settings);
40
-
41
- // GuildSetting
42
143
  for (const gSetting of Array.isArray(data.user_guild_settings) ? data.user_guild_settings : []) {
43
144
  const guild = client.guilds.cache.get(gSetting.guild_id);
44
145
  if (guild) guild.settings._patch(gSetting);
45
146
  }
46
- // Todo: data.auth_session_id_hash
47
147
 
48
- if (largeGuilds.length) {
148
+ const largeGuilds = data.guilds.filter(g => g.large);
149
+
150
+ client.emit('debug', `[READY] Received ${data.guilds.length} guilds, ${largeGuilds.length} large guilds`);
151
+
152
+ // Receive messages in large guilds
153
+ for (const guild of largeGuilds) {
154
+ await client.sleep(client.options.messageCreateEventGuildTimeout);
49
155
  client.ws.broadcast({
50
- op: Opcodes.GUILD_SUBSCRIPTIONS_BULK,
156
+ op: Opcodes.GUILD_SUBSCRIPTIONS,
51
157
  d: {
52
- subscriptions: largeGuilds.reduce((accumulator, guild) => {
53
- accumulator[guild.id] = {
54
- typing: true,
55
- threads: true,
56
- activities: true,
57
- member_updates: true,
58
- thread_member_lists: [],
59
- members: [],
60
- channels: {},
61
- };
62
- return accumulator;
63
- }, {}),
158
+ guild_id: guild.id,
159
+ typing: true,
160
+ threads: true,
161
+ activities: true,
162
+ thread_member_lists: [],
163
+ members: [],
164
+ channels: {},
64
165
  },
65
166
  });
66
167
  }
67
168
 
68
- Promise.all(
69
- data.private_channels.map(async (c, index) => {
70
- if (client.options.DMChannelVoiceStatusSync < 1) return;
71
- client.ws.broadcast({
72
- op: Opcodes.DM_UPDATE,
73
- d: {
74
- channel_id: c.id,
75
- },
76
- });
77
- await client.sleep(client.options.DMChannelVoiceStatusSync * index);
78
- }),
79
- ).then(() => shard.checkReady());
169
+ shard.checkReady();
80
170
  };
@@ -1,19 +1,17 @@
1
1
  'use strict';
2
2
 
3
- const { Events } = require('../../../util/Constants');
3
+ const { Events, RelationshipTypes } = require('../../../util/Constants');
4
4
 
5
5
  module.exports = (client, { d: data }) => {
6
6
  if (data.user) {
7
7
  client.users._add(data.user);
8
8
  }
9
9
  client.relationships.cache.set(data.id, data.type);
10
- client.relationships.friendNicknames.set(data.id, data.nickname);
11
- client.relationships.sinceCache.set(data.id, new Date(data.since || 0));
12
10
  /**
13
- * Emitted when a relationship is created, relevant to the current user.
11
+ * Emitted whenever a relationship is updated.
14
12
  * @event Client#relationshipAdd
15
- * @param {Snowflake} user Target userId
16
- * @param {boolean} shouldNotify Whether the client should notify the user of this relationship's creation
13
+ * @param {Snowflake} user The userID that was updated
14
+ * @param {RelationshipTypes} type The new relationship type
17
15
  */
18
- client.emit(Events.RELATIONSHIP_ADD, data.id, Boolean(data.should_notify));
16
+ client.emit(Events.RELATIONSHIP_ADD, data.id, RelationshipTypes[data.type]);
19
17
  };
@@ -1,17 +1,15 @@
1
1
  'use strict';
2
2
 
3
- const { Events } = require('../../../util/Constants');
3
+ const { Events, RelationshipTypes } = require('../../../util/Constants');
4
4
 
5
5
  module.exports = (client, { d: data }) => {
6
6
  client.relationships.cache.delete(data.id);
7
- client.relationships.friendNicknames.delete(data.id);
8
- client.relationships.sinceCache.delete(data.id);
7
+ client.user.friendNicknames.delete(data.id);
9
8
  /**
10
- * Emitted when a relationship is removed, relevant to the current user.
9
+ * Emitted whenever a relationship is delete.
11
10
  * @event Client#relationshipRemove
12
11
  * @param {Snowflake} user The userID that was updated
13
12
  * @param {RelationshipTypes} type The type of the old relationship
14
- * @param {string | null} nickname The nickname of the user in this relationship (1-32 characters)
15
13
  */
16
- client.emit(Events.RELATIONSHIP_REMOVE, data.id, data.type, data.nickname);
14
+ client.emit(Events.RELATIONSHIP_REMOVE, data.id, RelationshipTypes[data.type]);
17
15
  };
@@ -1,41 +1,18 @@
1
1
  'use strict';
2
2
 
3
- const { Events } = require('../../../util/Constants');
3
+ const { Events, RelationshipTypes } = require('../../../util/Constants');
4
4
 
5
5
  module.exports = (client, { d: data }) => {
6
+ client.relationships.cache.set(data.id, data.type);
6
7
  /**
7
- * @typedef {Object} RelationshipUpdateObject
8
- * @property {RelationshipTypes} type The type of relationship
9
- * @property {Date} since When the user requested a relationship
10
- * @property {string | null} nickname The nickname of the user in this relationship (1-32 characters)
11
- */
12
- /**
13
- * Emitted when a relationship is updated, relevant to the current user (e.g. friend nickname changed).
14
- * <info>This is not sent when the type of a relationship changes; see {@link Client#relationshipAdd} and {@link Client#relationshipRemove} for that.</info>
8
+ * Emitted whenever a relationship is updated.
15
9
  * @event Client#relationshipUpdate
16
10
  * @param {Snowflake} user The userID that was updated
17
- * @param {RelationshipUpdateObject} oldData Old data
18
- * @param {RelationshipUpdateObject} newData New data
11
+ * @param {RelationshipTypes} type The new relationship type
12
+ * @param {Object} data The raw data
19
13
  */
20
- const oldType = client.relationships.cache.get(data.id);
21
- const oldSince = client.relationships.sinceCache.get(data.id);
22
- const oldNickname = client.relationships.friendNicknames.get(data.id);
23
- // Update
24
- if (data.type) client.relationships.cache.set(data.id, data.type);
25
- if (data.nickname) client.relationships.friendNicknames.set(data.id, data.nickname);
26
- if (data.since) client.relationships.sinceCache.set(data.id, new Date(data.since || 0));
27
- client.emit(
28
- Events.RELATIONSHIP_UPDATE,
29
- data.id,
30
- {
31
- type: oldType,
32
- nickname: oldNickname,
33
- since: oldSince,
34
- },
35
- {
36
- type: data.type,
37
- nickname: data.nickname,
38
- since: new Date(data.since || 0),
39
- },
40
- );
14
+ if ('nickname' in data) {
15
+ client.user.friendNicknames.set(data.id, data.nickname);
16
+ }
17
+ client.emit(Events.RELATIONSHIP_UPDATE, data.id, RelationshipTypes[data.type], data);
41
18
  };
@@ -1,6 +1,12 @@
1
1
  'use strict';
2
-
2
+ const { Events } = require('../../../util/Constants');
3
3
  module.exports = (client, { d: data }) => {
4
4
  const guild = client.guilds.cache.get(data.guild_id);
5
- if (guild) guild?.settings._patch(data);
5
+ guild?.settings._patch(data);
6
+ /**
7
+ * Emitted whenever guild settings are updated
8
+ * @event Client#userGuildSettingsUpdate
9
+ * @param {Guild} guild Guild
10
+ */
11
+ return client.emit(Events.USER_GUILD_SETTINGS_UPDATE, guild);
6
12
  };
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
3
  module.exports = (client, { d: data }) => {
4
- client.notes.cache.set(data.id, data.note);
4
+ client.user.notes.set(data.id, data.note);
5
5
  };
@@ -1,5 +1,9 @@
1
1
  'use strict';
2
-
2
+ const { Events } = require('../../../util/Constants');
3
3
  module.exports = (client, { d: data }) => {
4
4
  client.settings._patch(data);
5
+ if (('status' in data || 'custom_status' in data) && client.options.syncStatus) {
6
+ client.customStatusAuto(client);
7
+ }
8
+ return client.emit(Events.USER_SETTINGS_UPDATE, data);
5
9
  };
@@ -3,6 +3,10 @@
3
3
  const handlers = Object.fromEntries([
4
4
  ['READY', require('./READY')],
5
5
  ['RESUMED', require('./RESUMED')],
6
+ ['RELATIONSHIP_ADD', require('./RELATIONSHIP_ADD')],
7
+ ['RELATIONSHIP_REMOVE', require('./RELATIONSHIP_REMOVE')],
8
+ ['RELATIONSHIP_UPDATE', require('./RELATIONSHIP_UPDATE')],
9
+ ['APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE', require('./APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE')],
6
10
  ['APPLICATION_COMMAND_CREATE', require('./APPLICATION_COMMAND_CREATE')],
7
11
  ['APPLICATION_COMMAND_DELETE', require('./APPLICATION_COMMAND_DELETE')],
8
12
  ['APPLICATION_COMMAND_UPDATE', require('./APPLICATION_COMMAND_UPDATE')],
@@ -11,6 +15,9 @@ const handlers = Object.fromEntries([
11
15
  ['AUTO_MODERATION_RULE_CREATE', require('./AUTO_MODERATION_RULE_CREATE')],
12
16
  ['AUTO_MODERATION_RULE_DELETE', require('./AUTO_MODERATION_RULE_DELETE')],
13
17
  ['AUTO_MODERATION_RULE_UPDATE', require('./AUTO_MODERATION_RULE_UPDATE')],
18
+ ['CALL_CREATE', require('./CALL_CREATE')],
19
+ ['CALL_UPDATE', require('./CALL_UPDATE')],
20
+ ['CALL_DELETE', require('./CALL_DELETE')],
14
21
  ['GUILD_CREATE', require('./GUILD_CREATE')],
15
22
  ['GUILD_DELETE', require('./GUILD_DELETE')],
16
23
  ['GUILD_UPDATE', require('./GUILD_UPDATE')],
@@ -20,6 +27,8 @@ const handlers = Object.fromEntries([
20
27
  ['GUILD_MEMBER_REMOVE', require('./GUILD_MEMBER_REMOVE')],
21
28
  ['GUILD_MEMBER_UPDATE', require('./GUILD_MEMBER_UPDATE')],
22
29
  ['GUILD_MEMBERS_CHUNK', require('./GUILD_MEMBERS_CHUNK')],
30
+ ['GUILD_MEMBER_LIST_UPDATE', require('./GUILD_MEMBER_LIST_UPDATE.js')],
31
+ ['GUILD_APPLICATION_COMMANDS_UPDATE', require('./GUILD_APPLICATION_COMMANDS_UPDATE.js')],
23
32
  ['GUILD_INTEGRATIONS_UPDATE', require('./GUILD_INTEGRATIONS_UPDATE')],
24
33
  ['GUILD_ROLE_CREATE', require('./GUILD_ROLE_CREATE')],
25
34
  ['GUILD_ROLE_DELETE', require('./GUILD_ROLE_DELETE')],
@@ -31,6 +40,9 @@ const handlers = Object.fromEntries([
31
40
  ['CHANNEL_DELETE', require('./CHANNEL_DELETE')],
32
41
  ['CHANNEL_UPDATE', require('./CHANNEL_UPDATE')],
33
42
  ['CHANNEL_PINS_UPDATE', require('./CHANNEL_PINS_UPDATE')],
43
+ ['CHANNEL_RECIPIENT_ADD', require('./CHANNEL_RECIPIENT_ADD')],
44
+ ['CHANNEL_RECIPIENT_REMOVE', require('./CHANNEL_RECIPIENT_REMOVE')],
45
+ ['MESSAGE_ACK', require('./MESSAGE_ACK')],
34
46
  ['MESSAGE_CREATE', require('./MESSAGE_CREATE')],
35
47
  ['MESSAGE_DELETE', require('./MESSAGE_DELETE')],
36
48
  ['MESSAGE_UPDATE', require('./MESSAGE_UPDATE')],
@@ -45,12 +57,20 @@ const handlers = Object.fromEntries([
45
57
  ['THREAD_LIST_SYNC', require('./THREAD_LIST_SYNC')],
46
58
  ['THREAD_MEMBER_UPDATE', require('./THREAD_MEMBER_UPDATE')],
47
59
  ['THREAD_MEMBERS_UPDATE', require('./THREAD_MEMBERS_UPDATE')],
60
+ ['USER_SETTINGS_UPDATE', require('./USER_SETTINGS_UPDATE')], // Opcode 0
61
+ ['USER_GUILD_SETTINGS_UPDATE', require('./USER_GUILD_SETTINGS_UPDATE')],
62
+ // USER_SETTINGS_PROTO_UPDATE // opcode 0
63
+ ['USER_NOTE_UPDATE', require('./USER_NOTE_UPDATE')],
48
64
  ['USER_UPDATE', require('./USER_UPDATE')],
49
65
  ['PRESENCE_UPDATE', require('./PRESENCE_UPDATE')],
50
66
  ['TYPING_START', require('./TYPING_START')],
51
67
  ['VOICE_STATE_UPDATE', require('./VOICE_STATE_UPDATE')],
52
68
  ['VOICE_SERVER_UPDATE', require('./VOICE_SERVER_UPDATE')],
53
69
  ['WEBHOOKS_UPDATE', require('./WEBHOOKS_UPDATE')],
70
+ ['INTERACTION_CREATE', require('./INTERACTION_CREATE')],
71
+ ['INTERACTION_SUCCESS', require('./INTERACTION_SUCCESS')],
72
+ ['INTERACTION_MODAL_CREATE', require('./INTERACTION_MODAL_CREATE')],
73
+ ['INTERACTION_FAILURE', require('./INTERACTION_FAILURE')],
54
74
  ['STAGE_INSTANCE_CREATE', require('./STAGE_INSTANCE_CREATE')],
55
75
  ['STAGE_INSTANCE_UPDATE', require('./STAGE_INSTANCE_UPDATE')],
56
76
  ['STAGE_INSTANCE_DELETE', require('./STAGE_INSTANCE_DELETE')],
@@ -61,21 +81,6 @@ const handlers = Object.fromEntries([
61
81
  ['GUILD_SCHEDULED_EVENT_USER_ADD', require('./GUILD_SCHEDULED_EVENT_USER_ADD')],
62
82
  ['GUILD_SCHEDULED_EVENT_USER_REMOVE', require('./GUILD_SCHEDULED_EVENT_USER_REMOVE')],
63
83
  ['GUILD_AUDIT_LOG_ENTRY_CREATE', require('./GUILD_AUDIT_LOG_ENTRY_CREATE')],
64
- // Selfbot
65
- ['RELATIONSHIP_ADD', require('./RELATIONSHIP_ADD')],
66
- ['RELATIONSHIP_REMOVE', require('./RELATIONSHIP_REMOVE')],
67
- ['RELATIONSHIP_UPDATE', require('./RELATIONSHIP_UPDATE')],
68
- ['USER_NOTE_UPDATE', require('./USER_NOTE_UPDATE')],
69
- ['CHANNEL_RECIPIENT_ADD', require('./CHANNEL_RECIPIENT_ADD')],
70
- ['CHANNEL_RECIPIENT_REMOVE', require('./CHANNEL_RECIPIENT_REMOVE')],
71
- ['INTERACTION_MODAL_CREATE', require('./INTERACTION_MODAL_CREATE')],
72
- ['USER_REQUIRED_ACTION_UPDATE', require('./USER_REQUIRED_ACTION_UPDATE')],
73
- ['CALL_CREATE', require('./CALL_CREATE')],
74
- ['CALL_UPDATE', require('./CALL_UPDATE')],
75
- ['CALL_DELETE', require('./CALL_DELETE')],
76
- ['USER_SETTINGS_UPDATE', require('./USER_SETTINGS_UPDATE')],
77
- ['USER_GUILD_SETTINGS_UPDATE', require('./USER_GUILD_SETTINGS_UPDATE')],
78
- ['VOICE_CHANNEL_STATUS_UPDATE', require('./VOICE_CHANNEL_STATUS_UPDATE')],
79
84
  ]);
80
85
 
81
86
  module.exports = handlers;