首页 > 解决方案 > 如何在 discord.py 欢迎消息中使用 ctx?

问题描述

所以我正在尝试使用图像构建不和谐的欢迎消息,但是当我使用以下代码时:

@bot.event
async def on_member_join(member, ctx, user: discord.Member = None):
    with open('users.json', 'r') as f:
        users = json.load(f)

    await update_data(users, member)

    with open('users.json', 'w') as f:
        json.dump(users, f)

    if user == None:
        user = ctx.author

    asset = user.avatar_url_as(size=128)
    data = BytesIO(await asset.read())
    im = Image.open(data)

    im = im.resize((244, 244));
    bigsize = (im.size[0] * 3, im.size[1] * 3)
    mask = Image.new('L', bigsize, 0)
    draw = ImageDraw.Draw(mask) 
    draw.ellipse((0, 0) + bigsize, fill=255)
    mask = mask.resize(im.size, Image.ANTIALIAS)
    im.putalpha(mask)

    output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
    output.putalpha(mask)
    output.save('output.png')

    background = Image.open('welcome.png')
    background.paste(im, (418, 68), im)
    background.save('overlap.png')

    await ctx.send(f'Welcome {user.mention}!')
    await ctx.send(file=discord.File("overlap.png")) 

...我得到错误:

 await coro(*args, **kwargs)
TypeError: on_member_join() missing 1 required positional argument: 'ctx'

我不确定为什么会发生这种情况,因为我在事件中定义了 ctx。任何帮助,将不胜感激。

标签: pythondiscorddiscord.pydiscord.py-rewrite

解决方案


除了事件之外member,您不能使用任何其他参数。on_member_join如果要向频道发送消息,可以使用channel.send. 要获取频道,您可以使用 discord.utils.getguild.get_channel()。这是一个简单的例子:

@bot.event
async def on_member_join(member):
    channel = member.guild.get_channel(channel id)
    await channel.send(f'Welcome {user.mention}!')
    await channel.send(file=discord.File("overlap.png")) 

推荐阅读