discord.js v13 如何获取全部斜杠命令并完成批量删除?
拉取完整斜杠命令及获取ID的方法
你当前调用的guild.commands.fetch()返回值是Discord.js内置的Collection集合类型(本质是增强版的Map结构),其中存储了所有拉取到的完整斜杠命令对象,你之前只打印了commands.size所以只能看到总数,按以下写法即可提取每条命令的ID:
guild.commands.fetch() .then(commands => { console.log(`共拉取到 ${commands.size} 条斜杠命令`) // 遍历输出每条命令的名称与ID commands.forEach(command => { console.log(`命令名:${command.name} | 命令ID:${command.id}`) }) }) .catch(console.error)
批量删除所有斜杠命令的实现
提供两种实现方案,可按需选择:
方案1:直接清空(推荐,执行效率最高)
直接传入空数组覆盖现有命令列表,即可一步清空所有对应范围的斜杠命令:
// 清空指定服务器的斜杠命令 guild.commands.set([]) .then(() => console.log('该服务器所有斜杠命令已清空')) .catch(console.error) // 如需清空全局范围的斜杠命令,替换为以下代码即可 // client.application.commands.set([]) // .then(() => console.log('所有全局斜杠命令已清空')) // .catch(console.error)
方案2:拉取后逐个删除(适合需要筛选删除的场景)
如果后续需要增加筛选逻辑(比如只删除特定名称的命令),可以先拉取全量命令后遍历删除:
guild.commands.fetch() .then(async commands => { console.log(`待删除命令总数:${commands.size}`) // 遍历逐个删除 for (const command of commands.values()) { await command.delete() console.log(`已删除命令:${command.name} (${command.id})`) } console.log('全部命令删除完成') }) .catch(console.error)
注意事项
- 服务器斜杠命令的增删操作是即时生效的,全局斜杠命令的同步周期最长可达1小时,删除后不会立刻在所有客户端刷新
- 操作前请确认机器人已被授权
applications.commands权限,且在对应服务器拥有命令管理权限
内容的提问来源于stack exchange,提问作者Enderhoang
相关产品推荐
相关产品推荐

