mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-16 19:43:29 +01:00
Add support for notes (#860)
* Add support for notes * Ensure consistency with notes from ready payload * Add getter method for users * Minor tweaks * Update warning messages * More minor fixes
This commit is contained in:
committed by
Schuyler Cebulskie
parent
a673a97441
commit
6dc95cd084
@@ -21,6 +21,7 @@ class ActionsManager {
|
|||||||
this.register('GuildRoleUpdate');
|
this.register('GuildRoleUpdate');
|
||||||
this.register('UserGet');
|
this.register('UserGet');
|
||||||
this.register('UserUpdate');
|
this.register('UserUpdate');
|
||||||
|
this.register('UserNoteUpdate');
|
||||||
this.register('GuildSync');
|
this.register('GuildSync');
|
||||||
this.register('GuildEmojiCreate');
|
this.register('GuildEmojiCreate');
|
||||||
this.register('GuildEmojiDelete');
|
this.register('GuildEmojiDelete');
|
||||||
|
|||||||
30
src/client/actions/UserNoteUpdate.js
Normal file
30
src/client/actions/UserNoteUpdate.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
const Action = require('./Action');
|
||||||
|
const Constants = require('../../util/Constants');
|
||||||
|
|
||||||
|
class UserNoteUpdateAction extends Action {
|
||||||
|
handle(data) {
|
||||||
|
const client = this.client;
|
||||||
|
|
||||||
|
const oldNote = client.user.notes.get(data.id);
|
||||||
|
const note = data.note.length ? data.note : null;
|
||||||
|
|
||||||
|
client.user.notes.set(data.id, note);
|
||||||
|
|
||||||
|
client.emit(Constants.Events.USER_NOTE_UPDATE, data.id, oldNote, note);
|
||||||
|
|
||||||
|
return {
|
||||||
|
old: oldNote,
|
||||||
|
updated: note,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted whenever a note is updated.
|
||||||
|
* @event Client#userNoteUpdate
|
||||||
|
* @param {User} user The user the note belongs to
|
||||||
|
* @param {string} oldNote The note content before the update
|
||||||
|
* @param {string} newNote The note content after the update
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = UserNoteUpdateAction;
|
||||||
@@ -616,6 +616,11 @@ class RESTMethods {
|
|||||||
new ClientOAuth2Application(this.rest.client, app)
|
new ClientOAuth2Application(this.rest.client, app)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setNote(user, note) {
|
||||||
|
return this.rest.makeRequest('put', Constants.Endpoints.note(user.id), true, { note })
|
||||||
|
.then(() => user);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = RESTMethods;
|
module.exports = RESTMethods;
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class WebSocketPacketManager {
|
|||||||
this.register(Constants.WSEvents.CHANNEL_UPDATE, 'ChannelUpdate');
|
this.register(Constants.WSEvents.CHANNEL_UPDATE, 'ChannelUpdate');
|
||||||
this.register(Constants.WSEvents.PRESENCE_UPDATE, 'PresenceUpdate');
|
this.register(Constants.WSEvents.PRESENCE_UPDATE, 'PresenceUpdate');
|
||||||
this.register(Constants.WSEvents.USER_UPDATE, 'UserUpdate');
|
this.register(Constants.WSEvents.USER_UPDATE, 'UserUpdate');
|
||||||
|
this.register(Constants.WSEvents.USER_NOTE_UPDATE, 'UserNoteUpdate');
|
||||||
this.register(Constants.WSEvents.VOICE_STATE_UPDATE, 'VoiceStateUpdate');
|
this.register(Constants.WSEvents.VOICE_STATE_UPDATE, 'VoiceStateUpdate');
|
||||||
this.register(Constants.WSEvents.TYPING_START, 'TypingStart');
|
this.register(Constants.WSEvents.TYPING_START, 'TypingStart');
|
||||||
this.register(Constants.WSEvents.MESSAGE_CREATE, 'MessageCreate');
|
this.register(Constants.WSEvents.MESSAGE_CREATE, 'MessageCreate');
|
||||||
|
|||||||
@@ -31,6 +31,15 @@ class ReadyHandler extends AbstractHandler {
|
|||||||
client._setPresence(presence.user.id, presence);
|
client._setPresence(presence.user.id, presence);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.notes) {
|
||||||
|
for (const user in data.notes) {
|
||||||
|
let note = data.notes[user];
|
||||||
|
if (!note.length) note = null;
|
||||||
|
|
||||||
|
client.user.notes.set(user, note);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!client.user.bot && client.options.sync) client.setInterval(client.syncGuilds.bind(client), 30000);
|
if (!client.user.bot && client.options.sync) client.setInterval(client.syncGuilds.bind(client), 30000);
|
||||||
client.once('ready', client.syncGuilds.bind(client));
|
client.once('ready', client.syncGuilds.bind(client));
|
||||||
|
|
||||||
|
|||||||
12
src/client/websocket/packets/handlers/UserNoteUpdate.js
Normal file
12
src/client/websocket/packets/handlers/UserNoteUpdate.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
const AbstractHandler = require('./AbstractHandler');
|
||||||
|
|
||||||
|
class UserNoteUpdateHandler extends AbstractHandler {
|
||||||
|
handle(packet) {
|
||||||
|
const client = this.packetManager.client;
|
||||||
|
const data = packet.d;
|
||||||
|
|
||||||
|
client.actions.UserNoteUpdate.handle(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = UserNoteUpdateHandler;
|
||||||
@@ -36,6 +36,13 @@ class ClientUser extends User {
|
|||||||
* @type {Collection<string, User>}
|
* @type {Collection<string, User>}
|
||||||
*/
|
*/
|
||||||
this.blocked = new Collection();
|
this.blocked = new Collection();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Collection of notes for the logged in user.
|
||||||
|
* <warn>This is only filled for user accounts, not bot accounts.</warn>
|
||||||
|
* @type {Collection<string, string>}
|
||||||
|
*/
|
||||||
|
this.notes = new Collection();
|
||||||
}
|
}
|
||||||
|
|
||||||
edit(data) {
|
edit(data) {
|
||||||
|
|||||||
@@ -97,6 +97,16 @@ class User {
|
|||||||
return Constants.Endpoints.avatar(this.id, this.avatar);
|
return Constants.Endpoints.avatar(this.id, this.avatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The note that is set for the user
|
||||||
|
* <warn>This is only available for user accounts.</warn>
|
||||||
|
* @type {?string}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get note() {
|
||||||
|
return this.client.user.notes.get(this.id) || null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the user is typing in a channel.
|
* Check whether the user is typing in a channel.
|
||||||
* @param {ChannelResolvable} channel The channel to check in
|
* @param {ChannelResolvable} channel The channel to check in
|
||||||
@@ -137,6 +147,7 @@ class User {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a friend request to the user
|
* Sends a friend request to the user
|
||||||
|
* <warn>This is only available for user accounts.</warn>
|
||||||
* @returns {Promise<User>}
|
* @returns {Promise<User>}
|
||||||
*/
|
*/
|
||||||
addFriend() {
|
addFriend() {
|
||||||
@@ -145,6 +156,7 @@ class User {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the user from your friends
|
* Removes the user from your friends
|
||||||
|
* <warn>This is only available for user accounts.</warn>
|
||||||
* @returns {Promise<User>}
|
* @returns {Promise<User>}
|
||||||
*/
|
*/
|
||||||
removeFriend() {
|
removeFriend() {
|
||||||
@@ -153,6 +165,7 @@ class User {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Blocks the user
|
* Blocks the user
|
||||||
|
* <warn>This is only available for user accounts.</warn>
|
||||||
* @returns {Promise<User>}
|
* @returns {Promise<User>}
|
||||||
*/
|
*/
|
||||||
block() {
|
block() {
|
||||||
@@ -161,6 +174,7 @@ class User {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Unblocks the user
|
* Unblocks the user
|
||||||
|
* <warn>This is only available for user accounts.</warn>
|
||||||
* @returns {Promise<User>}
|
* @returns {Promise<User>}
|
||||||
*/
|
*/
|
||||||
unblock() {
|
unblock() {
|
||||||
@@ -175,6 +189,16 @@ class User {
|
|||||||
return this.client.rest.methods.fetchUserProfile(this);
|
return this.client.rest.methods.fetchUserProfile(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a note for the user
|
||||||
|
* <warn>This is only available for user accounts.</warn>
|
||||||
|
* @param {string} note The note to set for the user
|
||||||
|
* @returns {Promise<User>}
|
||||||
|
*/
|
||||||
|
setNote(note) {
|
||||||
|
return this.client.rest.methods.setNote(this, note);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the user is equal to another. It compares username, ID, discriminator, status and the game being played.
|
* Checks if the user is equal to another. It compares username, ID, discriminator, status and the game being played.
|
||||||
* It is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.
|
* It is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ const Endpoints = exports.Endpoints = {
|
|||||||
me: `${API}/users/@me`,
|
me: `${API}/users/@me`,
|
||||||
meGuild: (guildID) => `${Endpoints.me}/guilds/${guildID}`,
|
meGuild: (guildID) => `${Endpoints.me}/guilds/${guildID}`,
|
||||||
relationships: (userID) => `${Endpoints.user(userID)}/relationships`,
|
relationships: (userID) => `${Endpoints.user(userID)}/relationships`,
|
||||||
|
note: (userID) => `${Endpoints.me}/notes/${userID}`,
|
||||||
|
|
||||||
// guilds
|
// guilds
|
||||||
guilds: `${API}/guilds`,
|
guilds: `${API}/guilds`,
|
||||||
@@ -206,6 +207,7 @@ exports.Events = {
|
|||||||
MESSAGE_REACTION_ADD: 'messageReactionAdd',
|
MESSAGE_REACTION_ADD: 'messageReactionAdd',
|
||||||
MESSAGE_REACTION_REMOVE: 'messageReactionRemove',
|
MESSAGE_REACTION_REMOVE: 'messageReactionRemove',
|
||||||
USER_UPDATE: 'userUpdate',
|
USER_UPDATE: 'userUpdate',
|
||||||
|
USER_NOTE_UPDATE: 'userNoteUpdate',
|
||||||
PRESENCE_UPDATE: 'presenceUpdate',
|
PRESENCE_UPDATE: 'presenceUpdate',
|
||||||
VOICE_STATE_UPDATE: 'voiceStateUpdate',
|
VOICE_STATE_UPDATE: 'voiceStateUpdate',
|
||||||
TYPING_START: 'typingStart',
|
TYPING_START: 'typingStart',
|
||||||
@@ -243,6 +245,7 @@ exports.WSEvents = {
|
|||||||
MESSAGE_REACTION_ADD: 'MESSAGE_REACTION_ADD',
|
MESSAGE_REACTION_ADD: 'MESSAGE_REACTION_ADD',
|
||||||
MESSAGE_REACTION_REMOVE: 'MESSAGE_REACTION_REMOVE',
|
MESSAGE_REACTION_REMOVE: 'MESSAGE_REACTION_REMOVE',
|
||||||
USER_UPDATE: 'USER_UPDATE',
|
USER_UPDATE: 'USER_UPDATE',
|
||||||
|
USER_NOTE_UPDATE: 'USER_NOTE_UPDATE',
|
||||||
PRESENCE_UPDATE: 'PRESENCE_UPDATE',
|
PRESENCE_UPDATE: 'PRESENCE_UPDATE',
|
||||||
VOICE_STATE_UPDATE: 'VOICE_STATE_UPDATE',
|
VOICE_STATE_UPDATE: 'VOICE_STATE_UPDATE',
|
||||||
TYPING_START: 'TYPING_START',
|
TYPING_START: 'TYPING_START',
|
||||||
|
|||||||
Reference in New Issue
Block a user