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

nextcord的on_member_join事件触发NoneType无send属性报错如何解决

报错原因

AttributeError: 'NoneType' object has no attribute 'send' 说明调用ch.send()的时候ch是空值,也就是client.get_channel(84319995256905728)没有成功获取到对应的频道对象,常见原因如下:

  • 填写的频道ID有误
  • 机器人未加入频道所在的服务器,或者没有该频道的查看、发消息权限
  • client.get_channel()仅从机器人本地缓存读取数据,触发on_member_join时缓存还未加载完成,因此返回空值
修复方案

1. 基础排查

首先确认以下配置正确:

  • 开启Discord客户端开发者模式,右键目标频道复制ID,核对代码中的频道ID84319995256905728和实际ID完全一致
  • 确认机器人已经加入对应服务器,且在目标频道的权限设置中拥有「查看频道」「发送消息」权限

2. 替换频道获取逻辑

将本地缓存读取的get_channel替换为从Discord服务器异步拉取的fetch_channel方法,同时增加异常捕获避免报错崩溃,修改后的代码如下:

@client.event
async def on_member_join(member):
    print('+')
    channel_id = 84319995256905728
    try:
        ch = await client.fetch_channel(channel_id)
        await ch.send(f"{member.name} has joined")
    except Exception as e:
        # 打印错误信息方便后续排查
        print(f"入群通知发送失败,错误原因:{str(e)}")

(可选)优化方案

如果入群通知频道是固定的,可以在机器人启动完成后提前拉取频道对象缓存,减少重复请求:

# 全局变量存储通知频道对象
notify_channel = None

@client.event
async def on_ready():
    global notify_channel
    # 机器人启动完成后提前获取频道
    notify_channel = await client.fetch_channel(84319995256905728)
    print(f"机器人启动成功,通知频道已绑定:{notify_channel.name}")

@client.event
async def on_member_join(member):
    print('+')
    if notify_channel:
        await notify_channel.send(f"{member.name} has joined")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:36:03