remove mute/unmute, fix vouch callback

This commit is contained in:
tonyrewin 2023-05-04 11:42:52 +03:00
parent 41882595b1
commit aa6975e49a
6 changed files with 46 additions and 43 deletions

View File

@ -53,6 +53,7 @@ async def handle(req):
else: else:
handle_feedback(msg) handle_feedback(msg)
elif str(msg['chat']['id']) == FEEDBACK_CHAT_ID: elif str(msg['chat']['id']) == FEEDBACK_CHAT_ID:
print('feedback chat message')
if 'reply_to_message' in msg: if 'reply_to_message' in msg:
handle_answer(msg) handle_answer(msg)
elif msg['text'] == '/graph': elif msg['text'] == '/graph':
@ -83,7 +84,7 @@ async def handle(req):
# wtf # wtf
else: else:
print('UNHANDLED EVENT') print('unhandled update')
except Exception: except Exception:

View File

@ -164,8 +164,10 @@ def get_userphotos(user_id):
# https://core.telegram.org/bots/api#editmessagereplymarkup # https://core.telegram.org/bots/api#editmessagereplymarkup
def edit_replymarkup(cid, mid, reply_markup): def edit_replymarkup(cid, mid, reply_markup):
url = apiBase + f"editMessageText?chat_id={cid}&message_id={mid}&reply_markup={text}" reply_markup = json.dumps(reply_markup)
r = requests.post(url) 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() return r.json()

View File

@ -25,7 +25,8 @@ def handle_unlink(payload):
linked['parents'].remove(str(from_id)) linked['parents'].remove(str(from_id))
Profile.save(linked) Profile.save(linked)
# удаляем старое сообщение с кнопками
# удаляем старое сообщение с кнопками-unlink
reply_msg_id = payload['message']['message_id'] reply_msg_id = payload['message']['message_id']
r = delete_message(from_id, reply_msg_id) r = delete_message(from_id, reply_msg_id)
print(r) print(r)
@ -34,14 +35,20 @@ def handle_unlink(payload):
if len(actor['children']) > 0: if len(actor['children']) > 0:
handle_command_my(payload) handle_command_my(payload)
# если больше никто не поручился - kick out lang = payload['from'].get('language_code', 'ru')
if len(linked['parents']) == 0: 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) r = kick_member(chat_id, linked_id)
print(r) print(r)
if r['ok']: if r['ok']:
_, identity, username = userdata_extract(linked['result']['user']) _, identity, username = userdata_extract(linked['result']['user'])
body = ('Участник %s%s был удалён' if lang == 'ru' else 'Member %s%s was deleted') % (identity, username) body = ('Участник %s%s был удалён' if lang == 'ru' else 'Member %s%s was deleted') % (identity, username)
r = send_message(chat_id, body) r = send_message(chat_id, body)
print(r) print(r)
# обновление счётчика
update_button(linked_id, chat_id)

View File

@ -1,8 +1,30 @@
from tgbot.api import send_message, forward_message, delete_message, \ 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 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): def handle_button(callback_query):
# получаем профиль нажавшего кнопку # получаем профиль нажавшего кнопку
actor_id = str(callback_query['from']['id']) 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) r = approve_chat_join_request(chat_id, newcomer_id)
print(r) print(r)
print('update reply markup') update_button(chat_id, newcomer_id)
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)

View File

@ -1,5 +1,5 @@
from tgbot.handlers.send_button import show_request_msg 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.storage import Profile, storage
from tgbot.config import FEEDBACK_CHAT_ID 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: if len(actor['parents']) == 0 and str(chat_id) != FEEDBACK_CHAT_ID:
# показываем сообщение с кнопкой "поручиться" # показываем сообщение с кнопкой "поручиться"
show_request_msg(msg) show_request_msg(msg)
# до одобрения - мьют
r = mute_member(chat_id, newcomer_id)
print(r)
else: else:
# за пользователя поручились ранее # за пользователя поручились ранее
pass pass
@ -30,9 +25,6 @@ def handle_join(msg):
newcomer['parents'].append(str(from_id)) newcomer['parents'].append(str(from_id))
Profile.save(newcomer) Profile.save(newcomer)
actor['children'].append(str(m['id'])) actor['children'].append(str(m['id']))
r = unmute_member(chat_id, newcomer['id'])
print(r)
# обновляем профиль пригласившего # обновляем профиль пригласившего
Profile.save(actor) Profile.save(actor)

View File

@ -1,5 +1,6 @@
from tgbot.storage import scan, Profile from tgbot.storage import scan, Profile
from tgbot.api import approve_chat_join_request, kick_member 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 from tgbot.utils.mention import userdata_extract
# устанавливает соответствие данных # устанавливает соответствие данных
@ -17,6 +18,7 @@ def handle_startup():
# принять заявку если её нажимали # принять заявку если её нажимали
r = approve_chat_join_request(chat_id, member_id) r = approve_chat_join_request(chat_id, member_id)
print(r) print(r)
update_button(chat_id, member_id)
elif len(newcomer.get('parents', [])) == 0: elif len(newcomer.get('parents', [])) == 0:
r = kick_member(chat_id, member_id) r = kick_member(chat_id, member_id)
print(r) print(r)