Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите, бот aiogram

Ghoul SSS rank Чаплин Ученик (49), открыт 1 неделю назад
нужно сделать кд чтобы если не прошло писало 'у тебя кд, осталось: 30 мин 0 сек'(пример). помогите, как сделать не знаю

@router.callback_query(F.data.startswith('stealgrease_'))
async def mes(callback: CallbackQuery):
id = callback.data.replace("stealgrease_", "")
if callback.from_user.id != int(id):
return await callback.answer("Это не ваша кнопка.")

user_id = callback.from_user.id
conn = sqlite3.connect('database.db')
cursor = conn.cursor()

cursor.execute("SELECT participants FROM razgrom WHERE user_id = ?", (user_id,))
participants = cursor.fetchone()
if participants:
new_grease_amount = participants[0] * 0.5
cursor.execute("UPDATE razgrom SET grease = grease + ? WHERE user_id = ?", (new_grease_amount, user_id))
conn.commit()

cursor.execute("SELECT grease, soap, nitroglycerin, participants, date FROM razgrom WHERE user_id = ?",
(user_id,))
updated_result = cursor.fetchone()

if updated_result:
stolen_grease = participants[0] * 0.5
await callback.message.edit_text(
f'Каждый участник своровал по 0,5 кг жира. Ты получил: {stolen_grease} кг жира')
await asyncio.sleep(3)
await callback.message.edit_text(
f'{callback.from_user.full_name}, твой проект Разгром:\n\n'
f'?Жир: {updated_result[0]} кг\n'
f'?Мыло: {updated_result[1]} штук\n'
f'?Нитроглицерин: {updated_result[2]} штук\n'
f'?Учасники: {updated_result[3]} человек\n\n'
f'?Дата основания: {updated_result[4]}',
reply_markup=await razgromkb(callback.message)
)
else:
await callback.message.reply('У вас нет доступа к этой функции.')

cursor.close()
conn.close()
1 ответ
Kil002 Гуру (2541) 1 неделю назад
Вписывать в твой код конечно же не буду, но вот тебе мысль.

 import time 

data_cooldown = {} #Создаём базу данных, в которой будем хранить время последней активации

pleer = 59654 # идентификатор пользователя для примера. В своём боте будет тебе приходить вместе с сообщением
t = 15 # кд в секундах


while True: # Эмулируем попытки пользователя
time.sleep(1) # задержка в секунду, чтобы цикл бысто не бежал


if pleer in data_cooldown: # Проверяем, есть ли пользователь в списках


if time.time() - data_cooldown[pleer] > t: # Пользователя нашли, проверяем, когда последний раз активация прошла успешно
data_cooldown[pleer] = time.time() # Обновляем время умпешной активации
print('Событие сработало')
else:
print(f'у тебя кд, осталось: {t - int(time.time() - data_cooldown[pleer])} секунд')


else:# Пользователя не нашли
data_cooldown[pleer] = time.time()
print('В первом круге пользователя в базе не нашли, поэтому добавили его туда')
Но помни, созданный словарь хранится в оперативной памяти и при выключении программы, список удаляется.
Ghoul SSS rank ЧаплинУченик (49) 1 неделю назад
пасиба
Похожие вопросы