diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d914a72d..988dd223 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ['3.12', '3.14'] + python-version: ['3.13', '3.14'] steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 diff --git a/.python-version b/.python-version index 2b3ed502..3a4f41ef 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.12.2 \ No newline at end of file +3.13 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 6c552254..35aced04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,8 @@ # AGPL-3.0 License FROM mwader/static-ffmpeg:7.1.1 AS builder_ffmpeg -FROM python:3.12-slim-bookworm -COPY --from=ghcr.io/astral-sh/uv:0.10.8 /uv /uvx /bin/ +FROM python:3.13-slim-bookworm +COPY --from=ghcr.io/astral-sh/uv:0.10.9 /uv /uvx /bin/ ENV TERM=xterm \ PATH=/opt/venv/bin:$PATH \ UV_LINK_MODE=copy \ diff --git a/Dockerfile.lite b/Dockerfile.lite index 6c552254..35aced04 100644 --- a/Dockerfile.lite +++ b/Dockerfile.lite @@ -3,8 +3,8 @@ # AGPL-3.0 License FROM mwader/static-ffmpeg:7.1.1 AS builder_ffmpeg -FROM python:3.12-slim-bookworm -COPY --from=ghcr.io/astral-sh/uv:0.10.8 /uv /uvx /bin/ +FROM python:3.13-slim-bookworm +COPY --from=ghcr.io/astral-sh/uv:0.10.9 /uv /uvx /bin/ ENV TERM=xterm \ PATH=/opt/venv/bin:$PATH \ UV_LINK_MODE=copy \ diff --git a/README.md b/README.md index de5a1d5c..8801378d 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Thank you for trusting and using this userbot! ## Requirements -- Python 3.12.x +- Python 3.13+ - Linux (recommended: latest Debian/Ubuntu) - Telegram `API_ID` and `API_HASH` from [API development tools](https://my.telegram.org) diff --git a/getter/core/base_client.py b/getter/core/base_client.py index de45e52f..4c453cc5 100644 --- a/getter/core/base_client.py +++ b/getter/core/base_client.py @@ -39,7 +39,7 @@ Var, hl, ) -from getter.logger import LOG, TelethonLogger +from getter.logger import LOG from .db import sgvar from .functions import display_name @@ -79,7 +79,6 @@ def __init__( kwargs["system_version"] = " ".join((version(), machine())) kwargs["app_version"] = __version__ kwargs["loop"] = LOOP - kwargs["base_logger"] = TelethonLogger kwargs["entity_cache_limit"] = 1000 super().__init__(session, *args, **kwargs) self.__class__.__module__ = "telethon.client.telegramclient" diff --git a/getter/logger.py b/getter/logger.py index 39eb3d39..8e0d478b 100644 --- a/getter/logger.py +++ b/getter/logger.py @@ -4,22 +4,42 @@ import logging import sys -from datetime import date +from datetime import UTC, datetime from loguru import logger as LOG -LOG.remove(0) +LOG.remove() LOG.add( - "logs/getter-{}.log".format(date.today().strftime("%Y-%m-%d")), - format="{time:YY/MM/DD HH:mm:ss} | {level: <8} | {name: ^15} | {function: ^15} | {line: >3} : {message}", - rotation="1 MB", + f"logs/getter-{datetime.now(UTC):%Y-%m-%d}.log", + format="{time:YYYY-MM-DD HH:mm:ss} | {level:<8} | {name}:{function}:{line} | {message}", + backtrace=False, + diagnose=False, enqueue=True, + catch=True, + rotation="3 MB", + retention="7 days", + delay=True, ) LOG.add( - sys.stderr, - format="{time:YY/MM/DD HH:mm:ss} | {level} | {name}:{function}:{line} | {message}", + sys.stdout, level="INFO", + format="{time:MM-DD HH:mm:ss} | {level:<8} | {message}", + filter=lambda r: r["level"].name != "ERROR", + colorize=False, + backtrace=False, + diagnose=False, + enqueue=True, + catch=True, +) +LOG.add( + sys.stderr, + level="ERROR", + format="{time:MM-DD HH:mm:ss} | {level:<8} | {name}:{function}:{line} | {message}", colorize=False, + backtrace=False, + diagnose=False, + enqueue=True, + catch=True, ) @@ -29,7 +49,8 @@ def emit(self, record): level = LOG.level(record.levelname).name except ValueError: level = record.levelno - frame, depth = sys._getframe(6), 6 + frame = sys._getframe(2) + depth = 2 while frame and frame.f_code.co_filename == logging.__file__: frame = frame.f_back depth += 1 @@ -40,8 +61,15 @@ def emit(self, record): ).log(level, record.getMessage()) -logging.basicConfig(handlers=[InterceptHandler()], level=logging.INFO) +logging.basicConfig( + handlers=[InterceptHandler()], + level=logging.INFO, + force=True, +) logging.disable(logging.DEBUG) -logging.getLogger("asyncio").setLevel(logging.ERROR) -TelethonLogger = logging.getLogger("telethon") -TelethonLogger.setLevel(logging.ERROR) +for name in ( + "asyncio", + "telethon", + "telethon.network.mtprotosender", +): + logging.getLogger(name).setLevel(logging.ERROR) diff --git a/getter/plugins/bot.py b/getter/plugins/bot.py index e3d854db..bec950f8 100644 --- a/getter/plugins/bot.py +++ b/getter/plugins/bot.py @@ -5,6 +5,7 @@ import asyncio import os import shutil +import subprocess import sys from random import choice from time import monotonic, sleep as tsleep @@ -203,12 +204,32 @@ def restart_app() -> None: os.close(p.fd) except BaseException: pass - reqs = Root / "requirements.txt" + reqs = str(Root / "requirements.txt") if shutil.which("uv"): - os.system(f"uv pip install -r {reqs}") + subprocess.run( + [ + "uv", + "pip", + "install", + "-r", + reqs, + ], + check=True, + ) else: - os.system( - f"{sys.executable} -m pip install --prefer-binary --disable-pip-version-check --default-timeout=100 -r {reqs}" + subprocess.run( + [ + sys.executable, + "-m", + "pip", + "install", + "--prefer-binary", + "--disable-pip-version-check", + "--default-timeout=100", + "-r", + reqs, + ], + check=True, ) os.execl(sys.executable, sys.executable, "-m", "getter") diff --git a/getter/plugins/updater.py b/getter/plugins/updater.py index ecf71976..e6951f90 100644 --- a/getter/plugins/updater.py +++ b/getter/plugins/updater.py @@ -227,7 +227,7 @@ async def ignores() -> None: async def update_packages() -> None: - reqs = Root / "requirements.txt" + reqs = str(Root / "requirements.txt") if shutil.which("uv"): await Runner(f"uv pip install -r {reqs}") else: diff --git a/manifest.json b/manifest.json index f445ef75..33030942 100644 --- a/manifest.json +++ b/manifest.json @@ -1,3 +1,3 @@ { - "version": "2.3.3" + "version": "2.3.4" } \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 5f11a509..354485c1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ show-fixes = true line-length = 120 indent-width = 4 -target-version = "py312" +target-version = "py313" [tool.ruff.format] quote-style = "double"