mirror of
https://github.com/paul-nameless/tg
synced 2024-11-26 05:40:17 +00:00
Add u: read/unread, r: read all chat msgs, p: pin/unpin, m: mute/unmute (#36)
* Add u: read/unread, r: read all chat msgs, p: pin/unpin, m: mute/unmute Co-authored-by: Paul Nameless <reacsdas@gmail.com> Co-authored-by: Alexander Zveruk <sanyazveruk@gmail.com>
This commit is contained in:
parent
20c8b03d65
commit
f23596a0d1
2 changed files with 92 additions and 8 deletions
|
@ -1,9 +1,9 @@
|
|||
import logging
|
||||
from typing import Dict, Any, Optional
|
||||
import os
|
||||
import threading
|
||||
from datetime import datetime
|
||||
from tempfile import NamedTemporaryFile
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from telegram.client import Telegram
|
||||
|
||||
|
@ -47,17 +47,18 @@ class Controller:
|
|||
self.lock = threading.Lock()
|
||||
self.tg = tg
|
||||
self.handlers = {
|
||||
"updateNewMessage": self.update_new_msg,
|
||||
"updateMessageContent": self.update_msg_content,
|
||||
"updateChatIsPinned": self.update_chat_is_pinned,
|
||||
"updateChatDraftMessage": self.update_chat_draft_msg,
|
||||
"updateChatIsMarkedAsUnread": self.update_chat_marked_as_unread,
|
||||
"updateChatIsPinned": self.update_chat_is_pinned,
|
||||
"updateChatLastMessage": self.update_chat_last_msg,
|
||||
"updateChatNotificationSettings": self.update_chat_notification_settings,
|
||||
"updateChatOrder": self.update_chat_order,
|
||||
"updateChatReadInbox": self.update_chat_read_inbox,
|
||||
"updateChatTitle": self.update_chat_title,
|
||||
"updateChatLastMessage": self.update_chat_last_msg,
|
||||
"updateChatDraftMessage": self.update_chat_draft_msg,
|
||||
"updateChatOrder": self.update_chat_order,
|
||||
"updateMessageSendSucceeded": self.update_msg_send_succeeded,
|
||||
"updateFile": self.update_file,
|
||||
"updateMessageContent": self.update_msg_content,
|
||||
"updateMessageSendSucceeded": self.update_msg_send_succeeded,
|
||||
"updateNewMessage": self.update_new_msg,
|
||||
}
|
||||
|
||||
def send_file(self, send_file_fun, *args, **kwargs):
|
||||
|
@ -258,6 +259,39 @@ class Controller:
|
|||
with suspend(self.view):
|
||||
breakpoint()
|
||||
|
||||
elif keys == "u":
|
||||
chat = self.model.chats.chats[self.model.current_chat]
|
||||
chat_id = chat["id"]
|
||||
toggle = not chat["is_marked_as_unread"]
|
||||
self.tg.toggle_chat_is_marked_as_unread(chat_id, toggle)
|
||||
|
||||
elif keys == "p":
|
||||
chat = self.model.chats.chats[self.model.current_chat]
|
||||
chat_id = chat["id"]
|
||||
toggle = not chat["is_pinned"]
|
||||
self.tg.toggle_chat_is_pinned(chat_id, toggle)
|
||||
|
||||
elif keys == "r":
|
||||
chat = self.model.chats.chats[self.model.current_chat]
|
||||
chat_id = chat["id"]
|
||||
msg_id = chat["last_message"]["id"]
|
||||
self.tg.view_messages(chat_id, [msg_id])
|
||||
|
||||
elif keys == "m":
|
||||
# TODO: if it's msg to yourself, do not change its
|
||||
# notification setting, because we can't by documentation,
|
||||
# instead write about it in status
|
||||
chat = self.model.chats.chats[self.model.current_chat]
|
||||
chat_id = chat["id"]
|
||||
notification_settings = chat["notification_settings"]
|
||||
if notification_settings["mute_for"]:
|
||||
notification_settings["mute_for"] = 0
|
||||
else:
|
||||
notification_settings["mute_for"] = 2147483647
|
||||
self.tg.set_chat_nottification_settings(
|
||||
chat_id, notification_settings
|
||||
)
|
||||
|
||||
def refresh_chats(self) -> None:
|
||||
with self.lock:
|
||||
# using lock here, because refresh_chats is used from another
|
||||
|
@ -427,6 +461,16 @@ class Controller:
|
|||
break
|
||||
self.refresh_chats()
|
||||
|
||||
@handle_exception
|
||||
def update_chat_notification_settings(self, update):
|
||||
log.info("Proccessing update_chat_notification_settings")
|
||||
chat_id = update["chat_id"]
|
||||
notification_settings = update["notification_settings"]
|
||||
self.model.chats.update_chat(
|
||||
chat_id, notification_settings=notification_settings
|
||||
)
|
||||
self.refresh_chats()
|
||||
|
||||
@handle_exception
|
||||
def update_msg_send_succeeded(self, update):
|
||||
chat_id = update["message"]["chat_id"]
|
||||
|
|
40
tg/main.py
40
tg/main.py
|
@ -106,6 +106,45 @@ class TelegramApi(Telegram):
|
|||
}
|
||||
return self._send_data(data)
|
||||
|
||||
def toggle_chat_is_marked_as_unread(
|
||||
self, chat_id: int, is_marked_as_unread: bool
|
||||
):
|
||||
data = {
|
||||
"@type": "toggleChatIsMarkedAsUnread",
|
||||
"chat_id": chat_id,
|
||||
"is_marked_as_unread": is_marked_as_unread,
|
||||
}
|
||||
return self._send_data(data)
|
||||
|
||||
def toggle_chat_is_pinned(self, chat_id: int, is_pinned: bool):
|
||||
data = {
|
||||
"@type": "toggleChatIsPinned",
|
||||
"chat_id": chat_id,
|
||||
"is_pinned": is_pinned,
|
||||
}
|
||||
return self._send_data(data)
|
||||
|
||||
def set_chat_nottification_settings(
|
||||
self, chat_id: int, notification_settings: dict
|
||||
):
|
||||
data = {
|
||||
"@type": "setChatNotificationSettings",
|
||||
"chat_id": chat_id,
|
||||
"notification_settings": notification_settings,
|
||||
}
|
||||
return self._send_data(data)
|
||||
|
||||
def view_messages(
|
||||
self, chat_id: int, message_ids: list, force_read: bool = True
|
||||
):
|
||||
data = {
|
||||
"@type": "viewMessages",
|
||||
"chat_id": chat_id,
|
||||
"message_ids": message_ids,
|
||||
"force_read": force_read,
|
||||
}
|
||||
return self._send_data(data)
|
||||
|
||||
|
||||
def main():
|
||||
def signal_handler(sig, frame):
|
||||
|
@ -130,6 +169,7 @@ def main():
|
|||
)
|
||||
config.record_cmd = cfg.get("record_cmd")
|
||||
tg.login()
|
||||
|
||||
wrapper(partial(run, tg))
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue