40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
|
// this is a method to wait for someone to rejoin a voice channel
|
||
|
const { EventEmitter } = require("events");
|
||
|
|
||
|
class AwaitRejoin extends EventEmitter {
|
||
|
constructor(channel, anyone, memberID) {
|
||
|
super();
|
||
|
this.member = memberID;
|
||
|
this.anyone = anyone;
|
||
|
this.channel = channel;
|
||
|
this.rejoined = false;
|
||
|
this.ended = false;
|
||
|
this.bot = channel.guild ? channel.guild.shard.client : channel._client;
|
||
|
this.listener = (member, newChannel) => this.verify(member, newChannel);
|
||
|
this.bot.on("voiceChannelJoin", this.listener);
|
||
|
this.bot.on("voiceChannelSwitch", this.listener);
|
||
|
setTimeout(() => this.stop(), 10000);
|
||
|
}
|
||
|
|
||
|
verify(member, channel) {
|
||
|
if (this.channel.id === channel.id) {
|
||
|
if (this.member === member.id || this.anyone) {
|
||
|
this.rejoined = true;
|
||
|
this.stop(member);
|
||
|
return true;
|
||
|
}
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
stop(member) {
|
||
|
if (this.ended) return;
|
||
|
this.ended = true;
|
||
|
this.bot.removeListener("voiceChannelJoin", this.listener);
|
||
|
this.bot.removeListener("voiceChannelSwitch", this.listener);
|
||
|
this.emit("end", this.rejoined, member);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = AwaitRejoin;
|