2020-06-12 14:20:18 -04:00
|
|
|
import asyncio
|
2020-07-19 11:13:54 -04:00
|
|
|
import inspect
|
|
|
|
import io
|
2020-06-21 15:14:41 -04:00
|
|
|
import os
|
2020-06-12 14:20:18 -04:00
|
|
|
from platform import python_version
|
|
|
|
|
2020-06-21 15:14:41 -04:00
|
|
|
import psutil
|
2020-06-12 14:20:18 -04:00
|
|
|
from telethon import version
|
2020-09-22 09:20:43 -04:00
|
|
|
from telethon.tl.types import Channel, Chat
|
2020-06-12 14:20:18 -04:00
|
|
|
|
2020-09-13 13:50:36 -04:00
|
|
|
from ubot import ldr, micro_bot
|
2020-06-12 14:20:18 -04:00
|
|
|
|
|
|
|
|
2020-07-19 11:13:54 -04:00
|
|
|
@ldr.add("eval", owner=True, hide_help=True)
|
|
|
|
async def evaluate(event):
|
|
|
|
if not event.args:
|
|
|
|
await event.reply("Give me code to run!")
|
|
|
|
return
|
|
|
|
|
|
|
|
eval_msg = await event.reply("Processing…")
|
|
|
|
reply = await event.get_reply_message()
|
|
|
|
|
|
|
|
try:
|
|
|
|
eval_ret = eval(event.args)
|
|
|
|
except Exception as exception:
|
|
|
|
eval_ret = exception
|
|
|
|
|
|
|
|
if inspect.isawaitable(eval_ret):
|
|
|
|
isawait = " (awaited)"
|
|
|
|
eval_ret = await eval_ret
|
|
|
|
else:
|
|
|
|
isawait = ""
|
|
|
|
|
|
|
|
if len(f"**Evaluation:**\n{event.args}\n**Return{isawait}:**\n{eval_ret}") > 4096:
|
|
|
|
text_io = io.BytesIO(str(eval_ret).encode("utf-8"))
|
|
|
|
text_io.name = "return.txt"
|
|
|
|
await eval_msg.edit("Output too large for a message, sending as a file…")
|
|
|
|
await eval_msg.reply(file=text_io)
|
|
|
|
return
|
|
|
|
|
|
|
|
await eval_msg.edit(f"**Evaluation:**\n{event.args}\n**Return{isawait}:**\n{eval_ret}")
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("reload", sudo=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def reload_modules(event):
|
|
|
|
reload_msg = await event.reply("Reloading modules…")
|
|
|
|
|
|
|
|
errors = ldr.reload_all_modules()
|
|
|
|
|
|
|
|
if errors:
|
|
|
|
await reload_msg.edit(errors)
|
|
|
|
else:
|
|
|
|
try:
|
|
|
|
await reload_msg.edit("Successfully reloaded.")
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("sysd", sudo=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def sysd(event):
|
|
|
|
try:
|
|
|
|
neo = "neofetch --stdout"
|
|
|
|
|
|
|
|
fetch = await asyncio.create_subprocess_shell(
|
|
|
|
neo,
|
|
|
|
stdout=asyncio.subprocess.PIPE,
|
|
|
|
stderr=asyncio.subprocess.PIPE,
|
|
|
|
)
|
|
|
|
|
|
|
|
stdout, stderr = await fetch.communicate()
|
|
|
|
|
|
|
|
await event.reply(f"`{stdout.decode().strip()}{stderr.decode().strip()}`")
|
|
|
|
except FileNotFoundError:
|
|
|
|
await event.reply("Neofetch not found!")
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("alive", sudo=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def alive(event):
|
|
|
|
alive_format = "**Telethon version:** {0}\n" \
|
2020-06-21 15:14:41 -04:00
|
|
|
"**Python version:** {1}\n" \
|
2020-06-21 15:18:07 -04:00
|
|
|
"**Memory usage:** {2}MiB"
|
2020-06-12 14:20:18 -04:00
|
|
|
|
2020-06-21 15:14:41 -04:00
|
|
|
mem_usage = int(psutil.Process(os.getpid()).memory_info().rss / 1048576)
|
|
|
|
|
|
|
|
await event.reply(alive_format.format(version.__version__, python_version(), mem_usage))
|
2020-06-12 14:20:18 -04:00
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("shutdown", owner=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def shutdown(event):
|
|
|
|
await event.reply("Goodbye…")
|
|
|
|
await micro_bot.stop_client()
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("blacklist", sudo=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def add_blacklist(event):
|
2020-06-12 23:34:12 -04:00
|
|
|
user_entity = await get_user(event)
|
2020-06-12 14:20:18 -04:00
|
|
|
|
2020-06-12 23:34:12 -04:00
|
|
|
if not user_entity:
|
2020-06-12 14:20:18 -04:00
|
|
|
return
|
|
|
|
|
|
|
|
userid = user_entity.id
|
|
|
|
userfullname = f"{user_entity.first_name} {user_entity.last_name or ''}".strip()
|
|
|
|
|
2021-03-23 19:16:21 -04:00
|
|
|
ldr.db.blacklist_user(userid)
|
2020-06-12 14:20:18 -04:00
|
|
|
await event.reply(f"Successfully blacklisted **{userfullname}** (`{userid}`)")
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("unblacklist", sudo=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def rem_blacklist(event):
|
2020-06-12 23:34:12 -04:00
|
|
|
user_entity = await get_user(event)
|
2020-06-12 23:26:54 -04:00
|
|
|
|
2020-06-12 23:34:12 -04:00
|
|
|
if not user_entity:
|
2020-06-12 14:20:18 -04:00
|
|
|
return
|
|
|
|
|
|
|
|
userid = user_entity.id
|
|
|
|
userfullname = f"{user_entity.first_name} {user_entity.last_name or ''}".strip()
|
|
|
|
|
2021-03-23 19:16:21 -04:00
|
|
|
ldr.db.unblacklist_user(userid)
|
2020-06-12 14:20:18 -04:00
|
|
|
await event.reply(f"Successfully unblacklisted **{userfullname}** (`{userid}`)")
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("showblacklist", sudo=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def show_blacklist(event):
|
2021-03-23 19:16:21 -04:00
|
|
|
blacklist_string = "\n".join([str(user_id) for user_id in ldr.db.get_blacklist_list()])
|
2020-06-12 14:20:18 -04:00
|
|
|
|
2021-03-23 19:16:21 -04:00
|
|
|
await event.reply(f"**Blacklisted users:**\n\n{blacklist_string}")
|
2020-06-12 14:20:18 -04:00
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("sudo", owner=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def add_sudo(event):
|
2020-06-12 23:34:12 -04:00
|
|
|
user_entity = await get_user(event)
|
2020-06-12 23:26:54 -04:00
|
|
|
|
2020-06-12 23:34:12 -04:00
|
|
|
if not user_entity:
|
2020-06-12 14:20:18 -04:00
|
|
|
return
|
|
|
|
|
|
|
|
userid = user_entity.id
|
|
|
|
userfullname = f"{user_entity.first_name} {user_entity.last_name or ''}".strip()
|
|
|
|
|
2021-03-23 19:16:21 -04:00
|
|
|
ldr.db.sudo_user(userid)
|
2020-06-12 14:20:18 -04:00
|
|
|
await event.reply(f"Successfully sudo'd **{userfullname}** (`{userid}`)")
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("unsudo", owner=True, hide_help=True)
|
2020-06-12 14:20:18 -04:00
|
|
|
async def rem_sudo(event):
|
2020-06-12 23:34:12 -04:00
|
|
|
user_entity = await get_user(event)
|
|
|
|
|
|
|
|
if not user_entity:
|
|
|
|
return
|
|
|
|
|
|
|
|
userid = user_entity.id
|
|
|
|
userfullname = f"{user_entity.first_name} {user_entity.last_name or ''}".strip()
|
|
|
|
|
2021-03-23 19:16:21 -04:00
|
|
|
ldr.db.unsudo_user(userid)
|
2020-06-12 23:34:12 -04:00
|
|
|
await event.reply(f"Successfully unsudo'd **{userfullname}** (`{userid}`)")
|
|
|
|
|
|
|
|
|
2020-06-17 19:20:19 -04:00
|
|
|
@ldr.add("showsudo", sudo=True, hide_help=True)
|
2020-06-12 23:34:12 -04:00
|
|
|
async def show_sudo(event):
|
2021-03-23 19:16:21 -04:00
|
|
|
sudo_string = "\n".join([str(user_id) for user_id in ldr.db.get_sudo_list()])
|
|
|
|
await event.reply(f"**Sudo users:**\n\n{sudo_string}")
|
2020-06-12 23:34:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
async def get_user(event):
|
2020-06-12 14:20:18 -04:00
|
|
|
if event.args:
|
2020-06-12 23:26:54 -04:00
|
|
|
try:
|
|
|
|
event.args = int(event.args)
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
2020-06-12 14:20:18 -04:00
|
|
|
try:
|
2020-09-22 09:20:43 -04:00
|
|
|
user = await event.client.get_entity(event.args)
|
|
|
|
|
|
|
|
if isinstance(user, (Chat, Channel)):
|
|
|
|
raise TypeError
|
|
|
|
|
|
|
|
return user
|
2020-06-12 14:20:18 -04:00
|
|
|
except (ValueError, TypeError):
|
|
|
|
await event.reply("The ID or username you provided was invalid!")
|
|
|
|
return
|
|
|
|
elif event.is_reply:
|
|
|
|
reply = await event.get_reply_message()
|
2020-10-03 11:27:11 -04:00
|
|
|
reply_id = reply.sender_id
|
2020-06-12 14:20:18 -04:00
|
|
|
|
|
|
|
if reply_id:
|
|
|
|
try:
|
2020-09-22 09:20:43 -04:00
|
|
|
user = await event.client.get_entity(reply_id)
|
|
|
|
|
|
|
|
if isinstance(user, (Chat, Channel)):
|
|
|
|
raise TypeError
|
|
|
|
|
|
|
|
return user
|
2020-06-12 14:20:18 -04:00
|
|
|
except (ValueError, TypeError):
|
|
|
|
await event.reply("There was an error getting the user's ID!")
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
await event.reply("Sudoing failed!")
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
await event.reply("Give me a user ID, username or reply!")
|
|
|
|
return
|