如何使用PostergeSQL进行冷却? (discord.py 1.18.2)

时间:2020-07-02 17:02:06

标签: python discord.py

我希望通过使用PostergeSQL数据库和Python 3.8来使冷却时间在机器人重启后得以保存

我尝试了以下代码:

def cooldown(seconds):
    async def cooldown_predicate(ctx):
        if not ctx.guild:
            raise commands.NoPrivateMessage('Guild only')
        if not (cd := await ctx.bot.sql(f'SELECT * FROM cooldown WHERE id={ctx.author.id} AND command=$1', str(ctx.command))):
            await ctx.bot.sql(f'INSERT INTO cooldown VALUES ({ctx.author.id}, $1, {int(time.time()+seconds)})', str(ctx.command))
            return True
        else:
            ends_at = cd[0]['ends_at'] or 0
            if ends_at > time.time():
                raise commands.CommandOnCooldown(f'Command {ctx.command} is on cooldown', retry_after=ends_at - time.time())
            else:
                await ctx.bot.sql(f'UPDATE cooldown SET ends_at={int(time.time()+seconds)} WHERE id={ctx.author.id} AND command=$1', str(ctx.command))
                return True
    return commands.check(cooldown_predicate)

是的,这是可行的,但是有太多错误: 第一个错误是,如果我只键入带有不带参数的cooldown的命令,我的错误处理程序将调用help命令,但不重置Cooldown。我已解决此问题,但如果我同时使用几次此命令,冷却时间仍然会出现

第二个错误是,如果我只是键入“尊重@user”(不带前缀),冷却时间仍然会出现。我不知道该如何解决,这是我的问题。 我试图使冷却时间仅在on_command侦听器中设置,但这没有用,并且出现了新的错误:如果我再次输入“尊重”命令(在冷却后该命令出现错误,则)冷却时间再次设置为4小时

我正在使用Python 3.8.0和discord.py 1.18.2,asyncpg 0.20.1(PostgreSQL 10.12)

0 个答案:

没有答案