Задать вопрос
@dmitriy8720

Как проверить подписан ли пользователь на канал?

Подскажите, как сделать проверку подписки на канал, для группы, если подписан, то разблокировать стену в группе.

Пользователь на другом сайте, Мне написал так "Я бы на твоем месте вместо того, чтобы дёргать get_chat_member поставил хендлер на чатмембре и при ливе из канала обновлял в бд, что статус юзера "left", если чел зашёл - "joined". И чтобы проверить есть ли в канале, то просто смотрел значение из БД"

#База Данных
conn = sqlite3.connect("username.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users
        (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, username TEXT, first_name TEXT, chat_id INTEGER)''')
conn.commit()
conn.close()

class SQLither:

    def __init__(self, database) -> object:
        self.conn = sqlite3.connect(database)
        self.c = self.conn.cursor()

    def exists_user(self, user_id):
        """Проверка существования пользователя в БД"""
        return bool(self.c.execute("SELECT * FROM users WHERE user_id=?", (user_id,)).fetchone())

    def add_to_db(self, user_id, username, first_name, chat_id):
        """Добавление пользователя в БД"""
        #self.c.execute("INSERT INTO users ('user_id') VALUES(?)", (user_id,)) and self.c.execute("INSERT INTO users ('username') VALUES(?)", (username,))
        self.c.execute("INSERT INTO users(user_id, username, first_name, chat_id) VALUES(?,?,?,?)", (user_id, username, first_name, chat_id))
        self.conn.commit()


#ID канала
chat_id = -100id


Вот код, что прописал, верно ли? создал отдельный хендлер для проверки подписки.
@dp.message_handler(content_types=['chat_member'])
async def on_joined(message: types.Message):
    for user_channel_status in message.text:
        if user_channel_status["status"] != 'member':
            user_channel_status = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
        if isinstance(user_channel_status, types.ChatMemberMember):
            await bot.restrict_chat_member(message.chat.id, message.from_user.id, can_send_messages=True)
            return
            print(user_channel_status)
  • Вопрос задан
  • 541 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Из документации телеграма:

new_chat_members: Optional. New members that were added to the group or supergroup and information about them (the bot itself may be one of these members)

Если у вас канал - то такие апдейты не будут приходить. Так что каждый раз нужно вызывать get_chat_member
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы