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

Discord.py Rewrite版本on_member_join自动分配角色功能TypeError报错求助

问题排查与修复:Discord.py on_member_join 触发 TypeError

报错原因分析

这个报错其实很好定位——你给on_member_join事件函数多写了一个ctx参数!

在discord.py的事件机制里,on_member_join是专门监听新成员加入的事件,它只会自动传入member这一个参数。它和你平时写的命令函数(比如带@client.command()装饰器的函数)不一样,那些函数需要ctx来获取上下文,但这个事件完全不需要。

你现在的函数定义是async def on_member_join(ctx, member):,当discord.py触发这个事件时,只会把新加入的成员对象传给函数,也就是第一个参数位置是member,但你定义的函数却把这个值赋给了ctx,导致member参数没有接收到值,直接触发了missing 1 required positional argument的错误。

修复方案

两步就能搞定:

  1. 删掉函数定义里的ctx参数,改成async def on_member_join(member):
  2. 替换代码里用到ctx.message.created_at的地方——因为现在没有ctx了,推荐用member.joined_at(成员实际加入服务器的时间),或者导入datetime模块用datetime.datetime.utcnow()

修复后的完整代码如下:

import datetime  # 若使用utcnow()则需要导入,用member.joined_at的话可以不用

@client.event
async def on_member_join(member):
    if member.guild.name == "lusk_245789":  # Server Name
        role = discord.utils.get(member.guild.roles, name="Member")
        await member.add_roles(role)
        embed = discord.Embed(
            title=f"Member Joined", 
            description=f"{member.mention}, Welcome to {member.guild.name}. We hope that your time with us is a happy one!", 
            color=0x9b26b9, 
            timestamp=member.joined_at  # 用成员加入时间更贴合场景
        )
        embed.add_field(name="Please check out the Rules Channel!", value="<#822090510495514644>", inline=False)
        embed.add_field(name="Latest announcements are made here!", value="<#781017647922937856>", inline=False)
        embed.set_footer(text="Task Completed!")
        # 发送欢迎消息到指定频道
        await client.get_channel(873238209897844799).send(embed=embed)
    else:
        return

额外注意事项

  • 确保你的机器人账号拥有管理角色的权限,不然执行add_roles时会报错
  • 确认服务器里确实存在名为Member的角色,并且机器人的角色在服务器角色列表里的位置要高于这个角色(不然机器人没有权限给成员添加该角色)
  • 如果你的discord.py版本比较旧,建议升级到稳定版,避免一些版本兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:32:26