mrmBot-Matrix/utils/awaitrejoin.js

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;