diff --git a/app/__init__.py b/app/__init__.py index ccb5a0d..3076adf 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -8,9 +8,13 @@ tracemalloc.start() load_dotenv("config.env") from app.config import Config # NOQA -from app.core import LOGGER # NOQA from app.core.db import DB, DB_CLIENT, CustomDB # NOQA from app.core import Message # NOQA + +from app.core.logger import getLogger # NOQA + +LOGGER = getLogger("PLAIN-UB") + from app.core.client.client import BOT # NOQA @@ -20,5 +24,3 @@ if "com.termux" not in os.environ.get("PATH", ""): uvloop.install() bot: BOT = BOT() - -from app.core.decorators.try_except import try_ # NOQA diff --git a/app/config.py b/app/config.py index 8bc3b30..5f73b60 100644 --- a/app/config.py +++ b/app/config.py @@ -14,6 +14,9 @@ class _Config: self.doc: str = doc or "Not Documented." self.sudo: bool = sudo + def __str__(self): + return json.dumps(self.__dict__, indent=4, ensure_ascii=False, default=str) + def __init__(self): self.CMD_DICT: dict[str, _Config.CMD] = {} diff --git a/app/core/__init__.py b/app/core/__init__.py index a7a900c..badae98 100644 --- a/app/core/__init__.py +++ b/app/core/__init__.py @@ -1,4 +1,3 @@ from app.core.client import filters -from app.core.logger import LOGGER from app.core.types.message import Message # NOQA diff --git a/app/core/decorators/try_except.py b/app/core/decorators/try_except.py deleted file mode 100644 index 78aa8f9..0000000 --- a/app/core/decorators/try_except.py +++ /dev/null @@ -1,48 +0,0 @@ -import asyncio -import traceback -from functools import wraps - -from app import bot - - -def try_(func): - if asyncio.iscoroutinefunction(func): - - @wraps(func) - async def run_func(*args, **kwargs): - try: - result = await func(*args, **kwargs) - return result - except asyncio.exceptions.CancelledError: - text, type = f"FUNC: {func.__name__} Cancelled.", "info" - except BaseException: - text, type = ( - f"FUNC: {func.__name__}" - f"\n#TRACEBACK:\n
{traceback.format_exc()}",
- "error",
- )
- if text:
- await bot.log_text(text=text, name="traceback.txt", type=type)
-
- else:
-
- @wraps(func)
- def run_func(*args, **kwargs):
- try:
- result = func(*args, **kwargs)
- return result
- except asyncio.exceptions.CancelledError:
- text, type = f"FUNC: {func.__name__} Cancelled.", "info"
- except BaseException:
- text, type = (
- f"FUNC: {func.__name__}"
- f"\n#TRACEBACK:\n{traceback.format_exc()}",
- "error",
- )
- if text:
- asyncio.run_coroutine_threadsafe(
- coro=bot.log_text(text=text, name="traceback.txt", type=type),
- loop=bot.loop,
- )
-
- return run_func
diff --git a/app/core/logger.py b/app/core/logger.py
index 006074c..ae69f29 100644
--- a/app/core/logger.py
+++ b/app/core/logger.py
@@ -1,14 +1,43 @@
import os
-from logging import INFO, WARNING, StreamHandler, basicConfig, getLogger, handlers
+import asyncio
+from logging import (
+ ERROR,
+ INFO,
+ WARNING,
+ Handler,
+ StreamHandler,
+ basicConfig,
+ getLogger,
+ handlers,
+)
os.makedirs("logs", exist_ok=True)
-LOGGER = getLogger("PLAIN_UB")
+
+class TgErrorHandler(Handler):
+ def emit(self, log_record):
+ if log_record.levelno < ERROR:
+ return
+ from app import bot
+ if not bot.is_connected:
+ return
+ text = (
+ f"#{log_record.levelname} #TRACEBACK"
+ f"\nLine No: {log_record.lineno}"
+ f"\nFunc: {log_record.funcName}"
+ f"\nModule: {log_record.module}"
+ f"\nTime: {log_record.asctime}"
+ f"\nError Message:\n{log_record.message}"
+ )
+ asyncio.run_coroutine_threadsafe(
+ coro=bot.log_text(text=text, name="traceback.txt"), loop=bot.loop
+ )
+
basicConfig(
level=INFO,
- format="[%(asctime)s] [%(levelname)s] [%(name)s]: %(message)s",
- datefmt="%y-%m-%d %H:%M:%S",
+ format="[%(levelname)s] [%(asctime)s] [%(name)s] [%(module)s]: %(message)s",
+ datefmt="%d-%m-%y %I:%M:%S %p",
handlers={
handlers.RotatingFileHandler(
filename="logs/app_logs.txt",
@@ -19,6 +48,7 @@ basicConfig(
delay=0,
),
StreamHandler(),
+ TgErrorHandler(),
},
)
diff --git a/app/plugins/dev/exec.py b/app/plugins/dev/exec.py
index df463ed..7006949 100644
--- a/app/plugins/dev/exec.py
+++ b/app/plugins/dev/exec.py
@@ -6,7 +6,7 @@ from io import StringIO
from pyrogram.enums import ParseMode
-from app import Config, bot, BOT, Message, DB, DB_CLIENT, try_ # isort:skip
+from app import Config, bot, BOT, Message, DB, DB_CLIENT # isort:skip
from app.utils import shell # isort:skip
from app.utils.aiohttp_tools import aio # isort:skip
diff --git a/app/plugins/sudo/superuser_toggle.py b/app/plugins/sudo/superuser_toggle.py
index 29657bc..671dd6f 100644
--- a/app/plugins/sudo/superuser_toggle.py
+++ b/app/plugins/sudo/superuser_toggle.py
@@ -1,6 +1,6 @@
from pyrogram import filters
-from app import BOT, Config, Message, bot, try_
+from app import BOT, Config, Message, bot
from app.plugins.sudo.users import SUDO_USERS
@@ -16,7 +16,6 @@ async def disable_su(bot: BOT, message: Message):
)
-@try_
@bot.on_message(
filters=filters.command(commands="enable_su", prefixes=Config.SUDO_TRIGGER)
& filters.create(
diff --git a/app/plugins/tools/pm_n_tag_logger.py b/app/plugins/tools/pm_n_tag_logger.py
index ec769b0..4ee4c2b 100644
--- a/app/plugins/tools/pm_n_tag_logger.py
+++ b/app/plugins/tools/pm_n_tag_logger.py
@@ -5,7 +5,7 @@ from pyrogram import filters
from pyrogram.enums import ChatType, MessageEntityType, ParseMode
from pyrogram.errors import MessageIdInvalid
-from app import BOT, Config, CustomDB, Message, bot, try_
+from app import BOT, Config, CustomDB, Message, bot
LOGGER = CustomDB("COMMON_SETTINGS")
@@ -61,7 +61,6 @@ basic_filters = (
)
-@try_
@bot.on_message(
filters=basic_filters
& filters.private
@@ -75,7 +74,6 @@ async def pm_logger(bot: BOT, message: Message):
tag_filter = filters.create(lambda _, __, ___: Config.TAG_LOGGER)
-@try_
@bot.on_message(
filters=(basic_filters & filters.reply & tag_filter) & ~filters.private, group=2
)
@@ -89,7 +87,6 @@ async def reply_logger(bot: BOT, message: Message):
message.continue_propagation()
-@try_
@bot.on_message(
filters=(basic_filters & filters.mentioned & tag_filter) & ~filters.private, group=2
)
@@ -104,7 +101,6 @@ async def mention_logger(bot: BOT, message: Message):
message.continue_propagation()
-@try_
@bot.on_message(
filters=(basic_filters & (filters.text | filters.media) & tag_filter)
& ~filters.private,
@@ -117,7 +113,6 @@ async def username_logger(bot: BOT, message: Message):
message.continue_propagation()
-@try_
def cache_message(message: Message):
m_id = message.chat.id
if len(MESSAGE_CACHE[m_id]) > 10:
@@ -126,8 +121,9 @@ def cache_message(message: Message):
MESSAGE_CACHE[m_id].append(message)
-@try_
async def runner():
+ await asyncio.sleep(20)
+ raise TypeError()
if not (Config.TAG_LOGGER or Config.PM_LOGGER):
return
last_pm_logged_id = 0
@@ -186,7 +182,6 @@ async def log_chat(message: Message):
await log_deleted_message(message, data=(mention, u_id))
-@try_
async def log_deleted_message(message: Message, data: tuple | None = None):
if data:
mention, u_id = data
diff --git a/app/utils/aiohttp_tools.py b/app/utils/aiohttp_tools.py
index 2dbc204..de8921f 100644
--- a/app/utils/aiohttp_tools.py
+++ b/app/utils/aiohttp_tools.py
@@ -1,12 +1,15 @@
import json
+import logging
import os
from io import BytesIO
from aiohttp import ClientSession, web
-from app import LOGGER, Config
+from app import Config
from app.utils.media_helper import get_filename
+LOGGER = logging.getLogger("PLAIN-UB")
+
class Aio:
def __init__(self):