如何将Discord机器人Slash Command同步至群聊或私聊?
如何让Discord机器人的斜杠命令在群聊/私聊中可用?
问题分析
你的斜杠命令目前仅在已邀请的服务器生效,无法在私聊或群组DM中使用,核心问题有两点:
- 命令名称包含空格,不符合Discord的命令命名规则
- 默认的全局命令同步存在生效延迟,且未针对私有聊天场景配置
解决方案
1. 修正命令名称
Discord斜杠命令的名称不能包含空格,仅支持小写字母、数字、下划线(_)或连字符(-)。修改你的命令定义:
@bot.tree.command(name="randomness_number", description="生成指定范围内的随机数") async def qr(interaction: discord.Interaction, amount: int): await interaction.response.send_message(f"结果是: {random.randint(1, amount)}")
2. 同步命令到用户私有范围(立即生效)
如果你只想让自己在私聊/群组DM中使用命令,可以同步到你的用户私有命令,无需等待全局同步的1小时延迟:
import discord import random @bot.event async def on_ready(): # 替换为你的Discord用户ID(纯数字形式) YOUR_USER_ID = 123456789012345678 # 同步命令到用户私有范围 await bot.tree.sync(guild=discord.Object(id=YOUR_USER_ID)) print(f"机器人已登录: {bot.user},命令已同步到私有范围!")
3. 全局同步(所有用户可在DM使用)
如果想让所有用户都能在私聊中使用你的命令,使用全局同步即可,但需注意全局命令可能需要1小时左右才能在所有场景生效:
@bot.event async def on_ready(): await bot.tree.sync() print(f"机器人已登录: {bot.user},全局命令已同步!")
4. 必要的机器人设置
确保在Discord开发者门户完成以下配置:
- 进入你的应用 → Bot → 开启「Message Content Intent」(确保机器人能处理交互消息)
- 授权机器人时,确认勾选了
applications.commands权限范围(OAuth2授权场景)
验证方法
- 重启机器人,等待
on_ready事件触发并打印同步成功的日志 - 打开与机器人的私聊,输入
/,查看是否能看到randomness_number命令 - 群组DM场景需确保机器人在群组内,同样输入
/检查命令是否显示
内容的提问来源于stack exchange,提问作者Acocain
相关产品推荐
相关产品推荐

