managementbot / Powers /__init__.py
Captain Ezio
Fixed bug related to support user
83fe5dc
raw
history blame
5.94 kB
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"
)