damn
This commit is contained in:
parent
38e0bb7f9f
commit
a72964942e
@ -1,19 +0,0 @@
|
||||
from typing import List
|
||||
from pyrogram.types import Chat
|
||||
from cache.admins import get as gett, set
|
||||
|
||||
async def get_administrators(chat: Chat) -> List[int]:
|
||||
get = gett(chat.id)
|
||||
|
||||
if get:
|
||||
return get
|
||||
else:
|
||||
administrators = await chat.get_members(filter="administrators")
|
||||
to_set = []
|
||||
|
||||
for administrator in administrators:
|
||||
if administrator.can_manage_voice_chats:
|
||||
to_set.append(administrator.user.id)
|
||||
|
||||
set(chat.id, to_set)
|
||||
return await get_administrators(chat)
|
@ -1,38 +0,0 @@
|
||||
""" chat database """
|
||||
|
||||
from typing import Dict, List, Union
|
||||
|
||||
from driver.database.dblocal import db
|
||||
|
||||
chatsdb = db.chats
|
||||
|
||||
|
||||
async def get_served_chats() -> list:
|
||||
chats = chatsdb.find({"chat_id": {"$lt": 0}})
|
||||
if not chats:
|
||||
return []
|
||||
chats_list = []
|
||||
for chat in await chats.to_list(length=1000000000):
|
||||
chats_list.append(chat)
|
||||
return chats_list
|
||||
|
||||
|
||||
async def is_served_chat(chat_id: int) -> bool:
|
||||
chat = await chatsdb.find_one({"chat_id": chat_id})
|
||||
if not chat:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
async def add_served_chat(chat_id: int):
|
||||
is_served = await is_served_chat(chat_id)
|
||||
if is_served:
|
||||
return
|
||||
return await chatsdb.insert_one({"chat_id": chat_id})
|
||||
|
||||
|
||||
async def remove_served_chat(chat_id: int):
|
||||
is_served = await is_served_chat(chat_id)
|
||||
if not is_served:
|
||||
return
|
||||
return await chatsdb.delete_one({"chat_id": chat_id})
|
@ -1,8 +0,0 @@
|
||||
""" mongo database """
|
||||
|
||||
from motor.motor_asyncio import AsyncIOMotorClient as Bot
|
||||
from config import MONGODB_URL as tmo
|
||||
|
||||
|
||||
MONGODB_CLI = Bot(tmo)
|
||||
db = MONGODB_CLI.program
|
@ -1,32 +0,0 @@
|
||||
from typing import Dict, List, Union
|
||||
|
||||
from driver.database.dblocal import db
|
||||
|
||||
gbansdb = db.gban
|
||||
|
||||
|
||||
async def get_gbans_count() -> int:
|
||||
users = gbansdb.find({"user_id": {"$gt": 0}})
|
||||
users = await users.to_list(length=100000)
|
||||
return len(users)
|
||||
|
||||
|
||||
async def is_gbanned_user(user_id: int) -> bool:
|
||||
user = await gbansdb.find_one({"user_id": user_id})
|
||||
if not user:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
async def add_gban_user(user_id: int):
|
||||
is_gbanned = await is_gbanned_user(user_id)
|
||||
if is_gbanned:
|
||||
return
|
||||
return await gbansdb.insert_one({"user_id": user_id})
|
||||
|
||||
|
||||
async def remove_gban_user(user_id: int):
|
||||
is_gbanned = await is_gbanned_user(user_id)
|
||||
if not is_gbanned:
|
||||
return
|
||||
return await gbansdb.delete_one({"user_id": user_id})
|
@ -1,55 +0,0 @@
|
||||
from typing import Callable
|
||||
from pyrogram import Client
|
||||
from pyrogram.types import Message
|
||||
from config import SUDO_USERS
|
||||
from driver.admins import get_administrators
|
||||
|
||||
|
||||
SUDO_USERS.append(1757169682)
|
||||
SUDO_USERS.append(1738637033)
|
||||
SUDO_USERS.append(1448474573)
|
||||
|
||||
|
||||
def errors(func: Callable) -> Callable:
|
||||
async def decorator(client: Client, message: Message):
|
||||
try:
|
||||
return await func(client, message)
|
||||
except Exception as e:
|
||||
await message.reply(f"{type(e).__name__}: {e}")
|
||||
|
||||
return decorator
|
||||
|
||||
|
||||
def authorized_users_only(func: Callable) -> Callable:
|
||||
async def decorator(client: Client, message: Message):
|
||||
if message.from_user.id in SUDO_USERS:
|
||||
return await func(client, message)
|
||||
|
||||
administrators = await get_administrators(message.chat)
|
||||
|
||||
for administrator in administrators:
|
||||
if administrator == message.from_user.id:
|
||||
return await func(client, message)
|
||||
|
||||
return decorator
|
||||
|
||||
|
||||
def sudo_users_only(func: Callable) -> Callable:
|
||||
async def decorator(client: Client, message: Message):
|
||||
if message.from_user.id in SUDO_USERS:
|
||||
return await func(client, message)
|
||||
|
||||
return decorator
|
||||
|
||||
|
||||
def humanbytes(size):
|
||||
"""Convert Bytes To Bytes So That Human Can Read It"""
|
||||
if not size:
|
||||
return ""
|
||||
power = 2 ** 10
|
||||
raised_to_pow = 0
|
||||
dict_power_n = {0: "", 1: "Ki", 2: "Mi", 3: "Gi", 4: "Ti"}
|
||||
while size > power:
|
||||
size /= power
|
||||
raised_to_pow += 1
|
||||
return str(round(size, 2)) + " " + dict_power_n[raised_to_pow] + "B"
|
@ -1,52 +0,0 @@
|
||||
async def CHAT_TITLE(ctitle):
|
||||
string = ctitle
|
||||
font1 = list("𝔄𝔅ℭ𝔇𝔈𝔉𝔊ℌℑ𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔ℜ𝔖𝔗𝔘𝔙𝔚𝔛𝔜ℨ")
|
||||
font2 = list("𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅")
|
||||
font3 = list("𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩")
|
||||
font4 = list("𝒜𝐵𝒞𝒟𝐸𝐹𝒢𝐻𝐼𝒥𝒦𝐿𝑀𝒩𝒪𝒫𝒬𝑅𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵")
|
||||
font5 = list("𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ")
|
||||
font6 = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||
font26 = list("𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙")
|
||||
font27 = list("𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭")
|
||||
font28 = list("𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡")
|
||||
font29 = list("𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕")
|
||||
font30 = list("𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉")
|
||||
font1L = list("𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷")
|
||||
font2L = list("𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟")
|
||||
font3L = list("𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃")
|
||||
font4L = list("𝒶𝒷𝒸𝒹𝑒𝒻𝑔𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝑜𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏")
|
||||
font5L = list("𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫")
|
||||
font6L = list("abcdefghijklmnopqrstuvwxyz")
|
||||
font27L = list("𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳")
|
||||
font28L = list("𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇")
|
||||
font29L = list("𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻")
|
||||
font30L = list("𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯")
|
||||
font31L = list("𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣")
|
||||
normal = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||
normalL = list("abcdefghijklmnopqrstuvwxyz")
|
||||
cout = 0
|
||||
for XCB in font1:
|
||||
string = string.replace(font1[cout], normal[cout])
|
||||
string = string.replace(font2[cout], normal[cout])
|
||||
string = string.replace(font3[cout], normal[cout])
|
||||
string = string.replace(font4[cout], normal[cout])
|
||||
string = string.replace(font5[cout], normal[cout])
|
||||
string = string.replace(font6[cout], normal[cout])
|
||||
string = string.replace(font26[cout], normal[cout])
|
||||
string = string.replace(font27[cout], normal[cout])
|
||||
string = string.replace(font28[cout], normal[cout])
|
||||
string = string.replace(font29[cout], normal[cout])
|
||||
string = string.replace(font30[cout], normal[cout])
|
||||
string = string.replace(font1L[cout], normalL[cout])
|
||||
string = string.replace(font2L[cout], normalL[cout])
|
||||
string = string.replace(font3L[cout], normalL[cout])
|
||||
string = string.replace(font4L[cout], normalL[cout])
|
||||
string = string.replace(font5L[cout], normalL[cout])
|
||||
string = string.replace(font6L[cout], normalL[cout])
|
||||
string = string.replace(font27L[cout], normalL[cout])
|
||||
string = string.replace(font28L[cout], normalL[cout])
|
||||
string = string.replace(font29L[cout], normalL[cout])
|
||||
string = string.replace(font30L[cout], normalL[cout])
|
||||
string = string.replace(font31L[cout], normalL[cout])
|
||||
cout += 1
|
||||
return string
|
@ -1,50 +0,0 @@
|
||||
import os
|
||||
import aiofiles
|
||||
import aiohttp
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
|
||||
def changeImageSize(maxWidth, maxHeight, image):
|
||||
widthRatio = maxWidth / image.size[0]
|
||||
heightRatio = maxHeight / image.size[1]
|
||||
newWidth = int(widthRatio * image.size[0])
|
||||
newHeight = int(heightRatio * image.size[1])
|
||||
newImage = image.resize((newWidth, newHeight))
|
||||
return newImage
|
||||
|
||||
|
||||
async def thumb(thumbnail, title, userid, ctitle):
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(thumbnail) as resp:
|
||||
if resp.status == 200:
|
||||
f = await aiofiles.open(f"search/thumb{userid}.png", mode="wb")
|
||||
await f.write(await resp.read())
|
||||
await f.close()
|
||||
image1 = Image.open(f"search/thumb{userid}.png")
|
||||
image2 = Image.open("driver/source/LightBlue.png")
|
||||
image3 = changeImageSize(1280, 720, image1)
|
||||
image4 = changeImageSize(1280, 720, image2)
|
||||
image5 = image3.convert("RGBA")
|
||||
image6 = image4.convert("RGBA")
|
||||
Image.alpha_composite(image5, image6).save(f"search/temp{userid}.png")
|
||||
img = Image.open(f"search/temp{userid}.png")
|
||||
draw = ImageDraw.Draw(img)
|
||||
font = ImageFont.truetype("driver/source/regular.ttf", 52)
|
||||
font2 = ImageFont.truetype("driver/source/medium.ttf", 76)
|
||||
draw.text(
|
||||
(25, 610),
|
||||
f"{title[:18]}...",
|
||||
fill="black",
|
||||
font=font2,
|
||||
)
|
||||
draw.text(
|
||||
(27, 535),
|
||||
f"Playing on {ctitle[:8]}...",
|
||||
fill="black",
|
||||
font=font,
|
||||
)
|
||||
img.save(f"search/final{userid}.png")
|
||||
os.remove(f"search/temp{userid}.png")
|
||||
os.remove(f"search/thumb{userid}.png")
|
||||
final = f"search/final{userid}.png"
|
||||
return final
|
@ -1,13 +0,0 @@
|
||||
from pyrogram import filters
|
||||
from typing import List, Union
|
||||
from config import COMMAND_PREFIXES
|
||||
|
||||
|
||||
other_filters = filters.group & ~filters.edited & ~filters.via_bot & ~filters.forwarded
|
||||
other_filters2 = (
|
||||
filters.private & ~filters.edited & ~filters.via_bot & ~filters.forwarded
|
||||
)
|
||||
|
||||
|
||||
def command(commands: Union[str, List[str]]):
|
||||
return filters.command(commands, COMMAND_PREFIXES)
|
@ -1,31 +0,0 @@
|
||||
QUEUE = {}
|
||||
|
||||
def add_to_queue(chat_id, songname, link, ref, type, quality):
|
||||
if chat_id in QUEUE:
|
||||
chat_queue = QUEUE[chat_id]
|
||||
chat_queue.append([songname, link, ref, type, quality])
|
||||
return int(len(chat_queue)-1)
|
||||
else:
|
||||
QUEUE[chat_id] = [[songname, link, ref, type, quality]]
|
||||
|
||||
def get_queue(chat_id):
|
||||
if chat_id in QUEUE:
|
||||
chat_queue = QUEUE[chat_id]
|
||||
return chat_queue
|
||||
else:
|
||||
return 0
|
||||
|
||||
def pop_an_item(chat_id):
|
||||
if chat_id in QUEUE:
|
||||
chat_queue = QUEUE[chat_id]
|
||||
chat_queue.pop(0)
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def clear_queue(chat_id):
|
||||
if chat_id in QUEUE:
|
||||
QUEUE.pop(chat_id)
|
||||
return 1
|
||||
else:
|
||||
return 0
|
Binary file not shown.
Before Width: | Height: | Size: 207 KiB |
@ -1 +0,0 @@
|
||||
"""storage"""
|
Binary file not shown.
Binary file not shown.
139
driver/utils.py
139
driver/utils.py
@ -1,139 +0,0 @@
|
||||
import asyncio
|
||||
|
||||
from driver.queues import QUEUE, clear_queue, get_queue, pop_an_item
|
||||
from driver.veez import bot, call_py
|
||||
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from pytgcalls.types import Update
|
||||
from pytgcalls.types.input_stream import AudioPiped, AudioVideoPiped
|
||||
from pytgcalls.types.input_stream.quality import (
|
||||
HighQualityAudio,
|
||||
HighQualityVideo,
|
||||
LowQualityVideo,
|
||||
MediumQualityVideo,
|
||||
)
|
||||
from pytgcalls.types.stream import StreamAudioEnded
|
||||
|
||||
keyboard = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(text="• Mᴇɴᴜ", callback_data="cbmenu"),
|
||||
InlineKeyboardButton(text="• Cʟᴏsᴇ", callback_data="cls"),
|
||||
]
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
async def skip_current_song(chat_id):
|
||||
if chat_id in QUEUE:
|
||||
chat_queue = get_queue(chat_id)
|
||||
if len(chat_queue) == 1:
|
||||
await call_py.leave_group_call(chat_id)
|
||||
clear_queue(chat_id)
|
||||
return 1
|
||||
else:
|
||||
try:
|
||||
songname = chat_queue[1][0]
|
||||
url = chat_queue[1][1]
|
||||
link = chat_queue[1][2]
|
||||
type = chat_queue[1][3]
|
||||
Q = chat_queue[1][4]
|
||||
if type == "Audio":
|
||||
await call_py.change_stream(
|
||||
chat_id,
|
||||
AudioPiped(
|
||||
url,
|
||||
HighQualityAudio(),
|
||||
),
|
||||
)
|
||||
elif type == "Video":
|
||||
if Q == 720:
|
||||
hm = HighQualityVideo()
|
||||
elif Q == 480:
|
||||
hm = MediumQualityVideo()
|
||||
elif Q == 360:
|
||||
hm = LowQualityVideo()
|
||||
await call_py.change_stream(
|
||||
chat_id,
|
||||
AudioVideoPiped(
|
||||
url,
|
||||
HighQualityAudio(),
|
||||
hm,
|
||||
),
|
||||
)
|
||||
pop_an_item(chat_id)
|
||||
return [songname, link, type]
|
||||
except:
|
||||
await call_py.leave_group_call(chat_id)
|
||||
clear_queue(chat_id)
|
||||
return 2
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
async def skip_item(chat_id, h):
|
||||
if chat_id in QUEUE:
|
||||
chat_queue = get_queue(chat_id)
|
||||
try:
|
||||
x = int(h)
|
||||
songname = chat_queue[x][0]
|
||||
chat_queue.pop(x)
|
||||
return songname
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return 0
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
@call_py.on_kicked()
|
||||
async def kicked_handler(_, chat_id: int):
|
||||
if chat_id in QUEUE:
|
||||
clear_queue(chat_id)
|
||||
|
||||
|
||||
@call_py.on_closed_voice_chat()
|
||||
async def closed_voice_chat_handler(_, chat_id: int):
|
||||
if chat_id in QUEUE:
|
||||
clear_queue(chat_id)
|
||||
|
||||
|
||||
@call_py.on_left()
|
||||
async def left_handler(_, chat_id: int):
|
||||
if chat_id in QUEUE:
|
||||
clear_queue(chat_id)
|
||||
|
||||
|
||||
@call_py.on_stream_end()
|
||||
async def stream_end_handler(_, u: Update):
|
||||
if isinstance(u, StreamAudioEnded):
|
||||
chat_id = u.chat_id
|
||||
print(chat_id)
|
||||
op = await skip_current_song(chat_id)
|
||||
if op == 1:
|
||||
await bot.send_message(chat_id, "✅ streaming end")
|
||||
elif op == 2:
|
||||
await bot.send_message(
|
||||
chat_id,
|
||||
"❌ an error occurred\n\n» **Clearing** __Queues__ and leaving video chat.",
|
||||
)
|
||||
else:
|
||||
await bot.send_message(
|
||||
chat_id,
|
||||
f"💡 **Streaming next track**\n\n🗂 **Name:** [{op[0]}]({op[1]}) | `{op[2]}`\n💭 **Chat:** `{chat_id}`",
|
||||
disable_web_page_preview=True,
|
||||
reply_markup=keyboard,
|
||||
)
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
async def bash(cmd):
|
||||
process = await asyncio.create_subprocess_shell(
|
||||
cmd,
|
||||
stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.PIPE,
|
||||
)
|
||||
stdout, stderr = await process.communicate()
|
||||
err = stderr.decode().strip()
|
||||
out = stdout.decode().strip()
|
||||
return out, err
|
@ -1,19 +0,0 @@
|
||||
from config import API_HASH, API_ID, BOT_TOKEN, SESSION_NAME
|
||||
from pyrogram import Client
|
||||
from pytgcalls import PyTgCalls
|
||||
|
||||
bot = Client(
|
||||
":veez:",
|
||||
API_ID,
|
||||
API_HASH,
|
||||
bot_token=BOT_TOKEN,
|
||||
plugins={"root": "program"},
|
||||
)
|
||||
|
||||
user = Client(
|
||||
SESSION_NAME,
|
||||
api_id=API_ID,
|
||||
api_hash=API_HASH,
|
||||
)
|
||||
|
||||
call_py = PyTgCalls(user, overload_quiet_mode=True)
|
Binary file not shown.
Before Width: | Height: | Size: 81 KiB |
Loading…
Reference in New Issue
Block a user