Мне нужна помощь в переназначении переменной в меню бота - PullRequest
6 голосов
/ 17 октября 2019

Я пытаюсь создать меню настройки для своего бота, которое владелец сервера может использовать для настройки бота. Меню вызывается, когда владелец набирает =setup. Я хочу, чтобы бот отвечал несколькими сообщениями для встраивания, задавая вопросы пользователя для правильной настройки бота.

Это мой первый Discord.js проект, поэтому я не знаю синтаксис, но пытаюсь учиться. У меня есть постоянная переменная с именем prefix, присвоенная =, когда бот внедряется в сервер.

Первая подсказка в меню бота просит пользователя изменить prefix на что угодно. Мне нужна помощь в понимании того, как переназначить мою исходную постоянную переменную новому префиксу, который они запрашивают.

var PREFIX = '=';

bot.on('message', message=>{
    let args = message.content.substring(PREFIX.length).split(" ");

    switch(args[0]){
        case 'setup':
            const embed = new Discord.RichEmbed()
            .setTitle('Step 1 of 1')
            .setDescription('Set your Prefix')
            .setColor(0xF1C40F)
            message.channel.sendEmbed(embed);
            //I want the user to now enter their own PREFIX and have the
            //bot save their responce as the new PREFIX
        break;
    }
})

Я хочу, чтобы, когда пользователь набрал желаемую prefix, бот переназначил prefix в коде и удалите вопрос о ботах и ​​ответы пользователей и начните предлагать им следующий вопрос.

1 Ответ

0 голосов
/ 18 октября 2019

Вы не можете prompt ответить пользователю (из того, что я знаю), вам нужно подождать, пока пользователь напишет другое сообщение и проанализирует его.

Сообщение связано спользователь, поэтому, когда пользователь инициирует команду для изменения префикса, вы хотите убедиться, что тот же пользователь изменил префикс.

Это не проверено, но должно быть близко к решению, которое вы 'ищем.


let prefix = '=';
let expectingResponseFrom = null;

bot.on('message', message=>{

    // same user sent a response
    if(expectingResponseFrom !== null && expectingResponseFrom === message.user.id){
      expectingRepsonseFrom = null;
      prefix = message.content.trim();
      return;
    }

    const regex = new RegExp(`^${prefix}([^\s]+)`, 'g');
    cosnt command = regex.exec(message.content)[1] || '';

    switch(command){
        case 'setup':
            const embed = new Discord.RichEmbed()
            .setTitle('Step 1 of 1')
            .setDescription('Set your Prefix')
            .setColor(0xF1C40F)
            message.channel.sendEmbed(embed);
            // memorize user who initiated a prefix change
            expectingResponseFrom = message.user.id;
        break;
    }
})

Регулярное выражение позволяет лучше (мое мнение) способ получить команду

console.log(
  (/^=([^\s]+)/g).exec("=hello should not get this"),
  (/^=([^\s]+)/g).exec("="),
  (/^=([^\s]+)/g).exec("= should not get this")
)
...