Подскажите, как снять ограничения с группы, для проверки подписки на канал. Стена в группе закрылась, подписался на канал, но ограничения не снимаются, стена все равно закрыта. Нужно сделать проверку через бд, собрал код, но открыть стену не могу.
1 фото пишу текст в группу, сообщение удаляется и закрывается стена.
2 фото, 2 кнопки, но я уже подписан.
Весь код
import aiogram
import logging
import markups as nav
import sqlite3
import cursor as cursor
from sqlite3 import connect
from aiogram import Bot, Dispatcher, executor
from time import time
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.types import CallbackQuery, ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton, ChatMember
from aiogram.dispatcher.middlewares import BaseMiddleware
from aiogram.contrib.fsm_storage.memory import MemoryStorage
API_TOKEN = 'moi_token'
logging.basicConfig(level=logging.INFO)
#bot = Bot(token=config.BOT_TOKEN)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())
keyboard = types.InlineKeyboardMarkup(row_width=2)
subscribe = types.InlineKeyboardButton(text="Подписаться", url="https://t.me/URL_KANALA")
check = types.InlineKeyboardButton(text="Проверить", callback_data="check")
keyboard.add(subscribe)
keyboard.add(check)
#
menu = types.ReplyKeyboardMarkup(True, True)
menu.add("Вы уже подписаны")
#База Данных
conn = sqlite3.connect("usernamechat3.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)''')
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):
"""Добавление пользователя в БД"""
#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) VALUES(?,?,?)", (user_id, username, first_name))
self.conn.commit()
#ID Вашего канала
chat_id = -10idмоегоканала32
@dp.message_handler(commands=["start"])
async def start(message):
user_id = message.from_user.id
username = message.from_user.username
#first_name = message.chat.first_name
first_name = message.from_user.first_name
#last_name = message.from_user.last_name
#chat_id = message.chat.id
if not db.exists_user(user_id):
db.add_to_db(user_id, username, first_name)
await bot.send_message(message.chat.id, "Что-бы продолжить подпишитесь на канал", reply_markup=keyboard)
else: #Уже в бд
await bot.send_message(message.chat.id, "Вы уже подписаны", reply_markup=menu)
@dp.message_handler(content_types=["text"])
async def handler_text(message):
for i in range(1):
if message.chat.id:
menu = types.InlineKeyboardMarkup(row_width=1)
item = types.InlineKeyboardButton(text="Ссылка", url="https://t.me/url_bota")
menu.add(item)
await message.reply("Чтобы получить возможность писать в чате вам нужно подписаться на каналы по ссылке.".format(message.from_user), disable_notification=True, disable_web_page_preview=True, parse_mode='html', reply_markup=menu)
member = await bot.get_chat_member(message.chat.id, message.from_user.id)
if isinstance(member, types.ChatMemberMember):
await bot.delete_message(message.chat.id, message.message_id)
await bot.restrict_chat_member(message.chat.id, message.from_user.id, can_send_messages=False)
return
@dp.callback_query_handler(lambda call: True)
async def c_listener(call):
if call.data == "check":
x = await bot.get_chat_member(chat_id, call.message.chat.id)
if x.status == "member" or x.status == "creator" or x.status == "administrator":
await bot.send_message(call.message.chat.id, "Добро пожаловать!", reply_markup=menu)
c.execute("INSERT INTO users VALUES(?)", (call.message.chat.id, ))
conn.commit()
else:
await bot.send_message(call.message.chat.id, "Вы не подписались!", reply_markup=keyboard)
db = SQLither("usernamechat3.db")
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Помогите пожалуйста, подскажите рабочий код, чтобы если пользователь не подписан на канал, не смог писать в группе телеграм.