|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import inspect |
|
import re |
|
from traceback import format_exc |
|
|
|
from telethon import Button |
|
from telethon.errors import QueryIdInvalidError |
|
from telethon.events import CallbackQuery, InlineQuery, NewMessage |
|
from telethon.tl.types import InputWebDocument |
|
|
|
from .. import LOGS, asst, udB, ultroid_bot |
|
from ..fns.admins import admin_check |
|
from . import append_or_update, owner_and_sudos |
|
|
|
OWNER = ultroid_bot.full_name |
|
|
|
MSG = f""" |
|
**Ultroid - UserBot** |
|
ββββββββββ |
|
**Owner**: [{OWNER}](tg://user?id={ultroid_bot.uid}) |
|
**Support**: @TeamUltroid |
|
ββββββββββ |
|
""" |
|
|
|
IN_BTTS = [ |
|
[ |
|
Button.url( |
|
"Repository", |
|
url="https://github.com/TeamUltroid/Ultroid", |
|
), |
|
Button.url("Support", url="https://t.me/UltroidSupportChat"), |
|
] |
|
] |
|
|
|
|
|
|
|
|
|
|
|
def asst_cmd(pattern=None, load=None, owner=False, **kwargs): |
|
"""Decorator for assistant's command""" |
|
name = inspect.stack()[1].filename.split("/")[-1].replace(".py", "") |
|
kwargs["forwards"] = False |
|
|
|
def ult(func): |
|
if pattern: |
|
kwargs["pattern"] = re.compile(f"^/{pattern}") |
|
|
|
async def handler(event): |
|
if owner and event.sender_id not in owner_and_sudos(): |
|
return |
|
try: |
|
await func(event) |
|
except Exception as er: |
|
LOGS.exception(er) |
|
|
|
asst.add_event_handler(handler, NewMessage(**kwargs)) |
|
if load is not None: |
|
append_or_update(load, func, name, kwargs) |
|
|
|
return ult |
|
|
|
|
|
def callback(data=None, from_users=[], admins=False, owner=False, **kwargs): |
|
"""Assistant's callback decorator""" |
|
if "me" in from_users: |
|
from_users.remove("me") |
|
from_users.append(ultroid_bot.uid) |
|
|
|
def ultr(func): |
|
async def wrapper(event): |
|
if admins and not await admin_check(event): |
|
return |
|
if from_users and event.sender_id not in from_users: |
|
return await event.answer("Not for You!", alert=True) |
|
if owner and event.sender_id not in owner_and_sudos(): |
|
return await event.answer(f"This is {OWNER}'s bot!!") |
|
try: |
|
await func(event) |
|
except Exception as er: |
|
LOGS.exception(er) |
|
|
|
asst.add_event_handler(wrapper, CallbackQuery(data=data, **kwargs)) |
|
|
|
return ultr |
|
|
|
|
|
def in_pattern(pattern=None, owner=False, **kwargs): |
|
"""Assistant's inline decorator.""" |
|
|
|
def don(func): |
|
async def wrapper(event): |
|
if owner and event.sender_id not in owner_and_sudos(): |
|
res = [ |
|
await event.builder.article( |
|
title="Ultroid Userbot", |
|
url="https://t.me/TeamUltroid", |
|
description="(c) TeamUltroid", |
|
text=MSG, |
|
thumb=InputWebDocument( |
|
"https://graph.org/file/dde85d441fa051a0d7d1d.jpg", |
|
0, |
|
"image/jpeg", |
|
[], |
|
), |
|
buttons=IN_BTTS, |
|
) |
|
] |
|
return await event.answer( |
|
res, |
|
switch_pm=f"π€: Assistant of {OWNER}", |
|
switch_pm_param="start", |
|
) |
|
try: |
|
await func(event) |
|
except QueryIdInvalidError: |
|
pass |
|
except Exception as er: |
|
err = format_exc() |
|
|
|
def error_text(): |
|
return f"**#ERROR #INLINE**\n\nQuery: `{asst.me.username} {pattern}`\n\n**Traceback:**\n`{format_exc()}`" |
|
|
|
LOGS.exception(er) |
|
try: |
|
await event.answer( |
|
[ |
|
await event.builder.article( |
|
title="Unhandled Exception has Occured!", |
|
text=error_text(), |
|
buttons=Button.url( |
|
"Report", "https://t.me/UltroidSupportChat" |
|
), |
|
) |
|
] |
|
) |
|
except QueryIdInvalidError: |
|
LOGS.exception(err) |
|
except Exception as er: |
|
LOGS.exception(er) |
|
await asst.send_message(udB.get_key("LOG_CHANNEL"), error_text()) |
|
|
|
asst.add_event_handler(wrapper, InlineQuery(pattern=pattern, **kwargs)) |
|
|
|
return don |
|
|