From aa6975e49a316ac25cf60f5815d26b6e4e777bc8 Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Thu, 4 May 2023 11:42:52 +0300 Subject: [PATCH] remove mute/unmute, fix vouch callback --- api/webhook.py | 3 +- tgbot/api.py | 6 ++- tgbot/handlers/callback_unlink.py | 19 +++++++--- tgbot/handlers/callback_vouch.py | 49 ++++++++++++------------- tgbot/handlers/handle_members_change.py | 10 +---- tgbot/handlers/handle_startup.py | 2 + 6 files changed, 46 insertions(+), 43 deletions(-) diff --git a/api/webhook.py b/api/webhook.py index 53330b7..dda8426 100644 --- a/api/webhook.py +++ b/api/webhook.py @@ -53,6 +53,7 @@ async def handle(req): else: handle_feedback(msg) elif str(msg['chat']['id']) == FEEDBACK_CHAT_ID: + print('feedback chat message') if 'reply_to_message' in msg: handle_answer(msg) elif msg['text'] == '/graph': @@ -83,7 +84,7 @@ async def handle(req): # wtf else: - print('UNHANDLED EVENT') + print('unhandled update') except Exception: diff --git a/tgbot/api.py b/tgbot/api.py index 23b6986..b51dc38 100644 --- a/tgbot/api.py +++ b/tgbot/api.py @@ -164,8 +164,10 @@ def get_userphotos(user_id): # https://core.telegram.org/bots/api#editmessagereplymarkup def edit_replymarkup(cid, mid, reply_markup): - url = apiBase + f"editMessageText?chat_id={cid}&message_id={mid}&reply_markup={text}" - r = requests.post(url) + reply_markup = json.dumps(reply_markup) + reply_markup = requests.utils.quote(reply_markup) + url = f"editMessageReplyMarkup?chat_id={cid}&message_id={mid}&reply_markup={reply_markup}" + r = requests.post(apiBase + url) return r.json() diff --git a/tgbot/handlers/callback_unlink.py b/tgbot/handlers/callback_unlink.py index 2260ea8..ffad6ac 100644 --- a/tgbot/handlers/callback_unlink.py +++ b/tgbot/handlers/callback_unlink.py @@ -25,7 +25,8 @@ def handle_unlink(payload): linked['parents'].remove(str(from_id)) Profile.save(linked) - # удаляем старое сообщение с кнопками + + # удаляем старое сообщение с кнопками-unlink reply_msg_id = payload['message']['message_id'] r = delete_message(from_id, reply_msg_id) print(r) @@ -34,14 +35,20 @@ def handle_unlink(payload): if len(actor['children']) > 0: handle_command_my(payload) - # если больше никто не поручился - kick out - if len(linked['parents']) == 0: - lang = payload['from'].get('language_code', 'ru') - for chat_id in linked['chats']: + lang = payload['from'].get('language_code', 'ru') + for chat_id in linked['chats']: + + # если больше никто не поручился - kick out + if len(linked['parents']) == 0: r = kick_member(chat_id, linked_id) print(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 = send_message(chat_id, body) - print(r) \ No newline at end of file + print(r) + + # обновление счётчика + update_button(linked_id, chat_id) + + \ No newline at end of file diff --git a/tgbot/handlers/callback_vouch.py b/tgbot/handlers/callback_vouch.py index 9e13369..cf6d02f 100644 --- a/tgbot/handlers/callback_vouch.py +++ b/tgbot/handlers/callback_vouch.py @@ -1,8 +1,30 @@ from tgbot.api import send_message, forward_message, delete_message, \ - approve_chat_join_request, unmute_member, edit_replymarkup, get_chat + approve_chat_join_request, edit_replymarkup, get_chat from tgbot.storage import Profile, storage +def update_button(chat_id, member_id, text='❤️'): + print('update reply markup') + prevmsg_id = storage.get(f'btn-{chat_id}-{member_id}') + if prevmsg_id: + premsg_id = prevmsg_id.decode('utf-8') + newcomer = Profile.get(member_id) + amount = len(newcomer['parents']) + 1 + text += f' {amount}' + rm = { + "inline_keyboard": [ + [ + { + "text": text, + "callback_data": 'vouch' + member_id + } + ] + ] + } + r = edit_replymarkup(chat_id, prevmsg_id, reply_markup=rm) + print(r) + + def handle_button(callback_query): # получаем профиль нажавшего кнопку actor_id = str(callback_query['from']['id']) @@ -39,27 +61,4 @@ def handle_button(callback_query): r = approve_chat_join_request(chat_id, newcomer_id) print(r) - print('update reply markup') - prevmsg_id = storage.get(f'btn-{chat_id}-{newcomer_id}').decode('utf-8') - amount = len(newcomer['parents']) + 1 - rm = { - "inline_keyboard": [ - [ - { - "text": '❤️' + f'({amount})', - "callback_data": 'vouch' + newcomer_id - } - ] - ] - } - r = edit_replymarkup(chat_id, premsg_id, reply_markup=rm) - print(r) - - if not r.get('ok'): - print('getting chat permissions') - r = get_chat(chat_id) - print(r) - perms = r['result']['permissions'] - print('try to unmute newcomer') - r = unmute_member(chat_id, newcomer_id, chat_permissions=perms) - print(r) \ No newline at end of file + update_button(chat_id, newcomer_id) \ No newline at end of file diff --git a/tgbot/handlers/handle_members_change.py b/tgbot/handlers/handle_members_change.py index 25e60b1..f0a8f00 100644 --- a/tgbot/handlers/handle_members_change.py +++ b/tgbot/handlers/handle_members_change.py @@ -1,5 +1,5 @@ from tgbot.handlers.send_button import show_request_msg -from tgbot.api import unmute_member, mute_member, delete_message +from tgbot.api import delete_message from tgbot.storage import Profile, storage from tgbot.config import FEEDBACK_CHAT_ID @@ -14,11 +14,6 @@ def handle_join(msg): if len(actor['parents']) == 0 and str(chat_id) != FEEDBACK_CHAT_ID: # показываем сообщение с кнопкой "поручиться" show_request_msg(msg) - - # до одобрения - мьют - r = mute_member(chat_id, newcomer_id) - print(r) - else: # за пользователя поручились ранее pass @@ -30,9 +25,6 @@ def handle_join(msg): newcomer['parents'].append(str(from_id)) Profile.save(newcomer) actor['children'].append(str(m['id'])) - r = unmute_member(chat_id, newcomer['id']) - print(r) - # обновляем профиль пригласившего Profile.save(actor) diff --git a/tgbot/handlers/handle_startup.py b/tgbot/handlers/handle_startup.py index b990028..312340e 100644 --- a/tgbot/handlers/handle_startup.py +++ b/tgbot/handlers/handle_startup.py @@ -1,5 +1,6 @@ from tgbot.storage import scan, Profile from tgbot.api import approve_chat_join_request, kick_member +from tgbot.handlers.callback_vouch import update_button from tgbot.utils.mention import userdata_extract # устанавливает соответствие данных @@ -17,6 +18,7 @@ def handle_startup(): # принять заявку если её нажимали r = approve_chat_join_request(chat_id, member_id) print(r) + update_button(chat_id, member_id) elif len(newcomer.get('parents', [])) == 0: r = kick_member(chat_id, member_id) print(r)