2023-09-11 20:21:55 +00:00
|
|
|
|
from api import send_message, delete_message, kick_member
|
|
|
|
|
from handlers.command_my import handle_command_my
|
2023-09-18 07:50:48 +00:00
|
|
|
|
from handlers.callback_vouch import update_button
|
2023-09-11 20:21:55 +00:00
|
|
|
|
from utils.mention import userdata_extract
|
|
|
|
|
from storage import Profile
|
2023-09-18 07:50:48 +00:00
|
|
|
|
import logging
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
2023-04-23 16:54:58 +00:00
|
|
|
|
|
2023-09-11 20:04:53 +00:00
|
|
|
|
|
|
|
|
|
# remove link of callback sender
|
2023-04-23 16:54:58 +00:00
|
|
|
|
# from member vouched before
|
2023-09-18 07:50:48 +00:00
|
|
|
|
async def handle_unlink(payload, state):
|
|
|
|
|
logger.info("handle unlink button pressed or command, private chat only")
|
2023-09-11 20:04:53 +00:00
|
|
|
|
|
|
|
|
|
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 ", ""))
|
2023-04-23 16:54:58 +00:00
|
|
|
|
|
2023-04-28 12:24:14 +00:00
|
|
|
|
# удаляем связь с потомком
|
2023-05-01 16:31:17 +00:00
|
|
|
|
actor = Profile.get(from_id, payload)
|
2023-09-11 20:04:53 +00:00
|
|
|
|
actor["children"].remove(str(linked_id))
|
2023-04-28 12:24:14 +00:00
|
|
|
|
Profile.save(actor)
|
|
|
|
|
|
|
|
|
|
# удаляем связь с предком
|
|
|
|
|
linked = Profile.get(linked_id)
|
2023-09-11 20:04:53 +00:00
|
|
|
|
linked["parents"].remove(str(from_id))
|
2023-04-28 12:24:14 +00:00
|
|
|
|
Profile.save(linked)
|
|
|
|
|
|
2023-05-04 08:42:52 +00:00
|
|
|
|
# удаляем старое сообщение с кнопками-unlink
|
2023-09-11 20:04:53 +00:00
|
|
|
|
reply_msg_id = payload["message"]["message_id"]
|
|
|
|
|
r = await delete_message(from_id, reply_msg_id)
|
2023-09-18 07:50:48 +00:00
|
|
|
|
logger.debug(r)
|
2023-09-11 20:04:53 +00:00
|
|
|
|
|
|
|
|
|
# если ещё есть связи - посылаем новое сообщение
|
|
|
|
|
if len(actor["children"]) > 0:
|
2023-09-17 10:05:41 +00:00
|
|
|
|
await handle_command_my(payload, state)
|
2023-09-11 20:04:53 +00:00
|
|
|
|
|
|
|
|
|
lang = payload["from"].get("language_code", "ru")
|
|
|
|
|
for chat_id in linked["chats"]:
|
2023-05-04 08:42:52 +00:00
|
|
|
|
# если больше никто не поручился - kick out
|
2023-09-11 20:04:53 +00:00
|
|
|
|
if len(linked["parents"]) == 0:
|
|
|
|
|
r = await kick_member(chat_id, linked_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(linked["result"]["user"])
|
|
|
|
|
body = (
|
|
|
|
|
"Участник %s%s был удалён"
|
|
|
|
|
if lang == "ru"
|
|
|
|
|
else "Member %s%s was deleted"
|
|
|
|
|
) % (identity, username)
|
|
|
|
|
r = await send_message(chat_id, body)
|
2023-09-18 07:50:48 +00:00
|
|
|
|
logger.debug(r)
|
2023-05-04 08:42:52 +00:00
|
|
|
|
|
|
|
|
|
# обновление счётчика
|
2023-09-18 07:50:48 +00:00
|
|
|
|
await update_button(linked_id, chat_id)
|