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

如何使用discord.py调用Discord平台中其他机器人的命令?

问题分析与解决方案

核心问题:机器人账号无法触发其他机器人的命令

没错,调用Midjourney这类第三方机器人的斜杠命令,得用真实用户账号的身份发起交互——Discord平台默认限制机器人账号触发其他机器人的命令,这是权限层面的规则,所以你用discord.py的机器人账号直接调用肯定跑不起来。

可行实现方案

1. 用用户令牌登录Discord

你需要获取自己Discord账号的用户令牌(注意:Discord服务条款不鼓励用用户令牌做自动化操作,风险自行承担),然后以用户身份登录discord.py,再发起命令:

import discord
from discord.ext import commands
import asyncio

# 替换成你自己的用户令牌
USER_TOKEN = "你的Discord用户令牌"

# 初始化客户端,开启所有必要权限
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.event
async def on_ready():
    print(f"已以用户 {bot.user} 身份登录Discord")
    # 替换成你的目标服务器ID和频道ID
    guild = bot.get_guild(1234567890)
    channel = guild.get_channel(987654321)
    
    # 调用Midjourney的/imagine命令
    await channel.send("/imagine cat")

async def main():
    # bot=False表示以普通用户身份登录,而非机器人账号
    await bot.start(USER_TOKEN, bot=False)

asyncio.run(main())

2. 和aiogram结合的异步兼容写法

如果要对接Telegram的aiogram框架,得保证两个异步客户端的事件循环不冲突,用asyncio.create_task分别启动就行:

import discord
from discord.ext import commands
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart
import asyncio

# Discord配置
DISCORD_USER_TOKEN = "你的Discord用户令牌"
TARGET_GUILD_ID = 1234567890  # 目标服务器ID
TARGET_CHANNEL_ID = 987654321  # 目标频道ID

# Telegram配置
TELEGRAM_BOT_TOKEN = "你的Telegram机器人令牌"

# 初始化Discord用户客户端
discord_client = commands.Bot(command_prefix="!", intents=discord.Intents.all())

# 初始化Telegram机器人
tg_bot = Bot(token=TELEGRAM_BOT_TOKEN)
tg_dp = Dispatcher()

@discord_client.event
async def on_ready():
    print(f"Discord用户登录成功:{discord_client.user}")

# Telegram触发命令的逻辑
@tg_dp.message(CommandStart())
async def trigger_midjourney(message: types.Message):
    guild = discord_client.get_guild(TARGET_GUILD_ID)
    channel = guild.get_channel(TARGET_CHANNEL_ID)
    if channel:
        await channel.send("/imagine cat")
        await message.answer("已给Midjourney发出生成命令")
    else:
        await message.answer("找不到目标频道,请检查ID是否正确")

# 启动Discord客户端的任务
async def run_discord():
    await discord_client.start(DISCORD_USER_TOKEN, bot=False)

# 启动Telegram客户端的任务
async def run_telegram():
    await tg_dp.start_polling(tg_bot)

# 同时运行两个异步任务
async def main():
    discord_task = asyncio.create_task(run_discord())
    telegram_task = asyncio.create_task(run_telegram())
    await asyncio.gather(discord_task, telegram_task)

asyncio.run(main())

关键注意点

  • 令牌安全:用户令牌等于你的Discord账号密码,绝对不能泄露,也别提交到代码仓库。
  • 合规风险:用用户令牌做自动化操作可能违反Discord的服务条款,有账号被封的风险,谨慎使用。
  • 命令格式:确保斜杠命令的格式和你手动输入的完全一致,比如有些参数需要加引号,别写错。
  • Intents权限:discord.py要开启message_content等必要权限,不然发不了消息。

内容的提问来源于stack exchange,提问作者Zemmeus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:42:45