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

Python开发Discord机器人触发NoneType无mentioned_in属性报错如何解决

问题原因分析
  • 报错AttributeError: 'NoneType' object has no attribute 'mentioned_in'的核心原因是midway变量为空值:client.get_user()方法没有匹配到目标用户,返回了None,对空值调用方法就会触发该错误。
  • 导致get_user返回空的常见原因有三个:
    1. 方法要求传入整数类型的用户ID,如果传入的是带引号的字符串格式ID,会直接匹配失败
    2. get_user从机器人本地缓存拉取数据,如果机器人启动后还没缓存到目标用户信息,也会返回空
    3. discord.py v2.0及以上版本默认关闭成员相关权限,没有开启对应意图的情况下无法正常获取用户数据
修复方案
  1. 先进入Discord开发者后台,在你的机器人应用的「Bot」设置页,开启「Server Members Intent」权限
  2. 按照下方示例修正代码,补充意图声明、空值判断、缓存 fallback 逻辑:
import discord
import os

# 显式声明需要的权限意图
intents = discord.Intents.default()
intents.members = True
intents.message_content = True

client = discord.Client(intents=intents)

@client.event
async def on_message(message):
    # 跳过机器人自身发送的消息,避免循环触发
    if message.author == client.user:
        return
    # 替换为目标用户的整数ID,不要加引号包裹
    target_user_id = 替换为midway的实际数字ID
    midway = client.get_user(target_user_id)
    # 本地缓存无数据时,从线上拉取用户信息
    if not midway:
        try:
            midway = await client.fetch_user(target_user_id)
        except discord.NotFound:
            # 找不到用户直接结束逻辑,避免报错
            return
    if midway.mentioned_in(message):
        await message.channel.send('你的预设消息内容')

client.run(os.environ['environ'])
额外注意事项
  • 机器人必须和目标midway账号在同一个服务器内,否则无法正常拉取用户信息
  • 需要给机器人开放对应频道的发消息权限,否则触发回复时会抛出权限错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:27:02