Skip to content
This repository has been archived by the owner on Apr 27, 2024. It is now read-only.

Commit

Permalink
Merge pull request #32 from abalabahaha/dev
Browse files Browse the repository at this point in the history
Fix possibly undefined member in voiceStateUpdate (abalabahaha#1217)
  • Loading branch information
JustCat80 committed Jul 17, 2021
2 parents cef886a + ee960c0 commit aa91a11
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
5 changes: 5 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,7 @@ declare namespace Eris {
listener: (member: Member, newChannel: AnyVoiceChannel, oldChannel: AnyVoiceChannel) => void
): T;
(event: "voiceStateUpdate", listener: (member: Member, oldState: OldVoiceState) => void): T;
(event: "voiceStateUpdate", listener: (member: UncachedMemberVoiceState, oldState: null) => void): T;
(event: "warn" | "debug", listener: (message: string, id: number) => void): T;
(event: "webhooksUpdate", listener: (data: WebhookData) => void): T;
(event: string, listener: (...args: any[]) => void): T;
Expand Down Expand Up @@ -1051,6 +1052,10 @@ declare namespace Eris {
}

// Voice
interface UncachedMemberVoiceState {
id: string;
voiceState: OldVoiceState;
}
interface VoiceConnectData {
channel_id: string;
endpoint: string;
Expand Down
18 changes: 16 additions & 2 deletions lib/gateway/Shard.js
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,20 @@ class Shard extends EventEmitter {
}
let member = guild.members.get(packet.d.id = packet.d.user_id);
if(!member) {
if(!packet.d.member) {
this.emit("voiceStateUpdate", {
id: packet.d.user_id,
voiceState: {
deaf: packet.d.deaf,
mute: packet.d.mute,
selfDeaf: packet.d.self_deaf,
selfMute: packet.d.self_mute,
selfStream: packet.d.self_stream || false,
selfVideo: packet.d.self_video
}
}, null);
break;
}
// Updates the member cache with this member for future events.
packet.d.member.id = packet.d.user_id;
member = guild.members.add(packet.d.member, guild);
Expand Down Expand Up @@ -789,8 +803,8 @@ class Shard extends EventEmitter {
/**
* Fired when a guild member's voice state changes
* @event Client#voiceStateUpdate
* @prop {Member} member The member
* @prop {Object} oldState The old voice state
* @prop {Member | Object} member The member. If the member is not cached and Discord doesn't send a member payload, this will be an object with `id` and `voiceState` keys. No other property is guaranteed
* @prop {Object?} oldState The old voice state of the member. If the above caveat applies, this will be null
* @prop {Boolean} oldState.deaf The previous server deaf status
* @prop {Boolean} oldState.mute The previous server mute status
* @prop {Boolean} oldState.selfDeaf The previous self deaf status
Expand Down

0 comments on commit aa91a11

Please sign in to comment.