discord.js-selfbot-v13中sendSlash调用/about斜杠命令报错问题
错误排查:botId is not a bot or does not have an application slash command
问题场景
使用discord.js-selfbot-v13编写代码,意图让账号在ID为1190781950944886870的频道中,触发ID为1190781950944886867的机器人的/about斜杠命令,运行时出现如下错误。
代码示例
const { Client } = require('discord.js-selfbot-v13'); const client = new Client({ checkUpdate: false, }); client.on('ready', async () => { const channelId = '1190781950944886870'; const channel = client.channels.cache.get(channelId); if (channel) { console.log(`Channel found: ${channel.name}`); channel.sendSlash('1190781950944886867', 'about'); } else { console.error('Channel not found.'); } }); client.login('my token');
错误信息
Channel found: general C:\Users\sir\node_modules\discord.js-selfbot-v13\src\errors\DJSError.js:40 if (!msg) throw new Error(`An invalid error message key was used: ${key}.`); ^ Error: An invalid error message key was used: botId is not a bot or does not have an application slash command. at message (C:\Users\sir\node_modules\discord.js-selfbot-v13\src\errors\DJSError.js:40:19) at new DiscordjsError (C:\Users\sir\node_modules\discord.js-selfbot-v13\src\errors\DJSError.js:16:13) at TextChannel.sendSlash (C:\Users\sir\node_modules\discord.js-selfbot-v13\src\structures\interfaces\TextBasedChannel.js:497:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) Node.js v20.10.0
错误原因
- 目标ID对应的账号不是机器人账号,或者该机器人未注册
/about斜杠命令(全局或服务器级) - 客户端缓存未加载该机器人的应用命令数据,导致
sendSlash无法定位对应命令 - 机器人未加入目标频道所在的服务器,或缺少使用斜杠命令的权限
解决方案
- 验证目标ID是否为机器人:
在Discord客户端查看该用户资料,确认带有「Bot」标签。如果不是机器人,替换为正确的机器人ID。 - 确认机器人已注册
/about命令:
在目标服务器手动输入/about,检查是否能唤起该命令。如果不行,要么是命令名称拼写错误(注意斜杠命令名称为小写),要么是机器人未注册该命令,需联系开发者确认。 - 强制刷新应用命令缓存:
在发送斜杠命令前,先获取服务器的应用命令以刷新缓存,修改代码如下:const { Client } = require('discord.js-selfbot-v13'); const client = new Client({ checkUpdate: false, }); client.on('ready', async () => { const channelId = '1190781950944886870'; const botId = '1190781950944886867'; const channel = client.channels.cache.get(channelId); if (channel) { console.log(`Channel found: ${channel.name}`); // 先获取目标机器人的服务器应用命令,刷新缓存 await channel.guild.commands.fetch({ user: botId }); // 发送斜杠命令 await channel.sendSlash(botId, 'about'); } else { console.error('Channel not found.'); } }); client.login('my token'); - 检查机器人服务器状态:
确认该机器人已加入目标频道所在的服务器,并且拥有发送消息、使用应用命令的权限。
内容的提问来源于stack exchange,提问作者user23184304
相关产品推荐
相关产品推荐

