我需要帮助在机器人菜单中重新分配变量

时间:2019-10-17 20:44:39

标签: javascript bots discord discord.js

我正在尝试为我的机器人建立一个设置菜单,服务器所有者可以使用该菜单来配置该机器人。所有者键入=setup时将触发菜单。我希望该机器人回复几条嵌入消息,询问用户问题,以便正确配置该机器人。

这是我的第一个Discord.js项目,因此我不了解语法,但尝试学习。当漫游器在服务器中实现时,我有一个名为prefix的常量变量分配给=

bot菜单上的第一个提示要求用户将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,并删除机器人问题,然后用户响应并开始提示他们。下一个问题。

3 个答案:

答案 0 :(得分:2)

取决于您的漫游器是否将位于具有不同前缀的多个服务器中:

  • 如果是,则需要一个数据库来保存每个服务器的前缀,并且 然后当用户从该服务器发送消息时获取它
  • 如果没有,我将使用json文件存储前缀,然后使用node 在需要更改时编辑文件

或者看看https://discordjs.guide/keyv/那里有一个很棒的教程,可以做您想要的

答案 1 :(得分:0)

您无法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")
)

答案 2 :(得分:0)

您绝对应该使用数据库来存储前缀和其他服务器设置,例如,它比使用JSON文件更高效,更稳定。

如果您不确定要使用什么,我建议您使用mongoose和/或仅使用MongoDB