version-0.2.0

This commit is contained in:
2024-01-06 14:25:35 +03:00
parent bc05b93c47
commit 908529b5bb
26 changed files with 185 additions and 153 deletions

View File

@@ -0,0 +1,60 @@
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)