Бот должен давать информацию только участникам конкретной группы

Kosowar77

Новичок
Пользователь
Окт 8, 2024
1
0
1
Есть закрытая группа в телеграмме (чат дома), для нее пишется информационный бот. Нужно, чтобы информация (меню) выводилась только членам этой группы, остальных отправляло на регистрацию. Как лучше это реализовать, периодически собирать user_id зарегистрированных в группе (переодически добавляются новые члены) и передавать боту? Может есть какие-то более простые варианты в фичах телеграмма?
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
404
112
43
Может есть какие-то более простые варианты в фичах телеграмма?
Проще чем этот я не нашел
 
  • Мне нравится
Реакции: PYDEV

PYDEV

Пользователь
Пользователь
Авг 31, 2023
60
14
8
И еще, сделать это через мидлварь.
Python:
from typing import Callable, Dict, Any, Awaitable

from aiogram import BaseMiddleware
from aiogram.types import TelegramObject
from aiogram.exceptions import TelegramBadRequest

from config import CHAT_ID

class SubscriptionMiddleware(BaseMiddleware):
    async def __call__(
            self,
            handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
            event: TelegramObject,
            data: Dict[str, Any]
    ) -> Any:
        if CHAT_ID is not None:
            try:
                chat = await event.bot.get_chat(CHAT_ID)
                status = await event.bot.get_chat_member(
                    chat_id=CHAT_ID,
                    user_id=event.from_user.id
                )
                if "left" in status.status:
                    await event.answer(
                        text=f"Вы не состоите в чате <b>{chat.title}</b>\n"
                             f"вступите в наш чат, чтобы пользоваться ботом.\n"
                             f"Ссылка: {chat.invite_link}",
                    )
                else:
                    return await handler(event, data)
            except TelegramBadRequest:
                return await event.answer("Произошла ошибка, бот не является админстратором в чате.")
        else:
            return await handler(event, data)
Я когда-то чот такое делал (вспомнил про свой гитхаб), может пригодится
 
  • Мне нравится
Реакции: Kosowar77

Форум IT Специалистов