djs-selfbot-v13 3.1.7 → 3.2.2

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 (155) hide show
  1. package/README.md +18 -35
  2. package/package.json +85 -100
  3. package/src/client/BaseClient.js +3 -4
  4. package/src/client/Client.js +249 -530
  5. package/src/client/actions/Action.js +18 -13
  6. package/src/client/actions/ActionsManager.js +7 -1
  7. package/src/client/actions/AutoModerationActionExecution.js +1 -0
  8. package/src/client/actions/AutoModerationRuleCreate.js +1 -0
  9. package/src/client/actions/AutoModerationRuleDelete.js +1 -0
  10. package/src/client/actions/AutoModerationRuleUpdate.js +1 -0
  11. package/src/client/actions/GuildMemberRemove.js +0 -1
  12. package/src/client/actions/GuildMemberUpdate.js +0 -1
  13. package/src/client/actions/MessageCreate.js +0 -4
  14. package/src/client/actions/PresenceUpdate.js +17 -16
  15. package/src/client/websocket/WebSocketManager.js +11 -31
  16. package/src/client/websocket/WebSocketShard.js +39 -38
  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 +16 -13
  21. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +11 -11
  22. package/src/client/websocket/handlers/GUILD_CREATE.js +19 -13
  23. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +0 -1
  24. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +1 -0
  25. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +22 -0
  26. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +12 -0
  27. package/src/client/websocket/handlers/READY.js +90 -140
  28. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +7 -5
  29. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +7 -5
  30. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +32 -9
  31. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +2 -8
  32. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +1 -1
  33. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  34. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +1 -5
  35. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  36. package/src/client/websocket/handlers/index.js +17 -20
  37. package/src/errors/Messages.js +25 -69
  38. package/src/index.js +13 -43
  39. package/src/managers/ApplicationCommandManager.js +9 -12
  40. package/src/managers/ApplicationCommandPermissionsManager.js +3 -11
  41. package/src/managers/ChannelManager.js +2 -3
  42. package/src/managers/ClientUserSettingManager.js +162 -280
  43. package/src/managers/GuildBanManager.js +47 -1
  44. package/src/managers/GuildChannelManager.js +2 -16
  45. package/src/managers/GuildForumThreadManager.js +24 -30
  46. package/src/managers/GuildManager.js +1 -1
  47. package/src/managers/GuildMemberManager.js +50 -222
  48. package/src/managers/GuildSettingManager.js +22 -15
  49. package/src/managers/MessageManager.js +42 -44
  50. package/src/managers/PermissionOverwriteManager.js +1 -1
  51. package/src/managers/ReactionUserManager.js +5 -5
  52. package/src/managers/RelationshipManager.js +83 -76
  53. package/src/managers/ThreadManager.js +12 -45
  54. package/src/managers/ThreadMemberManager.js +1 -1
  55. package/src/managers/UserManager.js +6 -10
  56. package/src/managers/UserNoteManager.js +53 -0
  57. package/src/rest/APIRequest.js +48 -20
  58. package/src/rest/DiscordAPIError.js +17 -16
  59. package/src/rest/RESTManager.js +1 -21
  60. package/src/rest/RequestHandler.js +35 -21
  61. package/src/structures/ApplicationCommand.js +19 -456
  62. package/src/structures/ApplicationRoleConnectionMetadata.js +3 -0
  63. package/src/structures/AutoModerationRule.js +5 -5
  64. package/src/structures/AutocompleteInteraction.js +1 -0
  65. package/src/structures/BaseGuildTextChannel.js +10 -12
  66. package/src/structures/BaseGuildVoiceChannel.js +16 -18
  67. package/src/structures/{Call.js → CallState.js} +17 -12
  68. package/src/structures/CategoryChannel.js +2 -0
  69. package/src/structures/Channel.js +2 -3
  70. package/src/structures/ClientPresence.js +20 -19
  71. package/src/structures/ClientUser.js +117 -338
  72. package/src/structures/ContextMenuInteraction.js +1 -1
  73. package/src/structures/DMChannel.js +29 -92
  74. package/src/structures/ForumChannel.js +0 -10
  75. package/src/structures/GroupDMChannel.js +387 -0
  76. package/src/structures/Guild.js +135 -271
  77. package/src/structures/GuildAuditLogs.js +0 -5
  78. package/src/structures/GuildChannel.js +16 -2
  79. package/src/structures/GuildMember.js +27 -145
  80. package/src/structures/Interaction.js +1 -62
  81. package/src/structures/Invite.js +35 -52
  82. package/src/structures/Message.js +220 -203
  83. package/src/structures/MessageAttachment.js +11 -0
  84. package/src/structures/MessageButton.js +1 -67
  85. package/src/structures/MessageEmbed.js +1 -1
  86. package/src/structures/MessageMentions.js +3 -2
  87. package/src/structures/MessagePayload.js +6 -46
  88. package/src/structures/MessagePoll.js +238 -0
  89. package/src/structures/MessageReaction.js +1 -1
  90. package/src/structures/MessageSelectMenu.js +1 -252
  91. package/src/structures/Modal.js +70 -188
  92. package/src/structures/Presence.js +787 -129
  93. package/src/structures/Role.js +18 -2
  94. package/src/structures/SelectMenuInteraction.js +2 -151
  95. package/src/structures/Team.js +0 -49
  96. package/src/structures/TextInputComponent.js +0 -70
  97. package/src/structures/ThreadChannel.js +0 -19
  98. package/src/structures/User.js +145 -339
  99. package/src/structures/UserContextMenuInteraction.js +2 -2
  100. package/src/structures/VoiceState.js +74 -39
  101. package/src/structures/WebEmbed.js +38 -52
  102. package/src/structures/Webhook.js +17 -11
  103. package/src/structures/interfaces/Application.js +146 -23
  104. package/src/structures/interfaces/TextBasedChannel.js +409 -256
  105. package/src/util/ApplicationFlags.js +1 -1
  106. package/src/util/AttachmentFlags.js +38 -0
  107. package/src/util/Constants.js +120 -285
  108. package/src/util/Formatters.js +16 -2
  109. package/src/util/InviteFlags.js +29 -0
  110. package/src/util/LimitedCollection.js +1 -1
  111. package/src/util/Options.js +48 -74
  112. package/src/util/Permissions.js +15 -0
  113. package/src/util/PurchasedFlags.js +2 -0
  114. package/src/util/RemoteAuth.js +221 -356
  115. package/src/util/RoleFlags.js +37 -0
  116. package/src/util/Sweepers.js +1 -1
  117. package/src/util/Util.js +158 -32
  118. package/typings/enums.d.ts +24 -73
  119. package/typings/index.d.ts +978 -1288
  120. package/typings/rawDataTypes.d.ts +68 -9
  121. package/src/client/actions/InteractionCreate.js +0 -115
  122. package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +0 -23
  123. package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +0 -11
  124. package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +0 -55
  125. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.js +0 -0
  126. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.js +0 -0
  127. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.js +0 -0
  128. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.js +0 -0
  129. package/src/client/websocket/handlers/INTERACTION_CREATE.js +0 -16
  130. package/src/client/websocket/handlers/INTERACTION_FAILURE.js +0 -18
  131. package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +0 -30
  132. package/src/client/websocket/handlers/MESSAGE_ACK.js +0 -16
  133. package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.js +0 -0
  134. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +0 -0
  135. package/src/managers/DeveloperPortalManager.js +0 -104
  136. package/src/managers/GuildApplicationCommandManager.js +0 -28
  137. package/src/managers/GuildFolderManager.js +0 -24
  138. package/src/managers/SessionManager.js +0 -57
  139. package/src/rest/CaptchaSolver.js +0 -132
  140. package/src/structures/ClientApplication.js +0 -204
  141. package/src/structures/DeveloperPortalApplication.js +0 -520
  142. package/src/structures/GuildFolder.js +0 -75
  143. package/src/structures/InteractionResponse.js +0 -114
  144. package/src/structures/PartialGroupDMChannel.js +0 -433
  145. package/src/structures/RichPresence.js +0 -722
  146. package/src/structures/Session.js +0 -81
  147. package/src/util/Voice.js +0 -1456
  148. package/src/util/arRPC/index.js +0 -229
  149. package/src/util/arRPC/process/detectable.json +0 -1
  150. package/src/util/arRPC/process/index.js +0 -102
  151. package/src/util/arRPC/process/native/index.js +0 -5
  152. package/src/util/arRPC/process/native/linux.js +0 -37
  153. package/src/util/arRPC/process/native/win32.js +0 -25
  154. package/src/util/arRPC/transports/ipc.js +0 -281
  155. package/src/util/arRPC/transports/websocket.js +0 -128
@@ -1,105 +1,17 @@
1
1
  'use strict';
2
2
 
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
- }
3
+ const USER_REQUIRED_ACTION = require('./USER_REQUIRED_ACTION_UPDATE');
4
+ const { Opcodes } = require('../../../util/Constants');
42
5
 
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
- }
6
+ let ClientUser;
91
7
 
92
- if (client.options.patchVoice) {
93
- patchVoice(client);
94
- }
8
+ module.exports = (client, { d: data }, shard) => {
9
+ // Check
10
+ USER_REQUIRED_ACTION(client, { d: data });
95
11
 
96
- if (client.options.syncStatus) {
97
- client.customStatusAuto(client);
98
- }
99
- firstReady = true;
100
- }
12
+ // Overwrite ClientPresence
13
+ client.presence.userId = data.user.id;
101
14
 
102
- client.session_id = data.session_id;
103
15
  if (client.user) {
104
16
  client.user._patch(data.user);
105
17
  } else {
@@ -108,31 +20,8 @@ module.exports = async (client, { d: data }, shard) => {
108
20
  client.users.cache.set(client.user.id, client.user);
109
21
  }
110
22
 
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();
120
23
  for (const private_channel of data.private_channels) {
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
- );
24
+ client.channels._add(private_channel);
136
25
  }
137
26
 
138
27
  for (const guild of data.guilds) {
@@ -140,31 +29,92 @@ module.exports = async (client, { d: data }, shard) => {
140
29
  client.guilds._add(guild);
141
30
  }
142
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
143
42
  for (const gSetting of Array.isArray(data.user_guild_settings) ? data.user_guild_settings : []) {
144
43
  const guild = client.guilds.cache.get(gSetting.guild_id);
145
44
  if (guild) guild.settings._patch(gSetting);
146
45
  }
46
+ // Todo: data.auth_session_id_hash
147
47
 
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);
155
- client.ws.broadcast({
156
- op: Opcodes.GUILD_SUBSCRIPTIONS,
157
- d: {
158
- guild_id: guild.id,
159
- typing: true,
160
- threads: true,
161
- activities: true,
162
- thread_member_lists: [],
163
- members: [],
164
- channels: {},
165
- },
166
- });
48
+ if (data.guilds.length) {
49
+ if (data.guilds.length > 80) {
50
+ // Split data bc 15kb
51
+ const data1 = data.guilds.slice(0, Math.floor(data.guilds.length / 2));
52
+ const data2 = data.guilds.slice(Math.floor(data.guilds.length / 2));
53
+ client.ws.broadcast({
54
+ op: Opcodes.GUILD_SUBSCRIPTIONS_BULK,
55
+ d: {
56
+ subscriptions: data1.reduce((accumulator, guild) => {
57
+ accumulator[guild.id] = {
58
+ typing: true,
59
+ threads: true,
60
+ activities: true,
61
+ member_updates: true,
62
+ thread_member_lists: [],
63
+ members: [],
64
+ channels: {},
65
+ };
66
+ return accumulator;
67
+ }, {}),
68
+ },
69
+ });
70
+ client.ws.broadcast({
71
+ op: Opcodes.GUILD_SUBSCRIPTIONS_BULK,
72
+ d: {
73
+ subscriptions: data2.reduce((accumulator, guild) => {
74
+ accumulator[guild.id] = {
75
+ typing: true,
76
+ threads: true,
77
+ activities: true,
78
+ member_updates: true,
79
+ thread_member_lists: [],
80
+ members: [],
81
+ channels: {},
82
+ };
83
+ return accumulator;
84
+ }, {}),
85
+ },
86
+ });
87
+ } else {
88
+ client.ws.broadcast({
89
+ op: Opcodes.GUILD_SUBSCRIPTIONS_BULK,
90
+ d: {
91
+ subscriptions: data.guilds.reduce((accumulator, guild) => {
92
+ accumulator[guild.id] = {
93
+ typing: true,
94
+ threads: true,
95
+ activities: true,
96
+ member_updates: true,
97
+ thread_member_lists: [],
98
+ members: [],
99
+ channels: {},
100
+ };
101
+ return accumulator;
102
+ }, {}),
103
+ },
104
+ });
105
+ }
167
106
  }
168
107
 
169
- shard.checkReady();
108
+ Promise.all(
109
+ data.private_channels.map(async (c, index) => {
110
+ if (client.options.DMChannelVoiceStatusSync < 1) return;
111
+ client.ws.broadcast({
112
+ op: Opcodes.DM_UPDATE,
113
+ d: {
114
+ channel_id: c.id,
115
+ },
116
+ });
117
+ await client.sleep(client.options.DMChannelVoiceStatusSync * index);
118
+ }),
119
+ ).then(() => shard.checkReady());
170
120
  };
@@ -1,17 +1,19 @@
1
1
  'use strict';
2
2
 
3
- const { Events, RelationshipTypes } = require('../../../util/Constants');
3
+ const { Events } = 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));
10
12
  /**
11
- * Emitted whenever a relationship is updated.
13
+ * Emitted when a relationship is created, relevant to the current user.
12
14
  * @event Client#relationshipAdd
13
- * @param {Snowflake} user The userID that was updated
14
- * @param {RelationshipTypes} type The new relationship type
15
+ * @param {Snowflake} user Target userId
16
+ * @param {boolean} shouldNotify Whether the client should notify the user of this relationship's creation
15
17
  */
16
- client.emit(Events.RELATIONSHIP_ADD, data.id, RelationshipTypes[data.type]);
18
+ client.emit(Events.RELATIONSHIP_ADD, data.id, Boolean(data.should_notify));
17
19
  };
@@ -1,15 +1,17 @@
1
1
  'use strict';
2
2
 
3
- const { Events, RelationshipTypes } = require('../../../util/Constants');
3
+ const { Events } = require('../../../util/Constants');
4
4
 
5
5
  module.exports = (client, { d: data }) => {
6
6
  client.relationships.cache.delete(data.id);
7
- client.user.friendNicknames.delete(data.id);
7
+ client.relationships.friendNicknames.delete(data.id);
8
+ client.relationships.sinceCache.delete(data.id);
8
9
  /**
9
- * Emitted whenever a relationship is delete.
10
+ * Emitted when a relationship is removed, relevant to the current user.
10
11
  * @event Client#relationshipRemove
11
12
  * @param {Snowflake} user The userID that was updated
12
- * @param {RelationshipTypes} type The type of the old relationship
13
+ * @param {RelationshipType} type The type of the old relationship
14
+ * @param {string | null} nickname The nickname of the user in this relationship (1-32 characters)
13
15
  */
14
- client.emit(Events.RELATIONSHIP_REMOVE, data.id, RelationshipTypes[data.type]);
16
+ client.emit(Events.RELATIONSHIP_REMOVE, data.id, data.type, data.nickname);
15
17
  };
@@ -1,18 +1,41 @@
1
1
  'use strict';
2
2
 
3
- const { Events, RelationshipTypes } = require('../../../util/Constants');
3
+ const { Events } = require('../../../util/Constants');
4
4
 
5
5
  module.exports = (client, { d: data }) => {
6
- client.relationships.cache.set(data.id, data.type);
7
6
  /**
8
- * Emitted whenever a relationship is updated.
7
+ * @typedef {Object} RelationshipUpdateObject
8
+ * @property {RelationshipType} 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>
9
15
  * @event Client#relationshipUpdate
10
16
  * @param {Snowflake} user The userID that was updated
11
- * @param {RelationshipTypes} type The new relationship type
12
- * @param {Object} data The raw data
17
+ * @param {RelationshipUpdateObject} oldData Old data
18
+ * @param {RelationshipUpdateObject} newData New data
13
19
  */
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);
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
+ );
18
41
  };
@@ -1,12 +1,6 @@
1
1
  'use strict';
2
- const { Events } = require('../../../util/Constants');
2
+
3
3
  module.exports = (client, { d: data }) => {
4
4
  const guild = client.guilds.cache.get(data.guild_id);
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);
5
+ if (guild) guild?.settings._patch(data);
12
6
  };
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
3
  module.exports = (client, { d: data }) => {
4
- client.user.notes.set(data.id, data.note);
4
+ client.notes.cache.set(data.id, data.note);
5
5
  };
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, { d: data }) => {
4
+ let msg;
5
+ switch (data.required_action) {
6
+ case undefined:
7
+ case null: {
8
+ msg = 'All required actions have been completed.';
9
+ break;
10
+ }
11
+ case 'AGREEMENTS': {
12
+ msg = 'You need to accept the new Terms of Service and Privacy Policy.';
13
+ // https://discord.com/api/v9/users/@me/agreements
14
+ client.api
15
+ .users('@me')
16
+ .agreements.patch({
17
+ data: {
18
+ terms: true,
19
+ privacy: true,
20
+ },
21
+ })
22
+ .then(() => {
23
+ client.emit(
24
+ 'debug',
25
+ '[USER_REQUIRED_ACTION] Successfully accepted the new Terms of Service and Privacy Policy.',
26
+ );
27
+ })
28
+ .catch(e => {
29
+ client.emit(
30
+ 'debug',
31
+ `[USER_REQUIRED_ACTION] Failed to accept the new Terms of Service and Privacy Policy: ${e}`,
32
+ );
33
+ });
34
+ break;
35
+ }
36
+ case 'REQUIRE_CAPTCHA': {
37
+ msg = 'You need to complete a captcha.';
38
+ break;
39
+ }
40
+ case 'REQUIRE_VERIFIED_EMAIL': {
41
+ msg = 'You need to verify your email.';
42
+ break;
43
+ }
44
+ case 'REQUIRE_REVERIFIED_EMAIL': {
45
+ msg = 'You need to reverify your email.';
46
+ break;
47
+ }
48
+ case 'REQUIRE_VERIFIED_PHONE': {
49
+ msg = 'You need to verify your phone number.';
50
+ break;
51
+ }
52
+ case 'REQUIRE_REVERIFIED_PHONE': {
53
+ msg = 'You need to reverify your phone number.';
54
+ break;
55
+ }
56
+ case 'REQUIRE_VERIFIED_EMAIL_OR_VERIFIED_PHONE': {
57
+ msg = 'You need to verify your email or verify your phone number.';
58
+ break;
59
+ }
60
+ case 'REQUIRE_REVERIFIED_EMAIL_OR_VERIFIED_PHONE': {
61
+ msg = 'You need to reverify your email or verify your phone number.';
62
+ break;
63
+ }
64
+ case 'REQUIRE_VERIFIED_EMAIL_OR_REVERIFIED_PHONE': {
65
+ msg = 'You need to verify your email or reverify your phone number.';
66
+ break;
67
+ }
68
+ case 'REQUIRE_REVERIFIED_EMAIL_OR_REVERIFIED_PHONE': {
69
+ msg = 'You need to reverify your email or reverify your phone number.';
70
+ break;
71
+ }
72
+ default: {
73
+ msg = `Unknown required action: ${data.required_action}`;
74
+ break;
75
+ }
76
+ }
77
+ client.emit('debug', `[USER_REQUIRED_ACTION] ${msg}`);
78
+ };
@@ -1,9 +1,5 @@
1
1
  'use strict';
2
- const { Events } = require('../../../util/Constants');
2
+
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);
9
5
  };
@@ -0,0 +1,12 @@
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.id);
7
+ if (channel) {
8
+ const old = channel._clone();
9
+ channel.status = data.status;
10
+ client.emit(Events.CHANNEL_UPDATE, old, channel);
11
+ }
12
+ };
@@ -3,10 +3,6 @@
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')],
10
6
  ['APPLICATION_COMMAND_CREATE', require('./APPLICATION_COMMAND_CREATE')],
11
7
  ['APPLICATION_COMMAND_DELETE', require('./APPLICATION_COMMAND_DELETE')],
12
8
  ['APPLICATION_COMMAND_UPDATE', require('./APPLICATION_COMMAND_UPDATE')],
@@ -15,9 +11,6 @@ const handlers = Object.fromEntries([
15
11
  ['AUTO_MODERATION_RULE_CREATE', require('./AUTO_MODERATION_RULE_CREATE')],
16
12
  ['AUTO_MODERATION_RULE_DELETE', require('./AUTO_MODERATION_RULE_DELETE')],
17
13
  ['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')],
21
14
  ['GUILD_CREATE', require('./GUILD_CREATE')],
22
15
  ['GUILD_DELETE', require('./GUILD_DELETE')],
23
16
  ['GUILD_UPDATE', require('./GUILD_UPDATE')],
@@ -27,8 +20,6 @@ const handlers = Object.fromEntries([
27
20
  ['GUILD_MEMBER_REMOVE', require('./GUILD_MEMBER_REMOVE')],
28
21
  ['GUILD_MEMBER_UPDATE', require('./GUILD_MEMBER_UPDATE')],
29
22
  ['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')],
32
23
  ['GUILD_INTEGRATIONS_UPDATE', require('./GUILD_INTEGRATIONS_UPDATE')],
33
24
  ['GUILD_ROLE_CREATE', require('./GUILD_ROLE_CREATE')],
34
25
  ['GUILD_ROLE_DELETE', require('./GUILD_ROLE_DELETE')],
@@ -40,9 +31,6 @@ const handlers = Object.fromEntries([
40
31
  ['CHANNEL_DELETE', require('./CHANNEL_DELETE')],
41
32
  ['CHANNEL_UPDATE', require('./CHANNEL_UPDATE')],
42
33
  ['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')],
46
34
  ['MESSAGE_CREATE', require('./MESSAGE_CREATE')],
47
35
  ['MESSAGE_DELETE', require('./MESSAGE_DELETE')],
48
36
  ['MESSAGE_UPDATE', require('./MESSAGE_UPDATE')],
@@ -57,20 +45,12 @@ const handlers = Object.fromEntries([
57
45
  ['THREAD_LIST_SYNC', require('./THREAD_LIST_SYNC')],
58
46
  ['THREAD_MEMBER_UPDATE', require('./THREAD_MEMBER_UPDATE')],
59
47
  ['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')],
64
48
  ['USER_UPDATE', require('./USER_UPDATE')],
65
49
  ['PRESENCE_UPDATE', require('./PRESENCE_UPDATE')],
66
50
  ['TYPING_START', require('./TYPING_START')],
67
51
  ['VOICE_STATE_UPDATE', require('./VOICE_STATE_UPDATE')],
68
52
  ['VOICE_SERVER_UPDATE', require('./VOICE_SERVER_UPDATE')],
69
53
  ['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')],
74
54
  ['STAGE_INSTANCE_CREATE', require('./STAGE_INSTANCE_CREATE')],
75
55
  ['STAGE_INSTANCE_UPDATE', require('./STAGE_INSTANCE_UPDATE')],
76
56
  ['STAGE_INSTANCE_DELETE', require('./STAGE_INSTANCE_DELETE')],
@@ -81,6 +61,23 @@ const handlers = Object.fromEntries([
81
61
  ['GUILD_SCHEDULED_EVENT_USER_ADD', require('./GUILD_SCHEDULED_EVENT_USER_ADD')],
82
62
  ['GUILD_SCHEDULED_EVENT_USER_REMOVE', require('./GUILD_SCHEDULED_EVENT_USER_REMOVE')],
83
63
  ['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
+ ['MESSAGE_POLL_VOTE_ADD', require('./MESSAGE_POLL_VOTE_ADD')],
80
+ ['MESSAGE_POLL_VOTE_REMOVE', require('./MESSAGE_POLL_VOTE_REMOVE')],
84
81
  ]);
85
82
 
86
83
  module.exports = handlers;