【问题标题】:get only information of a specific guild仅获取特定公会的信息
【发布时间】:2021-05-31 06:54:31
【问题描述】:

嘿,这段代码工作得很好,但我的问题是它获取了机器人所在的所有服务器的信息。

@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)  

此代码用于日志,因此我希望它为每个服务器提供不同的日志。例如,如果我更改了头像或其他任何东西,我不想显示我不在的服务器。 任何帮助表示赞赏

【问题讨论】:

  • “我不在的服务器”中的“我”是指您的帐户,还是机器人的帐户?
  • 我的意思是我的帐户。

标签: python discord discord.py


【解决方案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)

【讨论】:

  • 如果我使用数据库会容易吗?
  • 为什么要使用数据库?它的目的是什么?
  • 因为例如,服务器可能想要更改日志通道。所以他们可以这样做;日志#newchannel
  • 但这与您的问题有什么关系?
  • 这不仅仅是问。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2019-11-02
  • 2020-02-02
  • 1970-01-01
相关资源
最近更新 更多