统计新成员的邀请

2024-04-24 16:49:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为加入discord的用户获取可能的邀请,但它根本不起作用,我不知道为什么。我希望它能为机器人程序输出“找不到邀请”,但它什么也没说,对用户和机器人程序都没有。据我所知,它应该有用。它扫描服务器中的每个邀请并将其存储,然后检查它是否出现在加入并输出嵌入的用户身上

    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)

Tags: nameselfaddfieldvaluebotinlineres