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

Wavelink节点无法连接/创建池问题求助

问题描述

参考YouTube频道Robotic Nation的Wavelink+Lavalink音乐Bot教程,在RPi4上部署Bot,已安装Java13.0.1及Wavelink。按教程配置后,始终出现**"no nodes in pool"**错误,联系教程作者未排查出问题。适配loop弃用修改代码后仍存在ZeroConnectedNodes错误,启动时还触发RuntimeError。


相关配置与代码

application.yml 核心配置

server:
  port: 2333
  address: 0.0.0.0
lavalink:
  server:
    password: "youshallnotpass"
    sources:
      youtube: true
      soundcloud: true
    gc-warnings: true
logging:
  path: ./logs/
  level:
    root: INFO
    lavalink: INFO

bot.py 核心逻辑片段

import discord
from discord.ext import commands
import wavelink

class MusicBot(commands.Bot):
    def __init__(self):
        super().__init__(command_prefix='!', intents=discord.Intents.all())
        self.wavelink_nodes = [
            wavelink.Node(
                uri='http://localhost:2333',
                password='youshallnotpass'
            )
        ]

    async def on_ready(self):
        print(f'Logged in as {self.user}')
        try:
            await wavelink.NodePool.connect(client=self, nodes=self.wavelink_nodes)
        except Exception as e:
            print(f'Node connection failed: {e}')

bot = MusicBot()

@bot.command()
async def play(ctx, *, query):
    if not ctx.voice_client:
        vc = await ctx.author.voice.channel.connect(cls=wavelink.Player)
    else:
        vc = ctx.voice_client

    tracks = await vc.node.get_tracks(query)
    if not tracks:
        await ctx.send('No tracks found.')
        return

    await vc.play(tracks[0])

报错日志

启动时RuntimeError

RuntimeError: asyncio.run() cannot be called from a running event loop

ZeroConnectedNodes错误

wavelink.errors.ZeroConnectedNodes: No nodes are available to process this request.

"no nodes in pool"错误

No nodes in pool!

排查解决方案

1. 确认Lavalink服务状态

  • 终端执行 ps aux | grep java,检查Lavalink进程是否运行
  • 访问 http://<你的RPi4局域网IP>:2333/version,返回版本信息则服务正常;无响应则检查:
    • 端口2333是否被占用:sudo lsof -i :2333
    • RPi4防火墙是否放行端口:sudo ufw allow 2333
  • 查看Lavalink日志(默认路径./logs/),排查启动失败、密码不匹配等提示

2. 修复RuntimeError

错误因在已有事件循环环境调用asyncio.run()导致,修改启动代码:

if __name__ == '__main__':
    import asyncio
    loop = asyncio.get_event_loop()
    loop.run_until_complete(bot.start('你的Bot Token'))

3. 修正节点连接逻辑

  • 确保application.yml与bot.py中的密码完全一致,注意大小写
  • 将Node的uri从localhost改为RPi4的局域网IP(如http://192.168.1.100:2333),避免回环地址问题
  • 在on_ready中增加连接状态校验:
async def on_ready(self):
    print(f'Logged in as {self.user}')
    try:
        await wavelink.NodePool.connect(client=self, nodes=self.wavelink_nodes)
        if not wavelink.NodePool.nodes:
            print('初始化后无节点连接')
        else:
            for node in wavelink.NodePool.nodes.values():
                print(f'已连接节点: {node.uri} | 状态: {node.is_connected}')
    except Exception as e:
        print(f'节点连接失败: {e}')

4. 适配Java版本

Lavalink官方推荐Java17,RPi4安装切换步骤:

sudo apt update
sudo apt install openjdk-17-jre-headless
sudo update-alternatives --config java

5. 校验Wavelink与Lavalink版本兼容性

确保Wavelink版本与Lavalink匹配(如Wavelink v2.x对应Lavalink v3.7+),安装指定版本:

pip install wavelink==2.0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:01:09