1
0
mirror of https://github.com/otter18/tg_logger.git synced 2025-06-12 21:47:26 +02:00
Files
tg_logger/tg_logger.py
2021-01-01 14:54:30 +03:00

86 lines
2.5 KiB
Python

# Copyright (c) ChernV (@otter18), 2021.
import logging
from logging import StreamHandler
from time import time, sleep
from typing import List
import telebot
# logging setup
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
class TgLoggerHandler(StreamHandler):
"""Logger handler for tg_logger"""
def __init__(self, token: str, users: List[int], timeout: int = 10):
"""
Setup TgLoggerHandler tool
:param token: tg bot token to log form
:param users: list of used_id to log to
:param timeout: seconds for retrying to send log if error occupied
"""
super().__init__()
self.token = token
self.users = users
self.timeout = timeout
self.bot = telebot.TeleBot(token=self.token)
def emit(self, record):
msg = self.format(record)
for user_id in self.users:
t0 = time()
while time() - t0 < self.timeout:
try:
self.bot.send_message(user_id, msg)
break
except Exception as ex:
logger.exception("Exception while sending %s to %s:", msg, user_id)
sleep(1)
class TgFileLogger:
"""tg_logger tool to send files"""
def __init__(self, token: str, users: List[int], timeout: int = 10):
"""
Setup TgFileLogger tool
:param token: tg bot token to log form
:param users: list of used_id to log to
:param timeout: seconds for retrying to send log if error occupied
"""
self.token = token
self.users = users
self.timeout = timeout
self.bot = telebot.TeleBot(token=self.token)
def send(self, file_path: str, caption: str = ''):
"""
Function to send file
:param file_path: file path to log
:param caption: text to file with file
:return: None
"""
with open(file_path, 'rb') as data:
for user_id in self.users:
t0 = time()
while time() - t0 < self.timeout:
try:
self.bot.send_document(user_id, data=data, caption=caption)
logger.info("File %s successfully send to %s", file_path, user_id)
break
except Exception as ex:
logger.exception("Exception while sending %s to %s:", file_path, user_id)
sleep(1)