Экспортируемая переменная всегда возвращается как «ложь» - PullRequest
0 голосов
/ 09 марта 2020

Простите, если «экспорт» здесь не совсем правильная терминология. Я использую javascript и discord. js, чтобы создать обработчик команд для моего бота, который читает команды как отдельные файлы в папке, до сих пор работал нормально, я пытаюсь создать команду, которая позволяет вам "блокировка" команд бота для определенного c канала, технология, за которой я разобрался. Однако по какой-то причине данные в переменной ticketChannels, которая содержит идентификатор канала, каким-то образом становятся false после запуска команды. Я убедился, что он нигде не переопределяется, и использовал несколько console.logs, чтобы убедиться, что переменная определена правильно, когда она установлена ​​на желаемом канале, но каким-то образом обработчик команд или что-то еще путь превращает его в false. Я пробовал несколько разных способов форматирования идентификатора заблокированного канала, включая один массив объектов (потому что у меня есть система точек, отформатированная с помощью массива, и я могу экспортировать и вносить в нее изменения между командами просто отлично, поэтому решил, что я попробую другой массив), попытался установить его только для самого канала, а не для идентификатора, четыре раза проверил любые переопределения где угодно, но ничего. Я в тупике. Любые идеи? Код для обработчика команд:

    function readCMD() {
    fs.readdir("./commands/", (err, files) => {
      if (err) return console.error(err);
      client.commands.deleteAll()
    //deleteAll is here so that the commands list is refreshed properly everytime readCMD is called, as i have an update command that re-reads the folder using this function
      files.forEach(file => {
        if (!file.endsWith(".js")) return;
        let props = require(`./commands/${file}`);
        let commandName = file.split(".")[0];
        console.log(`Attempting to load command ${commandName}`);
        client.commands.set(commandName, props);
      });
    });
    }

    readCMD()

    client.on('message', msg => {
    if (msg.author.bot) return;
    const prefix = '$'
    const args = msg.content.slice(prefix.length).trim().split(/ +/g)
    let command = args.shift().toLowerCase()
    const cmd = client.commands.get(command)

Команда, которую я пытался запустить в основном файле и вне основного файла:

 if (msg.content.toLowerCase().startsWith('$setticketchannel')) {
   const indArgs = msg.content.split(" ")
   if (indArgs[1].toLowerCase() == 'on') {
     var chosenChannel = msg.mentions.channels.first()
     console.log(chosenChannel.id)
     ticketChannels = chosenChannel.id
     console.log(ticketChannels)
   } else if (indArgs[1].toLowerCase() == 'off') {
     ticketChannels = 0
   }
 }

Выполнение:

try {
   cmd.run(client, msg, args, bank, currentPoints, fs, duelon, ticketChannels)
 }catch(e) {
   console.log(e)
 }

И код команды, пытающийся проверить идентификатор:

  exports.run = (client, msg, args, bank, currentPoints, fs, ticketChannels) => {
    console.log("$GAMBLE:")
    console.log(ticketChannels)
    if (ticketChannels !== 0) {
      if (msg.channel.id !== ticketChannels) {
        msg.reply(`Commands such as these can only be done in ${ticketChannels}`)
        return
      }
    }

Для пояснения, любая другая переменная, которую я экспортирую с помощью обработчика команд, работает отлично, я могу редактировать и переопределять их в пределах и из отдельных команд просто отлично. Кроме того: дело не в том, что оператор if возвращает false, а в том, что сама переменная становится false, несмотря на то что ничто не определяет ее как таковое.

1 Ответ

0 голосов
/ 09 марта 2020

Я только что понял проблему сегодня. Очевидно в моей строке cmd.run(client, msg, args, bank, currentPoints, fs, duelon, ticketChannels), поскольку строка exports.run = (client, msg, args, bank, currentPoints, fs, ticketChannels) не включала переменную duelon, которая является логическим значением, она каким-то образом путала ticketChannels с duelon. Включив duelon в строку exports.run, он заработал просто отлично.

...