welcomecenterbot/handlers/callback_unlink.py
2024-01-06 14:25:35 +03:00

61 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from bot.api import send_message, delete_message, kick_member
from handlers.command_my import handle_command_my
from handlers.callback_vouch import update_button
from utils.mention import userdata_extract
from storage import Profile
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
# remove link of callback sender
# from member vouched before
async def handle_unlink(payload, state):
logger.info("handle unlink button pressed or command, private chat only")
from_id = str(payload["from"]["id"])
linked_id = ""
if "data" in payload:
linked_id = str(payload["data"].replace("unlink", ""))
elif "text" in payload:
linked_id = str(payload["text"].replace("/unlink ", ""))
# удаляем связь с потомком
actor = Profile.get(from_id, payload)
actor["children"].remove(str(linked_id))
Profile.save(actor)
# удаляем связь с предком
linked = Profile.get(linked_id)
linked["parents"].remove(str(from_id))
Profile.save(linked)
# удаляем старое сообщение с кнопками-unlink
reply_msg_id = payload["message"]["message_id"]
r = await delete_message(from_id, reply_msg_id)
logger.debug(r)
# если ещё есть связи - посылаем новое сообщение
if len(actor["children"]) > 0:
await handle_command_my(payload, state)
lang = payload["from"].get("language_code", "ru")
for chat_id in linked["chats"]:
# если больше никто не поручился - kick out
if len(linked["parents"]) == 0:
r = await kick_member(chat_id, linked_id)
logger.debug(r)
if r["ok"]:
_, identity, username = userdata_extract(linked["result"]["user"])
body = (
"Участник %s%s был удалён"
if lang == "ru"
else "Member %s%s was deleted"
) % (identity, username)
r = await send_message(chat_id, body)
logger.debug(r)
# обновление счётчика
await update_button(linked_id, chat_id)