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

Discord机器人无法读取聊天消息问题排查求助

Discord机器人无法读取聊天消息的问题修复

核心问题

你重复定义了多个on_message事件处理函数,discord.py只会执行最后一个被定义的函数,所以只有!resume命令能被响应,!play和!pause的逻辑完全不会触发。

修复方案

1. 合并所有命令逻辑到同一个on_message函数

把三个独立的on_message合并成一个,通过分支判断处理不同命令:

import discord
import youtube_dl

intents = discord.Intents.default()
intents.message_content = True
intents.voice_states = True
intents.members = True
client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

@client.event
async def on_message(message):
    # 忽略机器人自身发送的消息,避免循环触发
    if message.author == client.user:
        return
    
    # !play 命令处理
    if message.content.startswith('!play'):
        print(message.content)
        youtube_url = message.content[7:]
        ydl_opts = {
            'format': 'bestaudio/best',
            'postprocessors': [{
                'key': 'FFmpegExtractAudio',
                'preferredcodec': 'mp3',
                'preferredquality': '192',
            }],
        }
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            info = ydl.extract_info(youtube_url, download=False)
            audio_url = info['url']

        voice_channel = message.author.voice.channel
        vc = await voice_channel.connect()
        vc.play(discord.FFmpegPCMAudio(audio_url))
    
    # !pause 命令处理
    elif message.content.startswith('!pause'):
        vc = message.guild.voice_client
        if vc and vc.is_playing():
            vc.pause()
    
    # !resume 命令处理
    elif message.content.startswith('!resume'):
        vc = message.guild.voice_client
        if vc and vc.is_paused():
            vc.resume()

client.run('DISCORD_TOKEN')

2. 确认Discord开发者门户的意图权限

即使代码中开启了message_content意图,你还需要在Discord开发者后台的机器人页面,找到Privileged Gateway Intents板块,开启Message Content Intent开关,否则机器人无法读取消息内容。

补充优化说明:

  • 增加if message.author == client.user: return,避免机器人响应自身消息造成循环
  • 在语音客户端状态判断前增加vc and,防止机器人未连接语音时抛出错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:45:34