You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Discord斜杠命令中判断选中用户是否为机器人?

问题解决:判断选中用户是否为机器人

你的判断语句失效核心原因是类型不匹配:interaction.options.getUser('user')返回的是User对象,而interaction.user.bot是布尔值,对象和布尔值永远不可能相等,导致判断逻辑完全错误。

修正后的判断逻辑

直接获取选中用户的bot属性即可完成判断:

const targetUser = interaction.options.getUser('user');
if (targetUser.bot) {
  interaction.reply({ content: `不能给机器人发消息`, ephemeral: true });
  return; // 提前终止,避免执行后续无效逻辑
}

完整修正后的逻辑代码

同时修复代码里的其他小问题:

  1. isChatInputCommand是方法,需要加括号调用
  2. EmbedBuilder的链式调用错误,then应放在send()方法后
  3. 改用async/await让异步逻辑更清晰
client.on('interactionCreate', async (interaction) => {
  if (!interaction.isChatInputCommand()) return;
  if (interaction.commandName === 'apanker') {
    if (interaction.options.getSubcommand() === 'dm') {
      const message = interaction.options.getString('message');
      const targetUser = interaction.options.getUser('user');

      // 正确判断目标用户是否为机器人
      if (targetUser.bot) {
        return interaction.reply({ content: `不能给机器人发送消息`, ephemeral: true });
      }

      const senderId = interaction.user.id;
      try {
        await targetUser.send({
          embeds: [
            new EmbedBuilder()
              .setDescription(`<@${senderId}> 对你说:${message}`)
              .setColor("#f05c51")
          ]
        });
        await interaction.reply({ content: '消息发送成功', ephemeral: true });
      } catch (error) {
        await interaction.reply({ content: `无法发送消息,可能对方关闭了DM -> ${error}`, ephemeral: true });
      }
    }
  }
});

关键修正点总结

  • 用targetUser.bot替代原错误判断,直接读取目标用户的机器人标识属性
  • 补全isChatInputCommand()的方法调用括号
  • 调整异步代码结构,避免链式调用混乱
  • 添加return提前终止逻辑,减少无效代码执行

内容的提问来源于stack exchange,提问作者Fome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:50:29