Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ logging.basicConfig(
log_chat_id=-10225533666,
update_interval=2,
minimum_lines=1,
topic_id=5,
pending_logs=200000),
logging.StreamHandler()
]
Expand All @@ -49,6 +50,8 @@ logger.info("live log streaming to telegram.")

```log_chat_id``` : Chat id of chat to which logs are to be send.

```topic_id``` : Topic id of topic to which logs are to be send.

```update_interval```: Interval between two posting in seconds. Lower intervals will lead to floodwaits. Default to 5 seconds.

```minimum_lines```: Minimum number of new lines required to post / edit a message.
Expand Down
7 changes: 7 additions & 0 deletions tglogging/tglogger.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def __init__(
self,
token: str,
log_chat_id: int,
topic_id: int = None,
update_interval: int = 5,
minimum_lines: int = 1,
pending_logs: int = 200000,
Expand All @@ -39,6 +40,7 @@ def __init__(
self.loop = asyncio.get_event_loop()
self.token = token
self.log_chat_id = log_chat_id
self.topic_id = topic_id
self.wait_time = update_interval
self.minimum = minimum_lines
self.pending = pending_logs
Expand All @@ -51,6 +53,7 @@ def __init__(
self.base_url = f"https://api.telegram.org/bot{token}"
DEFAULT_PAYLOAD.update({"chat_id": log_chat_id})


def emit(self, record):
msg = self.format(record)
self.lines += 1
Expand Down Expand Up @@ -131,6 +134,8 @@ async def send_message(self, message):
payload = DEFAULT_PAYLOAD.copy()
payload["text"] = f"```{message}```"
url = f"{self.base_url}/sendMessage"
if self.topic_id:
payload["message_thread_id"] = self.topic_id
res = await self.send_request(url, payload)
if res.get("ok"):
result = res.get("result")
Expand All @@ -153,6 +158,8 @@ async def send_as_file(self, logs):
url = f"{self.base_url}/sendDocument"
payload = DEFAULT_PAYLOAD.copy()
payload["caption"] = "Too much logs to send and hence sending as file."
if self.topic_id:
payload["message_thread_id"] = self.topic_id
files = {"document": file}
with contextlib.suppress(BaseException):
del payload["disable_web_page_preview"]
Expand Down