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

如何为Py-Cord配置并使用PyNaCl实现Discord语音功能?

解决Py-Cord语音功能的PyNaCl依赖问题及实现步骤

1. 处理PyNaCl的安装与导入

你遇到的NameError是因为要么PyNaCl未正确安装,要么代码中未导入该库。

安装PyNaCl

推荐直接安装带语音支持的Py-Cord,它会自动依赖安装PyNaCl:

pip install py-cord[voice]

如果单独安装PyNaCl,执行:

pip install pynacl

代码中导入PyNaCl

在机器人代码顶部添加导入语句,Py-Cord底层会依赖它处理语音加密:

import nacl

2. 实现语音频道加入与播放链接的完整示例

以下是修复后的可运行代码,包含核心语音功能逻辑:

import discord
from discord.ext import commands
import nacl  # 必须导入以解决NameError

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.command()
async def play(ctx, url: str):
    # 检查用户是否在语音频道内
    if not ctx.author.voice:
        await ctx.send("请先加入一个语音频道!")
        return
    
    # 获取用户所在语音频道并连接
    voice_channel = ctx.author.voice.channel
    voice_client = await voice_channel.connect()
    
    # 播放指定链接的音频(需提前安装FFmpeg)
    try:
        source = discord.FFmpegPCMAudio(url)
        voice_client.play(source)
        await ctx.send(f"正在播放:{url}")
    except Exception as e:
        await ctx.send(f"播放失败:{str(e)}")
        await voice_client.disconnect()

bot.run("你的机器人TOKEN")

3. 关键注意事项

  • FFmpeg依赖:播放音频需要系统安装FFmpeg,可将其路径加入环境变量,或在代码中指定路径:
    source = discord.FFmpegPCMAudio(url, executable="/path/to/ffmpeg")
    
  • 权限配置:机器人需要CONNECT和SPEAK权限,邀请机器人时需勾选对应权限。
  • 资源管理:播放结束或出错时,记得调用await voice_client.disconnect()释放语音资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:52:33