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

使用discord.py如何获取新加入成员的用户名与头像URL?

问题修复方案

核心错误点

  • 事件类型错误:当前监听的on_member_remove是成员离开服务器的触发事件,你需要实现新成员进群欢迎,应该监听on_member_join事件
  • 变量被覆盖:事件函数开头你写了member = 0,直接把传入的成员对象覆盖为整型数字,后续调用member.avatar_url、member.name都是对数字操作,必然报错
  • API属性过时:discord.py v2.x及以上版本,获取用户头像的属性已从avatar_url改为avatar.url,建议加兜底逻辑处理没有自定义头像的用户
  • 缺少意图配置:成员相关事件需要在Discord开发者后台的Bot设置页开启Server Members Intent,同时代码初始化客户端时声明对应意图,否则事件不会触发

修正后参考代码

import discord
from PIL import Image, ImageDraw, ImageFont
import requests

# 初始化时开启成员意图
intents = discord.Intents.default()
intents.members = True # 必须开启,否则成员事件不触发
client = discord.Client(intents=intents)

# 成员离开时更新在线人数
@client.event
async def on_member_remove(member):
    total_member = 0
    for guild in client.guilds:
        total_member += guild.member_count
    await client.change_presence(status=discord.Status.idle, activity = discord.Activity(
        type = discord.ActivityType.watching,
        name = f'{total_member} Members'
    ))

# 新成员加入时生成欢迎图
@client.event
async def on_member_join(member):
    # 先更新总人数
    total_member = 0
    for guild in client.guilds:
        total_member += guild.member_count
    await client.change_presence(status=discord.Status.idle, activity = discord.Activity(
        type = discord.ActivityType.watching,
        name = f'{total_member} Members'
    ))

    # 获取头像,兜底默认头像避免报错
    avatar_url = member.avatar.url if member.avatar else member.default_avatar.url
    picture = Image.open(requests.get(avatar_url, stream=True).raw)
    text = f"Welcome, {member.name}"

    # 生成欢迎图逻辑
    original_file_path = 'welcome.png'
    img = Image.open("default.png")
    draw = ImageDraw.Draw(img)
    font = ImageFont.truetype("arial.ttf", 72)
    draw.text((925,800), text, (255, 255, 255), font=font)

    # 图片合成逻辑,坐标可根据底图尺寸自行调整
    back_im = picture.copy()
    back_im.paste(img, (925, 500))
    back_im.save(original_file_path)

    # 发送到指定频道,替换下方ID为你实际的欢迎频道ID
    welcome_channel = client.get_channel(1234567890)
    await welcome_channel.send(content=text, file=discord.File(original_file_path))

额外注意事项

  • 确保你提前安装了对应依赖:discord.py、Pillow、requests
  • 图片显示错位的话可以自行调整绘制、粘贴的坐标数值适配你的底图尺寸

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:54:03