aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher.middlewares import LifetimeControllerMiddleware
from aiogram.types import ChatType, Message, ParseMode
class SubscriptionStates(StatesGroup):
waiting_for_subscription = State()
async def check_subscription(message: Message, state: FSMContext):
# Список каналов, на которые должен подписаться пользователь
channels = ['@channel1', '@channel2', '@channel3']
# Проверяем подписку пользователя на все каналы
for channel in channels:
chat_member = await bot.get_chat_member(chat_id=channel, user_id=message.from_user.id)
if chat_member.status not in ['member', 'administrator']:
# Если пользователь не подписан на канал, отправляем сообщение и переводим в состояние ожидания подписки
await message.answer(f'Для использования бота необходимо подписаться на канал {channel}.\nПодпишитесь и нажмите /subscribe, чтобы продолжить.')
await SubscriptionStates.waiting_for_subscription.set()
return
# Если пользователь подписан на все каналы, продолжаем обработку сообщения
await state.finish()
await message.answer('Вы успешно подписались на все каналы и можете продолжить использование бота.')
async def subscribe(message: Message, state: FSMContext):
# Проверяем, что пользователь находится в состоянии ожидания подписки
if await state.get_state() != SubscriptionStates.waiting_for_subscription.state:
return
# Список каналов, на которые должен подписаться пользователь
channels = ['@channel1', '@channel2', '@channel3']
# Проверяем подписку пользователя на все каналы
for channel in channels:
chat_member = await bot.get_chat_member(chat_id=channel, user_id=message.from_user.id)
if chat_member.status not in ['member', 'administrator']:
# Если пользователь не подписан на канал, отправляем сообщение и переводим в состояние ожидания подписки
await message.answer(f'Вы не подписались на канал {channel}.\nПодпишитесь и нажмите /subscribe, чтобы продолжить.')
return
# Если пользователь подписан на все каналы, завершаем состояние ожидания подписки
await state.finish()
await message.answer('Вы успешно подписались на все каналы и можете продолжить использование бота.')
Пример использования хендлера:
`python
from aiogram import Dispatcher, executor
# Создаем экземпляр диспетчера
dp = Dispatcher(bot)
# Регистрируем хендлер для проверки подписки на каналы
dp.register_message_handler(check_subscription, ChatTypeFilter(ChatType.PRIVATE), state='*')
# Регистрируем хендлер для подписки на каналы
dp
Куда сюда писать свои каналы?
https://t.me/ru_python_beginners/1649981
Обсуждают сегодня