我正在尝试为我的机器人建立一个设置菜单,服务器所有者可以使用该菜单来配置该机器人。所有者键入=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
,并删除机器人问题,然后用户响应并开始提示他们。下一个问题。
答案 0 :(得分:2)
取决于您的漫游器是否将位于具有不同前缀的多个服务器中:
或者看看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
。