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

使用discord.utils.get()获取Discord成员返回None的问题求助

问题解决方法

1. 核心错误:查询成员时用错参数

你代码里用name参数传入18位ID是完全错误的:

  • name对应的是用户的用户名(比如"Mike",不带#后缀)
  • 用ID查询必须用id参数,且ID要传整数类型,不是字符串

2. 逻辑错误:无法通过user2 in after.roles判断操作人

on_member_update事件的before/after仅代表被修改角色的成员,无法直接获取是谁修改了角色。要判断操作人,必须查询服务器的审计日志。

3. 优化:避免缓存缺失问题

即使开启了members intent,机器人的本地缓存可能没加载到目标用户,用fetch_member从Discord API直接拉取成员,比依赖缓存的discord.utils.get更可靠。

修改后的完整代码

import discord
from discord.ext import commands
from discord import AuditLogAction

# 替换成你的目标机器人ID和你的用户ID(整数类型)
TARGET_BOT_ID = 123456789012345678
YOUR_USER_ID = 987654321098765432

intents = discord.Intents.default()
intents.members = True
intents.guilds = True
bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')

@bot.event
async def on_member_update(before, after):
    # 只处理目标机器人的角色变化
    if after.id != TARGET_BOT_ID:
        return
    
    # 角色没变化就跳过
    if before.roles == after.roles:
        return
    
    # 查询最近的角色修改审计日志
    async for entry in after.guild.audit_logs(action=AuditLogAction.member_role_update, limit=1):
        # 检查操作人是否是你
        if entry.user.id == YOUR_USER_ID:
            # 恢复角色到修改前的状态
            if len(after.roles) > len(before.roles):
                # 新增了角色,移除新增的部分
                added_roles = [r for r in after.roles if r not in before.roles]
                await after.remove_roles(*added_roles, reason="禁止为该机器人分配角色")
            else:
                # 移除了角色,加回移除的部分
                removed_roles = [r for r in before.roles if r not in after.roles]
                await after.add_roles(*removed_roles, reason="禁止移除该机器人的角色")
            break

额外注意事项

  • 确保机器人拥有查看审计日志的权限,否则无法获取操作人信息
  • 把代码里的TARGET_BOT_ID和YOUR_USER_ID替换成实际的18位整数ID
  • 如果机器人在大型服务器,审计日志查询可以适当调整limit参数,但一般取最近1条足够

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:05:18