Есть телеграм бот состоящий из трех блоков:
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 дня - третий блок