如何在discord.py中全局同步所有服务器的斜杠命令?
解决discord.py全局同步斜杠命令到所有服务器的问题
你的代码存在两个关键问题,导致全局同步无法生效:
问题1:命令被绑定到特定服务器
你在@tree.command装饰器中添加了guild=discord.Object(id=...)参数,这会将ping命令设置为仅对应服务器可用的专属命令,即便执行全局同步操作,其他服务器也无法看到该命令。
问题2:全局同步的前提是命令为全局属性
移除tree.sync()里的guild参数是正确的操作,但必须先将命令改为全局可用状态,同步才能覆盖到所有服务器。
修改后的完整代码
import discord from discord import app_commands intents = discord.Intents.default() client = discord.Client(intents=intents) tree = app_commands.CommandTree(client) @client.event async def on_ready(): print(f'已登录为 {client.user}') try: # 不带guild参数,执行全局命令同步 await tree.sync() print('全局命令同步完成') except Exception as e: print(f'同步出错: {e}') # 移除guild参数,将命令设为全局可用 @tree.command(name="ping", description="简单的ping-pong命令") async def ping(interaction): await interaction.response.send_message("Pong", ephemeral=True) # 替换为你的机器人Token并启动 client.run('你的机器人Token')
额外注意事项
- 全局同步后,Discord官方需要1小时左右的延迟时间才能让命令在所有服务器生效,这属于正常机制,并非代码问题。
- 确保机器人在目标服务器中拥有
应用程序命令权限,以及发送消息的基础权限。 - 不要频繁执行全局同步操作,Discord存在同步频率限制,过度操作可能触发限流。
内容的提问来源于stack exchange,提问作者Kubzel
相关产品推荐
相关产品推荐

