【问题标题】:except the @everyone role in log messages (discord.py)除了日志消息中的@everyone 角色(discord.py)
【发布时间】:2021-08-02 22:55:01
【问题描述】:

我想用 bot[1] 记录对用户角色的更改,但我想从更改的角色中排除 @@everyone 角色。

你知道我该怎么做吗?

这是我目前使用的代码:

    @Cog.listener()
    async def on_member_update(self, before, after):
        if before.roles != after.roles:

            embed = Embed(
                colour = discord.Colour.blue(),
                description=f"{after.mention}'s Rollen haben sich aktualisiert:",
                timestamp = datetime.utcnow()
            )
            embed.set_author(name=after.name,
            icon_url=after.avatar_url)
            embed.set_footer(text=f"User ID: {after.id}")

            fields = [("Before:", ", ".join([r.mention for r in before.roles]), False),
                      ("After:", ", ".join([r.mention for r in after.roles]), False)]

            for name, value, inline in fields:
                embed.add_field(name=name, value=value, inline=inline)

            await self.log_channel.send(embed=embed)

【问题讨论】:

  • 您的@Cog.listener() 必须是@commands.Cog.listener()
  • 我不这么认为,因为我导入了这个 [from discord.ext.commands import Cog] 并且代码本身正在运行
  • 我已经在下面发布并编辑了我的答案,现在可以正常使用了

标签: python python-3.x discord discord.py


【解决方案1】:

我在不同的服务器上对其进行了测试,发现@everyone 在服务器上具有唯一的@id

所以也许你应该改用Member.Roles.Role.name。 (或者您应该存储@everyone id)我的意思是,没有人会准确地将角色命名为“@everyone”,对吗? (没想到这是一个合法的命名)

这是测试。第一个打印是您的代码,第二个打印是 @everyone 排除在外。

@commands.command()
    async def test(self, context):
        roles = context.author.roles
        roles2 = []
        for r in roles:
            if r.name != '@everyone':
                roles2.append(r.mention)
        print("Before:", ", ".join([r.mention for r in roles]))
        print(f"@everyone exclude: {roles2}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2020-08-03
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2019-02-04
    相关资源
    最近更新 更多