mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-15 11:03:30 +01:00
Make presences track users and guilds, emit them in presenceUpdate
This commit is contained in:
@@ -23,6 +23,8 @@ class PresenceUpdateHandler extends AbstractHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (guild) {
|
if (guild) {
|
||||||
|
let oldPresence = guild.presences.get(user.id);
|
||||||
|
if (oldPresence) oldPresence = oldPresence._clone();
|
||||||
let member = guild.members.get(user.id);
|
let member = guild.members.get(user.id);
|
||||||
if (!member && data.status !== 'offline') {
|
if (!member && data.status !== 'offline') {
|
||||||
member = guild.members.add({
|
member = guild.members.add({
|
||||||
@@ -35,17 +37,13 @@ class PresenceUpdateHandler extends AbstractHandler {
|
|||||||
}
|
}
|
||||||
if (member) {
|
if (member) {
|
||||||
if (client.listenerCount(Events.PRESENCE_UPDATE) === 0) {
|
if (client.listenerCount(Events.PRESENCE_UPDATE) === 0) {
|
||||||
guild.presences.add(data);
|
guild.presences.add(Object.assign(data, { guild: this }));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const oldMember = member._clone();
|
guild.presences.add(Object.assign(data, { guild: this }));
|
||||||
if (member.presence) {
|
client.emit(Events.PRESENCE_UPDATE, oldPresence, member.presence);
|
||||||
oldMember.frozenPresence = member.presence._clone();
|
|
||||||
}
|
|
||||||
guild.presences.add(data);
|
|
||||||
client.emit(Events.PRESENCE_UPDATE, oldMember, member);
|
|
||||||
} else {
|
} else {
|
||||||
guild.presences.add(data);
|
guild.presences.add(Object.assign(data, { guild: this }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ class ReadyHandler extends AbstractHandler {
|
|||||||
|
|
||||||
client.ws.heartbeat();
|
client.ws.heartbeat();
|
||||||
|
|
||||||
|
client.presences.clientPresence.userID = data.user.id;
|
||||||
if (!ClientUser) ClientUser = require('../../../../structures/ClientUser');
|
if (!ClientUser) ClientUser = require('../../../../structures/ClientUser');
|
||||||
const clientUser = new ClientUser(client, data.user);
|
const clientUser = new ClientUser(client, data.user);
|
||||||
client.user = clientUser;
|
client.user = clientUser;
|
||||||
@@ -17,7 +18,6 @@ class ReadyHandler extends AbstractHandler {
|
|||||||
|
|
||||||
for (const guild of data.guilds) client.guilds.add(guild);
|
for (const guild of data.guilds) client.guilds.add(guild);
|
||||||
for (const privateDM of data.private_channels) client.channels.add(privateDM);
|
for (const privateDM of data.private_channels) client.channels.add(privateDM);
|
||||||
for (const presence of data.presences || []) client.presences.add(presence);
|
|
||||||
|
|
||||||
if (!client.users.has('1')) {
|
if (!client.users.has('1')) {
|
||||||
client.users.add({
|
client.users.add({
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ class ClientPresenceStore extends PresenceStore {
|
|||||||
afk: false,
|
afk: false,
|
||||||
since: null,
|
since: null,
|
||||||
activity: null,
|
activity: null,
|
||||||
|
user: { id: null },
|
||||||
|
guild_id: null,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ class Guild extends Base {
|
|||||||
|
|
||||||
if (data.presences) {
|
if (data.presences) {
|
||||||
for (const presence of data.presences) {
|
for (const presence of data.presences) {
|
||||||
this.presences.add(presence);
|
this.presences.add(Object.assign(presence, { guild: this }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ class GuildMember extends Base {
|
|||||||
* @readonly
|
* @readonly
|
||||||
*/
|
*/
|
||||||
get presence() {
|
get presence() {
|
||||||
return this.frozenPresence || this.guild.presences.get(this.id) || new Presence(this.client);
|
return this.guild.presences.get(this.id) || new Presence(this.client);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -14,9 +14,27 @@ const { ActivityTypes, ActivityFlags } = require('../util/Constants');
|
|||||||
class Presence {
|
class Presence {
|
||||||
constructor(client, data = {}) {
|
constructor(client, data = {}) {
|
||||||
Object.defineProperty(this, 'client', { value: client });
|
Object.defineProperty(this, 'client', { value: client });
|
||||||
|
this.userID = data.user.id;
|
||||||
|
this.guild = data.guild;
|
||||||
this.patch(data);
|
this.patch(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The user of this presence
|
||||||
|
* @type {User}
|
||||||
|
*/
|
||||||
|
get user() {
|
||||||
|
return this.client.users.get(this.userID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The member of this presence
|
||||||
|
* @type {GuildMember}
|
||||||
|
*/
|
||||||
|
get member() {
|
||||||
|
return this.guild.members.get(this.userID);
|
||||||
|
}
|
||||||
|
|
||||||
patch(data) {
|
patch(data) {
|
||||||
/**
|
/**
|
||||||
* The status of the presence:
|
* The status of the presence:
|
||||||
|
|||||||
@@ -29,8 +29,9 @@ var count = 0;
|
|||||||
|
|
||||||
process.on('unhandledRejection', console.log);
|
process.on('unhandledRejection', console.log);
|
||||||
|
|
||||||
client.on('voiceStateUpdate', (a, b) => {
|
client.on('presenceUpdate', (a, b) => {
|
||||||
console.log(a ? a.channelID : null, b ? b.channelID : null, b.member.user.username);
|
if (b.userID !== '66564597481480192') return;
|
||||||
|
console.log(a ? a.status : null, b.status, b.user.username);
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('message', m => {
|
client.on('message', m => {
|
||||||
|
|||||||
Reference in New Issue
Block a user