You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在discord.py中让机器人发送斜杠命令触发其他机器人?

问题原因

直接用send()发送斜杠命令文本时,Discord会将其视为普通消息,不会触发斜杠命令的解析逻辑。斜杠命令属于Discord的应用命令交互系统,必须通过专门的交互调用方式触发,而非纯文本消息。

解决方案

要让机器人B触发机器人A的斜杠命令,需要通过Discord的应用命令交互机制调用,步骤如下:

  1. 获取目标服务器中机器人A的/greet命令实例
  2. 构造交互请求并传入所需参数
  3. 触发交互以调用机器人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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:40:35