abhay2245 commited on
Commit
e0d2fd1
Β·
verified Β·
1 Parent(s): e6f9288

Upload 4 files

Browse files
pyUltroid/_misc/_assistant.py ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ultroid - UserBot
2
+ # Copyright (C) 2021-2025 TeamUltroid
3
+ #
4
+ # This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
5
+ # PLease read the GNU Affero General Public License in
6
+ # <https://github.com/TeamUltroid/pyUltroid/blob/main/LICENSE>.
7
+
8
+ import inspect
9
+ import re
10
+ from traceback import format_exc
11
+
12
+ from telethon import Button
13
+ from telethon.errors import QueryIdInvalidError
14
+ from telethon.events import CallbackQuery, InlineQuery, NewMessage
15
+ from telethon.tl.types import InputWebDocument
16
+
17
+ from .. import LOGS, asst, udB, ultroid_bot
18
+ from ..fns.admins import admin_check
19
+ from . import append_or_update, owner_and_sudos
20
+
21
+ OWNER = ultroid_bot.full_name
22
+
23
+ MSG = f"""
24
+ **Ultroid - UserBot**
25
+ βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–
26
+ **Owner**: [{OWNER}](tg://user?id={ultroid_bot.uid})
27
+ **Support**: @TeamUltroid
28
+ βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–
29
+ """
30
+
31
+ IN_BTTS = [
32
+ [
33
+ Button.url(
34
+ "Repository",
35
+ url="https://github.com/TeamUltroid/Ultroid",
36
+ ),
37
+ Button.url("Support", url="https://t.me/UltroidSupportChat"),
38
+ ]
39
+ ]
40
+
41
+
42
+ # decorator for assistant
43
+
44
+
45
+ def asst_cmd(pattern=None, load=None, owner=False, **kwargs):
46
+ """Decorator for assistant's command"""
47
+ name = inspect.stack()[1].filename.split("/")[-1].replace(".py", "")
48
+ kwargs["forwards"] = False
49
+
50
+ def ult(func):
51
+ if pattern:
52
+ kwargs["pattern"] = re.compile(f"^/{pattern}")
53
+
54
+ async def handler(event):
55
+ if owner and event.sender_id not in owner_and_sudos():
56
+ return
57
+ try:
58
+ await func(event)
59
+ except Exception as er:
60
+ LOGS.exception(er)
61
+
62
+ asst.add_event_handler(handler, NewMessage(**kwargs))
63
+ if load is not None:
64
+ append_or_update(load, func, name, kwargs)
65
+
66
+ return ult
67
+
68
+
69
+ def callback(data=None, from_users=[], admins=False, owner=False, **kwargs):
70
+ """Assistant's callback decorator"""
71
+ if "me" in from_users:
72
+ from_users.remove("me")
73
+ from_users.append(ultroid_bot.uid)
74
+
75
+ def ultr(func):
76
+ async def wrapper(event):
77
+ if admins and not await admin_check(event):
78
+ return
79
+ if from_users and event.sender_id not in from_users:
80
+ return await event.answer("Not for You!", alert=True)
81
+ if owner and event.sender_id not in owner_and_sudos():
82
+ return await event.answer(f"This is {OWNER}'s bot!!")
83
+ try:
84
+ await func(event)
85
+ except Exception as er:
86
+ LOGS.exception(er)
87
+
88
+ asst.add_event_handler(wrapper, CallbackQuery(data=data, **kwargs))
89
+
90
+ return ultr
91
+
92
+
93
+ def in_pattern(pattern=None, owner=False, **kwargs):
94
+ """Assistant's inline decorator."""
95
+
96
+ def don(func):
97
+ async def wrapper(event):
98
+ if owner and event.sender_id not in owner_and_sudos():
99
+ res = [
100
+ await event.builder.article(
101
+ title="Ultroid Userbot",
102
+ url="https://t.me/TeamUltroid",
103
+ description="(c) TeamUltroid",
104
+ text=MSG,
105
+ thumb=InputWebDocument(
106
+ "https://graph.org/file/dde85d441fa051a0d7d1d.jpg",
107
+ 0,
108
+ "image/jpeg",
109
+ [],
110
+ ),
111
+ buttons=IN_BTTS,
112
+ )
113
+ ]
114
+ return await event.answer(
115
+ res,
116
+ switch_pm=f"πŸ€–: Assistant of {OWNER}",
117
+ switch_pm_param="start",
118
+ )
119
+ try:
120
+ await func(event)
121
+ except QueryIdInvalidError:
122
+ pass
123
+ except Exception as er:
124
+ err = format_exc()
125
+
126
+ def error_text():
127
+ return f"**#ERROR #INLINE**\n\nQuery: `{asst.me.username} {pattern}`\n\n**Traceback:**\n`{format_exc()}`"
128
+
129
+ LOGS.exception(er)
130
+ try:
131
+ await event.answer(
132
+ [
133
+ await event.builder.article(
134
+ title="Unhandled Exception has Occured!",
135
+ text=error_text(),
136
+ buttons=Button.url(
137
+ "Report", "https://t.me/UltroidSupportChat"
138
+ ),
139
+ )
140
+ ]
141
+ )
142
+ except QueryIdInvalidError:
143
+ LOGS.exception(err)
144
+ except Exception as er:
145
+ LOGS.exception(er)
146
+ await asst.send_message(udB.get_key("LOG_CHANNEL"), error_text())
147
+
148
+ asst.add_event_handler(wrapper, InlineQuery(pattern=pattern, **kwargs))
149
+
150
+ return don
pyUltroid/_misc/_decorators.py ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ultroid - UserBot
2
+ # Copyright (C) 2021-2025 TeamUltroid
3
+ #
4
+ # This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
5
+ # PLease read the GNU Affero General Public License in
6
+ # <https://github.com/TeamUltroid/pyUltroid/blob/main/LICENSE>.
7
+
8
+ import asyncio
9
+ import inspect
10
+ import re
11
+ import sys
12
+ from io import BytesIO
13
+ from pathlib import Path
14
+ from time import gmtime, strftime
15
+ from traceback import format_exc
16
+
17
+ from telethon import Button
18
+ from telethon import __version__ as telever
19
+ from telethon import events
20
+ from telethon.errors.common import AlreadyInConversationError
21
+ from telethon.errors.rpcerrorlist import (
22
+ AuthKeyDuplicatedError,
23
+ BotInlineDisabledError,
24
+ BotMethodInvalidError,
25
+ ChatSendInlineForbiddenError,
26
+ ChatSendMediaForbiddenError,
27
+ ChatSendStickersForbiddenError,
28
+ FloodWaitError,
29
+ MessageDeleteForbiddenError,
30
+ MessageIdInvalidError,
31
+ MessageNotModifiedError,
32
+ UserIsBotError,
33
+ )
34
+ from telethon.events import MessageEdited, NewMessage
35
+ from telethon.utils import get_display_name
36
+
37
+ from pyUltroid.exceptions import DependencyMissingError
38
+ from strings import get_string
39
+
40
+ from .. import *
41
+ from .. import _ignore_eval
42
+ from ..dB import DEVLIST
43
+ from ..dB._core import LIST, LOADED
44
+ from ..fns.admins import admin_check
45
+ from ..fns.helper import bash
46
+ from ..fns.helper import time_formatter as tf
47
+ from ..version import __version__ as pyver
48
+ from ..version import ultroid_version as ult_ver
49
+ from . import SUDO_M, owner_and_sudos
50
+ from ._wrappers import eod
51
+
52
+ MANAGER = udB.get_key("MANAGER")
53
+ TAKE_EDITS = udB.get_key("TAKE_EDITS")
54
+ black_list_chats = udB.get_key("BLACKLIST_CHATS")
55
+ allow_sudo = SUDO_M.should_allow_sudo
56
+
57
+
58
+ def compile_pattern(data, hndlr):
59
+ if data.startswith("^"):
60
+ data = data[1:]
61
+ if data.startswith("."):
62
+ data = data[1:]
63
+ if hndlr in [" ", "NO_HNDLR"]:
64
+ # No Hndlr Feature
65
+ return re.compile("^" + data)
66
+ return re.compile("\\" + hndlr + data)
67
+
68
+
69
+ def ultroid_cmd(
70
+ pattern=None, manager=False, ultroid_bot=ultroid_bot, asst=asst, **kwargs
71
+ ):
72
+ owner_only = kwargs.get("owner_only", False)
73
+ groups_only = kwargs.get("groups_only", False)
74
+ admins_only = kwargs.get("admins_only", False)
75
+ fullsudo = kwargs.get("fullsudo", False)
76
+ only_devs = kwargs.get("only_devs", False)
77
+ func = kwargs.get("func", lambda e: not e.via_bot_id)
78
+
79
+ def decor(dec):
80
+ async def wrapp(ult):
81
+ if udB.get_key("COMMAND_LOGGER"):
82
+ user_id = ult.sender_id
83
+ chat_id = ult.chat_id
84
+ command_name = pattern if pattern else ult.text.split()[0].lstrip(HNDLR)
85
+ chat_name = get_display_name(ult.chat)
86
+ LOGS.info(f"Command '{command_name}' executed by user ID {user_id} in chat {chat_id} ({chat_name})")
87
+ log_channel = udB.get_key("LOG_CHANNEL")
88
+ if log_channel:
89
+ try:
90
+ await asst.send_message(
91
+ log_channel,
92
+ f"Command '{command_name}' executed by user ID {user_id} in chat {chat_id} ({chat_name})"
93
+ )
94
+ except Exception as e:
95
+ LOGS.warning(f"Failed to send command log to log channel {log_channel}: {e}")
96
+ if not ult.out:
97
+ if owner_only:
98
+ return
99
+ if ult.sender_id not in owner_and_sudos():
100
+ return
101
+ if ult.sender_id in _ignore_eval:
102
+ return await eod(
103
+ ult,
104
+ get_string("py_d1"),
105
+ )
106
+ if fullsudo and ult.sender_id not in SUDO_M.fullsudos:
107
+ return await eod(ult, get_string("py_d2"), time=15)
108
+ chat = ult.chat
109
+ if hasattr(chat, "title"):
110
+ if (
111
+ "#noub" in chat.title.lower()
112
+ and not (chat.admin_rights or chat.creator)
113
+ and not (ult.sender_id in DEVLIST)
114
+ ):
115
+ return
116
+ if ult.is_private and (groups_only or admins_only):
117
+ return await eod(ult, get_string("py_d3"))
118
+ elif admins_only and not (chat.admin_rights or chat.creator):
119
+ return await eod(ult, get_string("py_d5"))
120
+ if only_devs and not udB.get_key("I_DEV"):
121
+ return await eod(
122
+ ult,
123
+ get_string("py_d4").format(HNDLR),
124
+ time=10,
125
+ )
126
+ try:
127
+ await dec(ult)
128
+ except FloodWaitError as fwerr:
129
+ await asst.send_message(
130
+ udB.get_key("LOG_CHANNEL"),
131
+ f"`FloodWaitError:\n{str(fwerr)}\n\nSleeping for {tf((fwerr.seconds + 10)*1000)}`",
132
+ )
133
+ await ultroid_bot.disconnect()
134
+ await asyncio.sleep(fwerr.seconds + 10)
135
+ await ultroid_bot.connect()
136
+ await asst.send_message(
137
+ udB.get_key("LOG_CHANNEL"),
138
+ "`Bot is working again`",
139
+ )
140
+ return
141
+ except ChatSendInlineForbiddenError:
142
+ return await eod(ult, "`Inline Locked In This Chat.`")
143
+ except (ChatSendMediaForbiddenError, ChatSendStickersForbiddenError):
144
+ return await eod(ult, get_string("py_d8"))
145
+ except (BotMethodInvalidError, UserIsBotError):
146
+ return await eod(ult, get_string("py_d6"))
147
+ except AlreadyInConversationError:
148
+ return await eod(
149
+ ult,
150
+ get_string("py_d7"),
151
+ )
152
+ except (BotInlineDisabledError, DependencyMissingError) as er:
153
+ return await eod(ult, f"`{er}`")
154
+ except (
155
+ MessageIdInvalidError,
156
+ MessageNotModifiedError,
157
+ MessageDeleteForbiddenError,
158
+ ) as er:
159
+ LOGS.exception(er)
160
+ except AuthKeyDuplicatedError as er:
161
+ LOGS.exception(er)
162
+ await asst.send_message(
163
+ udB.get_key("LOG_CHANNEL"),
164
+ "Session String expired, create new session from πŸ‘‡",
165
+ buttons=[
166
+ Button.url("Bot", "t.me/SessionGeneratorBot?start="),
167
+ Button.url(
168
+ "Repl",
169
+ "https://replit.com/@TheUltroid/UltroidStringSession",
170
+ ),
171
+ ],
172
+ )
173
+ sys.exit()
174
+ except events.StopPropagation:
175
+ raise events.StopPropagation
176
+ except KeyboardInterrupt:
177
+ pass
178
+ except Exception as e:
179
+ LOGS.exception(e)
180
+ date = strftime("%Y-%m-%d %H:%M:%S", gmtime())
181
+ naam = get_display_name(chat)
182
+ ftext = "**Ultroid Client Error:** `Forward this to` @UltroidSupportChat\n\n"
183
+ ftext += "**Py-Ultroid Version:** `" + str(pyver)
184
+ ftext += "`\n**Ultroid Version:** `" + str(ult_ver)
185
+ ftext += "`\n**Telethon Version:** `" + str(telever)
186
+ ftext += f"`\n**Hosted At:** `{HOSTED_ON}`\n\n"
187
+ ftext += "--------START ULTROID CRASH LOG--------"
188
+ ftext += "\n**Date:** `" + date
189
+ ftext += "`\n**Group:** `" + str(ult.chat_id) + "` " + str(naam)
190
+ ftext += "\n**Sender ID:** `" + str(ult.sender_id)
191
+ ftext += "`\n**Replied:** `" + str(ult.is_reply)
192
+ ftext += "`\n\n**Event Trigger:**`\n"
193
+ ftext += str(ult.text)
194
+ ftext += "`\n\n**Traceback info:**`\n"
195
+ ftext += str(format_exc())
196
+ ftext += "`\n\n**Error text:**`\n"
197
+ ftext += str(sys.exc_info()[1])
198
+ ftext += "`\n\n--------END ULTROID CRASH LOG--------"
199
+ ftext += "\n\n\n**Last 5 commits:**`\n"
200
+
201
+ stdout, stderr = await bash('git log --pretty=format:"%an: %s" -5')
202
+ result = stdout + (stderr or "")
203
+
204
+ ftext += f"{result}`"
205
+
206
+ if len(ftext) > 4096:
207
+ with BytesIO(ftext.encode()) as file:
208
+ file.name = "logs.txt"
209
+ error_log = await asst.send_file(
210
+ udB.get_key("LOG_CHANNEL"),
211
+ file,
212
+ caption="**Ultroid Client Error:** `Forward this to` @UltroidSupportChat\n\n",
213
+ )
214
+ else:
215
+ error_log = await asst.send_message(
216
+ udB.get_key("LOG_CHANNEL"),
217
+ ftext,
218
+ )
219
+ if ult.out:
220
+ await ult.edit(
221
+ f"<b><a href={error_log.message_link}>[An error occurred]</a></b>",
222
+ link_preview=False,
223
+ parse_mode="html",
224
+ )
225
+
226
+ cmd = None
227
+ blacklist_chats = False
228
+ chats = None
229
+ if black_list_chats:
230
+ blacklist_chats = True
231
+ chats = list(black_list_chats)
232
+ _add_new = allow_sudo and HNDLR != SUDO_HNDLR
233
+ if _add_new:
234
+ if pattern:
235
+ cmd = compile_pattern(pattern, SUDO_HNDLR)
236
+ ultroid_bot.add_event_handler(
237
+ wrapp,
238
+ NewMessage(
239
+ pattern=cmd,
240
+ incoming=True,
241
+ forwards=False,
242
+ func=func,
243
+ chats=chats,
244
+ blacklist_chats=blacklist_chats,
245
+ ),
246
+ )
247
+ if pattern:
248
+ cmd = compile_pattern(pattern, HNDLR)
249
+ ultroid_bot.add_event_handler(
250
+ wrapp,
251
+ NewMessage(
252
+ outgoing=True if _add_new else None,
253
+ pattern=cmd,
254
+ forwards=False,
255
+ func=func,
256
+ chats=chats,
257
+ blacklist_chats=blacklist_chats,
258
+ ),
259
+ )
260
+ if TAKE_EDITS:
261
+
262
+ def func_(x):
263
+ return not x.via_bot_id and not (x.is_channel and x.chat.broadcast)
264
+
265
+ ultroid_bot.add_event_handler(
266
+ wrapp,
267
+ MessageEdited(
268
+ pattern=cmd,
269
+ forwards=False,
270
+ func=func_,
271
+ chats=chats,
272
+ blacklist_chats=blacklist_chats,
273
+ ),
274
+ )
275
+ if manager and MANAGER:
276
+ allow_all = kwargs.get("allow_all", False)
277
+ allow_pm = kwargs.get("allow_pm", False)
278
+ require = kwargs.get("require", None)
279
+
280
+ async def manager_cmd(ult):
281
+ if not allow_all and not (await admin_check(ult, require=require)):
282
+ return
283
+ if not allow_pm and ult.is_private:
284
+ return
285
+ try:
286
+ await dec(ult)
287
+ except Exception as er:
288
+ if chat := udB.get_key("MANAGER_LOG"):
289
+ text = f"**#MANAGER_LOG\n\nChat:** `{get_display_name(ult.chat)}` `{ult.chat_id}`"
290
+ text += f"\n**Replied :** `{ult.is_reply}`\n**Command :** {ult.text}\n\n**Error :** `{er}`"
291
+ try:
292
+ return await asst.send_message(
293
+ chat, text, link_preview=False
294
+ )
295
+ except Exception as er:
296
+ LOGS.exception(er)
297
+ LOGS.info(f"β€’ MANAGER [{ult.chat_id}]:")
298
+ LOGS.exception(er)
299
+
300
+ if pattern:
301
+ cmd = compile_pattern(pattern, "/")
302
+ asst.add_event_handler(
303
+ manager_cmd,
304
+ NewMessage(
305
+ pattern=cmd,
306
+ forwards=False,
307
+ incoming=True,
308
+ func=func,
309
+ chats=chats,
310
+ blacklist_chats=blacklist_chats,
311
+ ),
312
+ )
313
+ if DUAL_MODE and not (manager and DUAL_HNDLR == "/"):
314
+ if pattern:
315
+ cmd = compile_pattern(pattern, DUAL_HNDLR)
316
+ asst.add_event_handler(
317
+ wrapp,
318
+ NewMessage(
319
+ pattern=cmd,
320
+ incoming=True,
321
+ forwards=False,
322
+ func=func,
323
+ chats=chats,
324
+ blacklist_chats=blacklist_chats,
325
+ ),
326
+ )
327
+ file = Path(inspect.stack()[1].filename)
328
+ if "addons/" in str(file):
329
+ if LOADED.get(file.stem):
330
+ LOADED[file.stem].append(wrapp)
331
+ else:
332
+ LOADED.update({file.stem: [wrapp]})
333
+ if pattern:
334
+ if LIST.get(file.stem):
335
+ LIST[file.stem].append(pattern)
336
+ else:
337
+ LIST.update({file.stem: [pattern]})
338
+ return wrapp
339
+
340
+ return decor
pyUltroid/_misc/_supporter.py ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ultroid - UserBot
2
+ # Copyright (C) 2021-2025 TeamUltroid
3
+ #
4
+ # This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
5
+ # PLease read the GNU Affero General Public License in
6
+ # <https://github.com/TeamUltroid/pyUltroid/blob/main/LICENSE>.
7
+ #
8
+ # To Install Other USERBOTs plugin Support
9
+ #
10
+ # ULTROID Don't Need This Stuffs
11
+ #
12
+
13
+ import inspect
14
+ import os
15
+ from pathlib import Path
16
+
17
+ from telethon import events, types
18
+
19
+ from pyUltroid._misc._decorators import compile_pattern, ultroid_cmd
20
+ from pyUltroid._misc._wrappers import eod, eor
21
+
22
+ from .. import *
23
+ from ..dB._core import LIST
24
+ from . import CMD_HELP, SUDO_M # ignore: pylint
25
+
26
+ ALIVE_NAME = ultroid_bot.me.first_name
27
+ BOTLOG_CHATID = BOTLOG = udB.get_key("LOG_CHANNEL")
28
+
29
+
30
+ bot = borg = catub = friday = ultroid_bot
31
+ catub.cat_cmd = ultroid_cmd
32
+
33
+ black_list_chats = udB.get_key("BLACKLIST_CHATS")
34
+
35
+
36
+ def admin_cmd(pattern=None, command=None, **args):
37
+ args["func"] = lambda e: not e.via_bot_id
38
+ args["chats"] = black_list_chats
39
+ args["blacklist_chats"] = True
40
+ args["outgoing"] = True
41
+ args["forwards"] = False
42
+ if pattern:
43
+ args["pattern"] = compile_pattern(pattern, HNDLR)
44
+ file = Path(inspect.stack()[1].filename)
45
+ if LIST.get(file.stem):
46
+ LIST[file.stem].append(pattern)
47
+ else:
48
+ LIST.update({file.stem: [pattern]})
49
+ return events.NewMessage(**args)
50
+
51
+
52
+ friday_on_cmd = admin_cmd
53
+ command = ultroid_cmd
54
+ register = ultroid_cmd
55
+
56
+
57
+ def sudo_cmd(allow_sudo=True, pattern=None, command=None, **args):
58
+ args["func"] = lambda e: not e.via_bot_id
59
+ args["chats"] = black_list_chats
60
+ args["blacklist_chats"] = True
61
+ args["forwards"] = False
62
+ if pattern:
63
+ args["pattern"] = compile_pattern(pattern, SUDO_HNDLR)
64
+ if allow_sudo:
65
+ args["from_users"] = SUDO_M.get_sudos
66
+ args["incoming"] = True
67
+ return events.NewMessage(**args)
68
+
69
+
70
+ edit_or_reply = eor
71
+ edit_delete = eod
72
+
73
+
74
+ ENV = bool(os.environ.get("ENV", False))
75
+
76
+
77
+ class Config((object)):
78
+ if ENV:
79
+ from .. import asst, udB
80
+
81
+ LOGGER = True
82
+ LOCATION = os.environ.get("LOCATION", None)
83
+ OPEN_WEATHER_MAP_APPID = os.environ.get("OPEN_WEATHER_MAP_APPID", None)
84
+ SUDO_COMMAND_HAND_LER = SUDO_HNDLR
85
+ TMP_DOWNLOAD_DIRECTORY = os.environ.get(
86
+ "TMP_DOWNLOAD_DIRECTORY", "resources/downloads/"
87
+ )
88
+ TEMP_DOWNLOAD_DIRECTORY = TMP_DOWNLOAD_DIRECTORY
89
+ TEMP_DIR = TMP_DOWNLOAD_DIRECTORY
90
+ TELEGRAPH_SHORT_NAME = os.environ.get("TELEGRAPH_SHORT_NAME", "Ultroid")
91
+ OCR_SPACE_API_KEY = os.environ.get("OCR_SPACE_API_KEY", None)
92
+ TG_BOT_USER_NAME_BF_HER = asst.me.username
93
+ UB_BLACK_LIST_CHAT = [
94
+ int(blacklist) for blacklist in udB.get_key("BLACKLIST_CHATS")
95
+ ]
96
+ MAX_ANTI_FLOOD_MESSAGES = 10
97
+ ANTI_FLOOD_WARN_MODE = types.ChatBannedRights(
98
+ until_date=None, view_messages=None, send_messages=True
99
+ )
100
+ REM_BG_API_KEY = os.environ.get("REM_BG_API_KEY", None)
101
+ GITHUB_ACCESS_TOKEN = os.environ.get("GITHUB_ACCESS_TOKEN", None)
102
+ GIT_REPO_NAME = os.environ.get("GIT_REPO_NAME", None)
103
+ PRIVATE_GROUP_BOT_API_ID = BOTLOG
104
+ PM_LOGGR_BOT_API_ID = BOTLOG
105
+ DB_URI = os.environ.get("DATABASE_URL", None)
106
+ HANDLR = HNDLR
107
+ SUDO_USERS = SUDO_M.get_sudos()
108
+ CHANNEL_ID = int(os.environ.get("CHANNEL_ID", -100))
109
+ BLACKLIST_CHAT = UB_BLACK_LIST_CHAT
110
+ MONGO_URI = os.environ.get("MONGO_URI", None)
111
+ ALIVE_PHOTTO = os.environ.get("ALIVE_PHOTTO", None)
112
+ ALIVE_PIC = os.environ.get("ALIVE_PIC", None)
113
+ ALIVE_MSG = os.environ.get("ALIVE_MSG", None)
114
+ DEFAULT_BIO = os.environ.get("DEFAULT_BIO", None)
115
+ BIO_MSG = os.environ.get("BIO_MSG", None)
116
+ LYDIA_API = os.environ.get("LYDIA_API", None)
117
+ PLUGIN_CHANNEL = int(os.environ.get("PLUGIN_CHANNEL", -69))
118
+ PM_DATA = os.environ.get("PM_DATA", "ENABLE")
119
+ DEEP_AI = os.environ.get("DEEP_AI", None)
120
+ TAG_LOG = os.environ.get("TAG_LOG", None)
121
+
122
+ else:
123
+ DB_URI = None
124
+
125
+
126
+ CMD_HNDLR = HNDLR
pyUltroid/_misc/_wrappers.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ultroid - UserBot
2
+ # Copyright (C) 2021-2025 TeamUltroid
3
+ #
4
+ # This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
5
+ # PLease read the GNU Affero General Public License in
6
+ # <https://github.com/TeamUltroid/pyUltroid/blob/main/LICENSE>.
7
+
8
+ from asyncio import sleep
9
+
10
+ from telethon.errors import MessageDeleteForbiddenError, MessageNotModifiedError
11
+ from telethon.tl.custom import Message
12
+ from telethon.tl.types import MessageService
13
+
14
+ # edit or reply
15
+
16
+
17
+ async def eor(event, text=None, time=None, link_preview=False, edit_time=None, **args):
18
+ reply_to = event.reply_to_msg_id or event
19
+ if event.out and not isinstance(event, MessageService):
20
+ if edit_time:
21
+ await sleep(edit_time)
22
+ if args.get("file") and not event.media:
23
+ await event.delete()
24
+ ok = await event.client.send_message(
25
+ event.chat_id,
26
+ text,
27
+ link_preview=link_preview,
28
+ reply_to=reply_to,
29
+ **args
30
+ )
31
+ else:
32
+ try:
33
+ ok = await event.edit(text, link_preview=link_preview, **args)
34
+ except MessageNotModifiedError:
35
+ ok = event
36
+ else:
37
+ ok = await event.client.send_message(
38
+ event.chat_id, text, link_preview=link_preview, reply_to=reply_to, **args
39
+ )
40
+
41
+ if time:
42
+ await sleep(time)
43
+ return await ok.delete()
44
+ return ok
45
+
46
+
47
+ async def eod(event, text=None, **kwargs):
48
+ kwargs["time"] = kwargs.get("time", 8)
49
+ return await eor(event, text, **kwargs)
50
+
51
+
52
+ async def _try_delete(event):
53
+ try:
54
+ return await event.delete()
55
+ except (MessageDeleteForbiddenError):
56
+ pass
57
+ except BaseException as er:
58
+ from . import LOGS
59
+
60
+ LOGS.error("Error while Deleting Message..")
61
+ LOGS.exception(er)
62
+
63
+
64
+ setattr(Message, "eor", eor)
65
+ setattr(Message, "try_delete", _try_delete)