welcomecenterbot/handlers/handle_startup.py

46 lines
1.9 KiB
Python
Raw Normal View History

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