const Command = require('../core/command');
const Communication = require('../core/communication');
class Listen extends Command {
constructor(fileName) {
super(fileName);
}
execute(message, args) {
let com = new Communication(message);
let userId = com.getUserId();
if (com.isDirect()) {
return message.channel.send(com.getDefaults("directMessage", userId));
}
let asAdmin = true;
if (!com.isAllowed(asAdmin)) {
return message.channel.send(com.getReason());
}
let guildId = com.getGuildId();
let isWaiting = this.storage.get("admin." + guildId + "." + userId + ".waiting");
if (isWaiting) {
if (args.includes("stop")) {
this.__removeUserFromList(guildId, userId);
return message.channel.send(this.getResponse("stopListen", userId));
}
return message.channel.send(this.getResponse("alreadyListen", userId));
}
this.__addUserToList(guildId, userId);
return message.channel.send(this.getResponse("startListen", userId));
}
__removeUserFromList(guildId, userId) {
let key = "admin." + guildId + "." + userId + ".waiting";
this.storage.set(key, false);
let listKey = "admin." + guildId +".waiting";
let waitingList = this.storage.get(listKey) || [];
let newWaitingList = waitingList.filter(user => user != userId);
if (waitingList.length != newWaitingList.length) {
this.storage.set(listKey, newWaitingList);
}
}
__addUserToList(guildId, userId) {
let key = "admin." + guildId + "." + userId + ".waiting";
this.storage.set(key, true);
let listKey = "admin." + guildId + ".waiting";
let currentlyWaiting = this.storage.get(listKey) || [];
currentlyWaiting.push(userId);
this.storage.set(listKey, currentlyWaiting);
}
}
module.exports = Listen;