我希望通过使用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)