Привет, этот код работает нормально, но моя проблема в том, что он получает информацию обо всех серверах, на которых находится бот.

@commands.Cog.listener()
async def on_user_update(self, before, after):
        logs = self.bot.get_channel(810977833823240262)
        embed = discord.Embed(colour=0x7289da)
        embed.description = f"{after.name} has changed his avatar"
        if before.avatar_url != after.avatar_url:
            embed.add_field(name="New avatar")
            embed.set_image(url=after.avatar_url)
        if before.name != after.name:
            embed.add_field(name="Previous name",value=before.name,inline=False)
            embed.add_field(name="New name ",value=after.name,inline=False)
        if before.status != after.status:
            embed.add_field(name="Previous Status",value=before.status,inline=False)
            embed.add_field(name="New Status ",value=after.status,inline=False)
        await logs.send(embed=embed)  

Этот код предназначен для журналов, поэтому я хочу, чтобы у него были разные журналы для каждого сервера. Например, я не хочу показывать сервер, на котором меня нет, если я сменил аватар или что-то в этом роде. Любая помощь приветствуется

1
Alpha 1 Мар 2021 в 21:12

1 ответ

Лучший ответ

Вы можете просто проверить, есть ли у вас какие-либо общие гильдии с пользователем, который обновил его информацию.

@commands.Cog.listener()
async def on_user_update(self, before, after):
    my_id = YOUR_ID_HERE # Obviously put your ID here
    mutual_guilds = [g for g in self.bot.guilds if g.get_member(my_id) and g.get_member(after.id)]
    
    if mutual_guilds: # Checking if the list is not empty
        # The user is in one of your guilds
        logs = self.bot.get_channel(810977833823240262)
        embed = discord.Embed(colour=0x7289da)
        embed.description = f"{after.name} has changed his avatar"

        if before.avatar_url != after.avatar_url:
            embed.add_field(name="New avatar")
            embed.set_image(url=after.avatar_url)

        if before.name != after.name:
            embed.add_field(name="Previous name",value=before.name,inline=False)
            embed.add_field(name="New name ",value=after.name,inline=False)

        if before.status != after.status:
            embed.add_field(name="Previous Status",value=before.status,inline=False)
            embed.add_field(name="New Status ",value=after.status,inline=False)

        await logs.send(embed=embed)  

Чтобы немного объяснить понимание списка:

mutual_guilds = []

for g in self.bot.guilds: # Looping though every guild
    if g.get_member(my_id) and g.get_member(after.id): # Checking if both you and the user are in the guild
        mutual_guilds.append(g)
0
Łukasz Kwieciński 1 Мар 2021 в 20:52