1
0
mirror of https://github.com/eternnoir/pyTelegramBotAPI.git synced 2023-08-10 21:12:57 +03:00

Added colorful logs, file restarts on changes to sync

This commit is contained in:
coder2020official 2022-08-30 21:25:41 +04:00
parent e0ffe0b4f5
commit 0f7ab0d05f

View File

@ -131,6 +131,9 @@ class TeleBot:
:param use_class_middlewares: Use class middlewares, defaults to False
:type use_class_middlewares: :obj:`bool`, optional
:param colorful_logs: Outputs colorful logs
:type colorful_logs: :obj:`bool`, optional
"""
def __init__(
@ -139,7 +142,8 @@ class TeleBot:
next_step_backend: Optional[HandlerBackend]=None, reply_backend: Optional[HandlerBackend]=None,
exception_handler: Optional[ExceptionHandler]=None, last_update_id: Optional[int]=0,
suppress_middleware_excepions: Optional[bool]=False, state_storage: Optional[StateStorageBase]=StateMemoryStorage(),
use_class_middlewares: Optional[bool]=False
use_class_middlewares: Optional[bool]=False,
colorful_logs: Optional[bool]=False
):
self.token = token
self.parse_mode = parse_mode
@ -147,6 +151,16 @@ class TeleBot:
self.skip_pending = skip_pending
self.suppress_middleware_excepions = suppress_middleware_excepions
if colorful_logs:
try:
import coloredlogs
coloredlogs.install(logger=logger, level=logger.level)
except ImportError:
raise ImportError(
'Install colorredlogs module to use colorful_logs option.'
)
self.__stop_polling = threading.Event()
self.last_update_id = last_update_id
self.exc_info = None
@ -838,7 +852,8 @@ class TeleBot:
def infinity_polling(self, timeout: Optional[int]=20, skip_pending: Optional[bool]=False, long_polling_timeout: Optional[int]=20,
logger_level: Optional[int]=logging.ERROR, allowed_updates: Optional[List[str]]=None, *args, **kwargs):
logger_level: Optional[int]=logging.ERROR, allowed_updates: Optional[List[str]]=None,
restart_on_change: Optional[bool]=False, *args, **kwargs):
"""
Wrap polling with infinite loop and exception handling to avoid bot stops polling.
@ -864,6 +879,9 @@ class TeleBot:
so unwanted updates may be received for a short period of time.
:type allowed_updates: :obj:`list` of :obj:`str`
:param restart_on_change: Restart a file on file(s) change. Defaults to False
:type restart_on_change: :obj:`bool`
:return:
"""
if skip_pending:
@ -872,7 +890,8 @@ class TeleBot:
while not self.__stop_polling.is_set():
try:
self.polling(non_stop=True, timeout=timeout, long_polling_timeout=long_polling_timeout,
logger_level=logger_level, allowed_updates=allowed_updates, *args, **kwargs)
logger_level=logger_level, allowed_updates=allowed_updates, restart_on_change=restart_on_change,
*args, **kwargs)
except Exception as e:
if logger_level and logger_level >= logging.ERROR:
logger.error("Infinity polling exception: %s", str(e))
@ -889,7 +908,7 @@ class TeleBot:
def polling(self, non_stop: Optional[bool]=False, skip_pending: Optional[bool]=False, interval: Optional[int]=0,
timeout: Optional[int]=20, long_polling_timeout: Optional[int]=20,
logger_level: Optional[int]=logging.ERROR, allowed_updates: Optional[List[str]]=None,
none_stop: Optional[bool]=None):
none_stop: Optional[bool]=None, restart_on_change: Optional[bool]=False):
"""
This function creates a new Thread that calls an internal __retrieve_updates function.
This allows the bot to retrieve Updates automatically and notify listeners and message handlers accordingly.
@ -933,6 +952,9 @@ class TeleBot:
:param none_stop: Deprecated, use non_stop. Old typo, kept for backward compatibility.
:type none_stop: :obj:`bool`
:param restart_on_change: Restart a file on file(s) change. Defaults to False
:type restart_on_change: :obj:`bool`
:return:
"""
if none_stop is not None:
@ -942,6 +964,23 @@ class TeleBot:
if skip_pending:
self.__skip_updates()
if restart_on_change:
try:
from watchdog.observers import Observer
from telebot.ext.reloader import EventHandler
except ImportError:
raise ImportError(
'Please install watchdog and psutil before using restart_on_change option.'
)
event_handler = EventHandler()
path = sys.argv[1] if len(sys.argv) > 1 else '.'
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
logger.info('Starting your bot with username: [@%s]', self.user.username)
if self.threaded:
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
logger_level=logger_level, allowed_updates=allowed_updates)