当前缀设置为超过 1 个字符时,Discord Bot 不会回复

Posted

技术标签:

【中文标题】当前缀设置为超过 1 个字符时,Discord Bot 不会回复【英文标题】:Discord Bot won't reply when prefix being set to more than 1 character 【发布时间】:2021-09-28 16:16:16 【问题描述】:

我目前正在使用机器人数据库,一切正常,但是当我将前缀设置为超过两个字符时,机器人不会回复。帮忙?

这是我的“prefix.js”代码

    let newPrefix = args[0];

    if (await Prefix.findOne(
        guildID: message.guild.id
      )) 
      let guildPrefixes = await Prefix.findOne(
        guildID: message.guild.id
      );
      if (!guildPrefixes) 
        guildPrefixes = await new Prefix(
          _id: mongoose.Types.ObjectId(),
          guildID: message.guild.id,
          prefix: newPrefix,
        )
        await guildPrefixes.save();
        message.channel.send(`Successfully set the guild Prefix to $newPrefix!`);
       else if (guildPrefixes) 
        await Prefix.findOneAndUpdate(
          guildID: message.guild.id,
          prefix: newPrefix,
        );
        return message.channel.send(`Successfully updated the guild Prefix to $newPrefix!`);
      
    
  

这是我的消息事件

let guildPrefixes = await Prefix.findOne(
      guildID: message.guild.id
    );

    if (message.content.startsWith(guildPrefixes.prefix)) 
      const [cmdName, ...cmdArgs] = message.content
        .slice(client.prefix.length)
        .trim()
        .split(/\s+/);
      const command = client.commands.get(cmdName);
      if (command) 
        command.run(client, message, cmdArgs);
      
    

【问题讨论】:

尝试记录它获得的前缀,并检查它是否与您设置的前缀匹配。如果没有,请检查保存到数据库的内容。 我已经尝试了两种方法,它显示的前缀与我希望它更改为 ("!!") 的完全相同。我什至尝试了“--”但仍然无法正常工作.. 【参考方案1】:

从您对我对该问题的评论的回复来看,消息事件代码的第 7 行看起来您有一个静态前缀:

.slice(client.prefix.length)

我想可能是这样的!或?,所以长度为 1。当您尝试将其设置为 !!,然后运行 ​​!!testcmdName 将是 !test,因为您切掉了 1 个字符(静态前缀),这不是一个命令。尝试将切片中的静态前缀更改为动态前缀:

.slice(guildPrefixes.prefix.length)

您的消息事件应如下所示:

let guildPrefixes = await Prefix.findOne(
  guildID: message.guild.id
);

if (message.content.startsWith(guildPrefixes.prefix)) 
  const [cmdName, ...cmdArgs] = message.content
    .slice(guildPrefixes.prefix.length)
    .trim()
    .split(/\s+/);
  const command = client.commands.get(cmdName);
  if (command) 
    command.run(client, message, cmdArgs);
  

希望有效果

【讨论】:

感谢您的回答!我对guildPrefixes.prefix.length做了一点修改,但仍然非常感谢您的帮助! 很高兴它提供了帮助,修复了我提供的代码(我不是真正的视觉编码员,我必须运行一些东西来查看它们是否有效,所以这样的错误发生在我身上)。

以上是关于当前缀设置为超过 1 个字符时,Discord Bot 不会回复的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 如何使用机器人提及和设置前缀作为前缀

在 discord.py 中显示设置前缀的命令(重写)

自定义前缀后的额外空格 [Discord.py]

Discord.py - 使用命令更改前缀

Discord.js Bots // 尝试在主文件中添加多个机器人,设置状态,随机化欢迎消息,多个前缀

zm吃包子