Files
Ultroid-fork/plugins/_inline.py
Danish a0a46e8af4 Typos
2021-02-25 01:34:39 +05:30

523 lines
17 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ultroid - UserBot
# Copyright (C) 2020 TeamUltroid
#
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# PLease read the GNU Affero General Public License in
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
import os
import random
import re
import time
from datetime import datetime
from math import ceil
from platform import python_version as pyver
from git import Repo
from support import *
from telethon import Button, __version__
from telethon.tl.types import InputWebDocument
from . import *
# ================================================#
notmine = "This bot is for {}".format(OWNER_NAME)
ULTROID_PIC = "https://telegra.ph/file/11245cacbffe92e5d5b14.jpg"
helps = """
[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)
**Hᴇʟᴘ Mᴇɴ{}.
ɢɪɴs ~ {}**
"""
if Var.ADDONS:
zhelps = """
[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)
**Hᴇʟᴘ Mᴇɴ{}.
Aᴅᴅɴs ~ {}**
"""
else:
zhelps = """
[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)
**Hᴇʟᴘ Mᴇɴ{}.
Aᴅᴅɴs ~ {}
G Aɴᴅ Aᴅᴅ ADDON Vᴀʀ Wɪᴛʜ Vᴀʟᴇ Tʀᴇ**
"""
# ============================================#
@inline
@in_owner
async def e(o):
if len(o.text) == 0:
b = o.builder
uptime = grt((time.time() - start_time))
ALIVEMSG = """
**The Ultroid Userbot...**\n\n
✵ **Owner** - `{}`
✵ **Ultroid** - `{}`
✵ **UpTime** - `{}`
✵ **Python** - `{}`
✵ **Telethon** - `{}`
✵ **Branch** - `{}`
""".format(
OWNER_NAME,
ultroid_version,
uptime,
pyver(),
__version__,
Repo().active_branch,
)
res = [
b.article(
title="Ultroid Userbot",
url="https://t.me/TeamUltroid",
description="Userbot | Telethon ",
text=ALIVEMSG,
thumb=InputWebDocument(ULTROID_PIC, 0, "image/jpeg", []),
)
]
await o.answer(res, switch_pm=f"👥 ULTROID PORTAL", switch_pm_param="start")
if Var.BOT_USERNAME is not None and asst is not None:
@inline
@in_owner
async def inline_handler(event):
builder = event.builder
result = None
query = event.text
if event.query.user_id in sed and query.startswith("ultd"):
result = builder.article(
title="Help Menu",
description="Help Menu - UserBot | Telethon ",
url="https://t.me/TheUltroid",
thumb=InputWebDocument(ULTROID_PIC, 0, "image/jpeg", []),
text=f"** Bᴛ Oғ {OWNER_NAME}\n\nMᴀɪɴ Mᴇɴ\n\nɢɪɴs ~ {len(PLUGINS) - 4}\nAᴅᴅɴs ~ {len(ADDONS)}**",
buttons=[
[
Button.inline("• Pʟɢɪɴs", data="hrrrr"),
Button.inline("• Aᴅᴅɴs", data="frrr"),
],
[Button.inline("Oɴᴇʀ•ᴛʟ", data="ownr")],
[Button.inline("Iɴʟɪɴᴇ•Pʟɢɪɴs", data="inlone")],
[Button.inline("••Cʟᴇ••", data="close")],
],
)
await event.answer([result] if result else None)
elif event.query.user_id in sed and query.startswith("paste"):
ok = query.split("-")[1]
link = f"https://nekobin.com/{ok}"
link_raw = f"https://nekobin.com/raw/{ok}"
result = builder.article(
title="Paste",
text="Pᴀsᴛᴇᴅ T Nᴇᴋʙɪɴ!",
buttons=[
[
Button.url("NekoBin", url=f"{link}"),
Button.url("Raw", url=f"{link_raw}"),
]
],
)
await event.answer([result] if result else None)
@inline
@in_owner
@callback("ownr")
@owner
async def setting(event):
await event.edit(
buttons=[
[
Button.inline("•Pɪɴɢ•", data="pkng"),
Button.inline("•Uᴘᴛɪᴍᴇ•", data="upp"),
],
[Button.inline("•Rᴇsᴛᴀʀᴛ•", data="rstrt")],
[Button.inline("<- Bᴀ", data="open")],
],
)
@callback("pkng")
async def _(event):
start = datetime.now()
end = datetime.now()
ms = (end - start).microseconds / 1000
pin = f"🌋Pɪɴɢ = {ms}ms"
await event.answer(pin, cache_time=0, alert=True)
@callback("upp")
async def _(event):
uptime = grt((time.time() - start_time))
pin = f"🙋Uᴘᴛɪᴍᴇ = {uptime}"
await event.answer(pin, cache_time=0, alert=True)
@callback("inlone")
@owner
async def _(e):
button = [
[
Button.switch_inline(
"Sᴇɴᴅ Oғғɪɪᴀʟ Pʟɢɪɴs",
query="send all",
same_peer=True,
)
],
[
Button.switch_inline(
"Pʟᴀʏ Sᴛʀᴇ Aᴘᴘs",
query="app telegram",
same_peer=True,
)
],
[
Button.switch_inline(
"Mᴅᴅᴇᴅ Aᴘᴘs",
query="mods minecraft",
same_peer=True,
)
],
[
Button.switch_inline(
"Sᴇᴀʀʜ Oɴ Gɢʟᴇ",
query="go TeamUltroid",
same_peer=True,
)
],
[
Button.switch_inline(
"Sᴇᴀʀʜ Oɴ Yᴀʜ",
query="yahoo TeamUltroid",
same_peer=True,
)
],
[
Button.switch_inline(
"YTʙᴇ Dɴʟᴀᴅᴇʀ",
query="yt How to Deploy Ultroid Userbot",
same_peer=True,
)
],
[
Button.switch_inline(
"ɪᴘAʀᴛ Sᴇᴀʀʜ",
query="clipart frog",
same_peer=True,
)
],
[
Button.inline(
"<- Bᴀ",
data="open",
)
],
]
await e.edit(buttons=button, link_preview=False)
@callback("hrrrr")
@owner
async def on_plug_in_callback_query_handler(event):
xhelps = helps.format(OWNER_NAME, len(PLUGINS) - 4)
buttons = paginate_help(0, PLUGINS, "helpme")
await event.edit(f"{xhelps}", buttons=buttons, link_preview=False)
@callback("frrr")
@owner
async def addon(event):
halp = zhelps.format(OWNER_NAME, len(ADDONS))
if len(ADDONS) > 0:
buttons = paginate_addon(0, ADDONS, "addon")
await event.edit(f"{halp}", buttons=buttons, link_preview=False)
else:
await event.answer(
"• Iɴsᴛᴀʟʟ A Pʟɢɪɴ Mᴀɴᴀʟʟʏ Oʀ Aᴅᴅ Vᴀʀ ADDONS Wɪᴛʜ Vᴀʟᴇ True",
cache_time=0,
alert=True,
)
@callback("rstrt")
@owner
async def rrst(ult):
await restart(ult)
@callback(
re.compile(
rb"helpme_next\((.+?)\)",
),
)
@owner
async def on_plug_in_callback_query_handler(event):
current_page_number = int(event.data_match.group(1).decode("UTF-8"))
buttons = paginate_help(current_page_number + 1, PLUGINS, "helpme")
await event.edit(buttons=buttons, link_preview=False)
@callback(
re.compile(
rb"helpme_prev\((.+?)\)",
),
)
@owner
async def on_plug_in_callback_query_handler(event):
current_page_number = int(event.data_match.group(1).decode("UTF-8"))
buttons = paginate_help(current_page_number - 1, PLUGINS, "helpme")
await event.edit(buttons=buttons, link_preview=False)
@callback(
re.compile(
rb"addon_next\((.+?)\)",
),
)
@owner
async def on_plug_in_callback_query_handler(event):
current_page_number = int(event.data_match.group(1).decode("UTF-8"))
buttons = paginate_addon(current_page_number + 1, ADDONS, "addon")
await event.edit(buttons=buttons, link_preview=False)
@callback(
re.compile(
rb"addon_prev\((.+?)\)",
),
)
@owner
async def on_plug_in_callback_query_handler(event):
current_page_number = int(event.data_match.group(1).decode("UTF-8"))
buttons = paginate_addon(current_page_number - 1, ADDONS, "addon")
await event.edit(buttons=buttons, link_preview=False)
@callback("back")
@owner
async def backr(event):
xhelps = helps.format(OWNER_NAME, len(PLUGINS) - 4)
current_page_number = int(upage)
buttons = paginate_help(current_page_number, PLUGINS, "helpme")
await event.edit(f"{xhelps}", buttons=buttons, link_preview=False)
@callback("buck")
@owner
async def backr(event):
xhelps = zhelps.format(OWNER_NAME, len(ADDONS))
current_page_number = int(addpage)
buttons = paginate_addon(current_page_number, ADDONS, "addon")
await event.edit(f"{xhelps}", buttons=buttons, link_preview=False)
@callback("open")
@owner
async def opner(event):
buttons = [
[
Button.inline("• Pʟɢɪɴs ", data="hrrrr"),
Button.inline("• Aᴅᴅɴs", data="frrr"),
],
[Button.inline("Oɴᴇʀ•Tʟ", data="ownr")],
[Button.inline("Iɴʟɪɴᴇ•Pʟɢɪɴs", data="inlone")],
[Button.inline("••Cʟᴇ••", data="close")],
]
await event.edit(
f"** Bᴛ Oғ {OWNER_NAME}\n\nMᴀɪɴ Mᴇɴ\n\nOꜰꜰɪɪᴀʟ Pʟɢɪɴs ~ {len(PLUGINS) - 4}\nꜰꜰɪɪᴀʟ Pʟɢɪɴs ~ {len(ADDONS)}**",
buttons=buttons,
link_preview=False,
)
@callback("close")
@owner
async def on_plug_in_callback_query_handler(event):
await event.edit(
"**Mᴇɴ Hᴀs Bᴇᴇɴ Cʟsᴇᴅ**",
buttons=Button.inline("Oᴘᴇɴ Mᴀɪɴ Mᴇɴ Aɢᴀɪɴ", data="open"),
)
@callback(
re.compile(
b"us_plugin_(.*)",
),
)
@owner
async def on_plug_in_callback_query_handler(event):
plugin_name = event.data_match.group(1).decode("UTF-8")
help_string = f"Plugin Name - `{plugin_name}`\n"
try:
for i in HELP[plugin_name]:
help_string += i
except BaseException:
pass
if help_string == "":
reply_pop_up_alert = "{} has no detailed help...".format(plugin_name)
else:
reply_pop_up_alert = help_string
reply_pop_up_alert += "\n© @TheUltroid"
try:
if event.query.user_id in sed:
await event.edit(
reply_pop_up_alert,
buttons=[
Button.inline("<- Bᴀ", data="back"),
Button.inline("••Cʟᴇ••", data="close"),
],
)
else:
reply_pop_up_alert = notmine
await event.answer(reply_pop_up_alert, cache_time=0)
except BaseException:
halps = "Do .help {} to get the list of commands.".format(plugin_name)
await event.edit(halps)
@callback(
re.compile(
b"add_plugin_(.*)",
),
)
@owner
async def on_plug_in_callback_query_handler(event):
plugin_name = event.data_match.group(1).decode("UTF-8")
help_string = ""
try:
for i in HELP[plugin_name]:
help_string += i
except BaseException:
try:
for u in CMD_HELP[plugin_name]:
help_string = (
f"Plugin Name-{plugin_name}\n\n✘ Commands Available-\n\n"
)
help_string += str(CMD_HELP[plugin_name])
except BaseException:
try:
if plugin_name in LIST:
help_string = (
f"Plugin Name-{plugin_name}\n\n✘ Commands Available-\n\n"
)
for d in LIST[plugin_name]:
help_string += Var.HNDLR + d
help_string += "\n"
except BaseException:
pass
if help_string == "":
reply_pop_up_alert = "{} has no detailed help...".format(plugin_name)
else:
reply_pop_up_alert = help_string
reply_pop_up_alert += "\n© @TheUltroid"
try:
if event.query.user_id in sed:
await event.edit(
reply_pop_up_alert,
buttons=[
Button.inline("<- Bᴀ", data="buck"),
Button.inline("••Cʟᴇ••", data="close"),
],
)
else:
reply_pop_up_alert = notmine
await event.answer(reply_pop_up_alert, cache_time=0)
except BaseException:
halps = "Do .help {} to get the list of commands.".format(plugin_name)
await event.edit(halps)
def paginate_help(page_number, loaded_plugins, prefix):
number_of_rows = 5
number_of_cols = 2
multi = os.environ.get("EMOJI_TO_DESPLAY_IN_HELP", "")
mult2i = os.environ.get("EMOJI2_TO_DESPLAY_IN_HELP", "")
helpable_plugins = []
global upage
upage = page_number
for p in loaded_plugins:
if not p.startswith("_"):
helpable_plugins.append(p)
helpable_plugins = sorted(helpable_plugins)
modules = [
Button.inline(
"{} {} {}".format(
random.choice(list(multi)), x, random.choice(list(mult2i))
),
data="us_plugin_{}".format(x),
)
for x in helpable_plugins
]
pairs = list(zip(modules[::number_of_cols], modules[1::number_of_cols]))
if len(modules) % number_of_cols == 1:
pairs.append((modules[-1],))
max_num_pages = ceil(len(pairs) / number_of_rows)
modulo_page = page_number % max_num_pages
if len(pairs) > number_of_rows:
pairs = pairs[
modulo_page * number_of_rows : number_of_rows * (modulo_page + 1)
] + [
(
Button.inline(
"<- Pʀᴇɪs", data="{}_prev({})".format(prefix, modulo_page)
),
Button.inline("-Bᴀᴋ-", data="open"),
Button.inline(
"Nᴇxᴛ ->", data="{}_next({})".format(prefix, modulo_page)
),
)
]
else:
pairs = pairs[
modulo_page * number_of_rows : number_of_rows * (modulo_page + 1)
] + [
(
Button.inline("-Bᴀᴋ-", data="open"),
)
]
return pairs
def paginate_addon(page_number, loaded_plugins, prefix):
number_of_rows = 5
number_of_cols = 2
multi = os.environ.get("EMOJI_TO_DESPLAY_IN_HELP", "")
mult2i = os.environ.get("EMOJI2_TO_DESPLAY_IN_HELP", "")
helpable_plugins = []
global addpage
addpage = page_number
for p in loaded_plugins:
if not p.startswith("_"):
helpable_plugins.append(p)
helpable_plugins = sorted(helpable_plugins)
modules = [
Button.inline(
"{} {} {}".format(
random.choice(list(multi)), x, random.choice(list(mult2i))
),
data="add_plugin_{}".format(x),
)
for x in helpable_plugins
]
pairs = list(zip(modules[::number_of_cols], modules[1::number_of_cols]))
if len(modules) % number_of_cols == 1:
pairs.append((modules[-1],))
max_num_pages = ceil(len(pairs) / number_of_rows)
modulo_page = page_number % max_num_pages
if len(pairs) > number_of_rows:
pairs = pairs[
modulo_page * number_of_rows : number_of_rows * (modulo_page + 1)
] + [
(
Button.inline(
"<- Pʀᴇɪs", data="{}_prev({})".format(prefix, modulo_page)
),
Button.inline("-Bᴀᴋ-", data="open"),
Button.inline(
"Nᴇxᴛ ->", data="{}_next({})".format(prefix, modulo_page)
),
)
]
else:
pairs = pairs[
modulo_page * number_of_rows : number_of_rows * (modulo_page + 1)
] + [
(
Button.inline("-Bᴀᴋ-", data="open"),
)
]
return pairs