在discord.py中的on_user_update事件中获取行会ID

时间:2020-08-20 02:58:58

标签: python discord.py

因此,我试图创建一个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)

3 个答案:

答案 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

遍历机器人可以看到的所有成员,并在找到有问题的用户时获取一个成员和一个行会对象。但是,当机器人进入大量服务器时,必须对其进行更新,以便对其进行扩展。不过,与此同时,由于我的漫游器位于少量服务器中,因此对我来说效果很好。