Added VoiceStateUpdate handler and DataStore for VoiceChannels. Also added toString methods to Guilds, DMChannels, ServerChannels and Users.

This commit is contained in:
hydrabolt
2016-04-17 19:12:29 +01:00
parent 685d7b622c
commit d1d13f5c85
11 changed files with 111 additions and 2 deletions

View File

@@ -34,6 +34,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.VOICE_STATE_UPDATE, 'VoiceStateUpdate');
} }
get client() { get client() {

View 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;

View File

@@ -12,6 +12,10 @@ class DMChannel extends Channel{
this.recipient = this.client.store.add('users', new User(this.client, data.recipient)); this.recipient = this.client.store.add('users', new User(this.client, data.recipient));
this.lastMessageID = data.last_message_id; this.lastMessageID = data.last_message_id;
} }
toString() {
return this.recipient.toString();
}
} }
module.exports = DMChannel; module.exports = DMChannel;

View File

@@ -56,6 +56,10 @@ class Guild {
} }
} }
toString() {
return this.name;
}
setup(data) { setup(data) {
this.id = data.id; this.id = data.id;
this.available = !data.unavailable; 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;
}
}
}
} }
} }

View File

@@ -13,8 +13,12 @@ class GuildMember {
setup(data) { setup(data) {
this.user = data.user; this.user = data.user;
this.deaf = data.deaf; this.serverDeaf = data.deaf;
this.mute = data.mute; 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.joinDate = new Date(data.joined_at);
this._roles = data.roles; this._roles = data.roles;
} }
@@ -31,6 +35,18 @@ class GuildMember {
return list; 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() { get id() {
return this.user.id; return this.user.id;
} }

View File

@@ -17,6 +17,10 @@ class ServerChannel extends Channel{
this.name = data.name; this.name = data.name;
this.lastMessageID = data.last_message_id; this.lastMessageID = data.last_message_id;
} }
toString() {
return this.name;
}
} }
module.exports = ServerChannel; module.exports = ServerChannel;

View File

@@ -17,6 +17,10 @@ class User {
this.status = data.status || 'offline'; this.status = data.status || 'offline';
this.game = data.game; this.game = data.game;
} }
toString() {
return `<@${this.id}>`;
}
} }
module.exports = User; module.exports = User;

View File

@@ -1,10 +1,12 @@
'use strict'; 'use strict';
const ServerChannel = require('./ServerChannel'); const ServerChannel = require('./ServerChannel');
const VoiceChannelDataStore = require('./datastore/VoiceChannelDataStore');
class VoiceChannel extends ServerChannel { class VoiceChannel extends ServerChannel {
constructor(guild, data) { constructor(guild, data) {
super(guild, data); super(guild, data);
this.store = new VoiceChannelDataStore();
} }
setup(data) { setup(data) {

View File

@@ -0,0 +1,12 @@
'use strict';
const AbstractDataStore = require('./AbstractDataStore');
class VoiceChannelDataStore extends AbstractDataStore{
constructor() {
super();
this.register('members');
}
}
module.exports = VoiceChannelDataStore;

View File

@@ -93,6 +93,7 @@ const Events = exports.Events = {
CHANNEL_UPDATE: 'channelUpdate', CHANNEL_UPDATE: 'channelUpdate',
PRESENCE_UPDATE: 'presenceUpdate', PRESENCE_UPDATE: 'presenceUpdate',
USER_UPDATE: 'userUpdate', USER_UPDATE: 'userUpdate',
VOICE_STATE_UPDATE: 'voiceStateUpdate',
WARN: 'warn', WARN: 'warn',
}; };

View File

@@ -52,3 +52,7 @@ client.on('guildRoleUpdate', (guild, old, newRole) => {
client.on('presenceUpdate', (oldUser, newUser) => { client.on('presenceUpdate', (oldUser, newUser) => {
// console.log('presence from', oldUser.username, 'to', newUser.username); // console.log('presence from', oldUser.username, 'to', newUser.username);
}); });
client.on('voiceStateUpdate', (oldMember, newMember) => {
console.log('voiceState', oldMember.user.username, oldMember.voiceChannel + '', newMember.voiceChannel + '');
});