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

使用Wavelink模块开发Nextcord音乐机器人时,调用Node.is_connected()出现TypeError报错的解决方案咨询

这个报错的原因很明确:你直接用类wavelink.Node去调用is_connected()方法,但这个方法是实例方法,必须通过具体的Node实例(也就是你创建出来的那个节点对象)才能调用,而不是直接调用类方法。

具体修改方案

你需要先获取到创建的Node实例,再调用它的is_connected()方法。下面是针对你代码的调整:

1. 保存创建的Node实例并检查状态

修改你的node_connect函数,把create_node的返回值保存为变量,然后用这个变量调用is_connected():

@client.event
async def node_connect():
    await client.wait_until_ready()
    # 这里应该是字典列表,示例给出正确格式
    hosts = [
        {"host": "your-first-host", "port": 2333, "password": "your-pass", "secure": False},
        {"host": "your-second-host", "port": 2334, "password": "your-pass", "secure": True}
    ]
    values = np.random.choice(hosts)
    print(f"尝试连接节点: {values['host']}:{values['port']}")
    
    try:
        # 创建节点并保存实例
        node = await wavelink.NodePool.create_node(
            bot = client, 
            host = values["host"], 
            port = values["port"], 
            password = values["password"], 
            https = values["secure"]
        )
        # 通过实例调用is_connected()
        if node.is_connected():
            print(f"节点已成功连接: {values['host']}:{values['port']}")
    except Exception as e:
        print(f"连接节点失败: {str(e)},可尝试切换其他节点")

2. 从NodePool中获取已存在的节点(如果需要后续检查)

如果之后需要检查节点状态,也可以从NodePool中获取已创建的实例:

# 获取第一个可用节点
node = wavelink.NodePool.get_node()
if node and node.is_connected():
    print("当前节点处于连接状态")

额外优化:自动切换节点的逻辑

结合你的需求(节点故障时切换),可以改成遍历节点列表尝试连接,直到成功:

@client.event
async def node_connect():
    await client.wait_until_ready()
    hosts = [
        {"host": "host1", "port": 2333, "password": "pass1", "secure": False},
        {"host": "host2", "port": 2334, "password": "pass2", "secure": True},
        {"host": "host3", "port": 2335, "password": "pass3", "secure": False}
    ]
    
    for host_info in hosts:
        try:
            print(f"尝试连接节点: {host_info['host']}:{host_info['port']}")
            node = await wavelink.NodePool.create_node(
                bot=client,
                host=host_info["host"],
                port=host_info["port"],
                password=host_info["password"],
                https=host_info["secure"]
            )
            # 或者等待on_wavelink_node_ready事件确认,这里直接检查状态
            if node.is_connected():
                print(f"成功连接到节点: {host_info['host']}:{host_info['port']}")
                break
        except Exception as e:
            print(f"连接失败: {str(e)},尝试下一个节点...")
    else:
        print("所有节点均无法连接,请检查节点配置!")

另外,你已经实现的on_wavelink_node_ready事件会在节点完全准备好时触发,这其实也是一个确认节点连接成功的可靠方式,不一定非要主动调用is_connected()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:03:10