首页 > 解决方案 > discord.py TypeError:on_member_join()缺少1个必需的位置参数:'member'错误

问题描述

@client.event
async def on_member_join(ctx, member : discord.member):
    print(f'{time} {member} has joined {ctx.guild.name}, Server ID: {ctx.guild.id}')
    with open('join-log.txt', 'a') as joinlog:
        joinlog.writelines(f'{time} {member} has joined {ctx.guild.name}, Server ID: {ctx.guild.id}\n')

@client.event
async def on_member_remove(ctx, member : discord.member):
    print(f'{time} {member} has joined {ctx.guild.name}, Server ID: {ctx.guild.id}')
    with open('leave-log.txt', 'a') as leavelog:
        leavelog.writelines(f'{time} {member} has left {ctx.guild.name}, Server ID: {ctx.guild.id}\n')

此代码旨在创建一个文本文件并存储离开和加入服务器的用户,其中包含我的机器人。它提出的错误是

TypeError: on_member_join() missing 1 required positional argument: 'member'

但我似乎无法弄清楚这段代码有什么问题

标签: pythondiscorddiscord.pybots

解决方案


正如评论中提到的:on_member事件只是member作为一个论点,仅此而已。

为了仍然能够得到nameof theguild或 theid我们可以用ctx替换member。我们还要求提供确切的时间,datetime.datetime.utcnow但您也可以通过任何其他方式进行。

看看完整的代码:

import datetime

@client.event
async def on_member_join(member):
    print(f'{datetime.datetime.utcnow()} {member} has joined {member.guild.name}, Server ID: {member.guild.id}')
    with open('join-log.txt', 'a') as joinlog:
        joinlog.writelines(f'{datetime.datetime.utcnow()} {member} has joined {member.guild.name}, Server ID: {member.guild.id}\n')

@client.event
async def on_member_remove(member):
    print(f'{datetime.datetime.utcnow()} {member} has left {member.guild.name}, Server ID: {member.guild.id}')
    with open('leave-log.txt', 'a') as leavelog:
        leavelog.writelines(f'{datetime.datetime.utcnow()} {member} has left {member.guild.name}, Server ID: {member.guild.id}\n')

输出:

2021-05-14 22:56:12.511888 XXXX#0000 has left Test Server, Server ID: XXX
2021-05-14 22:56:22.067174 XXXX#0000 has joined Test Server, Server ID: XXX

推荐阅读