如何在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; // 提前终止,避免执行后续无效逻辑 }
完整修正后的逻辑代码
同时修复代码里的其他小问题:
isChatInputCommand是方法,需要加括号调用- EmbedBuilder的链式调用错误,
then应放在send()方法后 - 改用
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
相关产品推荐
相关产品推荐

