【问题标题】:Discordpy: Efficient Invitation CheckingDiscordpy:高效的邀请检查
【发布时间】:2022-01-21 09:12:04
【问题描述】:

我正在尝试使用 discord.py 库编写一个函数。该功能旨在奖励特定用户邀请其他用户。

我当前的代码确实可以工作,但我担心代码的效率。特别是在这两种情况下:

  1. 如果有很多用户快速连续加入
  2. 如果服务器中有很多用户(100k+)

我的代码:

@client.event
async def on_ready():
    global members_joined
    MAIN_GUILD = client.get_guild() # ID Redacted

    # Get a list of users in the server. This is to prevent additional rewards on leave+rejoin
    invites_before_join = await MAIN_GUILD.invites()
    members_joined = await MAIN_GUILD.fetch_members(limit=None).flatten()

@client.event
async def on_member_join(member):
    global invites_before_join

    invites_after_join = await member.guild.invites()

    for before_invite in invites_before_join:
        for after_invite in invites_after_join:
            if(before_invite.code == after_invite.code and before_invite.uses < after_invite.uses):
                if(member not in members_joined):
                    # code here (redacted)
                    members_joined.append(member) # Add them to the list, so they cannot leave+rejoin to reactivate

    invites_before_join = invites_after_join
    return

如您所见,在我的解决方案中,我使用了嵌套的 for 循环。我想知道这是否是我应该在效率方面关注的事情(特别是出于上述两个原因)。我之所以这样做,是因为我需要邀请者的姓名和ID,这样我才能奖励他们。

【问题讨论】:

  • 已经有邀请跟踪器了,但要好得多,你为什么要重新发明轮子? github.com/cyrus01337/invites
  • 老实说,我不知道有这样的东西存在。

标签: python discord discord.py


【解决方案1】:

在被https://github.com/cyrus01337/invites推荐后,我看了看,发现使用async def on_invite_update(member, invite):的更优雅的解决方案

感谢 cmets 中的 Lukasz 的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2022-01-22
    • 2021-08-16
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    相关资源
    最近更新 更多