mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-13 10:03:31 +01:00
Added VoiceStateUpdate handler and DataStore for VoiceChannels. Also added toString methods to Guilds, DMChannels, ServerChannels and Users.
This commit is contained in:
@@ -34,6 +34,7 @@ class WebSocketPacketManager {
|
||||
this.register(Constants.WSEvents.CHANNEL_UPDATE, 'ChannelUpdate');
|
||||
this.register(Constants.WSEvents.PRESENCE_UPDATE, 'PresenceUpdate');
|
||||
this.register(Constants.WSEvents.USER_UPDATE, 'UserUpdate');
|
||||
this.register(Constants.WSEvents.VOICE_STATE_UPDATE, 'VoiceStateUpdate');
|
||||
}
|
||||
|
||||
get client() {
|
||||
|
||||
43
src/client/websocket/packets/handlers/VoiceStateUpdate.js
Normal file
43
src/client/websocket/packets/handlers/VoiceStateUpdate.js
Normal file
@@ -0,0 +1,43 @@
|
||||
'use strict';
|
||||
|
||||
const AbstractHandler = require('./AbstractHandler');
|
||||
const Structure = name => require(`../../../../structures/${name}`);
|
||||
const Constants = require('../../../../util/Constants');
|
||||
const CloneObject = require('../../../../util/CloneObject');
|
||||
|
||||
const Role = Structure('User');
|
||||
|
||||
class VoiceStateUpdateHandler extends AbstractHandler {
|
||||
|
||||
constructor(packetManager) {
|
||||
super(packetManager);
|
||||
}
|
||||
|
||||
handle(packet) {
|
||||
let data = packet.d;
|
||||
let client = this.packetManager.client;
|
||||
let guild = client.store.get('guilds', data.guild_id);
|
||||
|
||||
if (guild) {
|
||||
let member = guild.store.get('members', data.user_id);
|
||||
let channel = guild.store.get('channels', data.channel_id);
|
||||
if (member) {
|
||||
let oldVoiceChannelMember = CloneObject(member);
|
||||
if (member.voiceChannel && member.voiceChannel.id !== data.channel_id) {
|
||||
member.voiceChannel.store.remove('members', oldVoiceChannelMember);
|
||||
}
|
||||
|
||||
member.serverMute = data.mute;
|
||||
member.serverDeaf = data.deaf;
|
||||
member.selfMute = data.self_mute;
|
||||
member.selfDeaf = data.self_deaf;
|
||||
member.voiceSessionID = data.session_id;
|
||||
member.voiceChannelID = data.channel_id;
|
||||
client.emit(Constants.Events.VOICE_STATE_UPDATE, oldVoiceChannelMember, member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports = VoiceStateUpdateHandler;
|
||||
@@ -12,6 +12,10 @@ class DMChannel extends Channel{
|
||||
this.recipient = this.client.store.add('users', new User(this.client, data.recipient));
|
||||
this.lastMessageID = data.last_message_id;
|
||||
}
|
||||
|
||||
toString() {
|
||||
return this.recipient.toString();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DMChannel;
|
||||
|
||||
@@ -56,6 +56,10 @@ class Guild {
|
||||
}
|
||||
}
|
||||
|
||||
toString() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
setup(data) {
|
||||
this.id = data.id;
|
||||
this.available = !data.unavailable;
|
||||
@@ -106,6 +110,20 @@ class Guild {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (data.voice_states) {
|
||||
for (let voiceState of data.voice_states) {
|
||||
let member = this.store.get('members', voiceState.user_id);
|
||||
if (member) {
|
||||
member.serverMute = voiceState.mute;
|
||||
member.serverDeaf = voiceState.deaf;
|
||||
member.selfMute = voiceState.self_mute;
|
||||
member.selfDeaf = voiceState.self_deaf;
|
||||
member.voiceSessionID = voiceState.session_id;
|
||||
member.voiceChannelID = voiceState.channel_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,8 +13,12 @@ class GuildMember {
|
||||
|
||||
setup(data) {
|
||||
this.user = data.user;
|
||||
this.deaf = data.deaf;
|
||||
this.mute = data.mute;
|
||||
this.serverDeaf = data.deaf;
|
||||
this.serverMute = data.mute;
|
||||
this.selfMute = data.self_mute;
|
||||
this.selfDeaf = data.self_deaf;
|
||||
this.voiceSessionID = data.session_id;
|
||||
this.voiceChannelID = data.channel_id;
|
||||
this.joinDate = new Date(data.joined_at);
|
||||
this._roles = data.roles;
|
||||
}
|
||||
@@ -31,6 +35,18 @@ class GuildMember {
|
||||
return list;
|
||||
}
|
||||
|
||||
get mute() {
|
||||
return this.selfMute || this.serverMute;
|
||||
}
|
||||
|
||||
get deaf() {
|
||||
return this.selfDeaf || this.serverDeaf;
|
||||
}
|
||||
|
||||
get voiceChannel() {
|
||||
return this.guild.store.get('channels', this.voiceChannelID);
|
||||
}
|
||||
|
||||
get id() {
|
||||
return this.user.id;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,10 @@ class ServerChannel extends Channel{
|
||||
this.name = data.name;
|
||||
this.lastMessageID = data.last_message_id;
|
||||
}
|
||||
|
||||
toString() {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ServerChannel;
|
||||
|
||||
@@ -17,6 +17,10 @@ class User {
|
||||
this.status = data.status || 'offline';
|
||||
this.game = data.game;
|
||||
}
|
||||
|
||||
toString() {
|
||||
return `<@${this.id}>`;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = User;
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
const ServerChannel = require('./ServerChannel');
|
||||
const VoiceChannelDataStore = require('./datastore/VoiceChannelDataStore');
|
||||
|
||||
class VoiceChannel extends ServerChannel {
|
||||
constructor(guild, data) {
|
||||
super(guild, data);
|
||||
this.store = new VoiceChannelDataStore();
|
||||
}
|
||||
|
||||
setup(data) {
|
||||
|
||||
12
src/structures/datastore/VoiceChannelDataStore.js
Normal file
12
src/structures/datastore/VoiceChannelDataStore.js
Normal file
@@ -0,0 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
const AbstractDataStore = require('./AbstractDataStore');
|
||||
|
||||
class VoiceChannelDataStore extends AbstractDataStore{
|
||||
constructor() {
|
||||
super();
|
||||
this.register('members');
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = VoiceChannelDataStore;
|
||||
@@ -93,6 +93,7 @@ const Events = exports.Events = {
|
||||
CHANNEL_UPDATE: 'channelUpdate',
|
||||
PRESENCE_UPDATE: 'presenceUpdate',
|
||||
USER_UPDATE: 'userUpdate',
|
||||
VOICE_STATE_UPDATE: 'voiceStateUpdate',
|
||||
WARN: 'warn',
|
||||
};
|
||||
|
||||
|
||||
@@ -52,3 +52,7 @@ client.on('guildRoleUpdate', (guild, old, newRole) => {
|
||||
client.on('presenceUpdate', (oldUser, newUser) => {
|
||||
// console.log('presence from', oldUser.username, 'to', newUser.username);
|
||||
});
|
||||
|
||||
client.on('voiceStateUpdate', (oldMember, newMember) => {
|
||||
console.log('voiceState', oldMember.user.username, oldMember.voiceChannel + '', newMember.voiceChannel + '');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user