如何正确定义机器人的前缀,使其不响应任何单字母前缀?



我正在制作一个机器人并在小故障上托管。我想让前缀为" A",但是机器人对任何单个字母前缀做出响应。

{
 "prefix": "a",
 "devID": "443992049746968586"
}

这是我的config.json所包含的。


//cmd handler
client.commands = new Discord.Collection();
fs.readdir("./commands/", (err, files) => {
    if (err) console.log(err);
    let jsfile = files.filter(f => f.split(".").pop() === "js")
    if(jsfile.length <= 0){
        console.log("Couldn't find commands")
        return;
    }
    jsfile.forEach((f, i) =>{
let props = require(`./commands/${f}`);
console.log(`${f} loaded`);
client.commands.set(props.help.name, props);
    });
});

client.on("message", msg =>{
    let messageArray = msg.content.split(" ");
    let cmd = messageArray[0];
    let args = messageArray.slice(1);
    let commandfile = client.commands.get(cmd.slice(config.prefix.length));
    if(commandfile) commandfile.run(client,msg,args);
})

这就是我的index.js所包含的,所有无关的部分都切掉了。
当我使用机器人时会发生什么,我可以倾斜,然后倾斜。然后,我可以去bping,它将ping,而没有指定" b"是一个前缀。我该如何战斗?

我这样做的方式是通过检查消息内容是否从前缀开始。在下面,我粘贴了用于机器人的一些代码。主线是

if (message.content.indexOf(config.prefix) !== 0) return;

在这里,我检查消息是否包含我的前缀,如果是的,是否在消息开始。如果不是这种情况,我只是退出方法。

&nbsp;

我的代码:

client.on("message", async message =>
{
    // Ignore messages from all bots
    if (message.author.bot) return;
    // Ignore messages which don't start with the given prefix
    if (message.content.indexOf(config.prefix) !== 0) return;
    // Split the message into the command and the remaining arguments
    const args = message.content.slice(config.prefix.length).trim().split(' ');
    const cmd = args.shift().toLowerCase();
    // Do stuff with your input here
});

作为最后的注意,我强烈建议您也将行if (message.author.bot) return;包括在代码中。这样可以防止您的机器人响应其他机器人可能创建某种无限消息循环

最新更新