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
- 端口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
相关产品推荐
相关产品推荐

