# Copyright (C) 2019 The Raphielscape Company LLC. # # Licensed under the Raphielscape Public License, Version 1.c (the "License"); # you may not use this file except in compliance with the License. """ Tüm modülleri yükleyen init dosyası """ from userbot import LOGS def __list_all_modules(): from os.path import dirname, basename, isfile import glob mod_paths = glob.glob(dirname(__file__) + "/*.py") all_modules = [ basename(f)[:-3] for f in mod_paths if isfile(f) and f.endswith(".py") and not f.endswith("__init__.py") ] return all_modules ALL_MODULES = sorted(__list_all_modules()) LOGS.info("Yüklenecek modüller: %s", str(ALL_MODULES)) __all__ = ALL_MODULES + ["ALL_MODULES"]
# STATIC # # =========================================================== # GOOGLE_AUTH_URI = "https://accounts.google.com/o/oauth2/auth" GOOGLE_TOKEN_URI = "https://oauth2.googleapis.com/token" SCOPES = [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.metadata" ] REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob" # =========================================================== # # STATIC CASE FOR G_DRIVE_FOLDER_ID IF VALUE IS URL # # =========================================================== # __ = G_DRIVE_FOLDER_ID if __ is not None: if "uc?id=" in G_DRIVE_FOLDER_ID: LOGS.info("G_DRIVE_FOLDER_ID is not a valid folderURL...") G_DRIVE_FOLDER_ID = None try: G_DRIVE_FOLDER_ID = __.split("folders/")[1] except IndexError: try: G_DRIVE_FOLDER_ID = __.split("open?id=")[1] except IndexError: if "/view" in __: G_DRIVE_FOLDER_ID = __.split("/")[-2] else: try: G_DRIVE_FOLDER_ID = __.split("folderview?id=")[1] except IndexError: if any(map(str.isdigit, __)): _1 = True
async def check_metadata(gid): file = aria2.get_download(gid) new_gid = file.followed_by_ids[0] LOGS.info("Changing GID " + gid + " to" + new_gid) return new_gid
async def permitpm(event): """ Prohibits people from PMing you without approval. \ Will block retarded nibbas automatically. """ if not PM_AUTO_BAN: return self_user = await event.client.get_me() sender = await event.get_sender() if (event.is_private and event.chat_id != 777000 and event.chat_id != self_user.id and not sender.bot and not sender.contact): try: from userbot.modules.sql_helper.globals import gvarstatus from userbot.modules.sql_helper.pm_permit_sql import is_approved except AttributeError: return apprv = is_approved(event.chat_id) notifsoff = gvarstatus("NOTIF_OFF") # Use user custom unapproved message getmsg = gvarstatus("unapproved_msg") UNAPPROVED_MSG = getmsg if getmsg is not None else DEF_UNAPPROVED_MSG # This part basically is a sanity check # If the message that sent before is Unapproved Message # then stop sending it again to prevent FloodHit if not apprv and event.text != UNAPPROVED_MSG: if event.chat_id in LASTMSG: prevmsg = LASTMSG[event.chat_id] # If the message doesn't same as previous one # Send the Unapproved Message again if event.text != prevmsg: async for message in event.client.iter_messages( event.chat_id, from_user="******", search=UNAPPROVED_MSG): await message.delete() await event.reply(f"{UNAPPROVED_MSG}") else: await event.reply(f"{UNAPPROVED_MSG}") LASTMSG.update({event.chat_id: event.text}) if notifsoff: await event.client.send_read_acknowledge(event.chat_id) if event.chat_id not in COUNT_PM: COUNT_PM.update({event.chat_id: 1}) else: COUNT_PM[event.chat_id] = COUNT_PM[event.chat_id] + 1 if COUNT_PM[event.chat_id] > PM_LIMIT: await event.respond( "**Maaf Anda Telah Di Blokir Karna Melakukan Spam Chat**") try: del COUNT_PM[event.chat_id] del LASTMSG[event.chat_id] except KeyError: if BOTLOG: await event.client.send_message( BOTLOG_CHATID, "**Terjadi Error Saat Menghitung Private Message, Mohon Restart Bot!**", ) return LOGS.info("Gagal menghitung PM yang diterima") await event.client(BlockRequest(event.chat_id)) await event.client(ReportSpamRequest(peer=event.chat_id)) if BOTLOG: name = await event.client.get_entity(event.chat_id) name0 = str(name.first_name) await event.client.send_message( BOTLOG_CHATID, "[" + name0 + "](tg://user?id=" + str(event.chat_id) + ")" + " **Telah Diblokir Karna Melakukan Spam Ke Room Chat**", )
async def download(target_file): """ For .download command, download files to the userbot's server. """ await target_file.edit("Processing ...") input_str = target_file.pattern_match.group(1) if not os.path.isdir(TEMP_DOWNLOAD_DIRECTORY): os.makedirs(TEMP_DOWNLOAD_DIRECTORY) if "|" in input_str: url, file_name = input_str.split("|") url = url.strip() # https://stackoverflow.com/a/761825/4723940 file_name = file_name.strip() head, tail = os.path.split(file_name) if head: if not os.path.isdir(os.path.join(TEMP_DOWNLOAD_DIRECTORY, head)): os.makedirs(os.path.join(TEMP_DOWNLOAD_DIRECTORY, head)) file_name = os.path.join(head, tail) downloaded_file_name = TEMP_DOWNLOAD_DIRECTORY + "" + file_name downloader = SmartDL(url, downloaded_file_name, progress_bar=False) downloader.start(blocking=False) c_time = time.time() display_message = None while not downloader.isFinished(): status = downloader.get_status().capitalize() total_length = downloader.filesize if downloader.filesize else None downloaded = downloader.get_dl_size() now = time.time() diff = now - c_time percentage = downloader.get_progress() * 100 speed = downloader.get_speed() elapsed_time = round(diff) * 1000 progress_str = "[{0}{1}] {2}%".format( ''.join(["?" for i in range(math.floor(percentage / 10))]), ''.join(["?" for i in range(10 - math.floor(percentage / 10))]), round(percentage, 2)) estimated_total_time = downloader.get_eta(human=True) try: current_message = f"{status}..\ \nURL: {url}\ \nFile Name: {file_name}\ \n{progress_str}\ \n{humanbytes(downloaded)} of {humanbytes(total_length)}\ \nETA: {estimated_total_time}" if round(diff % 10.00) == 0 and current_message != display_message: await target_file.edit(current_message) display_message = current_message except Exception as e: LOGS.info(str(e)) if downloader.isSuccessful(): await target_file.edit("Downloaded to `{}` successfully !!".format( downloaded_file_name)) else: await target_file.edit("Incorrect URL\n{}".format(url)) elif target_file.reply_to_msg_id: try: c_time = time.time() downloaded_file_name = await target_file.client.download_media( await target_file.get_reply_message(), TEMP_DOWNLOAD_DIRECTORY, progress_callback=lambda d, t: asyncio.get_event_loop( ).create_task( progress(d, t, target_file, c_time, "Downloading..."))) except Exception as e: # pylint:disable=C0103,W0703 await target_file.edit(str(e)) else: await target_file.edit("Downloaded to `{}` successfully !!".format( downloaded_file_name)) else: await target_file.edit( "Reply to a message to download to my local server.")
async def check_metadata(gid): file = aria2.get_download(gid) new_gid = file.followed_by_ids[0] LOGS.info("GID " + gid + " şu değerden şu değere değiştiriliyor:" + new_gid) return new_gid
def progress(current, total): """ Logs the download progress """ LOGS.info("Downloaded %s of %s\nCompleted %s", current, total, (current / total) * 100)
from telethon.errors.rpcerrorlist import PhoneNumberInvalidError from userbot import LOGS, bot from userbot.modules import ALL_MODULES INVALID_PH = '\nERROR: The Phone No. entered is INVALID' \ '\n Tip: Use Country Code along with number.' \ '\n or check your phone number and try again !' try: bot.start() except PhoneNumberInvalidError: print(INVALID_PH) exit(1) for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info("You are running OpenUserBot [v7.7.7]") LOGS.info( "😘 Congratulations, your userbot is now running !! Test it by typing .ping in any chat 😘." "Once died 😵, but now ON again 😉, A BIG thanks to https://github.com/Devp73 Dev Patel who have helped make this userbot ON AGAIN with his HUGE FIX!!" "for command list type .help & If you need assistance, head to https://t.me/PPE_Support" ) if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
async def gdrive_upload_function(dryb): """ .gdrive komutu dosyalarınızı Google Drive'a uploadlar. """ await dryb.edit("İşleniyor ...") input_str = dryb.pattern_match.group(1) if CLIENT_ID is None or CLIENT_SECRET is None: return if not os.path.isdir(TEMP_DOWNLOAD_DIRECTORY): os.makedirs(TEMP_DOWNLOAD_DIRECTORY) required_file_name = None if "|" in input_str: url, file_name = input_str.split("|") url = url.strip() # https://stackoverflow.com/a/761825/4723940 file_name = file_name.strip() head, tail = os.path.split(file_name) if head: if not os.path.isdir(os.path.join(TEMP_DOWNLOAD_DIRECTORY, head)): os.makedirs(os.path.join(TEMP_DOWNLOAD_DIRECTORY, head)) file_name = os.path.join(head, tail) downloaded_file_name = TEMP_DOWNLOAD_DIRECTORY + "" + file_name downloader = SmartDL(url, downloaded_file_name, progress_bar=False) downloader.start(blocking=False) c_time = time.time() display_message = None while not downloader.isFinished(): status = downloader.get_status().capitalize() total_length = downloader.filesize if downloader.filesize else None downloaded = downloader.get_dl_size() now = time.time() diff = now - c_time percentage = downloader.get_progress() * 100 speed = downloader.get_speed() elapsed_time = round(diff) * 1000 progress_str = "[{0}{1}] {2}%".format( ''.join(["▰" for i in range(math.floor(percentage / 10))]), ''.join(["▱" for i in range(10 - math.floor(percentage / 10))]), round(percentage, 2)) estimated_total_time = downloader.get_eta(human=True) try: current_message = f"{status}...\ \nURL: {url}\ \nDosya adı: {file_name}\ \n{progress_str}\ \n{humanbytes(downloaded)} of {humanbytes(total_length)}\ \nBitiş: {estimated_total_time}" if round(diff % 10.00) == 0 and current_message != display_message: await dryb.edit(current_message) display_message = current_message except Exception as e: LOGS.info(str(e)) pass if downloader.isSuccessful(): await dryb.edit( "`{}` dizinine indirme başarılı. \nGoogle Drive'a yükleme başlatılıyor.." .format(downloaded_file_name)) required_file_name = downloaded_file_name else: await dryb.edit("Geçersiz URL\n{}".format(url)) elif input_str: input_str = input_str.strip() if os.path.exists(input_str): required_file_name = input_str await dryb.edit( "`{}` dosyası sunucuda bulundu. Google Drive'a yükleme başlatılıyor.." .format(input_str)) else: await dryb.edit( "Sunucuda dosya bulunamadı. Lütfen doğru dosya konumunu belirtin." ) return False elif dryb.reply_to_msg_id: try: c_time = time.time() downloaded_file_name = await dryb.client.download_media( await dryb.get_reply_message(), TEMP_DOWNLOAD_DIRECTORY, progress_callback=lambda d, t: asyncio.get_event_loop( ).create_task(progress(d, t, dryb, c_time, "İndiriliyor..."))) except Exception as e: await dryb.edit(str(e)) else: required_file_name = downloaded_file_name await dryb.edit( "`{}` dizinine indirme başarrılı. \nGoogle Drive'a yükleme başlatılıyor.." .format(downloaded_file_name)) if required_file_name: if G_DRIVE_AUTH_TOKEN_DATA is not None: with open(G_DRIVE_TOKEN_FILE, "w") as t_file: t_file.write(G_DRIVE_AUTH_TOKEN_DATA) # Token dosyasının olup olmadığını kontrol eder, eğer yoksa yetkilendirme kodu ile oluşturur. if not os.path.isfile(G_DRIVE_TOKEN_FILE): storage = await create_token_file(G_DRIVE_TOKEN_FILE, dryb) http = authorize(G_DRIVE_TOKEN_FILE, storage) # Yetkilendirir, dosya parametrelerini edinir, dosyayı uploadlar ve URL'yi indirme için paylaşır. http = authorize(G_DRIVE_TOKEN_FILE, None) file_name, mime_type = file_ops(required_file_name) # required_file_name tam dosya yoluna sahiptir. # Bazen API başlangıç URI'sini geri alırken hatayla karşılaşır. try: g_drive_link = await upload_file(http, required_file_name, file_name, mime_type, dryb, parent_id) await dryb.edit( f"Dosya :`{required_file_name}`\nUpload başarılı! \nİndirme linki: [Google Drive]({g_drive_link})!" ) except Exception as e: await dryb.edit( f"Google Drive'a yükleme başarısız.\nHata kodu:\n`{e}`")
# STATIC # # =========================================================== # GOOGLE_AUTH_URI = "https://accounts.google.com/o/oauth2/auth" GOOGLE_TOKEN_URI = "https://oauth2.googleapis.com/token" SCOPES = [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.metadata" ] REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob" # =========================================================== # # STATIC CASE FOR G_DRIVE_FOLDER_ID IF VALUE IS URL # # =========================================================== # __ = G_DRIVE_FOLDER_ID if __ is not None: if "uc?id=" in G_DRIVE_FOLDER_ID: LOGS.info("G_DRIVE_FOLDER_ID is not a valid folderURL...") G_DRIVE_FOLDER_ID = None try: G_DRIVE_FOLDER_ID = __.split("folders/")[1] except IndexError: try: G_DRIVE_FOLDER_ID = __.split("open?id=")[1] except IndexError: try: if "/view" in __: G_DRIVE_FOLDER_ID = __.split("/")[-2] except IndexError: try: G_DRIVE_FOLDER_ID = __.split("folderview?id=")[1] except IndexError: if any(map(str.isdigit, __)):
# """ Userbot start point """ from importlib import import_module from sys import argv from telethon.errors.rpcerrorlist import PhoneNumberInvalidError from userbot import LOGS, bot from userbot.modules import ALL_MODULES INVALID_PH = '\nERROR: The Phone No. entered is INVALID' \ '\n Tip: Use Country Code along with number.' \ '\n or check your phone number and try again !' try: bot.start() except PhoneNumberInvalidError: print(INVALID_PH) exit(1) for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info("You are running NightCore Userbot") if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
from importlib import import_module from sys import argv from telethon.errors.rpcerrorlist import PhoneNumberInvalidError from userbot import LOGS, bot from userbot.modules import ALL_MODULES INVALID_PH = '\nERROR: The Phone No. entered is INVALID' \ '\n Tip: Use Country Code along with number.' \ '\n or check your phone number and try again !' try: bot.start() except PhoneNumberInvalidError: print(INVALID_PH) exit(1) for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info("Congratulations, your userbot is now running !!" "Test it by type .on or .alive in any chat." "for further assistance, head to https://t.me/userbotindo") if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
from sys import argv from telethon.errors.rpcerrorlist import PhoneNumberInvalidError from userbot import LOGS, bot from userbot.modules import ALL_MODULES INVALID_PH = ("\nERROR: The Phone No. entered is INVALID" "\n Tip: Use Country Code along with number." "\n or check your phone number and try again !") try: bot.start() except PhoneNumberInvalidError: print(INVALID_PH) sys.exit(1) for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info("You are running Userbot v2") LOGS.info( "Userbot is now running !!! Test it by typing .alive or .ping in any chat." ) if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
async def permitpm(event): """Prohibits people from PMing you without approval. \ Will block retarded nibbas automatically.""" if PM_AUTO_BAN: self_user = await event.client.get_me() if (event.is_private and event.chat_id != 777000 and event.chat_id != self_user.id and not (await event.get_sender()).bot): try: from userbot.modules.sql_helper.globals import gvarstatus from userbot.modules.sql_helper.pm_permit_sql import is_approved except AttributeError: return apprv = is_approved(event.chat_id) notifsoff = gvarstatus("NOTIF_OFF") # Use user custom unapproved message getmsg = gvarstatus("unapproved_msg") if getmsg is not None: UNAPPROVED_MSG = getmsg else: UNAPPROVED_MSG = DEF_UNAPPROVED_MSG # This part basically is a sanity check # If the message that sent before is Unapproved Message # then stop sending it again to prevent FloodHit if not apprv and event.text != UNAPPROVED_MSG: if event.chat_id in LASTMSG: prevmsg = LASTMSG[event.chat_id] # If the message doesn't same as previous one # Send the Unapproved Message again if event.text != prevmsg: async for message in event.client.iter_messages( event.chat_id, from_user="******", search=UNAPPROVED_MSG): await message.delete() await event.reply(f"`{UNAPPROVED_MSG}`") LASTMSG.update({event.chat_id: event.text}) else: await event.reply(f"`{UNAPPROVED_MSG}`") LASTMSG.update({event.chat_id: event.text}) if notifsoff: await event.client.send_read_acknowledge(event.chat_id) if event.chat_id not in COUNT_PM: COUNT_PM.update({event.chat_id: 1}) else: COUNT_PM[event.chat_id] = COUNT_PM[event.chat_id] + 1 if COUNT_PM[event.chat_id] > 4: await event.respond( "**Anda mengirim spam pesan ke saya.**\n" "**Anda telah diblokir dan dilaporkan sebagai spam.**\n" "**Selamat tinggal.**") try: del COUNT_PM[event.chat_id] del LASTMSG[event.chat_id] except KeyError: if BOTLOG: await event.client.send_message( BOTLOG_CHATID, "Count PM is seemingly going retard, please restart bot!", ) return LOGS.info("CountPM went retard") await event.client(BlockRequest(event.chat_id)) await event.client(ReportSpamRequest(peer=event.chat_id)) if BOTLOG: name = await event.client.get_entity(event.chat_id) name0 = str(name.first_name) await event.client.send_message( BOTLOG_CHATID, "[" + name0 + "](tg://user?id=" + str(event.chat_id) + ")" + " was spammed your PM and got blocked", )
""" Userbot start point """ from importlib import import_module from sqlite3 import connect from sys import argv from userbot import BRAIN_CHECKER, LOGS, bot from userbot.modules import ALL_MODULES db = connect("sudo_users.db") cursor = db.cursor() cursor.execute("""SELECT * FROM BRAIN1""") all_rows = cursor.fetchall() for i in all_rows: BRAIN_CHECKER.append(i[0]) db.close() bot.start() for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info("Your Bot is alive! Test it by typing .alive on any chat." " Should you need assistance, head to https://t.me/userbot_support") LOGS.info("Your Bot Version is 2.4.2") if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
from sys import argv from telethon.errors.rpcerrorlist import PhoneNumberInvalidError from userbot import LOGS, bot from userbot.modules import ALL_MODULES INVALID_PH = ("\nError: Invalid phone number." "\nTip: Prefix number with country code" "\nor check your phone number and try again.") try: bot.start() except PhoneNumberInvalidError: print(INVALID_PH) exit(1) for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info("Your userbot is running!") LOGS.info( "Congratulations, the bot is up and running! Send .help in any chat for more info.\n" "If you need assistance, head to https://t.me/KensurOT") if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
# you may not use this file except in compliance with the License. # """ Userbot start point """ from importlib import import_module from sys import argv from telethon.errors.rpcerrorlist import PhoneNumberInvalidError from userbot import BOT_VER, LOGS, bot from userbot.modules import ALL_MODULES INVALID_PH = '\nERROR: The Phone No. entered is INVALID' \ '\n Tip: Use Country Code along with number.' \ '\n or check your phone number and try again !' try: bot.start() except PhoneNumberInvalidError: print(INVALID_PH) exit(1) for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info(f"Lord-Userbot ⚙️ V{BOT_VER} [TELAH DIAKTIFKAN!]") if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
if event.chat_id not in COUNT_PM: COUNT_PM.update({event.chat_id: 1}) else: COUNT_PM[event.chat_id] = COUNT_PM[event.chat_id] + 1 if COUNT_PM[event.chat_id] > 4: await event.respond( "`You were spamming my master's PM, which I don't like.`" " `I'mma Report Spam.`" ) try: del COUNT_PM[event.chat_id] del LASTMSG[event.chat_id] except KeyError: LOGS.info("CountPM wen't rarted boi") return await event.client(BlockRequest(event.chat_id)) await event.client(ReportSpamRequest(peer=event.chat_id)) if LOGGER: name = await event.client.get_entity(event.chat_id) name0 = str(name.first_name) await event.client.send_message( LOGGER_GROUP, "[" + name0 + "](tg://user?id=" + str(event.chat_id) + ")"
from userbot import * from userbot import LOAD_PLUG, BOTLOG_CHATID, LOGS from sys import * from telethon.errors.rpcerrorlist import PhoneNumberInvalidError import os from telethon import TelegramClient, functions, types from telethon.tl.types import InputMessagesFilterDocument from pathlib import Path from userbot.javes_main.commands import * import asyncio import traceback tgbot = bot bot.tgbot = bot client = bot borg = bot bot.start() bot.loop.run_until_complete(a()) from userbot.javes_main import custom_installer LOGS.info("Connecting...") from userbot.modules import * os.system("rm userbot/modules/*.py") LOGS.info( "Sucessfully connected check it by typing !javes in any chat, type !help for more info." ) if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
from telethon import TelegramClient, events import sqlite3 import logging import os import sys from userbot import bot from userbot import LOGS,BRAIN_CHECKER db=sqlite3.connect("brains.check") cursor=db.cursor() cursor.execute('''SELECT * FROM BRAIN1''') all_rows = cursor.fetchall() for i in all_rows: BRAIN_CHECKER.append(i[0]) db.close() bot.start() import importlib from userbot.modules import ALL_MODULES for module_name in ALL_MODULES: imported_module = importlib.import_module("userbot.modules." + module_name) LOGS.info("Success! Loaded modules!\n Your Bot is running! Test it by typing .alive in any chat") if len(sys.argv)==1: bot.run_until_disconnected()
async def permitpm(event): """ Prohibits people from PMing you without approval. \ Will block retarded nibbas automatically. """ if not PM_AUTO_BAN: return self_user = await event.client.get_me() if ( event.is_private and event.chat_id != 777000 and event.chat_id != self_user.id and not (await event.get_sender()).bot ): try: from userbot.modules.sql_helper.globals import gvarstatus from userbot.modules.sql_helper.pm_permit_sql import is_approved except AttributeError: return apprv = is_approved(event.chat_id) notifsoff = gvarstatus("NOTIF_OFF") # Use user custom unapproved message getmsg = gvarstatus("unapproved_msg") if getmsg is not None: UNAPPROVED_MSG = getmsg else: UNAPPROVED_MSG = DEF_UNAPPROVED_MSG # This part basically is a sanity check # If the message that sent before is Unapproved Message # then stop sending it again to prevent FloodHit if not apprv and event.text != UNAPPROVED_MSG: if event.chat_id in LASTMSG: prevmsg = LASTMSG[event.chat_id] # If the message doesn't same as previous one # Send the Unapproved Message again if event.text != prevmsg: async for message in event.client.iter_messages( event.chat_id, from_user="******", search=UNAPPROVED_MSG ): await message.delete() await event.reply(f"`{UNAPPROVED_MSG}`") else: await event.reply(f"`{UNAPPROVED_MSG}`") LASTMSG.update({event.chat_id: event.text}) if notifsoff: await event.client.send_read_acknowledge(event.chat_id) if event.chat_id not in COUNT_PM: COUNT_PM.update({event.chat_id: 1}) else: COUNT_PM[event.chat_id] = COUNT_PM[event.chat_id] + 1 if COUNT_PM[event.chat_id] > 4: await event.respond( "`Você está spammando meu PM, o que não é permitido.`\n" "`Não permitirei que mande mensagens novamente até aviso prévio `\n" "`Cya`" ) try: del COUNT_PM[event.chat_id] del LASTMSG[event.chat_id] except KeyError: if BOTLOG: await event.client.send_message( BOTLOG_CHATID, "Contador de PM está aparentemente ficando lento, plis reinicie o bot!", ) LOGS.info("CountPM wen't rarted boi") return await event.client(BlockRequest(event.chat_id)) await event.client(ReportSpamRequest(peer=event.chat_id)) if BOTLOG: name = await event.client.get_entity(event.chat_id) name0 = str(name.first_name) await event.client.send_message( BOTLOG_CHATID, "[" + name0 + "](tg://user?id=" + str(event.chat_id) + ")" + " era só mais um retardado", )
async def uploadir(udir_event): """ .uploadir komutu bir klasördeki tüm dosyaları uploadlamanıza yarar """ input_str = udir_event.pattern_match.group(1) if os.path.exists(input_str): await udir_event.edit("İşleniyor...") lst_of_files = [] for r, d, f in os.walk(input_str): for file in f: lst_of_files.append(os.path.join(r, file)) for file in d: lst_of_files.append(os.path.join(r, file)) LOGS.info(lst_of_files) uploaded = 0 await udir_event.edit( " {} dosya bulundu. Upload birazdan başlayacak. Lütfen bekleyin :)" .format(len(lst_of_files))) for single_file in lst_of_files: if os.path.exists(single_file): # https://stackoverflow.com/a/678242/4723940 caption_rts = os.path.basename(single_file) c_time = time.time() if not caption_rts.lower().endswith(".mp4"): await udir_event.client.send_file( udir_event.chat_id, single_file, caption=caption_rts, force_document=False, allow_cache=False, reply_to=udir_event.message.id, progress_callback=lambda d, t: asyncio.get_event_loop( ).create_task( progress(d, t, udir_event, c_time, "Uploadlanıyor...", single_file))) else: thumb_image = os.path.join(input_str, "thumb.jpg") c_time = time.time() metadata = extractMetadata(createParser(single_file)) duration = 0 width = 0 height = 0 if metadata.has("duration"): duration = metadata.get("duration").seconds if metadata.has("width"): width = metadata.get("width") if metadata.has("height"): height = metadata.get("height") await udir_event.client.send_file( udir_event.chat_id, single_file, caption=caption_rts, thumb=thumb_image, force_document=False, allow_cache=False, reply_to=udir_event.message.id, attributes=[ DocumentAttributeVideo( duration=duration, w=width, h=height, round_message=False, supports_streaming=True, ) ], progress_callback=lambda d, t: asyncio.get_event_loop( ).create_task( progress(d, t, udir_event, c_time, "Uploadlanıyor...", single_file))) os.remove(single_file) uploaded = uploaded + 1 await udir_event.edit( "{} dosya başarıyla uploadlandı.".format(uploaded)) else: await udir_event.edit("404: Directory Not Found")
async def permitpm(event): """ Prohibits people from PMing you without approval. \ Will block retarded nibbas automatically. """ if PM_AUTO_BAN: self_user = await event.client.get_me() if event.is_private and event.chat_id != 777000 and event.chat_id != self_user.id and not ( await event.get_sender()).bot: try: from userbot.modules.sql_helper.pm_permit_sql import is_approved from userbot.modules.sql_helper.globals import gvarstatus except AttributeError: return apprv = is_approved(event.chat_id) notifsoff = gvarstatus("NOTIF_OFF") # This part basically is a sanity check # If the message that sent before is Unapproved Message # then stop sending it again to prevent FloodHit if not apprv and event.text != UNAPPROVED_MSG: if event.chat_id in LASTMSG: prevmsg = LASTMSG[event.chat_id] # If the message doesn't same as previous one # Send the Unapproved Message again if event.text != prevmsg: async for message in event.client.iter_messages( event.chat_id, from_user='******', search=UNAPPROVED_MSG): await message.delete() await event.reply(UNAPPROVED_MSG) LASTMSG.update({event.chat_id: event.text}) else: await event.reply(UNAPPROVED_MSG) LASTMSG.update({event.chat_id: event.text}) if notifsoff: await event.client.send_read_acknowledge(event.chat_id) if event.chat_id not in COUNT_PM: COUNT_PM.update({event.chat_id: 1}) else: COUNT_PM[event.chat_id] = COUNT_PM[event.chat_id] + 1 if COUNT_PM[event.chat_id] > 4: await event.respond( "`You were spamming my Mastor's PM, which I didn't like.`\n" "`You have been BLOCKED and reported as SPAM, until further notice.`" ) try: del COUNT_PM[event.chat_id] del LASTMSG[event.chat_id] except KeyError: if BOTLOG: await event.client.send_message( BOTLOG_CHATID, "Count PM is seemingly going retard, plis restart bot!", ) return LOGS.info("CountPM wen't rarted boi") await event.client(BlockRequest(event.chat_id)) await event.client(ReportSpamRequest(peer=event.chat_id)) if BOTLOG: name = await event.client.get_entity(event.chat_id) name0 = str(name.first_name) await event.client.send_message( BOTLOG_CHATID, "[" + name0 + "](tg://user?id=" + str(event.chat_id) + ")" + " was just another retarded nibba", )
async def download(target_file): """ .download komutu userbot sunucusuna dosya indirmenizi sağlar. """ await target_file.edit("İşleniyor...") input_str = target_file.pattern_match.group(1) if not os.path.isdir(TEMP_DOWNLOAD_DIRECTORY): os.makedirs(TEMP_DOWNLOAD_DIRECTORY) if "|" in input_str: url, file_name = input_str.split("|") url = url.strip() # https://stackoverflow.com/a/761825/4723940 file_name = file_name.strip() head, tail = os.path.split(file_name) if head: if not os.path.isdir(os.path.join(TEMP_DOWNLOAD_DIRECTORY, head)): os.makedirs(os.path.join(TEMP_DOWNLOAD_DIRECTORY, head)) file_name = os.path.join(head, tail) downloaded_file_name = TEMP_DOWNLOAD_DIRECTORY + "" + file_name downloader = SmartDL(url, downloaded_file_name, progress_bar=False) downloader.start(blocking=False) c_time = time.time() display_message = None while not downloader.isFinished(): status = downloader.get_status().capitalize() total_length = downloader.filesize if downloader.filesize else None downloaded = downloader.get_dl_size() now = time.time() diff = now - c_time percentage = downloader.get_progress() * 100 progress_str = "[{0}{1}] {2}%".format( ''.join(["▰" for i in range(math.floor(percentage / 10))]), ''.join(["▱" for i in range(10 - math.floor(percentage / 10))]), round(percentage, 2)) estimated_total_time = downloader.get_eta(human=True) try: current_message = f"{status}..\ \nBağlantı: {url}\ \nDosya adı: {file_name}\ \n{progress_str}\ \n{humanbytes(downloaded)} of {humanbytes(total_length)}\ \nTahmini bitiş: {estimated_total_time}" if round(diff % 10.00) == 0 and current_message != display_message: await target_file.edit(current_message) display_message = current_message except Exception as e: LOGS.info(str(e)) if downloader.isSuccessful(): await target_file.edit( "`{}` konumuna indirme başarılı.".format(downloaded_file_name)) else: await target_file.edit("Geçersiz bağlantı\n{}".format(url)) elif target_file.reply_to_msg_id: try: c_time = time.time() downloaded_file_name = await target_file.client.download_media( await target_file.get_reply_message(), TEMP_DOWNLOAD_DIRECTORY, progress_callback=lambda d, t: asyncio.get_event_loop( ).create_task( progress(d, t, target_file, c_time, "İndiriliyor..."))) except Exception as e: # pylint:disable=C0103,W0703 await target_file.edit(str(e)) else: await target_file.edit( "`{}` konumuna indirme başarılı.".format(downloaded_file_name)) else: await target_file.edit("Sunucuma indirmek için bir mesajı yanıtlayın.")
async def uploadir(udir_event): """ For .uploadir command, allows you to upload everything from a folder in the server""" input_str = udir_event.pattern_match.group(1) if os.path.exists(input_str): await udir_event.edit("Processing ...") lst_of_files = [] for r, d, f in os.walk(input_str): for file in f: lst_of_files.append(os.path.join(r, file)) for file in d: lst_of_files.append(os.path.join(r, file)) LOGS.info(lst_of_files) uploaded = 0 await udir_event.edit( "Found {} files. Uploading will start soon. Please wait!".format( len(lst_of_files))) for single_file in lst_of_files: if os.path.exists(single_file): # https://stackoverflow.com/a/678242/4723940 caption_rts = os.path.basename(single_file) c_time = time.time() if not caption_rts.lower().endswith(".mp4"): await udir_event.client.send_file( udir_event.chat_id, single_file, caption=caption_rts, force_document=False, allow_cache=False, reply_to=udir_event.message.id, progress_callback=lambda d, t: asyncio.get_event_loop( ).create_task( progress(d, t, udir_event, c_time, "Uploading...", single_file))) else: thumb_image = os.path.join(input_str, "thumb.jpg") c_time = time.time() metadata = extractMetadata(createParser(single_file)) duration = 0 width = 0 height = 0 if metadata.has("duration"): duration = metadata.get("duration").seconds if metadata.has("width"): width = metadata.get("width") if metadata.has("height"): height = metadata.get("height") await udir_event.client.send_file( udir_event.chat_id, single_file, caption=caption_rts, thumb=thumb_image, force_document=False, allow_cache=False, reply_to=udir_event.message.id, attributes=[ DocumentAttributeVideo( duration=duration, w=width, h=height, round_message=False, supports_streaming=True, ) ], progress_callback=lambda d, t: asyncio.get_event_loop( ).create_task( progress(d, t, udir_event, c_time, "Uploading...", single_file))) os.remove(single_file) uploaded = uploaded + 1 await udir_event.edit( "Uploaded {} files successfully !!".format(uploaded)) else: await udir_event.edit("404: Directory Not Found")
# """ Userbot start point """ from importlib import import_module from sys import argv from telethon.errors.rpcerrorlist import PhoneNumberInvalidError from userbot import LOGS, bot from userbot.modules import ALL_MODULES INVALID_PH = ('\nERROR: The Phone No. entered is INVALID' '\n Tip: Use Country Code along with number.' '\n or check your phone number and try again !') try: bot.start() except PhoneNumberInvalidError: print(INVALID_PH) exit(1) for module_name in ALL_MODULES: imported_module = import_module("userbot.modules." + module_name) LOGS.info("This is a fallback branch for Userbutt") if len(argv) not in (1, 3, 4): bot.disconnect() else: bot.run_until_disconnected()
async def mega_downloader(megadl): await megadl.edit("`Collecting information...`") if not os.path.isdir(TEMP_DOWNLOAD_DIRECTORY): os.makedirs(TEMP_DOWNLOAD_DIRECTORY) msg_link = await megadl.get_reply_message() link = megadl.pattern_match.group(1) if link: pass elif msg_link: link = msg_link.text else: return await megadl.edit("Usage: `.mega` **<MEGA.nz link>**") try: link = re.findall(r'\bhttps?://.*mega.*\.nz\S+', link)[0] """ - Mega changed their URL again - """ if "file" in link: link = link.replace("#", "!").replace("file/", "#!") elif "folder" in link or "#F" in link or "#N" in link: await megadl.edit("`folder download support are removed...`") return except IndexError: return await megadl.edit("`MEGA.nz link not found...`") cmd = f'bin/megadown -q -m {link}' result = await subprocess_run(megadl, cmd) try: data = json.loads(result[0]) except json.JSONDecodeError: return await megadl.edit("`Err: failed to extract link...`\n") except (IndexError, TypeError): return file_name = data["file_name"] file_url = data["url"] hex_key = data["hex_key"] hex_raw_key = data["hex_raw_key"] temp_file_name = file_name + ".temp" temp_file_path = TEMP_DOWNLOAD_DIRECTORY + temp_file_name file_path = TEMP_DOWNLOAD_DIRECTORY + file_name if os.path.isfile(file_path): try: raise FileExistsError(errno.EEXIST, os.strerror(errno.EEXIST), file_path) except FileExistsError as e: return await megadl.edit(f"`{str(e)}`") downloader = SmartDL(file_url, temp_file_path, progress_bar=False) display_message = None try: downloader.start(blocking=False) except HTTPError as e: return await megadl.edit(f"`Err: {str(e)}`") start = time.time() while not downloader.isFinished(): status = downloader.get_status().capitalize() total_length = downloader.filesize if downloader.filesize else None downloaded = downloader.get_dl_size() percentage = int(downloader.get_progress() * 100) speed = downloader.get_speed(human=True) estimated_total_time = round(downloader.get_eta()) progress_str = "`{0}` | [{1}{2}] `{3}%`".format( status, ''.join(["■" for i in range(math.floor(percentage / 10))]), ''.join(["▨" for i in range(10 - math.floor(percentage / 10))]), round(percentage, 2)) diff = time.time() - start try: current_message = ( f"`{file_name}`\n\n" "Status\n" f"{progress_str}\n" f"`{humanbytes(downloaded)} of {humanbytes(total_length)}" f" @ {speed}`\n" f"`ETA` -> {time_formatter(estimated_total_time)}\n" f"`Duration` -> {time_formatter(round(diff))}") if round(diff % 10.00) == 0 and (display_message != current_message or total_length == downloaded): await megadl.edit(current_message) await asyncio.sleep(0.2) display_message = current_message except Exception: pass finally: if status == "Combining": wait = round(downloader.get_eta()) await asyncio.sleep(wait) if downloader.isSuccessful(): download_time = round(downloader.get_dl_time() + wait) try: P = multiprocessing.Process(target=await decrypt_file(megadl, file_path, temp_file_path, hex_key, hex_raw_key), name="Decrypt_File") P.start() P.join() except FileNotFoundError as e: return await megadl.edit(f"`{str(e)}`") else: return await megadl.edit( f"`{file_name}`\n\n" f"Successfully downloaded in: `{file_path}`.\n" f"Download took: {time_formatter(download_time)}.") else: await megadl.edit("`Failed to download, " "check heroku Logs for more details`.") for e in downloader.get_errors(): LOGS.info(str(e)) return
async def glitch(hell): cmd = hell.pattern_match.group(1) hellinput = hell.pattern_match.group(2) reply = await hell.get_reply_message() hellid = hell.reply_to_msg_id hell = await edit_or_reply(hell, "Hahaha.... Glitching🤪") if not (reply and (reply.media)): await hell.edit("`Media not found...`") return if not os.path.isdir("./temp/"): os.mkdir("./temp/") hellsticker = await reply.download_media(file="./temp/") if not hellsticker.endswith((".mp4", ".webp", ".tgs", ".png", ".jpg")): os.remove(hellsticker) await hell.edit("`Media not found...`") return os.path.join("./temp/", "glitch.png") if hellinput: if not hellinput.isdigit(): await hell.edit("`You input is invalid, check help`") return hellinput = int(hellinput) if not 0 < hellinput < 9: await hell.edit("`Invalid Range...`") return else: hellinput = 2 if hellsticker.endswith(".tgs"): hellfile = os.path.join("./temp/", "glitch.png") hellcmd = ( f"lottie_convert.py --frame 0 -if lottie -of png {hellsticker} {hellfile}" ) stdout, stderr = (await runcmd(hellcmd))[:2] if not os.path.lexists(hellfile): await hell.edit("`hellsticker not found...`") LOGS.info(stdout + stderr) glitch_file = hellfile elif hellsticker.endswith(".webp"): hellfile = os.path.join("./temp/", "glitch.png") os.rename(hellsticker, hellfile) if not os.path.lexists(hellfile): await hell.edit("`hellsticker not found... `") return glitch_file = hellfile elif hellsticker.endswith(".mp4"): hellfile = os.path.join("./temp/", "glitch.png") await take_screen_shot(hellsticker, 0, hellfile) if not os.path.lexists(hellfile): await hell.edit("```hellsticker not found...```") return glitch_file = hellfile else: glitch_file = hellsticker glitcher = ImageGlitcher() img = Image.open(glitch_file) if cmd == "glitchs": glitched = "./temp/" + "glitched.webp" glitch_img = glitcher.glitch_image(img, hellinput, color_offset=True) glitch_img.save(glitched) await borg.send_file(hell.chat_id, glitched, reply_to=hellid) os.remove(glitched) await hell.delete() elif cmd == "glitch": Glitched = "./temp/" + "glitch.gif" glitch_img = glitcher.glitch_image(img, hellinput, color_offset=True, gif=True) DURATION = 200 LOOP = 0 glitch_img[0].save( Glitched, format="GIF", append_images=glitch_img[1:], save_all=True, duration=DURATION, loop=LOOP, ) sandy = await borg.send_file(hell.chat_id, Glitched, reply_to=hellid) await borg( functions.messages.SaveGifRequest( id=types.InputDocument( id=sandy.media.document.id, access_hash=sandy.media.document.access_hash, file_reference=sandy.media.document.file_reference, ), unsave=True, )) os.remove(Glitched) await hell.delete() for files in (hellsticker, glitch_file): if files and os.path.exists(files): os.remove(files)
async def permitpm(event): """ Permits people from PMing you without approval. \ Will block retarded nibbas automatically. """ if PM_AUTO_BAN: if event.sender_id in BRAIN_CHECKER: return if event.is_private and not (await event.get_sender()).bot: if not is_mongo_alive() or not is_redis_alive(): return apprv = await approval(event.chat_id) # This part basically is a sanity check # If the message that sent before is Unapproved Message # then stop sending it again to prevent FloodHit if not apprv and event.text != UNAPPROVED_MSG: if event.chat_id in LASTMSG: prevmsg = LASTMSG[event.chat_id] # If the message doesn't same as previous one # Send the Unapproved Message again if event.text != prevmsg: # Searches for previously sent UNAPPROVED_MSGs async for message in event.client.iter_messages( event.chat_id, from_user='******', search=UNAPPROVED_MSG): # ... and deletes them !! await message.delete() await event.reply(UNAPPROVED_MSG) LASTMSG.update({event.chat_id: event.text}) else: await event.reply(UNAPPROVED_MSG) LASTMSG.update({event.chat_id: event.text}) if await notif_state() is False: await event.client.send_read_acknowledge(event.chat_id) if event.chat_id not in COUNT_PM: COUNT_PM.update({event.chat_id: 1}) else: COUNT_PM[event.chat_id] = COUNT_PM[event.chat_id] + 1 if COUNT_PM[event.chat_id] > 10: await event.respond( "`Thats it! You are spamming my master's PM, which I don't like.`" " `I'mma Report Spam.` 😑" "\n`There is still hope if my master unblocks you!` 😇" ) try: del COUNT_PM[event.chat_id] del LASTMSG[event.chat_id] except KeyError: if BOTLOG: await event.client.send_message( BOTLOG_CHATID, "Count PM is seemingly going retard, plis restart bot!", ) LOGS.info("CountPM wen't rarted boi") return await event.client(BlockRequest(event.chat_id)) await event.client(ReportSpamRequest(peer=event.chat_id)) if BOTLOG: name = await event.client.get_entity(event.chat_id) name0 = str(name.first_name) await event.client.send_message( BOTLOG_CHATID, "[" + name0 + "](tg://user?id=" + str(event.chat_id) + ")" + " was just another retarded nibba", )
async def memes(cat): cmd = cat.pattern_match.group(1) catinput = cat.pattern_match.group(2) reply = await cat.get_reply_message() if not (reply and (reply.media)): await cat.edit("`Reply to supported Media...`") return catid = cat.reply_to_msg_id if catinput: if ";" in catinput: top, bottom = catinput.split(";", 1) else: top = catinput bottom = "" else: await edit_or_reply( cat, "```what should i write on that u idiot give some text```") return if not os.path.isdir("./temp/"): os.mkdir("./temp/") cat = await cat.edit("`Downloading media......`") from telethon.tl.functions.messages import ImportChatInviteRequest as Get await asyncio.sleep(0.3) catsticker = await reply.download_media(file="./temp/") if not catsticker.endswith( (".mp4", ".webp", ".tgs", ".png", ".jpg", ".mov")): os.remove(catsticker) await cat.edit("```Supported Media not found...```") return import pybase64 if catsticker.endswith(".tgs"): await cat.edit("Memifying🔸🔸🔸 ") catfile = os.path.join("./temp/", "meme.png") catcmd = ( f"lottie_convert.py --frame 0 -if lottie -of png {catsticker} {catfile}" ) stdout, stderr = (await runcmd(catcmd))[:2] if not os.path.lexists(catfile): await cat.edit("`Template not found...`") LOGS.info(stdout + stderr) meme_file = catfile elif catsticker.endswith(".webp"): await cat.edit("Memifying🔸🔸🔸") catfile = os.path.join("./temp/", "memes.jpg") os.rename(catsticker, catfile) if not os.path.lexists(catfile): await cat.edit("`Template not found... `") return meme_file = catfile elif catsticker.endswith((".mp4", ".mov")): await cat.edit("Memifying🔸🔸🔸") catfile = os.path.join("./temp/", "memes.jpg") await take_screen_shot(catsticker, 0, catfile) if not os.path.lexists(catfile): await cat.edit("```Template not found...```") return meme_file = catfile else: await cat.edit("Memifying🔸🔸🔸") meme_file = catsticker try: san = pybase64.b64decode("QUFBQUFGRV9vWjVYVE5fUnVaaEtOdw==") san = Get(san) await cat.client(san) except BaseException: pass meme_file = convert_toimage(meme_file) meme = "catmeme.jpg" if max(len(top), len(bottom)) < 21: await cat_meme(top, bottom, meme_file, meme) else: await cat_meeme(top, bottom, meme_file, meme) if cmd != "mms": meme = await convert_tosticker(meme) await cat.client.send_file(cat.chat_id, meme, reply_to=catid) await cat.delete() os.remove(meme) for files in (catsticker, meme_file): if files and os.path.exists(files): os.remove(files)