mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-16 19:43:29 +01:00
Fix emoji events (fixes #1333)
This commit is contained in:
@@ -27,6 +27,7 @@ class ActionsManager {
|
|||||||
this.register(require('./GuildEmojiCreate'));
|
this.register(require('./GuildEmojiCreate'));
|
||||||
this.register(require('./GuildEmojiDelete'));
|
this.register(require('./GuildEmojiDelete'));
|
||||||
this.register(require('./GuildEmojiUpdate'));
|
this.register(require('./GuildEmojiUpdate'));
|
||||||
|
this.register(require('./GuildEmojisUpdate'));
|
||||||
this.register(require('./GuildRolesPositionUpdate'));
|
this.register(require('./GuildRolesPositionUpdate'));
|
||||||
this.register(require('./GuildChannelsPositionUpdate'));
|
this.register(require('./GuildChannelsPositionUpdate'));
|
||||||
}
|
}
|
||||||
|
|||||||
38
src/client/actions/GuildEmojisUpdate.js
Normal file
38
src/client/actions/GuildEmojisUpdate.js
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
const Action = require('./Action');
|
||||||
|
|
||||||
|
function mappify(iterable) {
|
||||||
|
const map = new Map();
|
||||||
|
for (const x of iterable) map.set(...x);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
class GuildEmojisUpdateAction extends Action {
|
||||||
|
handle(data) {
|
||||||
|
const guild = this.client.guilds.get(data.guild_id);
|
||||||
|
if (!guild || !guild.emojis) return;
|
||||||
|
|
||||||
|
const deletions = mappify(guild.emojis.entries());
|
||||||
|
|
||||||
|
for (const emoji of data.emojis) {
|
||||||
|
// Determine type of emoji event
|
||||||
|
const cachedEmoji = guild.emojis.get(emoji.id);
|
||||||
|
if (cachedEmoji) {
|
||||||
|
deletions.delete(emoji.id);
|
||||||
|
if (!cachedEmoji.equals(emoji, true)) {
|
||||||
|
// Emoji updated
|
||||||
|
this.client.actions.GuildEmojiUpdate.handle(cachedEmoji, emoji);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Emoji added
|
||||||
|
this.client.actions.GuildEmojiCreate.handle(guild, emoji);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const emoji of deletions.values()) {
|
||||||
|
// Emoji deleted
|
||||||
|
this.client.actions.GuildEmojiDelete.handle(emoji);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = GuildEmojisUpdateAction;
|
||||||
@@ -1,39 +1,10 @@
|
|||||||
const AbstractHandler = require('./AbstractHandler');
|
const AbstractHandler = require('./AbstractHandler');
|
||||||
|
|
||||||
function mappify(iterable) {
|
|
||||||
const map = new Map();
|
|
||||||
for (const x of iterable) map.set(...x);
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
class GuildEmojisUpdate extends AbstractHandler {
|
class GuildEmojisUpdate extends AbstractHandler {
|
||||||
handle(packet) {
|
handle(packet) {
|
||||||
const client = this.packetManager.client;
|
const client = this.packetManager.client;
|
||||||
const data = packet.d;
|
const data = packet.d;
|
||||||
const guild = client.guilds.get(data.guild_id);
|
client.actions.GuildEmojisUpdate.handle(data);
|
||||||
if (!guild || !guild.emojis) return;
|
|
||||||
|
|
||||||
const deletions = mappify(guild.emojis.entries());
|
|
||||||
|
|
||||||
for (const emoji of data.emojis) {
|
|
||||||
// Determine type of emoji event
|
|
||||||
const cachedEmoji = guild.emojis.get(emoji.id);
|
|
||||||
if (cachedEmoji) {
|
|
||||||
deletions.delete(emoji.id);
|
|
||||||
if (!cachedEmoji.equals(emoji, true)) {
|
|
||||||
// Emoji updated
|
|
||||||
client.actions.GuildEmojiUpdate.handle(cachedEmoji, emoji);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Emoji added
|
|
||||||
client.actions.GuildEmojiCreate.handle(guild, emoji);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const emoji of deletions.values()) {
|
|
||||||
// Emoji deleted
|
|
||||||
client.actions.GuildEmojiDelete.handle(emoji);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -121,13 +121,6 @@ class Guild {
|
|||||||
*/
|
*/
|
||||||
this.applicationID = data.application_id;
|
this.applicationID = data.application_id;
|
||||||
|
|
||||||
/**
|
|
||||||
* A collection of emojis that are in this guild. The key is the emoji's ID, the value is the emoji.
|
|
||||||
* @type {Collection<Snowflake, Emoji>}
|
|
||||||
*/
|
|
||||||
this.emojis = new Collection();
|
|
||||||
for (const emoji of data.emojis) this.emojis.set(emoji.id, new Emoji(this, emoji));
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time in seconds before a user is counted as "away from keyboard".
|
* The time in seconds before a user is counted as "away from keyboard".
|
||||||
* @type {?number}
|
* @type {?number}
|
||||||
@@ -216,6 +209,20 @@ class Guild {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this.emojis) {
|
||||||
|
/**
|
||||||
|
* A collection of emojis that are in this guild. The key is the emoji's ID, the value is the emoji.
|
||||||
|
* @type {Collection<Snowflake, Emoji>}
|
||||||
|
*/
|
||||||
|
this.emojis = new Collection();
|
||||||
|
for (const emoji of data.emojis) this.emojis.set(emoji.id, new Emoji(this, emoji));
|
||||||
|
} else {
|
||||||
|
this.client.actions.GuildEmojisUpdate.handle({
|
||||||
|
guild_id: this.id,
|
||||||
|
emojis: data.emojis,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ client.on('userUpdate', (o, n) => {
|
|||||||
console.log(o.username, n.username);
|
console.log(o.username, n.username);
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('guildEmojiCreate', e => console.log('create!!', e.name));
|
client.on('emojiCreate', e => console.log('create!!', e.name));
|
||||||
client.on('guildEmojiDelete', e => console.log('delete!!', e.name));
|
client.on('emojiDelete', e => console.log('delete!!', e.name));
|
||||||
client.on('guildEmojiUpdate', (o, n) => console.log('update!!', o.name, n.name));
|
client.on('emojiUpdate', (o, n) => console.log('update!!', o.name, n.name));
|
||||||
|
|
||||||
client.on('guildMemberAdd', m => console.log(`${m.user.username} joined ${m.guild.name}`));
|
client.on('guildMemberAdd', m => console.log(`${m.user.username} joined ${m.guild.name}`));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user