mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-17 12:03:31 +01:00
Added presence updates, typing and ban adds
This commit is contained in:
@@ -385,7 +385,7 @@ var InternalClient = (function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
InternalClient.prototype.sendWS = function sendWS(object) {
|
InternalClient.prototype.sendWS = function sendWS(object) {
|
||||||
this.websocket.send(JSON.stringify(object));
|
if (this.websocket) this.websocket.send(JSON.stringify(object));
|
||||||
};
|
};
|
||||||
|
|
||||||
InternalClient.prototype.createWS = function createWS(url) {
|
InternalClient.prototype.createWS = function createWS(url) {
|
||||||
@@ -726,6 +726,77 @@ var InternalClient = (function () {
|
|||||||
client.emit("warn", "server member updated but server doesn't exist in cache");
|
client.emit("warn", "server member updated but server doesn't exist in cache");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PacketType.PRESENCE_UPDATE:
|
||||||
|
|
||||||
|
var user = self.users.get("id", data.user.id);
|
||||||
|
|
||||||
|
if (user) {
|
||||||
|
|
||||||
|
data.user.username = data.user.username || user.username;
|
||||||
|
data.user.id = data.user.id || user.id;
|
||||||
|
data.user.avatar = data.user.avatar || user.avatar;
|
||||||
|
data.user.discriminator = data.user.discriminator || user.discriminator;
|
||||||
|
|
||||||
|
var presenceUser = new User(data.user, client);
|
||||||
|
|
||||||
|
if (presenceUser.equalsStrict(user)) {
|
||||||
|
// a real presence update
|
||||||
|
client.emit("presence", user, data.status, data.game_id);
|
||||||
|
user.status = data.status;
|
||||||
|
user.gameID = data.game_id;
|
||||||
|
} else {
|
||||||
|
// a name change or avatar change
|
||||||
|
client.emit("userUpdate", user, presenceUser);
|
||||||
|
self.users.update(user, presenceUser);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
client.emit("warn", "presence update but user not in cache");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case PacketType.TYPING:
|
||||||
|
|
||||||
|
var user = self.users.get("id", data.user_id);
|
||||||
|
var channel = self.channels.get("id", data.channel_id);
|
||||||
|
|
||||||
|
if (user && channel) {
|
||||||
|
|
||||||
|
user.typing.since = Date.now();
|
||||||
|
user.typing.channel = channel;
|
||||||
|
client.emit("userTypingStart", user, channel);
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
if (Date.now() - user.typing.since > 5990) {
|
||||||
|
// they haven't typed since
|
||||||
|
user.typing.since = null;
|
||||||
|
user.typing.channel = null;
|
||||||
|
client.emit("userTypingStop", user, channel);
|
||||||
|
}
|
||||||
|
}, 6000);
|
||||||
|
} else {
|
||||||
|
client.emit("warn", "user typing but user or channel not existant in cache");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.SERVER_BAN_ADD:
|
||||||
|
var user = self.users.get("id", data.user.id);
|
||||||
|
var server = self.servers.get("id", data.guild_id);
|
||||||
|
|
||||||
|
if (user && server) {
|
||||||
|
client.emit("userBanned", user, server);
|
||||||
|
} else {
|
||||||
|
client.emit("warn", "user banned but user/server not in cache.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.SERVER_BAN_REMOVE:
|
||||||
|
var user = self.users.get("id", data.user.id);
|
||||||
|
var server = self.servers.get("id", data.guild_id);
|
||||||
|
|
||||||
|
if (user && server) {
|
||||||
|
client.emit("userUnbanned", user, server);
|
||||||
|
} else {
|
||||||
|
client.emit("warn", "user unbanned but user/server not in cache.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -114,7 +114,11 @@ var PacketType = {
|
|||||||
SERVER_ROLE_UPDATE: "GUILD_ROLE_UPDATE",
|
SERVER_ROLE_UPDATE: "GUILD_ROLE_UPDATE",
|
||||||
SERVER_MEMBER_ADD: "GUILD_MEMBER_ADD",
|
SERVER_MEMBER_ADD: "GUILD_MEMBER_ADD",
|
||||||
SERVER_MEMBER_REMOVE: "GUILD_MEMBER_REMOVE",
|
SERVER_MEMBER_REMOVE: "GUILD_MEMBER_REMOVE",
|
||||||
SERVER_MEMBER_UPDATE: "GUILD_MEMBER_UPDATE"
|
SERVER_MEMBER_UPDATE: "GUILD_MEMBER_UPDATE",
|
||||||
|
PRESENCE_UPDATE: "PRESENCE_UPDATE",
|
||||||
|
TYPING: "TYPING_START",
|
||||||
|
SERVER_BAN_ADD: "GUILD_BAN_ADD",
|
||||||
|
SERVER_BAN_REMOVE: "GUILD_BAN_REMOVE"
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.API_ENDPOINT = API;
|
exports.API_ENDPOINT = API;
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ var User = (function (_Equality) {
|
|||||||
this.avatar = data.avatar;
|
this.avatar = data.avatar;
|
||||||
this.status = data.status || "offline";
|
this.status = data.status || "offline";
|
||||||
this.gameID = data.game_id || null;
|
this.gameID = data.game_id || null;
|
||||||
|
this.typing = {
|
||||||
|
since: null,
|
||||||
|
channel: null
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
User.prototype.mention = function mention() {
|
User.prototype.mention = function mention() {
|
||||||
@@ -33,6 +37,10 @@ var User = (function (_Equality) {
|
|||||||
return this.mention();
|
return this.mention();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
User.prototype.equalsStrict = function equalsStrict(obj) {
|
||||||
|
if (obj instanceof User) return this.id === obj.id && this.username === obj.username && this.discriminator === obj.discriminator && this.avatar === obj.avatar && this.status === obj.status && this.gameID === obj.gameID;else return false;
|
||||||
|
};
|
||||||
|
|
||||||
_createClass(User, [{
|
_createClass(User, [{
|
||||||
key: "avatarURL",
|
key: "avatarURL",
|
||||||
get: function get() {
|
get: function get() {
|
||||||
|
|||||||
@@ -15,8 +15,11 @@ a.on("warn", function (m) {
|
|||||||
a.on("message", function (m) {
|
a.on("message", function (m) {
|
||||||
if (m.content === "$$$") a.reply(m, "I have you cached as being " + m.author.status);
|
if (m.content === "$$$") a.reply(m, "I have you cached as being " + m.author.status);
|
||||||
});
|
});
|
||||||
a.on("serverMemberRemoved", function (r, s) {
|
a.on("userTypingStart", function (user, chan) {
|
||||||
console.log(r, s);
|
console.log(user.username + " typing");
|
||||||
|
});
|
||||||
|
a.on("userTypingStop", function (user, chan) {
|
||||||
|
console.log(user.username + " stopped typing");
|
||||||
});
|
});
|
||||||
|
|
||||||
a.login(process.env["discordEmail"], process.env["discordPass"])["catch"](function (e) {
|
a.login(process.env["discordEmail"], process.env["discordPass"])["catch"](function (e) {
|
||||||
|
|||||||
@@ -415,7 +415,8 @@ class InternalClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendWS(object) {
|
sendWS(object) {
|
||||||
this.websocket.send(JSON.stringify(object));
|
if(this.websocket)
|
||||||
|
this.websocket.send(JSON.stringify(object));
|
||||||
}
|
}
|
||||||
|
|
||||||
createWS(url) {
|
createWS(url) {
|
||||||
@@ -751,6 +752,80 @@ class InternalClient {
|
|||||||
client.emit("warn", "server member updated but server doesn't exist in cache");
|
client.emit("warn", "server member updated but server doesn't exist in cache");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PacketType.PRESENCE_UPDATE:
|
||||||
|
|
||||||
|
var user = self.users.get("id", data.user.id);
|
||||||
|
|
||||||
|
if(user){
|
||||||
|
|
||||||
|
data.user.username = data.user.username || user.username;
|
||||||
|
data.user.id = data.user.id || user.id;
|
||||||
|
data.user.avatar = data.user.avatar || user.avatar;
|
||||||
|
data.user.discriminator = data.user.discriminator || user.discriminator;
|
||||||
|
|
||||||
|
var presenceUser = new User(data.user, client);
|
||||||
|
|
||||||
|
if(presenceUser.equalsStrict(user)){
|
||||||
|
// a real presence update
|
||||||
|
client.emit("presence", user, data.status, data.game_id);
|
||||||
|
user.status = data.status;
|
||||||
|
user.gameID = data.game_id;
|
||||||
|
|
||||||
|
}else{
|
||||||
|
// a name change or avatar change
|
||||||
|
client.emit("userUpdate", user, presenceUser);
|
||||||
|
self.users.update(user, presenceUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
client.emit("warn", "presence update but user not in cache");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case PacketType.TYPING:
|
||||||
|
|
||||||
|
var user = self.users.get("id", data.user_id);
|
||||||
|
var channel = self.channels.get("id", data.channel_id);
|
||||||
|
|
||||||
|
if(user && channel){
|
||||||
|
|
||||||
|
user.typing.since = Date.now();
|
||||||
|
user.typing.channel = channel;
|
||||||
|
client.emit("userTypingStart", user, channel);
|
||||||
|
|
||||||
|
setTimeout( () => {
|
||||||
|
if(Date.now() - user.typing.since > 5990){
|
||||||
|
// they haven't typed since
|
||||||
|
user.typing.since = null;
|
||||||
|
user.typing.channel = null;
|
||||||
|
client.emit("userTypingStop", user, channel);
|
||||||
|
}
|
||||||
|
}, 6000);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
client.emit("warn", "user typing but user or channel not existant in cache");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.SERVER_BAN_ADD:
|
||||||
|
var user = self.users.get("id", data.user.id);
|
||||||
|
var server = self.servers.get("id", data.guild_id);
|
||||||
|
|
||||||
|
if(user && server){
|
||||||
|
client.emit("userBanned", user, server);
|
||||||
|
}else{
|
||||||
|
client.emit("warn", "user banned but user/server not in cache.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.SERVER_BAN_REMOVE:
|
||||||
|
var user = self.users.get("id", data.user.id);
|
||||||
|
var server = self.servers.get("id", data.guild_id);
|
||||||
|
|
||||||
|
if(user && server){
|
||||||
|
client.emit("userUnbanned", user, server);
|
||||||
|
}else{
|
||||||
|
client.emit("warn", "user unbanned but user/server not in cache.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,11 @@ var PacketType = {
|
|||||||
SERVER_ROLE_UPDATE : "GUILD_ROLE_UPDATE",
|
SERVER_ROLE_UPDATE : "GUILD_ROLE_UPDATE",
|
||||||
SERVER_MEMBER_ADD : "GUILD_MEMBER_ADD",
|
SERVER_MEMBER_ADD : "GUILD_MEMBER_ADD",
|
||||||
SERVER_MEMBER_REMOVE : "GUILD_MEMBER_REMOVE",
|
SERVER_MEMBER_REMOVE : "GUILD_MEMBER_REMOVE",
|
||||||
SERVER_MEMBER_UPDATE : "GUILD_MEMBER_UPDATE"
|
SERVER_MEMBER_UPDATE : "GUILD_MEMBER_UPDATE",
|
||||||
|
PRESENCE_UPDATE : "PRESENCE_UPDATE",
|
||||||
|
TYPING : "TYPING_START",
|
||||||
|
SERVER_BAN_ADD : "GUILD_BAN_ADD",
|
||||||
|
SERVER_BAN_REMOVE : "GUILD_BAN_REMOVE"
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.API_ENDPOINT = API;
|
exports.API_ENDPOINT = API;
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ class User extends Equality{
|
|||||||
this.avatar = data.avatar;
|
this.avatar = data.avatar;
|
||||||
this.status = data.status || "offline";
|
this.status = data.status || "offline";
|
||||||
this.gameID = data.game_id || null;
|
this.gameID = data.game_id || null;
|
||||||
|
this.typing = {
|
||||||
|
since : null,
|
||||||
|
channel : null
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
get avatarURL(){
|
get avatarURL(){
|
||||||
@@ -30,6 +34,20 @@ class User extends Equality{
|
|||||||
toString(){
|
toString(){
|
||||||
return this.mention();
|
return this.mention();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
equalsStrict(obj){
|
||||||
|
if(obj instanceof User)
|
||||||
|
return (
|
||||||
|
this.id === obj.id &&
|
||||||
|
this.username === obj.username &&
|
||||||
|
this.discriminator === obj.discriminator &&
|
||||||
|
this.avatar === obj.avatar &&
|
||||||
|
this.status === obj.status &&
|
||||||
|
this.gameID === obj.gameID
|
||||||
|
);
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = User;
|
module.exports = User;
|
||||||
@@ -10,8 +10,12 @@ a.on("message", m => {
|
|||||||
if(m.content === "$$$")
|
if(m.content === "$$$")
|
||||||
a.reply(m, "I have you cached as being " + m.author.status);
|
a.reply(m, "I have you cached as being " + m.author.status);
|
||||||
});
|
});
|
||||||
a.on("serverMemberRemoved", (r, s) => {
|
a.on("userTypingStart", (user, chan) => {
|
||||||
console.log(r, s);
|
console.log(user.username + " typing");
|
||||||
|
});
|
||||||
|
a.on("userTypingStop", (user, chan) => {
|
||||||
|
console.log(user.username + " stopped typing");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
a.login(process.env["discordEmail"], process.env["discordPass"]).catch((e)=>console.log(e));
|
a.login(process.env["discordEmail"], process.env["discordPass"]).catch((e)=>console.log(e));
|
||||||
Reference in New Issue
Block a user