from bot.config import FEEDBACK_CHAT_ID from storage import scan, Profile from bot.api import approve_chat_join_request, kick_member, send_message from handlers.callback_vouch import update_button from utils.mention import userdata_extract import logging logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) async def revalidate_storage(): # поддерживает консистентность данных btn_ids, _btns = scan(match="btn-*", count=100) logger.info(f"storage data revalidation for {len(btn_ids)} entries") for btnid in btn_ids: # для каждой ранее созданной кнопки btnid_str = btnid.decode("utf-8").replace("btn-", "") parts = btnid_str.split("-") logger.debug(parts) _, chat_id, member_id = parts chat_id = "-" + chat_id newcomer = Profile.get(member_id) if len(newcomer.get("parents", [])) > 0: # принять заявку если её нажимали r = await approve_chat_join_request(chat_id, member_id) logger.debug(r) await update_button(chat_id, member_id) elif len(newcomer.get("parents", [])) == 0: r = await kick_member(chat_id, member_id) logger.debug(r) if r["ok"]: _, identity, username = userdata_extract(newcomer["result"]["user"]) # feedback report body = f"Участник {identity} {username} был удалён" r = await send_message(FEEDBACK_CHAT_ID, body) logger.debug(r) # pm report body = f"Вы утратили поддержку в чате и были удалены" r = await send_message(member_id, body) logger.debug(r) async def handle_startup(): await revalidate_storage()