Как реализовать функцию чтобы бот давал получить ежедневный подарок только раз в 24 часа
Не могу понять как реализовать данную функцию. Предполагаю что надо использовать библиотеку datetime, но ни понимаю как реализовать
код:
import asyncio
import logging
from datetime import datetime, timedelta
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from APPI import API
from user import *
from keybordinside import inside_key, beat_dice
storage = MemoryStorage()
bot = Bot(token=API)
dp = Dispatcher(bot=bot, storage=storage)
logging.basicConfig(level=logging.INFO)
#Машина состояний
class TheMachineOfStates(StatesGroup):
pass
@dp.message_handler(commands="start")
async def starting_is_bot(message: types.Message):
'''Обработка команды /start'''
messages = (f"Приветствую тебя - <strong>{message.from_user.first_name.title()}</strong> в нашем ритейлере киберспорта.\n\n"
f"Ознакомьтесь с разделом <i>о боте</i> чтобы понять, что он может и для чего он")
await message.answer(messages, reply_markup=inside_key(), parse_mode='html')
await bot.delete_message(message.chat.id, message.message_id)
@dp.message_handler(text="Профиль 👤")
async def profile_user(message: types.Message):
'''Профиль users'''
messages = (f"<strong>Ваш профиль:</strong> 📄\n\n"
f"<strong>🎭 Name</strong>: {first_name(message)}\n"
f"<strong>🪬 UserName</strong>: @{username(message)}\n"
f"<strong>🔰 ID</strong>: {ID(message)}")
await message.answer(messages, parse_mode='html')
@dp.message_handler(text="Для заказчиков 📩")
async def for_customer(message: types.Message):
'''Обработка заказчиков'''
@dp.message_handler(text="Для исполнителей 📥")
async def for_performer(message: types.Message):
'''Для фрилансеров'''
@dp.message_handler(text="Ежедневный подарок 🎲")
async def surprise(message: types.Message):
'''Ежедневный подарок для пользователей'''
data = datetime.today()
messages = (f"<strong>Брось кубик и получи ежедневный подарок</strong>\n\n"
"<strong>Подарки</strong>:\n"
"1. <i>Пусто</i>\n"
"2. <i>Скидка 5% на коуч</i>\n"
"3. <i>ПУСТО</i>\n"
"4. <i>Плюс 100 ммр к бусту аккаунта</i>\n"
"5. <i>Скидка 7% на разбор вашего - Реплая</i>\n"
"6. <i>Бесплатный отмыв ЛП</i>\n\n"
f"Дата: {data}")
await message.answer(messages, reply_markup=beat_dice(), parse_mode='html')
return data
@dp.message_handler(text="О боте 🤖")
async def about_bot(message: types.Message):
'''Информация о боте'''
@dp.message_handler(text="Support 📌")
async def for_customer(message: types.Message):
'''Helps for user'''
@dp.message_handler(text='Бросить')
async def throw_dice(message: types.Message):
'''Обрабатывает бросок DICE'''
if datetime.today() == surprise:
dice_throw = await message.answer_dice(emoji="🎲")
value = dice_throw.dice.value
await asyncio.sleep(4.7)
if value == 1:
await bot.send_message(ID(message), text=f"<strong>Вам выпало</strong>: <i>{value}</i>\n\n"
f"Вы получаете - <i>Ничего...упс не повезло</i>(\n"
f"<i>Заходи через 24 часа</i>",
parse_mode='html')
elif value == 2:
await bot.send_message(ID(message), text=f"<strong>Вам выпало</strong>: <i>{value}</i>\n\n"
f"Вы получаете - <i>Скидку 5% на любой коуч от любого тренера</i>\n"
f"<i>Заходи через 24 часа</i>",
parse_mode='html')
elif value == 3:
await bot.send_message(ID(message), text=f"<strong>Вам выпало</strong>: <i>{value}</i>\n\n"
f"Вы получаете - <i>Ничего...упс не повезло</i>(\n"
f"<i>Заходи через 24 часа</i>",
parse_mode='html')
elif value == 4:
await bot.send_message(ID(message), text=f"<strong>Вам выпало</strong>: <i>{value}</i>\n\n"
f"Вы получаете - <i>Плюс 100 ммр к бусту</i>\n"
f"<i>Заходи через 24 часа</i>",
parse_mode='html')
elif value == 5:
await bot.send_message(ID(message), text=f"<strong>Вам выпало</strong>: <i>{value}</i>\n\n"
f"Вы получаете - <i>Скидку 7% на разбор реплея</i>\n"
f"<i>Заходи через 24 часа</i>",
parse_mode='html')
elif value == 6:
await bot.send_message(ID(message), text=f"<strong>Вам выпало</strong>: <i>{value}</i>\n\n"
f"Вы получаете бесплатный отмыв <i>Low priority</i>(ЛП)\n"
f"<i>Заходи через 24 часа</i>",
parse_mode='html')
else:
if datetime.today():
await bot.send_message(ID(message), text="Вы сегодня играли. Приходи через 24 часа!")
await asyncio.sleep(1.5)
await bot.send_message(ID(message), text="<i>Для того чтобы вернуться в главное меню нажмите</i> - /start", parse_mode='html')
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)
Источник: Stack Overflow на русском