Подскажите, как сделать проверку подписки на канал, для группы, если подписан, то разблокировать стену в группе.
Пользователь на другом сайте, Мне написал так "Я бы на твоем месте вместо того, чтобы дёргать 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)