如何为Discord.py配置Opus 实现机器人指令播放音频功能
Discord机器人
-play指令音频播放功能实现 核心功能逻辑:用户发送-play指令时,机器人自动加入用户所在语音频道,播放指定本地音频文件。
现有代码问题及修正版本
你提供的原始代码存在缩进错误、路径格式错误、播放未完成就直接断开连接的问题,修正后可正常运行的代码如下:
import asyncio import discord from discord.ext import commands bot = commands.Bot(command_prefix='-', intents=discord.Intents.all()) @bot.command(name='play') async def play(ctx): # 校验用户是否在语音频道 if not ctx.author.voice: await ctx.send("请先加入语音频道后再使用播放指令") return voice_channel = ctx.author.voice.channel # 连接到用户所在的语音频道 vc = await voice_channel.connect() # 替换为你自己的音频文件路径,Windows系统路径使用正斜杠避免转义问题 source = await discord.FFmpegOpusAudio.from_probe("C:/Desktop/Welcome.m4a") # 开始播放音频 vc.play(source) # 等待音频播放完成后再断开连接 while vc.is_playing(): await asyncio.sleep(1) await vc.disconnect() bot.run("你的机器人Token")
配置前置要求
- 必须安装FFmpeg工具,并将FFmpeg的bin文件夹路径添加到系统环境变量中,
discord.FFmpegOpusAudio依赖FFmpeg实现音频转码为Opus格式 - 开启机器人的语音相关权限,在Discord开发者后台给机器人勾选
Connect、Speak权限 - 确保你使用的discord.py版本为v2.0及以上,旧版本的音频播放接口存在差异
常见问题排查
- 机器人加入频道但没有声音:优先检查音频文件路径是否正确,其次确认FFmpeg是否安装配置成功
- 机器人无法加入频道:检查机器人是否有对应语音频道的连接权限,是否开启了必要的网关Intents
内容的提问来源于stack exchange,提问作者Hatsune Miku
相关产品推荐
相关产品推荐

