Я пытаюсь сделать кулдаун на команду с помощью
asyncio.sleep(time) и базы данных json:
@commands.command()
async def work(self, ctx):
with open('Databases/economy.json','r') as f:
money = json.load(f)
with open('Databases/queue.json','r') as f:
queue = json.load(f)
if not str(ctx.guild.id) in queue:
queue[str(ctx.guild.id)] = {}
queue[str(ctx.guild.id)]["Work"] = {}
queue[str(ctx.guild.id)]["Rob"] = {}
with open('Databases/queue.json','w') as f:
json.dump(queue, f, indent=4)
if not str(ctx.author.id) in money[str(ctx.guild.id)]["Users"]:
money[str(ctx.guild.id)]["Banks"][str(ctx.author.id)] = 0
money[str(ctx.guild.id)]["Users"][str(ctx.author.id)] = 0
with open('Databases/queue.json','w') as f:
json.dump(queue, f, indent=4)
if not str(ctx.author.id) in queue[str(ctx.guild.id)]["Work"]:
NotQueueWork = discord.Embed(description = f'**{ctx.author.mention}, вы поработали и получили `{money[str(ctx.guild.id)]["Settings"]["WorkMoney"]}` {money[str(ctx.guild.id)]["Settings"]["EconomyEmoji"]}!**', color = 0xd6ff8f)
NotQueueWork.set_author(name = f'Работа', icon_url = self.client.user.avatar_url)
await ctx.send(embed = NotQueueWork)
money[str(ctx.guild.id)]["Users"][str(ctx.author.id)] += money[str(ctx.guild.id)]["Settings"]["WorkMoney"]
with open('Databases/economy.json','w') as f:
json.dump(money, f, indent=4)
needMoney = int(money[str(ctx.guild.id)]["Settings"]["WorkTime"])
timestamp = datetime.timestamp(datetime.now(timezone.utc))
nowdate = int(timestamp) + 10800 + needMoney
nowtimestamp = datetime.fromtimestamp(nowdate, timezone.utc)
queue[str(ctx.guild.id)]["Work"][str(ctx.author.id)] = {}
queue[str(ctx.guild.id)]["Work"][str(ctx.author.id)]["WorkGG"] = str(nowtimestamp.strftime("%Y.%m.%d %H:%M:%S"))
with open('Databases/queue.json','w') as f:
json.dump(queue, f, indent=4)
await wait(needMoney)
del queue[str(ctx.guild.id)]["Work"][str(ctx.author.id)]
with open('Databases/queue.json','w') as f:
json.dump(queue, f, indent=4)
if str(ctx.author.id) in queue[str(ctx.guild.id)]["Work"]:
InQueueWork = discord.Embed(description = f'**{ctx.author.mention}, вы устали, приходите в `{queue[str(ctx.guild.id)]["Work"][str(ctx.author.id)]["WorkGG"]}` по МСК!**', color = 0xff0303)
InQueueWork.set_author(name = f'Работа', icon_url = self.client.user.avatar_url)
return await ctx.send(embed = InQueueWork)
Но, такая ситуация:
У меня стоит кулдаун 3 часа, я пишу команду, получаю монеты и жду 3 часа. Проходит 4 часа, я пишу команду, но оно пишет: вы устали, приходите в 16:35:36. У меня время 17:35:36
Жду еще, но результат тот же, тоесть кулдаун не работает.
Я пытался сделать его через
@cooldown.cooldown(rate, per, type)
Но, тут тоже возникает проблемка:
Я хочу сделать, чтобы он брал время которое установлено в базе данных и устанавливал его в per кулдауна, но у меня ничего не выходит.
Помогите, подскажите как сделать хороший кулдаун? Если что-то нужно, уточняйте.