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

Discord自定义Bot发送Jockie Music指令无响应问题求助

问题:Discord自定义Bot发送的Jockie Music指令无法被识别

我在Discord服务器中部署了自定义Bot和Jockie Music音乐Bot。自定义Bot读取存储音乐链接的txt文件,发送m!play 链接指令到频道,但Jockie Music无法识别该Bot发送的指令。以下是实现代码:

import discord
from random import randint
from conf import TOKEN

class DSClient(discord.Client):
    async def on_ready(self):
        print(self.guilds)

    async def on_message(self, message):
        if message.content == "Грязюка":
            with open("songs.txt", "rt") as f:
                tracks = [song.strip().split() for song in f.readlines()]
                for _ in range(len(tracks)):
                    index = randint(0, len(tracks) - 1)
                    track = tracks.pop(index)
                    print(track)
                    await message.channel.send(f"m!play {track[0]}")

client = DSClient(intents=discord.Intents.default().all())
client.run(TOKEN)

可能的原因及解决方案

1. Jockie Music默认忽略Bot发送的消息

绝大多数Discord音乐Bot会默认过滤其他Bot发送的消息,目的是防止循环触发指令、滥用资源或避免意外行为。

  • 解决方法:发送m!settings指令打开Jockie Music的设置面板,查找并开启允许Bot触发指令的选项后重试。

2. 指令前缀或链接格式错误

  • 确认Jockie Music的指令前缀:在服务器发送m!help,若Bot响应则前缀正确;若无响应,说明前缀已被修改,需使用正确前缀发送指令。
  • 检查音乐链接有效性:确保track[0]是Jockie Music支持的平台链接(如YouTube、Spotify等),且无多余空格、换行符。可在代码中添加日志确认:
    print(f"发送指令内容: m!play {track[0]}")
    

3. 频道权限问题

  • 确认自定义Bot和Jockie Music都拥有当前频道的发送消息和读取消息权限,否则Jockie Music无法接收指令。
  • 检查服务器角色层级,确保Jockie Music的角色权限不低于自定义Bot,避免权限限制导致消息无法被读取。

4. 改用Slash命令调用

如果Jockie Music支持Slash命令(如/play),直接调用Slash命令比发送消息更可靠,且多数Bot不会限制这类调用来源。示例代码(需使用discord.py 2.0+版本):

import discord
from random import randint
from conf import TOKEN

class DSClient(discord.Client):
    async def on_ready(self):
        print(self.guilds)
        # 首次运行同步Slash命令
        await self.tree.sync()

    async def on_message(self, message):
        if message.content == "Грязюка":
            with open("songs.txt", "rt") as f:
                tracks = [song.strip().split() for song in f.readlines()]
                for _ in range(len(tracks)):
                    index = randint(0, len(tracks) - 1)
                    track = tracks.pop(index)
                    print(track)
                    # 发送/play命令文本
                    await message.channel.send(f"/play {track[0]}")

client = DSClient(intents=discord.Intents.default().all())
client.run(TOKEN)

注意:若需要更规范的Slash命令调用,需提前获取Jockie Music的play命令ID,通过Discord交互API直接触发,避免依赖文本解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:35:14