discord.py,sqlite | Invite Logger

2024-06-16 08:23:11 发布

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

因此,我现在按照教程使用sqlite创建了一个invite记录器。这是我的设置功能

   async def setup(self):
        await self.bot.wait_until_ready()
        self.bot.db = await aiosqlite.connect("inviteData.db")
        await self.bot.db.execute("CREATE TABLE IF NOT EXISTS totals (guild_id int, inviter_id int, normal int, left int, fake int, PRIMARY KEY (guild_id, inviter_id))")
        await self.bot.db.execute("CREATE TABLE IF NOT EXISTS invites (guild_id int, id string, uses int, PRIMARY KEY (guild_id, id))")
        await self.bot.db.execute("CREATE TABLE IF NOT EXISTS joined (guild_id int, inviter_id int, joiner_id int, PRIMARY KEY (guild_id, inviter_id, joiner_id))")
    

        for guild in self.bot.guilds:
            for invite in await guild.invites():
                await self.bot.db.execute("INSERT OR IGNORE INTO invites (guild_id, id, uses) VALUES (?,?,?)", (invite.guild.id, invite.id, invite.uses))
                await self.bot.db.execute("INSERT OR IGNORE INTO totals (guild_id, inviter_id, normal, left, fake) VALUES (?,?,?,?,?)", (guild.id, invite.inviter.id, 0, 0, 0))
                                 
        await self.bot.db.commit()

现在,如果他们用机器人做任何事情,比如现在做一个邀请,我需要做一个addinvites命令,并且只有当这个人在数据库中时,这个命令才会起作用,所以有人能告诉我如何做一个命令或编辑它,使它将公会中的每个人都添加到数据库中

这也是我的update_totals函数的代码

async def update_totals(self, member):
        invites = await member.guild.invites()

        c = datetime.today().strftime("%Y-%m-%d").split("-")
        c_y = int(c[0])
        c_m = int(c[1])
        c_d = int(c[2])

        async with self.bot.db.execute("SELECT id, uses FROM invites WHERE guild_id = ?", (member.guild.id,)) as cursor: 
            async for invite_id, old_uses in cursor:
                for invite in invites:
                    if invite.id == invite_id and invite.uses - old_uses > 0: 
                        if not (c_y == member.created_at.year and c_m == member.created_at.month and c_d - member.created_at.day < 7): 
                            print(invite.id)
                            await self.bot.db.execute("UPDATE invites SET uses = uses + 1 WHERE guild_id = ? AND id = ?", (invite.guild.id, invite.id))
                            await self.bot.db.execute("INSERT OR IGNORE INTO joined (guild_id, inviter_id, joiner_id) VALUES (?,?,?)", (invite.guild.id, invite.inviter.id, member.id))
                            await self.bot.db.execute("UPDATE totals SET normal = normal + 1 WHERE guild_id = ? AND inviter_id = ?", (invite.guild.id, invite.inviter.id))

                        else:
                            await self.bot.db.execute("UPDATE totals SET normal = normal + 1, fake = fake + 1 WHERE guild_id = ? and inviter_id = ?", (invite.guild.id, invite.inviter.id))

                        return

Tags: selfidexecutedbbotawaitinviteint