python - 如何在 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。任何帮助,将不胜感激。
解决方案
除了事件之外member
,您不能使用任何其他参数。on_member_join
如果要向频道发送消息,可以使用channel.send
. 要获取频道,您可以使用 discord.utils.get
或guild.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"))
推荐阅读
- c# - 从流中读取时,Grpc 服务器中未处理异常
- java - Spring Batch循环阅读器同时更改sql查询并写入不同的文件
- microsoft-graph-api - MSGraph - 从回复中获取外部电子邮件对话
- django - 即使系统没有被使用,在Django中的表中生成自动记录
- unity3d - 如何在 Unity 中创建像 Fortnite 这样的结构破坏?
- python - Seaborn 中的非标准化直方图未以 X 轴为中心
- ios - 在 Xcode 11.4 和 Swift 中检查 Nil 时出错
- java - PDFBox | 在线崩溃:PDDocument.load(file)
- javascript - 为什么我的反应状态没有正确改变?
- pandas - Pandas - 尝试根据公共键将多行数据组合成单行