因此,我试图创建一个on_user_update事件并发送消息,我需要获取设置为行会日志通道的channel_id,我按guild_id对其进行排序,但是on_user_update没有公会属性。那么我将如何实现我的目标?
这是代码:
@bot.event
async def on_user_update(before, after):
async with aiosqlite.connect('database.sqlite') as db:
async with db.execute("SELECT channel_id FROM logging WHERE guild_id = ?", ("answer goes here")) as cursor:
result = await cursor.fetchone()
if result is not None:
channel = bot.get_channel(id=int(result[0]))
if before.avatar != after.avatar:
av = discord.Embed()
av = discord.Embed(title="**User Avatar Updated:**", color=7419530, description=f"After:")
av.set_image(url = after.avatar_url)
await channel.send(embed=av)
答案 0 :(得分:0)
在成员对象之前和之后调用on_member_update时,这意味着您可以轻松地做到这一点。
guild = after.guild
答案 1 :(得分:0)
这是我想到使用on_user_update
事件获取公会ID的唯一方法:
guild = client.get_guild(id_here).id
答案 2 :(得分:0)
仅使用成员是不可能的。唯一的方法是获取公会对象,然后使用after.id
获取成员对象,或遍历所有对象。
guild = await bot.fetch_guild(GUILD_ID)
member = guild.get_member(after.id)
当涉及到我的机器人日志的问题时,我确实不得不做一些麻烦的事情。这是我所做的:
for guild in bot.guilds:
for member in guild.members:
if member.id == after.id:
#do stuff
遍历机器人可以看到的所有成员,并在找到有问题的用户时获取一个成员和一个行会对象。但是,当机器人进入大量服务器时,必须对其进行更新,以便对其进行扩展。不过,与此同时,由于我的漫游器位于少量服务器中,因此对我来说效果很好。