version-0.2.0
This commit is contained in:
45
handlers/handle_startup.py
Normal file
45
handlers/handle_startup.py
Normal file
@@ -0,0 +1,45 @@
|
||||
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()
|
Reference in New Issue
Block a user