【问题标题】:When a new member joins the server in Discord.Py, bot believes multiple invites were used当新成员在 Discord.Py 中加入服务器时,bot 认为使用了多个邀请
【发布时间】:2021-07-25 01:16:10
【问题描述】:

我有一个机器人试图找出成员加入服务器时使用的邀请。

创建邀请后,机器人会将邀请列表保存到字典中,其中公会 ID 作为键,Invites 的列表作为值。

当成员加入服务器时,机器人会获取邀请列表并比较它们的使用情况。如果新获取的列表中的邀请比上次保存的使用次数多,那么我们知道邀请已被使用并告诉服务器,否则我们什么也不做

这是我的代码

class AdminCog(commands.Cog):
    def __init__(self, bot: commands.Bot):
        super().__init__(bot)
        self.list_invites = {}

    @commands.Cog.listener()
    async def on_invite_create(self, invite: Invite):
        self.list_invites[str(invite.guild.id)] = await invite.guild.invites()
        announce_channel = ANNOUNCE_CHANNEL_ID
        await announce_channel.send(f"{invite.inviter.mention} created an invite for channel "
                                    f"{invite.channel.mention} with {invite.max_uses} max uses and "
                                    f"a lifetime of {invite.max_age}")

    @commands.Cog.listener()
    @has_admin_role()
    async def on_member_join(self, member: Member):
        guild = member.guild
        announce_channel = ANNOUNCE_CHANNEL_ID
        new_invites = await member.guild.invites()
        for old, new in zip(self.list_invites[str(guild.id)], new_invites):
            if old.uses < new.uses:
                await announce_channel.send(
                    f"{member.mention} a été invité par {new.inviter.mention} ({new.uses} invitations)")
        self.list_invites[str(guild.id)] = new_invites

我知道一旦找到邀请,我可以在 for 中添加 break,但我不确定第一次满足条件时是否是正确的邀请,所以我将它们全部检查一遍。

问题在于,显然,当只有一个人加入服务器时,机器人认为它是通过大量邀请被邀请的

虽然这显然不可能发生,但正如您所见,邀请的使用次数仅针对一位邀请者提出

我的理论是 await invite.guild.invites() 返回一个缓存列表而不是实际列表,或者可能两次调用 await invite.guild.invites() 以不同的顺序给出列表。

你怎么看?我错过了什么吗?

【问题讨论】:

  • 它实际上是在向您返回当前有效的邀请。
  • @BhavyadeepYadav 是的,这就是我想要的,当一个成员加入时,我只是比较邀请的旧保存与新的保存(在 1 个成员加入后),所以我应该只找到 1 个邀请使用次数增加了
  • 哦!我需要一些时间。让我浏览一些文档,然后我会回到这个。

标签: python discord discord.py


【解决方案1】:

我找到了类似的答案。

我在这里发布链接。如果你觉得难以理解,直接告诉我,我会简化代码再给你解释。

链接:https://stackoverflow.com/a/60974911/14141072

谢谢! :D

【讨论】:

  • 这并没有真正回答问题,我不想跟踪一个用户的邀请次数,但我想通过比较使用次数来查看谁邀请了新人
  • 我用另一个答案更新了链接。使用它,我认为这会有所帮助。
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2020-10-18
  • 2021-09-03
  • 1970-01-01
  • 2012-12-29
  • 2022-01-24
相关资源
最近更新 更多