Add notes (#423)

This commit is contained in:
Manuel Kraus
2016-06-15 06:04:47 +02:00
committed by abal
parent 7f864578e0
commit 0f4566dd23
10 changed files with 140 additions and 0 deletions

View File

@@ -822,6 +822,16 @@ Set the nickname of a user on a server.
- **callback** - `function` taking the following:
- **error** - error if any occurred.
setNote(user, note, `callback`)
~~~~~~~~~~~~~~~~~~~
Set the note of a user. This will only work for user accounts.
- **user** - A `User Resolvable`_ to which the note is applied.
- **note** - `String`, content of the note, or `null` to clear.
- **callback** - `function` taking the following:
- **error** - error if any occurred.
Events
------
@@ -957,6 +967,11 @@ userUnbanned
Emitted when a user is unbanned from a server. Supplies two parameters, a User_ object and a Server_ object.
noteUpdated
~~~~~~~~~~~
Emitted when a note is updated. Supplies a User_ object (containing the updated note) and the old note.
voiceJoin
~~~~~~~~

View File

@@ -87,6 +87,12 @@ createdAt
A `Date` referring to when the user was created.
note
~~~~
The note of the user, `String`.
Functions
---------

View File

@@ -791,6 +791,14 @@ var Client = (function (_EventEmitter) {
return this.internal.setNickname(server, nick, user).then(dataCallback(callback), errorCallback(callback));
};
// def setNote
Client.prototype.setNote = function setNote(user, note) {
var callback = arguments.length <= 2 || arguments[2] === undefined ? function () /*err, {}*/{} : arguments[2];
return this.internal.setNote(user, note).then(dataCallback(callback), errorCallback(callback));
};
// def createRole
Client.prototype.createRole = function createRole(server) {

View File

@@ -1060,6 +1060,19 @@ var InternalClient = (function () {
return this.apiRequest("patch", _Constants.Endpoints.SERVER_MEMBERS(server.id) + "/" + (user.id === this.user.id ? "@me/nick" : user.id), true, { nick: nick });
};
//def setNote
InternalClient.prototype.setNote = function setNote(user, note) {
user = this.resolver.resolveUser(user);
note = note || "";
if (!user) {
return Promise.reject(new Error("Failed to resolve user"));
}
return this.apiRequest("put", _Constants.Endpoints.ME_NOTES + "/" + user.id, true, { note: note });
};
// def createRole
InternalClient.prototype.createRole = function createRole(server, data) {
@@ -1778,6 +1791,22 @@ var InternalClient = (function () {
self.incoming_friend_requests = null;
self.outgoing_friend_requests = null;
}
// add notes to users
if (data.notes) {
for (note in data.notes) {
var user = self.users.get("id", note);
if (user) {
var newUser = user;
newUser.note = data.notes[note];
self.users.update(user, newUser);
} else {
client.emit("warn", "note in ready packet but user not cached");
}
}
}
self.state = _ConnectionState2["default"].READY;
client.emit("debug", "ready packet took " + (Date.now() - startTime) + "ms to process");
@@ -2242,6 +2271,26 @@ var InternalClient = (function () {
client.emit("warn", "user unbanned but user/server not in cache.");
}
break;
case _Constants.PacketType.USER_NOTE_UPDATE:
if (_this36.user.bot) {
return;
}
var user = self.users.get("id", data.id);
var oldNote = user.note;
var note = data.note || null;
// user in cache
if (user) {
var updatedUser = user;
updatedUser.note = note;
client.emit("noteUpdated", user, oldNote);
self.users.update(user, updatedUser);
} else {
client.emit("warn", "note updated but user not in cache");
}
break;
case _Constants.PacketType.VOICE_STATE_UPDATE:
var user = self.users.get("id", data.user_id);
var server = self.servers.get("id", data.guild_id);

View File

@@ -12,6 +12,7 @@ var Endpoints = {
ME_SERVER: function ME_SERVER(serverID) {
return Endpoints.ME + "/guilds/" + serverID;
},
ME_NOTES: API + "/users/@me/notes",
GATEWAY: API + "/gateway",
AVATAR: function AVATAR(userID, avatar) {
return API + "/users/" + userID + "/avatars/" + avatar + ".jpg";
@@ -135,6 +136,7 @@ var PacketType = {
SERVER_UPDATE: "GUILD_UPDATE",
TYPING: "TYPING_START",
USER_UPDATE: "USER_UPDATE",
USER_NOTE_UPDATE: "USER_NOTE_UPDATE",
VOICE_STATE_UPDATE: "VOICE_STATE_UPDATE",
FRIEND_ADD: "RELATIONSHIP_ADD",
FRIEND_REMOVE: "RELATIONSHIP_REMOVE"

View File

@@ -37,6 +37,7 @@ var User = (function (_Equality) {
since: null,
channel: null
};
this.note = data.note || null;
this.voiceChannel = null;
this.voiceState = {};
}

View File

@@ -848,6 +848,12 @@ export default class Client extends EventEmitter {
.then(dataCallback(callback), errorCallback(callback));
}
// def setNote
setNote(user, note, callback = (/*err, {}*/) => { }) {
return this.internal.setNote(user,note)
.then(dataCallback(callback), errorCallback(callback));
}
// def createRole
createRole(server, data = null, callback = (/*err, role*/) => { }) {
if (typeof data === "function") {

View File

@@ -915,6 +915,18 @@ export default class InternalClient {
return this.apiRequest("patch", `${Endpoints.SERVER_MEMBERS(server.id)}/${user.id === this.user.id ? "@me/nick" : user.id}`, true, { nick: nick });
}
//def setNote
setNote(user, note) {
user = this.resolver.resolveUser(user);
note = note || "";
if(!user) {
return Promise.reject(new Error("Failed to resolve user"));
}
return this.apiRequest("put", `${Endpoints.ME_NOTES}/${user.id}`, true, { note: note });
}
// def createRole
createRole(server, data) {
server = this.resolver.resolveServer(server);
@@ -1551,6 +1563,23 @@ export default class InternalClient {
self.incoming_friend_requests = null;
self.outgoing_friend_requests = null;
}
// add notes to users
if(data.notes) {
for(note in data.notes) {
var user = self.users.get("id", note);
if(user) {
var newUser = user;
newUser.note = data.notes[note];
self.users.update(user, newUser);
} else {
client.emit("warn", "note in ready packet but user not cached");
}
}
}
self.state = ConnectionState.READY;
client.emit("debug", `ready packet took ${Date.now() - startTime}ms to process`);
@@ -1985,6 +2014,27 @@ export default class InternalClient {
client.emit("warn", "user unbanned but user/server not in cache.");
}
break;
case PacketType.USER_NOTE_UPDATE:
if(this.user.bot) {
return;
}
var user = self.users.get("id", data.id);
var oldNote = user.note;
var note = data.note || null;
// user in cache
if(user) {
var updatedUser = user;
updatedUser.note = note;
client.emit("noteUpdated", user, oldNote);
self.users.update(user, updatedUser);
} else {
client.emit("warn", "note updated but user not in cache");
}
break;
case PacketType.VOICE_STATE_UPDATE:
var user = self.users.get("id", data.user_id);
var server = self.servers.get("id", data.guild_id);

View File

@@ -8,6 +8,7 @@ export const Endpoints = {
ME: `${API}/users/@me`,
ME_CHANNELS: `${API}/users/@me/channels`,
ME_SERVER: (serverID) => `${Endpoints.ME}/guilds/${serverID}`,
ME_NOTES: `${API}/users/@me/notes`,
GATEWAY: `${API}/gateway`,
AVATAR : (userID, avatar) => `${API}/users/${userID}/avatars/${avatar}.jpg`,
INVITE: (id) => `${API}/invite/${id}`,
@@ -93,6 +94,7 @@ export const PacketType = {
SERVER_UPDATE : "GUILD_UPDATE",
TYPING : "TYPING_START",
USER_UPDATE : "USER_UPDATE",
USER_NOTE_UPDATE: "USER_NOTE_UPDATE",
VOICE_STATE_UPDATE : "VOICE_STATE_UPDATE",
FRIEND_ADD : "RELATIONSHIP_ADD",
FRIEND_REMOVE : "RELATIONSHIP_REMOVE"

View File

@@ -19,6 +19,7 @@ export default class User extends Equality{
since : null,
channel : null
};
this.note = data.note || null;
this.voiceChannel = null;
this.voiceState = {};
}