Skip to content

Commit 4817df1

Browse files
authored
Merge branch 'master' into unmerged-guild-template
2 parents cfa9e81 + 2e940e6 commit 4817df1

File tree

8 files changed

+139
-130
lines changed

8 files changed

+139
-130
lines changed

src/client/actions/Action.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ class GenericAction {
9393
if (data.guild_id && data.member && data.member.user) {
9494
const guild = this.client.guilds.cache.get(data.guild_id);
9595
if (guild) {
96-
const member = this.getMember(data.member, guild);
97-
return member ? member.user : this.getUser(data.member.user);
96+
return guild.members.add(data.member).user;
97+
} else {
98+
return this.client.users.add(data.member.user);
9899
}
99100
}
100101
return this.getUser(data);

src/client/actions/ActionsManager.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class ActionsManager {
2020
this.register(require('./InviteCreate'));
2121
this.register(require('./InviteDelete'));
2222
this.register(require('./GuildMemberRemove'));
23+
this.register(require('./GuildMemberUpdate'));
2324
this.register(require('./GuildBanRemove'));
2425
this.register(require('./GuildRoleCreate'));
2526
this.register(require('./GuildRoleDelete'));
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'use strict';
2+
3+
const Action = require('./Action');
4+
const { Status, Events } = require('../../util/Constants');
5+
6+
class GuildMemberUpdateAction extends Action {
7+
handle(data, shard) {
8+
const { client } = this;
9+
if (data.user.username) {
10+
const user = client.users.cache.get(data.user.id);
11+
if (!user) {
12+
client.users.add(data.user);
13+
} else if (!user.equals(data.user)) {
14+
client.actions.UserUpdate.handle(data.user);
15+
}
16+
}
17+
18+
const guild = client.guilds.cache.get(data.guild_id);
19+
if (guild) {
20+
const member = this.getMember({ user: data.user }, guild);
21+
if (member) {
22+
const old = member._update(data);
23+
/**
24+
* Emitted whenever a guild member changes - i.e. new role, removed role, nickname.
25+
* Also emitted when the user's details (e.g. username) change.
26+
* @event Client#guildMemberUpdate
27+
* @param {GuildMember} oldMember The member before the update
28+
* @param {GuildMember} newMember The member after the update
29+
*/
30+
if (shard.status === Status.READY) client.emit(Events.GUILD_MEMBER_UPDATE, old, member);
31+
} else {
32+
const newMember = guild.members.add(data);
33+
/**
34+
* Emitted whenever a member becomes available in a large guild.
35+
* @event Client#guildMemberAvailable
36+
* @param {GuildMember} member The member that became available
37+
*/
38+
this.client.emit(Events.GUILD_MEMBER_AVAILABLE, newMember);
39+
}
40+
}
41+
}
42+
}
43+
44+
module.exports = GuildMemberUpdateAction;

src/client/actions/MessageReactionAdd.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ const { PartialTypes } = require('../../util/Constants');
88
{ user_id: 'id',
99
message_id: 'id',
1010
emoji: { name: '�', id: null },
11-
channel_id: 'id' } }
11+
channel_id: 'id',
12+
// If originating from a guild
13+
guild_id: 'id',
14+
member: { ..., user: { ... } } }
1215
*/
1316

1417
class MessageReactionAdd extends Action {

src/client/actions/MessageReactionRemove.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ const { Events } = require('../../util/Constants');
77
{ user_id: 'id',
88
message_id: 'id',
99
emoji: { name: '�', id: null },
10-
channel_id: 'id' } }
10+
channel_id: 'id',
11+
guild_id: 'id' }
1112
*/
1213

1314
class MessageReactionRemove extends Action {
Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,5 @@
11
'use strict';
22

3-
const { Status, Events } = require('../../../util/Constants');
4-
5-
module.exports = (client, { d: data }, shard) => {
6-
let user = client.users.cache.get(data.user.id);
7-
if (!user && data.user.username) user = client.users.add(data.user);
8-
if (user && data.user && data.user.username) {
9-
if (!user.equals(data.user)) client.actions.UserUpdate.handle(data.user);
10-
}
11-
12-
const guild = client.guilds.cache.get(data.guild_id);
13-
if (guild) {
14-
const member = guild.members.cache.get(data.user.id);
15-
if (member) {
16-
const old = member._update(data);
17-
if (shard.status === Status.READY) {
18-
/**
19-
* Emitted whenever a guild member changes - i.e. new role, removed role, nickname.
20-
* Also emitted when the user's details (e.g. username) change.
21-
* @event Client#guildMemberUpdate
22-
* @param {GuildMember} oldMember The member before the update
23-
* @param {GuildMember} newMember The member after the update
24-
*/
25-
client.emit(Events.GUILD_MEMBER_UPDATE, old, member);
26-
}
27-
}
28-
}
3+
module.exports = (client, packet, shard) => {
4+
client.actions.GuildMemberUpdate.handle(packet.d, shard);
295
};

src/util/Constants.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,18 +521,26 @@ exports.VerificationLevels = ['NONE', 'LOW', 'MEDIUM', 'HIGH', 'VERY_HIGH'];
521521
* * UNKNOWN_USER
522522
* * UNKNOWN_EMOJI
523523
* * UNKNOWN_WEBHOOK
524+
* * UNKNOWN_BAN
524525
* * UNKNOWN_GUILD_TEMPLATE
525526
* * BOT_PROHIBITED_ENDPOINT
526527
* * BOT_ONLY_ENDPOINT
528+
* * CHANNEL_HIT_WRITE_RATELIMIT
527529
* * MAXIMUM_GUILDS
528530
* * MAXIMUM_FRIENDS
529531
* * MAXIMUM_PINS
530532
* * MAXIMUM_ROLES
533+
* * MAXIMUM_WEBHOOKS
531534
* * MAXIMUM_REACTIONS
532535
* * MAXIMUM_CHANNELS
536+
* * MAXIMUM_ATTACHMENTS
533537
* * MAXIMUM_INVITES
534538
* * UNAUTHORIZED
539+
* * ACCOUNT_VERIFICATION_REQUIRED
540+
* * REQUEST_ENTITY_TOO_LARGE
541+
* * FEATURE_TEMPORARILY_DISABLED
535542
* * USER_BANNED
543+
* * ALREADY_CROSSPOSTED
536544
* * MISSING_ACCESS
537545
* * INVALID_ACCOUNT_TYPE
538546
* * CANNOT_EXECUTE_ON_DM
@@ -557,6 +565,7 @@ exports.VerificationLevels = ['NONE', 'LOW', 'MEDIUM', 'HIGH', 'VERY_HIGH'];
557565
* * INVALID_FORM_BODY
558566
* * INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT
559567
* * INVALID_API_VERSION
568+
* * CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL
560569
* * REACTION_BLOCKED
561570
* * RESOURCE_OVERLOADED
562571
* @typedef {string} APIError
@@ -577,18 +586,26 @@ exports.APIErrors = {
577586
UNKNOWN_USER: 10013,
578587
UNKNOWN_EMOJI: 10014,
579588
UNKNOWN_WEBHOOK: 10015,
589+
UNKNOWN_BAN: 10026,
580590
UNKNOWN_GUILD_TEMPLATE: 10057,
581591
BOT_PROHIBITED_ENDPOINT: 20001,
582592
BOT_ONLY_ENDPOINT: 20002,
593+
CHANNEL_HIT_WRITE_RATELIMIT: 20028,
583594
MAXIMUM_GUILDS: 30001,
584595
MAXIMUM_FRIENDS: 30002,
585596
MAXIMUM_PINS: 30003,
586597
MAXIMUM_ROLES: 30005,
598+
MAXIMUM_WEBHOOKS: 30007,
587599
MAXIMUM_REACTIONS: 30010,
588600
MAXIMUM_CHANNELS: 30013,
601+
MAXIMUM_ATTACHMENTS: 30015,
589602
MAXIMUM_INVITES: 30016,
590603
UNAUTHORIZED: 40001,
604+
ACCOUNT_VERIFICATION_REQUIRED: 40002,
605+
REQUEST_ENTITY_TOO_LARGE: 40005,
606+
FEATURE_TEMPORARILY_DISABLED: 40006,
591607
USER_BANNED: 40007,
608+
ALREADY_CROSSPOSTED: 40033,
592609
MISSING_ACCESS: 50001,
593610
INVALID_ACCOUNT_TYPE: 50002,
594611
CANNOT_EXECUTE_ON_DM: 50003,
@@ -613,6 +630,7 @@ exports.APIErrors = {
613630
INVALID_FORM_BODY: 50035,
614631
INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT: 50036,
615632
INVALID_API_VERSION: 50041,
633+
CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL: 50074,
616634
REACTION_BLOCKED: 90001,
617635
RESOURCE_OVERLOADED: 130000,
618636
};

typings/index.d.ts

Lines changed: 65 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -483,60 +483,7 @@ declare module 'discord.js' {
483483
HELLO: 10;
484484
HEARTBEAT_ACK: 11;
485485
};
486-
APIErrors: {
487-
UNKNOWN_ACCOUNT: 10001;
488-
UNKNOWN_APPLICATION: 10002;
489-
UNKNOWN_CHANNEL: 10003;
490-
UNKNOWN_GUILD: 10004;
491-
UNKNOWN_INTEGRATION: 10005;
492-
UNKNOWN_INVITE: 10006;
493-
UNKNOWN_MEMBER: 10007;
494-
UNKNOWN_MESSAGE: 10008;
495-
UNKNOWN_OVERWRITE: 10009;
496-
UNKNOWN_PROVIDER: 10010;
497-
UNKNOWN_ROLE: 10011;
498-
UNKNOWN_TOKEN: 10012;
499-
UNKNOWN_USER: 10013;
500-
UNKNOWN_EMOJI: 10014;
501-
UNKNOWN_WEBHOOK: 10015;
502-
UNKNOWN_GUILD_TEMPLATE: 10057;
503-
BOT_PROHIBITED_ENDPOINT: 20001;
504-
BOT_ONLY_ENDPOINT: 20002;
505-
MAXIMUM_GUILDS: 30001;
506-
MAXIMUM_FRIENDS: 30002;
507-
MAXIMUM_PINS: 30003;
508-
MAXIMUM_ROLES: 30005;
509-
MAXIMUM_REACTIONS: 30010;
510-
MAXIMUM_CHANNELS: 30013;
511-
MAXIMUM_INVITES: 30016;
512-
UNAUTHORIZED: 40001;
513-
USER_BANNED: 40007;
514-
MISSING_ACCESS: 50001;
515-
INVALID_ACCOUNT_TYPE: 50002;
516-
CANNOT_EXECUTE_ON_DM: 50003;
517-
EMBED_DISABLED: 50004;
518-
CANNOT_EDIT_MESSAGE_BY_OTHER: 50005;
519-
CANNOT_SEND_EMPTY_MESSAGE: 50006;
520-
CANNOT_MESSAGE_USER: 50007;
521-
CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL: 50008;
522-
CHANNEL_VERIFICATION_LEVEL_TOO_HIGH: 50009;
523-
OAUTH2_APPLICATION_BOT_ABSENT: 50010;
524-
MAXIMUM_OAUTH2_APPLICATIONS: 50011;
525-
INVALID_OAUTH_STATE: 50012;
526-
MISSING_PERMISSIONS: 50013;
527-
INVALID_AUTHENTICATION_TOKEN: 50014;
528-
NOTE_TOO_LONG: 50015;
529-
INVALID_BULK_DELETE_QUANTITY: 50016;
530-
CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL: 50019;
531-
CANNOT_EXECUTE_ON_SYSTEM_MESSAGE: 50021;
532-
INVALID_OAUTH_TOKEN: 50025;
533-
BULK_DELETE_MESSAGE_TOO_OLD: 50034;
534-
INVALID_FORM_BODY: 50035;
535-
INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT: 50036;
536-
INVALID_API_VERSION: 50041;
537-
REACTION_BLOCKED: 90001;
538-
RESOURCE_OVERLOADED: 130000;
539-
};
486+
APIErrors: APIErrors;
540487
VoiceStatus: {
541488
CONNECTED: 0;
542489
CONNECTING: 1;
@@ -1191,6 +1138,7 @@ declare module 'discord.js' {
11911138
constructor(client: Client, data: object, message: Message);
11921139
private _emoji: GuildEmoji | ReactionEmoji;
11931140

1141+
public readonly client: Client;
11941142
public count: number | null;
11951143
public readonly emoji: GuildEmoji | ReactionEmoji;
11961144
public me: boolean;
@@ -2161,52 +2109,69 @@ declare module 'discord.js' {
21612109
deaf?: boolean;
21622110
}
21632111

2164-
interface APIError {
2165-
UNKNOWN_ACCOUNT: number;
2166-
UNKNOWN_APPLICATION: number;
2167-
UNKNOWN_CHANNEL: number;
2168-
UNKNOWN_GUILD: number;
2169-
UNKNOWN_INTEGRATION: number;
2170-
UNKNOWN_INVITE: number;
2171-
UNKNOWN_MEMBER: number;
2172-
UNKNOWN_MESSAGE: number;
2173-
UNKNOWN_OVERWRITE: number;
2174-
UNKNOWN_PROVIDER: number;
2175-
UNKNOWN_ROLE: number;
2176-
UNKNOWN_TOKEN: number;
2177-
UNKNOWN_USER: number;
2178-
UNKNOWN_EMOJI: number;
2179-
UNKNOWN_WEBHOOK: number;
2180-
UNKNOWN_GUILD_TEMPLATE: number;
2181-
BOT_PROHIBITED_ENDPOINT: number;
2182-
BOT_ONLY_ENDPOINT: number;
2183-
MAXIMUM_GUILDS: number;
2184-
MAXIMUM_FRIENDS: number;
2185-
MAXIMUM_PINS: number;
2186-
MAXIMUM_ROLES: number;
2187-
MAXIMUM_REACTIONS: number;
2188-
UNAUTHORIZED: number;
2189-
MISSING_ACCESS: number;
2190-
INVALID_ACCOUNT_TYPE: number;
2191-
CANNOT_EXECUTE_ON_DM: number;
2192-
EMBED_DISABLED: number;
2193-
CANNOT_EDIT_MESSAGE_BY_OTHER: number;
2194-
CANNOT_SEND_EMPTY_MESSAGE: number;
2195-
CANNOT_MESSAGE_USER: number;
2196-
CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL: number;
2197-
CHANNEL_VERIFICATION_LEVEL_TOO_HIGH: number;
2198-
OAUTH2_APPLICATION_BOT_ABSENT: number;
2199-
MAXIMUM_OAUTH2_APPLICATIONS: number;
2200-
INVALID_OAUTH_STATE: number;
2201-
MISSING_PERMISSIONS: number;
2202-
INVALID_AUTHENTICATION_TOKEN: number;
2203-
NOTE_TOO_LONG: number;
2204-
INVALID_BULK_DELETE_QUANTITY: number;
2205-
CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL: number;
2206-
CANNOT_EXECUTE_ON_SYSTEM_MESSAGE: number;
2207-
BULK_DELETE_MESSAGE_TOO_OLD: number;
2208-
INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT: number;
2209-
REACTION_BLOCKED: number;
2112+
interface APIErrors {
2113+
UNKNOWN_ACCOUNT: 10001;
2114+
UNKNOWN_APPLICATION: 10002;
2115+
UNKNOWN_CHANNEL: 10003;
2116+
UNKNOWN_GUILD: 10004;
2117+
UNKNOWN_INTEGRATION: 10005;
2118+
UNKNOWN_INVITE: 10006;
2119+
UNKNOWN_MEMBER: 10007;
2120+
UNKNOWN_MESSAGE: 10008;
2121+
UNKNOWN_OVERWRITE: 10009;
2122+
UNKNOWN_PROVIDER: 10010;
2123+
UNKNOWN_ROLE: 10011;
2124+
UNKNOWN_TOKEN: 10012;
2125+
UNKNOWN_USER: 10013;
2126+
UNKNOWN_EMOJI: 10014;
2127+
UNKNOWN_WEBHOOK: 10015;
2128+
UNKNOWN_BAN: 10026;
2129+
UNKNOWN_GUILD_TEMPLATE: 10057;
2130+
BOT_PROHIBITED_ENDPOINT: 20001;
2131+
BOT_ONLY_ENDPOINT: 20002;
2132+
CHANNEL_HIT_WRITE_RATELIMIT: 20028;
2133+
MAXIMUM_GUILDS: 30001;
2134+
MAXIMUM_FRIENDS: 30002;
2135+
MAXIMUM_PINS: 30003;
2136+
MAXIMUM_ROLES: 30005;
2137+
MAXIMUM_WEBHOOKS: 30007;
2138+
MAXIMUM_REACTIONS: 30010;
2139+
MAXIMUM_CHANNELS: 30013;
2140+
MAXIMUM_ATTACHMENTS: 30015;
2141+
MAXIMUM_INVITES: 30016;
2142+
UNAUTHORIZED: 40001;
2143+
ACCOUNT_VERIFICATION_REQUIRED: 40002;
2144+
REQUEST_ENTITY_TOO_LARGE: 40005;
2145+
FEATURE_TEMPORARILY_DISABLED: 40006;
2146+
USER_BANNED: 40007;
2147+
ALREADY_CROSSPOSTED: 40033;
2148+
MISSING_ACCESS: 50001;
2149+
INVALID_ACCOUNT_TYPE: 50002;
2150+
CANNOT_EXECUTE_ON_DM: 50003;
2151+
EMBED_DISABLED: 50004;
2152+
CANNOT_EDIT_MESSAGE_BY_OTHER: 50005;
2153+
CANNOT_SEND_EMPTY_MESSAGE: 50006;
2154+
CANNOT_MESSAGE_USER: 50007;
2155+
CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL: 50008;
2156+
CHANNEL_VERIFICATION_LEVEL_TOO_HIGH: 50009;
2157+
OAUTH2_APPLICATION_BOT_ABSENT: 50010;
2158+
MAXIMUM_OAUTH2_APPLICATIONS: 50011;
2159+
INVALID_OAUTH_STATE: 50012;
2160+
MISSING_PERMISSIONS: 50013;
2161+
INVALID_AUTHENTICATION_TOKEN: 50014;
2162+
NOTE_TOO_LONG: 50015;
2163+
INVALID_BULK_DELETE_QUANTITY: 50016;
2164+
CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL: 50019;
2165+
INVALID_OR_TAKEN_INVITE_CODE: 50020;
2166+
CANNOT_EXECUTE_ON_SYSTEM_MESSAGE: 50021;
2167+
INVALID_OAUTH_TOKEN: 50025;
2168+
BULK_DELETE_MESSAGE_TOO_OLD: 50034;
2169+
INVALID_FORM_BODY: 50035;
2170+
INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT: 50036;
2171+
INVALID_API_VERSION: 50041;
2172+
CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL: 50074;
2173+
REACTION_BLOCKED: 90001;
2174+
RESOURCE_OVERLOADED: 130000;
22102175
}
22112176

22122177
type APIMessageContentResolvable = string | number | boolean | bigint | symbol | readonly StringResolvable[];

0 commit comments

Comments
 (0)