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

如何基于discord.py开发可调用Groovy等第三方机器人的全能Discord Bot?

自研Discord Bot触发第三方Bot的可落地方案

先说你当前测试代码没法成功触发Groovy类第三方Bot的核心原因:

  • 绝大多数第三方音乐Bot(包括原Groovy)的指令监听器,默认会屏蔽所有Bot账号发送的消息,这是Discord生态通用的防刷屏、防指令循环设计,你直接用Bot身份发指令文本,第三方Bot根本不会接收处理。
  • 代码里用的time.sleep()是同步阻塞方法,会直接卡死整个Bot的异步事件循环,连续发送的两条指令大概率根本发不出去。

具体实现思路(新手友好,从易到难)

1. 先修代码的基础硬伤

先把会导致Bot跑崩的问题改掉:

  • 删掉所有time.sleep()的调用,换成异步版本的asyncio.sleep(),导入asyncio模块就能用,不会卡事件循环。
  • 别让你自研的Bot主动去连语音频道,Groovy本身有自动加入用户所在语音频道的逻辑,两个Bot同时占同一个语音通道的音频资源,会出现卡顿、抢通道的问题。

2. 搭无感知指令转发通道

这是兼容性最高、不需要改第三方Bot配置的实现方式:

  • 当真实用户在你的Bot上输入自定义指令(比如.play 目标歌曲名)时,你的Bot不需要自己处理播放逻辑,直接在用户所在的文本频道,发送和第三方Bot指令格式完全一致的文本内容就行。
  • 要绕开第三方Bot的Bot消息过滤规则:在发送的指令文本后,附带真实触发的用户ID信息,大部分主流第三方Bot看到附带真实用户上下文的Bot消息,会自动跳过过滤,正常识别指令。
  • 发送间隔用asyncio.sleep()控制,给第三方Bot留出消息处理的时间,别连续快速刷多条指令导致被判定为刷屏。

3. 加白名单简化流程(服务器管理员可用)

如果你是测试服务器的管理员,可以直接在第三方Bot的配置面板里,把你自研的Bot账号加进信任Bot白名单,直接关掉这个账号的消息过滤规则。这种方式下发的所有指令都会被正常识别,不需要额外加用户上下文标记。

4. 直接对接第三方Bot的控制接口(长期开发最稳)

如果目标第三方Bot是可自托管的开源项目,大部分会暴露本地HTTP控制接口,你可以在自己的Bot代码里直接调用这些接口的播放、循环、切歌方法,完全不需要通过发文本消息的方式触发,不会出现被过滤、指令格式不匹配的问题,是长期迭代的最优选择。

适配你现有测试代码的修改版本

import os
import discord
import asyncio  # 替换原time模块,解决事件循环阻塞问题
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")
bot = commands.Bot(command_prefix = ".")

@bot.event
async def on_ready():
    print(f"{bot.user.name} is ready")

# 调整原交互指令,不需要Bot自行接入语音
@bot.command(name = "bot_interact")
async def play_song(ctx, *, song_name: str):
    # 先校验触发用户是否在语音频道
    if not ctx.author.voice:
        await ctx.send("请先加入语音频道后再触发播放指令")
        return
    # 发送和Groovy格式匹配的播放指令
    await ctx.send(f"-play {song_name}")
    # 异步等待替代同步sleep,不卡Bot响应
    await asyncio.sleep(1.5)
    # 发送循环播放指令
    await ctx.send("-loop")

@bot.command(name = "leave")
async def leave(ctx):
    # 不需要自己断开语音连接,直接触发第三方Bot的退出指令
    await ctx.send("-leave")

bot.run(TOKEN)

容易踩的坑

  • 别尝试用模拟用户身份发消息的方法绕开Bot过滤,这种行为违反Discord服务条款,会导致Bot账号被永久封禁。
  • 原Groovy已经因为版权问题停止公共服务,现在服务器里运行的都是仿Groovy的替代Bot,要先手动测试目标Bot的指令格式、前缀规则,别直接硬编码原Groovy的指令。
  • 不要让自研Bot和第三方音乐Bot同时接入同一个语音频道,会占用多余的音频通道资源,导致播放卡顿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 02:45:04