drop @try_, use a custom logging handler to handle all errors.

This commit is contained in:
thedragonsinn
2024-01-25 22:40:07 +05:30
parent 842a41f169
commit 6903aec357
9 changed files with 51 additions and 68 deletions

View File

@@ -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

View File

@@ -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] = {}

View File

@@ -1,4 +1,3 @@
from app.core.client import filters
from app.core.logger import LOGGER
from app.core.types.message import Message # NOQA

View File

@@ -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"<b>FUNC</b>: {func.__name__} Cancelled.", "info"
except BaseException:
text, type = (
f"<b>FUNC</b>: {func.__name__}"
f"\n<b>#TRACEBACK</b>:\n<pre language=python>{traceback.format_exc()}</pre>",
"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"<b>FUNC</b>: {func.__name__} Cancelled.", "info"
except BaseException:
text, type = (
f"<b>FUNC</b>: {func.__name__}"
f"\n<b>#TRACEBACK</b>:\n<pre language=python>{traceback.format_exc()}</pre>",
"error",
)
if text:
asyncio.run_coroutine_threadsafe(
coro=bot.log_text(text=text, name="traceback.txt", type=type),
loop=bot.loop,
)
return run_func

View File

@@ -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"\n<b>Line No</b>: <code>{log_record.lineno}</code>"
f"\n<b>Func</b>: <code>{log_record.funcName}</code>"
f"\n<b>Module</b>: <code>{log_record.module}</code>"
f"\n<b>Time</b>: <code>{log_record.asctime}</code>"
f"\n<b>Error Message</b>:\n<pre language=python>{log_record.message}</pre>"
)
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(),
},
)

View File

@@ -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

View File

@@ -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(

View File

@@ -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

View File

@@ -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):