计算新成员的邀请

时间:2020-03-15 06:13:52

标签: python python-3.7 discord.py discord.py-rewrite

我正在尝试为不和谐的用户提供可能的邀请,但这根本行不通,我也不知道为什么。我希望它为机器人输出“找不到邀请”,但是它却什么也没说,对用户或机器人也没有。据我所知,它应该起作用。它会扫描服务器中的每个邀请并将其存储,然后检查加入和输出嵌入内容的用户是否接受邀请。

    def __init__(self, bot):
        self.bot.loop.create_task(self.get_invites())

    async def get_invites(self):
            for guild in self.bot.guilds:
                try:
                    guild_invites = {}
                    invites = await guild.invites()
                    for invite in invites:
                        guild_invites[invite.code] = invite
                    self.invites[guild] = guild_invites
                except discord.errors.Forbidden:
                    pass


    async def find_possible_invites(self,guild):
        i = 1
        while i < 11:
            new = await guild.invites()
            res = []
            for invite in new:
                try:
                    old_uses = self.invites[guild][invite.code].uses
                except KeyError:
                    self.invites[guild][invite.code] = invite
                    if invite.uses >= 1:
                        res.append(invite)
                    continue
                new_uses = invite.uses
                if old_uses < new_uses :
                    self.invites[guild][invite.code] = invite
                    res.append(invite)

            if res == []:
                await asyncio.sleep(3)
                i+=1
            else:
                break
        return res

    @commands.Cog.listener()
    async def on_member_join(self,member):
        server = await self.bot.get_guild(SERVER_ID)
        possible_invites = await self.find_possible_invites(server)
        channel = self.bot.get_channel(CHANNEL_ID)

        whtspace= "** **"
        embed = discord.Embed(color=0x21d3f3)
        embed.title = "Member Joined!"
        embed.add_field(name="Name",value=str(member))
        embed.add_field(name="User ID:",value=member.id)
        if len(possible_invites) == 1:
            embed.add_field(name="Invite used",value=possible_invites[0].url,inline=True)
            embed.add_field(name="Invite created by",value=str(possible_invites[0].inviter),inline=True)
            embed.add_field(name="Number of uses",value=str(possible_invites[0].uses),inline=True)

        elif len(possible_invites) > 1:
            embed.add_field(name="Possible invites used:",value=whtspace,inline=False)
            for i in possible_invites:
                embed.add_field(name=whtspace,value=i.url,inline=False)
        else:
            await channel.send("Invite used could not be detected")

        await channel.send(embed=embed)

0 个答案:

没有答案