如何在discord.py中让机器人发送斜杠命令触发其他机器人?
问题原因
直接用send()发送斜杠命令文本时,Discord会将其视为普通消息,不会触发斜杠命令的解析逻辑。斜杠命令属于Discord的应用命令交互系统,必须通过专门的交互调用方式触发,而非纯文本消息。
解决方案
要让机器人B触发机器人A的斜杠命令,需要通过Discord的应用命令交互机制调用,步骤如下:
- 获取目标服务器中机器人A的
/greet命令实例 - 构造交互请求并传入所需参数
- 触发交互以调用机器人A的命令
修改后的代码示例
import discord from discord.ext import commands from discord import app_commands discord_token = '' channel_id = "" # 替换为机器人A的应用ID,可在Discord开发者平台的机器人页面查看 BOT_A_APP_ID = 123456789012345678 client = commands.Bot(command_prefix="*", intents=discord.Intents.all()) @client.event async def on_ready(): print("Bot connected") channel = client.get_channel(int(channel_id)) if not channel: print("未找到目标频道") return guild = channel.guild # 获取服务器内所有应用命令,筛选出机器人A的/greet命令 guild_commands = await guild.fetch_commands() greet_command = None for cmd in guild_commands: if cmd.name == "greet" and cmd.application_id == BOT_A_APP_ID: greet_command = cmd break if not greet_command: print("未找到机器人A的/greet命令") return # 构造交互数据,触发/greet命令并传入prompt参数 try: interaction_data = { "id": greet_command.id, "application_id": BOT_A_APP_ID, "name": greet_command.name, "type": discord.AppCommandType.chat_input.value, "options": [{"name": "prompt", "value": "hello"}] } interaction = discord.Interaction( client=client, data=interaction_data, channel=channel, guild=guild ) # 触发交互命令 await client.tree.invoke(interaction) print("已成功触发机器人A的/greet命令") except Exception as e: print(f"触发命令失败: {str(e)}") @client.event async def on_message(message): print(message.content) print('We are successfully triggering the bot') # 必须添加此句,否则自定义前缀命令会失效 await client.process_commands(message) if __name__ == "__main__": client.run(discord_token)
注意事项
- 需将
BOT_A_APP_ID替换为机器人A的实际应用ID,可在Discord开发者平台的机器人页面查看 - 机器人B需要在目标服务器中拥有应用命令相关权限(默认机器人权限已包含)
- 确保机器人B的intents已开启必要权限(代码中启用
Intents.all()可满足需求)
内容的提问来源于stack exchange,提问作者Ahasanul Haque
相关产品推荐
相关产品推荐

