diff --git a/CHANGELOG.md b/CHANGELOG.md index 14db197..66c2922 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ -[0.0.3] +## [0.0.4] + +- управление правами на отправку сообщений +- сохранение айди автора сообщения обратной связи + +## [0.0.3] - подключение независимого от перезапусков хранилища redis - многозадачные хранимые сессии пользователей @@ -9,15 +14,15 @@ - обработка ответов на сообщения в чате отзывов - рефакторинг -[0.0.2] +## [0.0.2] - добавлена функция для обратной связи - исправлена ошибка повторной регистрации хука -[0.0.1] +## [0.0.1] - фундаментальная кодовая база на основе Sanic и requests - настройки на основе переменных среды - функция приветственного сообщения с кнопками - ограничения для новоприбывших и неверно отвечающих -- распознание приветствия в тексте \ No newline at end of file +- распознание приветствия в тексте diff --git a/tgbot/api.py b/tgbot/api.py index 4324996..1f9a217 100644 --- a/tgbot/api.py +++ b/tgbot/api.py @@ -40,6 +40,7 @@ def ban_member(chat_id, user_id, until_date=None): r = requests.post(url) return r + # https://core.telegram.org/bots/api#unbanchatmember def unban_member(chat_id, user_id): url = apiBase + f"unbanChatMember?chat_id={chat_id}&user_id={user_id}&only_if_banned=1" @@ -52,3 +53,13 @@ def forward_message(cid, mid, to_chat_id): f"&from_chat_id={cid}&message_id={mid}" r = requests.post(url) return r + + +# https://core.telegram.org/bots/api#setchatpermissions +def set_chatpermissions(chat_id, chat_permissions): + chat_permissions = json.dumps(chat_permissions) + chat_permissions = requests.utils.quote(chat_permissions) + url = apiBase + f'setChatPermissions?chat_id={chat_id}' + \ + f'&permissions={chat_permissions}' + r = requests.post(url) + return r diff --git a/tgbot/handlers.py b/tgbot/handlers.py index 633e1ae..72e8a31 100644 --- a/tgbot/handlers.py +++ b/tgbot/handlers.py @@ -1,4 +1,5 @@ -from tgbot.api import send_message, forward_message, delete_message, ban_member +from tgbot.api import send_message, forward_message, delete_message, \ + ban_member, set_chatpermissions from tgbot.config import FEEDBACK_CHAT_ID, WELCOME_MSG, BUTTON_NO, \ BUTTON_OK, CHAT_ID, BUTTON_OK2, REDIS_URL import json @@ -8,6 +9,18 @@ import redis storage = redis.from_url(REDIS_URL) +def user_accept(chat_id, author): + r = delete_message(CHAT_ID, author["welcome_id"]) + print(r.json()) + author["newcomer"] = False + + r = set_chatpermissions(CHAT_ID, { "can_send_messages": True }) + print(r.json()) + + # set author as not a newcomer + storage.set(f'usr-{author["id"]}', json.dumps(author)) + + def handle_feedback(msg): mid = msg['message_id'] cid = msg['chat']['id'] @@ -16,6 +29,7 @@ def handle_feedback(msg): # store private chat message id # fbk- -> : storage.set(f'fbk-{support_msg_id}', json.dumps({ + "author_id": msg["from"]["id"], "message_id": mid, "chat_id": cid })) @@ -37,6 +51,7 @@ def handle_welcome(msg): member_id = str(msg['new_chat_member']['id']) s = {} if from_id == member_id: + s["id"] = member_id print(f'new self-joined member {member_id}') reply_markup = { "inline_keyboard": [ @@ -53,9 +68,15 @@ def handle_welcome(msg): reply_markup=reply_markup ) welcome_msg_id = r.json()['result']['message_id'] + print(r.json()) print(f'welcome message id: {welcome_msg_id}') s["newcomer"] = True s["welcome_id"] = welcome_msg_id + perms = { + "can_send_messages": False + } + r = set_chatpermissions(CHAT_ID, perms) + print(r.json()) else: s['newcomer'] = False @@ -93,17 +114,13 @@ def handle_text(msg): if BUTTON_OK.lower() in answer.lower() or \ BUTTON_OK2.lower() in answer.lower(): print('found answer, cleanup') - r = delete_message(CHAT_ID, author["welcome_id"]) - print(r.json()) - author["newcomer"] = False - # set author as not a newcomer - storage.set(f'usr-{member_id}', json.dumps(author)) + user_accept(CHAT_ID, author) - else: - print('remove some message') - r = delete_message(CHAT_ID, msg['message_id']) - print(r.json()) + #else: + # print('remove some message') + # r = delete_message(CHAT_ID, msg['message_id']) + # print(r.json()) else: print(f'old member speaks {msg["text"]}') @@ -129,6 +146,7 @@ def handle_button(callback_query): else: print('no user session found, create') s = { + 'id': member_id, 'newcomer': True, 'welcome_id': welcome_msg_id } @@ -152,6 +170,4 @@ def handle_button(callback_query): r = delete_message(CHAT_ID, welcome_msg_id) print(r.json()) s['newcomer'] = False - - # store new member session - storage.set(f'usr-{member_id}', json.dumps(s)) \ No newline at end of file + user_accept(CHAT_ID, s) \ No newline at end of file