@Sergey0432

Как сделать включение блоков бота aiogram, через определенный промежуток времени?

Есть телеграм бот состоящий из трех блоков:
1. Проверяет подписку
2. Реферальная система
3. Просто пишет и дает на выбор 3 кнопки, при опр. ответе дает опр. соообщение

Я прикрепляю весь код что бы было понятно о чем я говорю
import logging
import keybards
import db
import time

from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton


API_TOKEN = "токен:AAGlN9iPfjbcUQe1G- токен"
CHANNEL_ID = "-100142265764"
NOTSUB_MESSAGE = "Для доступа к функционалу бота, подпишитесь на канал\nhttps://t.me/+cBiF0iuTy7A4ZmVi"
BOT_ID = "salesman_test3324_bot"
referrer_id = ""

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

block_now = 0

##################### первая часть

# бот должен быть подписан на канал
def shek_sub_channel(chat_member):

    if chat_member['status'] != 'left':
        return True
    else:
        return False


@dp.message_handler(commands=["start", "help"])
async def start(message: types.Message):
    start_command = message.text  # /start0573496326
    referrer_id = str(start_command[7:])
    if shek_sub_channel(await bot.get_chat_member(chat_id=CHANNEL_ID, user_id=message.from_user.id)):
        await bot.send_message(message.from_user.id, "Первое предложение")  # при команде отправить сообщение
    else:
        await bot.send_message(message.from_user.id, NOTSUB_MESSAGE, reply_markup=keybards.SubCheckMenu)


# обработчик для колбека
@dp.callback_query_handler(text="subchanneldone")
async def subchanneldone(message: types.Message):

    # если пользователь подписан - выводим первое сообщение, если нет - повторяем прошлое
    await bot.delete_message(message.from_user.id, message.message.message_id)
    if shek_sub_channel(await bot.get_chat_member(chat_id=CHANNEL_ID, user_id=message.from_user.id)):
        await bot.send_message(message.from_user.id, "Первое предложение")  # при команде отправить сообщение
    else:
        await bot.send_message(message.from_user.id, NOTSUB_MESSAGE, reply_markup=keybards.SubCheckMenu)

##################### вторая часть

@dp.message_handler()
async def start2(message: types.Message):
    if message.chat.type == 'private':
        if not db.user_exists(message.from_user.id):  # если пользователь не зарегистрирован
            if str(referrer_id) != "":
                if str(referrer_id) != str(message.from_user.id):
                    db.add_user(message.from_user.id, referrer_id)
                    try:
                        await bot.send_message(referrer_id, "По вашей ссылке зарегистроровался пользователь!")
                        # тут можем давать плюшки для нашего реферера
                        if db.count_reeferals(message.from_user.id) == 2:
                            await bot.send_message(referrer_id, "Переходите и получайте инструкции: https://telegra.ph/Possible-low-dopolnenie-01-17", reply_markup=keybards.main_menu)
                        elif db.count_reeferals(message.from_user.id) == 1:
                            await bot.send_message(referrer_id, "Пригласите еще одного пользователя и получите ссылку")
                        else:
                            pass
                    except:
                        pass
            else:
                db.add_user(message.from_user.id)  # регистрация пользователя обычным образом (не по реферальной ссылке)
                await bot.send_message(message.from_user.id, "По собственной ссылке регистророваться нельзя!")
        else:
            db.add_user(message.from_user.id)
            await bot.send_message(message.from_user.id, "Для того чтобы получить инструкции, пригласите 2 человек по реферальной ссылке", reply_markup=keybards.main_menu)


@dp.message_handler()
async def referal_sistem(message: types.Message):
    if message.chat.type == "private":
        if message.text == "Пригласить реферала":
            await bot.send_message(message.from_user.id, f"ID: {message.from_user.id}\nhttps://t.me/{BOT_ID}?start={message.from_user.id}\nКоличество рефералов: {db.count_reeferals(message.from_user.id)}")



executor.start_polling(dp, skip_updates=True)  # нужно для работы запросов


##################### третья часть

@dp.message_handler()
async def start3(message: types.Message):
    if message.chat.type == 'private':
        await bot.send_message(message.from_user.id, "Какого стиля торговли вы придиерживаетесь?")


@dp.message_handler()
async def start4(message: types.Message):
    if message.chat.type == 'private':
        if message.text == "Краткосрочная":
            await bot.send_message(message.from_user.id, "Текст для Краткосрочная", reply_markup=keybards.term_menu)
        elif message.text == "Среденесрочная":
            await bot.send_message(message.from_user.id, "Текст для Среденесрочная", reply_markup=keybards.term_menu)
        elif message.text == "Долгосрочная":
            await bot.send_message(message.from_user.id, "Текст для Долгосрочная", reply_markup=keybards.term_menu)


Я хочу сделать так, чтобы каждая из частей выполнялась автоматически при истечении определенного времени:
Человек нажал на старт - произошло сразу
Прошло 3 для - второй блок
Прошло еще 3 дня - третий блок
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы