Как сделать так, чтобы кнопка 'подписался' проверяла на все ли каналы подписан юзер и после этого пускала его к возможностям бота?
Это кнопки :
sub_channel = InlineKeyboardMarkup(
inline_keyboard =[
[
types.InlineKeyboardButton(text="1", url=""),
types.InlineKeyboardButton(text="2", url=""),
types.InlineKeyboardButton(text="3", url=""),
types.InlineKeyboardButton(text="Подписался", callback_data="check")
],
]
)
Это проверка на подписку :
class CheckSubscription(BaseMiddleware):
async def __call__(self, handler, event, data) -> Any:
channels = ["", "", ""]
user_id = event.from_user.id
for channel in channels:
chat_member = await event.bot.get_chat_member(channel, user_id)
if chat_member.status == 'left':
await event.answer(
'Подпишись на все каналы, чтобы пользоваться ботом!',
reply_markup=sub_channel
)введите сюда код
return
# Если пользователь подписан на все каналы
return await handler(event, data)
Ответы (1 шт):
Автор решения: Samikague
→ Ссылка
Вам нужно сделать else анти-условие.
if chat_member.status == 'left':
await event.answer(
'Подпишись на все каналы, чтобы пользоваться ботом!',
reply_markup=sub_channel
)введите сюда код
return
else:
return await handler(event, data)
Теперь хендлер будет возвращаться только если пользователь выполнил подписку. Сам сталкивался с такой проблемой.