Хочу сделать откат для команды, который будет хранится в общей базе данных, и при перезапуске бота продолжал считать время. Вот что написал я, но цикл для отсчёта не работает, в базу записывается время и более не обновляется.
conn = sqlite3.connect('testingBot.db')
cur = conn.cursor()
@Bot.event
async def on_ready():
cur.execute(f"""CREATE TABLE IF NOT EXISTS users (
id BIGINT,
rep INT,
rep_last_user BIGINT,
rep_time BIGINT
)""")
for guild in Bot.guilds:
for member in guild.members:
if cur.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
cur.execute(f"INSERT INTO users VALUES (?, ?, ?, ?)", (member.id, 0, 0, 0))
else:
pass
conn.commit()
print(f"Bot logged as -> {Bot.user}")
# Цикл для отсчёта времени, который написан некорректно.
for guild in Bot.guilds:
for member in guild.members:
while cur.execute(f"SELECT rep_time FROM users WHERE id = {member.id}").fetchone()[0] > 0:
cur.execute(f"UPDATE users SET rep_time = rep_time - 5 WHERE id = {member.id}")
conn.commit()
@Bot.command()
async def rep(ctx, member: Optional[discord.Member]):
if cur.execute(f"SELECT rep_time FROM users WHERE id = {ctx.message.author.id}").fetchone()[0] == 0:
if member is None:
return
elif member.id == ctx.message.author.id:
emb = discord.Embed(
description = f'{ctx.message.author.mention} Вы не можете повысить репутацию сами себе.',
color = 0xff0000
)
await ctx.send(embed = emb)
else:
cur.execute(f"UPDATE users SET rep = rep + 1 WHERE id = {member.id}")
conn.commit()
emb = discord.Embed(
description = f'{ctx.message.author.mention} Вы повысили репутацию пользователя {member.mention} \nТеперь у него **+{cur.execute(f"SELECT rep FROM users WHERE id = {member.id}").fetchone()[0]}☆** репутации. \n\nПовысить снова можно через **2 часа.**',
color = 0x00E584
)
await ctx.send(embed = emb)
cur.execute(f"UPDATE users SET rep_time = 10800 WHERE id = {ctx.message.author.id}")
conn.commit()
elif cur.execute(f"SELECT rep_time FROM users WHERE id = {member.id}").fetchone()[0] > 0:
rep_cooldown = strftime('%Hh %Mm %Ss', gmtime(cur.execute(f"SELECT rep_time FROM users WHERE id = {ctx.message.author.id}").fetchone()[0]))
emb = discord.Embed(
description = f'{ctx.message.author.mention} Вы уже использовали очки репутации. Снова повысить репутацию вы сможете через **{rep_cooldown}.**',
color = 0xff0000
)
await ctx.send(embed = emb)