Spaces:
Sleeping
Sleeping
import shutil | |
from datetime import datetime | |
from importlib import import_module as imp_mod | |
from logging import (INFO, WARNING, FileHandler, StreamHandler, basicConfig, | |
getLogger) | |
from os import environ, listdir, mkdir, path | |
from platform import python_version | |
from sys import exit as sysexit | |
from sys import stdout, version_info | |
from time import time | |
from traceback import format_exc | |
import lyricsgenius | |
import pyrogram | |
import pytz | |
from apscheduler.schedulers.asyncio import AsyncIOScheduler | |
LOG_DATETIME = datetime.now().strftime("%d_%m_%Y-%H_%M_%S") | |
LOGDIR = f"{__name__}/logs" | |
if path.isdir(LOGDIR): | |
shutil.rmtree(LOGDIR) | |
mkdir(LOGDIR) | |
LOGFILE = f"{LOGDIR}/{__name__}_{LOG_DATETIME}_log.txt" | |
file_handler = FileHandler(filename=LOGFILE) | |
stdout_handler = StreamHandler(stdout) | |
basicConfig( | |
format="%(asctime)s - [Gojo_Satoru] - %(levelname)s - %(message)s", | |
level=INFO, | |
handlers=[file_handler, stdout_handler], | |
) | |
getLogger("pyrogram").setLevel(WARNING) | |
LOGGER = getLogger(__name__) | |
# if version < 3.9, stop bot. | |
if version_info[0] < 3 or version_info[1] < 7: | |
LOGGER.error( | |
( | |
"You MUST have a Python Version of at least 3.7!\n" | |
"Multiple features depend on this. Bot quitting." | |
), | |
) | |
sysexit(1) # Quit the Script | |
# the secret configuration specific things | |
try: | |
from Powers.vars import is_env | |
if is_env or environ.get("ENV"): | |
from Powers.vars import Config | |
else: | |
from Powers.vars import Development as Config | |
except Exception as ef: | |
LOGGER.error(ef) # Print Error | |
LOGGER.error(format_exc()) | |
sysexit(1) | |
# time zone | |
TIME_ZONE = pytz.timezone(Config.TIME_ZONE) | |
Vpath = "./Version" | |
version = [ | |
i for i in listdir(Vpath) if i.startswith("version") and i.endswith("md") | |
] | |
VERSION = sorted(version)[-1][8:-3] | |
PYTHON_VERSION = python_version() | |
PYROGRAM_VERSION = pyrogram.__version__ | |
LOGGER.info("------------------------") | |
LOGGER.info("| Gojo_Satoru |") | |
LOGGER.info("------------------------") | |
LOGGER.info(f"Version: {VERSION}") | |
LOGGER.info(f"Owner: {str(Config.OWNER_ID)}") | |
LOGGER.info(f"Time zone set to {Config.TIME_ZONE}") | |
LOGGER.info("Source Code: https://github.com/Gojo-Bots/Gojo_Satoru\n") | |
LOGGER.info("Checking lyrics genius api...") | |
# API based clients | |
if Config.GENIUS_API_TOKEN: | |
LOGGER.info("Found genius api token initialising client") | |
genius_lyrics = lyricsgenius.Genius( | |
Config.GENIUS_API_TOKEN, | |
skip_non_songs=True, | |
excluded_terms=["(Remix)", "(Live)"], | |
remove_section_headers=True, | |
) | |
is_genius_lyrics = True | |
genius_lyrics.verbose = False | |
LOGGER.info("Client setup complete") | |
else: | |
LOGGER.info("Genius api not found lyrics command will not work") | |
is_genius_lyrics = False | |
genius_lyrics = False | |
# is_audd = False | |
# Audd = None | |
# if Config.AuDD_API: | |
# is_audd = True | |
# Audd = Config.AuDD_API | |
# LOGGER.info("Found Audd api") | |
is_rmbg = False | |
RMBG = None | |
if Config.RMBG_API: | |
is_rmbg = True | |
RMBG = Config.RMBG_API | |
# Account Related | |
BOT_TOKEN = Config.BOT_TOKEN | |
API_ID = Config.API_ID | |
API_HASH = Config.API_HASH | |
# General Config | |
MESSAGE_DUMP = Config.MESSAGE_DUMP or Config.OWNER_ID | |
SUPPORT_GROUP = Config.SUPPORT_GROUP | |
SUPPORT_CHANNEL = Config.SUPPORT_CHANNEL | |
# Users Config | |
OWNER_ID = Config.OWNER_ID | |
SUPPORT_USERS = {"Owner": [Config.OWNER_ID], "Dev": set(Config.DEV_USERS), "Sudo": set(Config.SUDO_USERS), "White": set(Config.WHITELIST_USERS)} | |
# Plugins, DB and Workers | |
DB_URI = Config.DB_URI | |
DB_NAME = Config.DB_NAME | |
NO_LOAD = Config.NO_LOAD | |
WORKERS = Config.WORKERS | |
BDB_URI = Config.BDB_URI | |
# Prefixes | |
PREFIX_HANDLER = Config.PREFIX_HANDLER | |
HELP_COMMANDS = {} # For help menu | |
UPTIME = time() # Check bot uptime | |
# Make dir | |
youtube_dir = "./Youtube/" | |
if path.isdir(youtube_dir): | |
shutil.rmtree(youtube_dir) | |
mkdir(youtube_dir) | |
scrap_dir = "./scrapped/" | |
if path.isdir(scrap_dir): | |
shutil.rmtree(scrap_dir) | |
mkdir(scrap_dir) | |
scheduler = AsyncIOScheduler(timezone=TIME_ZONE) | |
async def load_cmds(all_plugins): | |
"""Loads all the plugins in bot.""" | |
for single in all_plugins: | |
# If plugin in NO_LOAD, skip the plugin | |
if single.lower() in [i.lower() for i in Config.NO_LOAD]: | |
LOGGER.warning( | |
f"Not loading '{single}' s it's added in NO_LOAD list") | |
continue | |
imported_module = imp_mod(f"Powers.plugins.{single}") | |
if not hasattr(imported_module, "__PLUGIN__"): | |
continue | |
plugin_name = imported_module.__PLUGIN__.lower() | |
plugin_dict_name = f"plugins.{plugin_name}" | |
plugin_help = imported_module.__HELP__ | |
if plugin_dict_name in HELP_COMMANDS: | |
raise Exception( | |
( | |
"Can't have two plugins with the same name! Please change one\n" | |
f"Error while importing '{imported_module.__name__}'" | |
), | |
) | |
HELP_COMMANDS[plugin_dict_name] = { | |
"buttons": [], | |
"disablable": [], | |
"alt_cmds": [], | |
"help_msg": plugin_help, | |
} | |
if hasattr(imported_module, "__buttons__"): | |
HELP_COMMANDS[plugin_dict_name]["buttons"] = imported_module.__buttons__ | |
if hasattr(imported_module, "_DISABLE_CMDS_"): | |
HELP_COMMANDS[plugin_dict_name][ | |
"disablable" | |
] = imported_module._DISABLE_CMDS_ | |
if hasattr(imported_module, "__alt_name__"): | |
HELP_COMMANDS[plugin_dict_name]["alt_cmds"] = imported_module.__alt_name__ | |
# Add the plugin name to cmd list | |
(HELP_COMMANDS[plugin_dict_name]["alt_cmds"]).append(plugin_name) | |
if NO_LOAD: | |
LOGGER.warning(f"Not loading Plugins - {NO_LOAD}") | |
return ( | |
", ".join((i.split(".")[1]).capitalize() | |
for i in list(HELP_COMMANDS.keys())) | |
+ "\n" | |
) | |