如何删除dslash与nextcord开发的Discord机器人已注册的斜杠命令
dslash注册斜杠命令的删除方案
Discord斜杠命令一旦注册成功后,不会随代码中对应函数的删除/改名自动消失,必须主动调用接口删除,你可以通过以下两种方式实现:
方法一:手动指定删除目标命令
在你现有代码的on_ready事件中加入删除逻辑,运行一次即可完成删除,确认删除成功后可以移除这段逻辑。
删除单服务器命令
如果你的/rps是指定了服务器ID注册的测试命令,用以下代码,替换为你自己的服务器ID即可:
@client.event async def on_ready(): # 替换为目标服务器的数字ID target_guild_id = 你的服务器ID # 遍历获取该服务器下所有已注册命令 for cmd in await client.get_all_commands(guild_id=target_guild_id): if cmd.name == "rps": await client.delete_command(command_id=cmd.id, guild_id=target_guild_id) print("已成功删除服务器端/rps命令") print(f'Running')
单服务器命令删除后即时生效,刷新Discord界面就能看到命令消失。
删除全局命令
如果你的/rps是没有指定服务器ID的全局注册命令,用以下代码:
@client.event async def on_ready(): # 遍历获取所有全局注册命令 for cmd in await client.get_all_commands(): if cmd.name == "rps": await client.delete_command(command_id=cmd.id) print("已成功删除全局/rps命令") print(f'Running')
全局命令删除后最多需要等待1小时才会同步到所有Discord服务器。
方法二:开启自动清理未知命令
如果你已经把代码中rps对应的命令函数删掉了,可以直接在初始化CommandClient时开启自动清理配置,启动后dslash会自动对比已注册命令和代码中现存的命令,自动删掉所有代码中不存在的冗余命令:
# 新增remove_unknown_commands=True参数 client = dslash.CommandClient(remove_unknown_commands=True)
这个配置可以长期开启,后续每次启动机器人都会自动同步命令,不需要再手动写删除逻辑。
注意:操作前确认你的机器人已经被授予
applications.commands权限,否则会删除失败。
内容的提问来源于stack exchange,提问作者Xantium
相关产品推荐
相关产品推荐

