mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-18 12:33:30 +01:00
Added websocket voice state watching
Now emits voiceJoin(user, voice_channel) or voiceLeave(user, voice_channel) and adds/removes from voice_channel.speaking when a user joins or leaves a voice channel.
This commit is contained in:
@@ -660,3 +660,13 @@ userUnbanned
|
|||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
Emitted when a user is unbanned from a server. Supplies two parameters, a User_ object and a Server_ object.
|
Emitted when a user is unbanned from a server. Supplies two parameters, a User_ object and a Server_ object.
|
||||||
|
|
||||||
|
voiceJoin
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
Emitted when a user joins a voice channel, supplies a User_ and a VoiceChannel_
|
||||||
|
|
||||||
|
voiceLeave
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
Emitted when a user leaves a voice channel, supplies a User_ and a VoiceChannel_
|
||||||
@@ -8,3 +8,12 @@ VoiceChannel
|
|||||||
A voice channel of a server. Currently, the voice channel class has no differences to the ServerChannel class.
|
A voice channel of a server. Currently, the voice channel class has no differences to the ServerChannel class.
|
||||||
|
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
|
||||||
|
speaking
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
A Cache_ of User_s that are speaking in the voice channel
|
||||||
@@ -1592,6 +1592,30 @@ var InternalClient = (function () {
|
|||||||
} else {
|
} else {
|
||||||
client.emit("warn", "user unbanned but user/server not in cache.");
|
client.emit("warn", "user unbanned but user/server 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);
|
||||||
|
|
||||||
|
if (user && server) {
|
||||||
|
|
||||||
|
if (data.channel_id) {
|
||||||
|
// speaking
|
||||||
|
var channel = self.channels.get("id", data.channel_id);
|
||||||
|
if (channel) {
|
||||||
|
if (server.eventStartSpeaking(user, channel)) client.emit("voiceJoin", user, channel);else client.emit("warn", "voice state error occurred in adding");
|
||||||
|
} else {
|
||||||
|
client.emit("warn", "voice state channel not in cache");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// not speaking
|
||||||
|
client.emit("voiceLeave", user, server.eventStopSpeaking(user));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
client.emit("warn", "voice state update but user or server not in cache");
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
client.emit("unknown", packet);
|
client.emit("unknown", packet);
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ var PacketType = {
|
|||||||
PRESENCE_UPDATE: "PRESENCE_UPDATE",
|
PRESENCE_UPDATE: "PRESENCE_UPDATE",
|
||||||
TYPING: "TYPING_START",
|
TYPING: "TYPING_START",
|
||||||
SERVER_BAN_ADD: "GUILD_BAN_ADD",
|
SERVER_BAN_ADD: "GUILD_BAN_ADD",
|
||||||
SERVER_BAN_REMOVE: "GUILD_BAN_REMOVE"
|
SERVER_BAN_REMOVE: "GUILD_BAN_REMOVE",
|
||||||
|
VOICE_STATE_UPDATE: "VOICE_STATE_UPDATE"
|
||||||
};
|
};
|
||||||
exports.PacketType = PacketType;
|
exports.PacketType = PacketType;
|
||||||
|
|||||||
@@ -148,21 +148,60 @@ var Server = (function (_Equality) {
|
|||||||
return this.name;
|
return this.name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Server.prototype.eventStartSpeaking = function eventStartSpeaking(user, channel) {
|
||||||
|
channel = this.channels.get("id", channel.id);
|
||||||
|
if (channel) {
|
||||||
|
// good
|
||||||
|
|
||||||
|
// removes from other speaking channels first
|
||||||
|
this.eventStopSpeaking(user);
|
||||||
|
|
||||||
|
channel.speaking.add(user);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
// bad
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Server.prototype.eventStopSpeaking = function eventStopSpeaking(user) {
|
||||||
|
for (var _iterator2 = this.channels.getAll("type", "voice"), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
||||||
|
var _ref2;
|
||||||
|
|
||||||
|
if (_isArray2) {
|
||||||
|
if (_i2 >= _iterator2.length) break;
|
||||||
|
_ref2 = _iterator2[_i2++];
|
||||||
|
} else {
|
||||||
|
_i2 = _iterator2.next();
|
||||||
|
if (_i2.done) break;
|
||||||
|
_ref2 = _i2.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var chan = _ref2;
|
||||||
|
|
||||||
|
if (chan.speaking.has(user)) {
|
||||||
|
chan.speaking.remove(user);
|
||||||
|
return chan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
Server.prototype.equalsStrict = function equalsStrict(obj) {
|
Server.prototype.equalsStrict = function equalsStrict(obj) {
|
||||||
if (obj instanceof Server) {
|
if (obj instanceof Server) {
|
||||||
for (var _iterator2 = strictKeys, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
for (var _iterator3 = strictKeys, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
|
||||||
var _ref2;
|
var _ref3;
|
||||||
|
|
||||||
if (_isArray2) {
|
if (_isArray3) {
|
||||||
if (_i2 >= _iterator2.length) break;
|
if (_i3 >= _iterator3.length) break;
|
||||||
_ref2 = _iterator2[_i2++];
|
_ref3 = _iterator3[_i3++];
|
||||||
} else {
|
} else {
|
||||||
_i2 = _iterator2.next();
|
_i3 = _iterator3.next();
|
||||||
if (_i2.done) break;
|
if (_i3.done) break;
|
||||||
_ref2 = _i2.value;
|
_ref3 = _i3.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var key = _ref2;
|
var key = _ref3;
|
||||||
|
|
||||||
if (obj[key] !== this[key]) {
|
if (obj[key] !== this[key]) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1417,6 +1417,34 @@ export default class InternalClient {
|
|||||||
} else {
|
} else {
|
||||||
client.emit("warn", "user unbanned but user/server not in cache.");
|
client.emit("warn", "user unbanned but user/server 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);
|
||||||
|
|
||||||
|
if(user && server){
|
||||||
|
|
||||||
|
if(data.channel_id){
|
||||||
|
// speaking
|
||||||
|
var channel = self.channels.get("id", data.channel_id);
|
||||||
|
if(channel){
|
||||||
|
if(server.eventStartSpeaking(user, channel))
|
||||||
|
client.emit("voiceJoin", user, channel);
|
||||||
|
else
|
||||||
|
client.emit("warn", "voice state error occurred in adding");
|
||||||
|
}else{
|
||||||
|
client.emit("warn", "voice state channel not in cache");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
// not speaking
|
||||||
|
client.emit("voiceLeave", user, server.eventStopSpeaking(user));
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
client.emit("warn", "voice state update but user or server not in cache");
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
client.emit("unknown", packet);
|
client.emit("unknown", packet);
|
||||||
|
|||||||
@@ -83,5 +83,6 @@ export const PacketType = {
|
|||||||
PRESENCE_UPDATE : "PRESENCE_UPDATE",
|
PRESENCE_UPDATE : "PRESENCE_UPDATE",
|
||||||
TYPING : "TYPING_START",
|
TYPING : "TYPING_START",
|
||||||
SERVER_BAN_ADD : "GUILD_BAN_ADD",
|
SERVER_BAN_ADD : "GUILD_BAN_ADD",
|
||||||
SERVER_BAN_REMOVE : "GUILD_BAN_REMOVE"
|
SERVER_BAN_REMOVE: "GUILD_BAN_REMOVE",
|
||||||
|
VOICE_STATE_UPDATE : "VOICE_STATE_UPDATE"
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -129,6 +129,32 @@ export default class Server extends Equality {
|
|||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eventStartSpeaking(user, channel){
|
||||||
|
channel = this.channels.get("id", channel.id);
|
||||||
|
if(channel){
|
||||||
|
// good
|
||||||
|
|
||||||
|
// removes from other speaking channels first
|
||||||
|
this.eventStopSpeaking(user);
|
||||||
|
|
||||||
|
channel.speaking.add(user);
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
// bad
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eventStopSpeaking(user){
|
||||||
|
for(let chan of this.channels.getAll("type", "voice")){
|
||||||
|
if(chan.speaking.has(user)){
|
||||||
|
chan.speaking.remove(user);
|
||||||
|
return chan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
equalsStrict(obj) {
|
equalsStrict(obj) {
|
||||||
if (obj instanceof Server) {
|
if (obj instanceof Server) {
|
||||||
for (var key of strictKeys) {
|
for (var key of strictKeys) {
|
||||||
|
|||||||
@@ -13,6 +13,14 @@ client.on("autoRevive", () => {
|
|||||||
console.log("auto revived");
|
console.log("auto revived");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
client.on("voiceJoin", (user, channel) => {
|
||||||
|
console.log(`VOICE ${user.username} joined ${channel}!`);
|
||||||
|
});
|
||||||
|
|
||||||
|
client.on("voiceLeave", (user, channel) => {
|
||||||
|
console.log(`VOICE ${user.username} left ${channel}!`);
|
||||||
|
});
|
||||||
|
|
||||||
client.on("message", msg => {
|
client.on("message", msg => {
|
||||||
|
|
||||||
if(!msg.sender.equals(client.user))
|
if(!msg.sender.equals(client.user))
|
||||||
|
|||||||
Reference in New Issue
Block a user