Как реализовать функцию чтобы бот давал получить ежедневный подарок только раз в 24 часа

Рейтинг: 0Ответов: 1Опубликовано: 02.08.2023

Не могу понять как реализовать данную функцию. Предполагаю что надо использовать библиотеку 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)

Ответы

▲ 0

По первой команде /dice вы записываете куда-нибудь datetime.datetime.now(). Допустим в словарь, но лучше в базу данных.
Также обработчике /dice вы должны проверять есть ли у пользователя уже записанный datetime, если есть, то выполняется следующий код:

current_time = datetime.datetime.now()
hours = (before_time - current_time).total_seconds() / 3600
if hours < 24:
    ....
else:
    ....