Some checks failed
CD / Deploy to VPS (push) Has been cancelled
86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
import discord
|
|
from discord.ext import bridge
|
|
# from cogs.birthday import BirthdayCog
|
|
# from cogs.productivity import ProductivityCog
|
|
from cogs.cs import CSCog
|
|
from cogs.insult import InsultsCog
|
|
from cogs.roulette import RouletteCog
|
|
from setup.logger import LOGGER
|
|
|
|
bot_intents = discord.Intents.default()
|
|
bot_intents.message_content = True
|
|
bot_intents.members = True
|
|
bot_intents.presences = True
|
|
bot_intents.guilds = True
|
|
bot_intents.reactions = True
|
|
|
|
bot = bridge.Bot(command_prefix='$', intents=bot_intents)
|
|
|
|
COG_REGISTRY = {
|
|
'cs': CSCog,
|
|
'insult': InsultsCog,
|
|
'roulette': RouletteCog
|
|
}
|
|
|
|
|
|
def _normalize_cog_names(cogs=None):
|
|
if cogs is None:
|
|
return list(COG_REGISTRY.keys())
|
|
|
|
if isinstance(cogs, str):
|
|
cogs = [cogs]
|
|
|
|
selected_cogs = []
|
|
for cog_name in cogs:
|
|
name = str(cog_name).strip().lower()
|
|
if not name:
|
|
continue
|
|
if name in {'all', '*'}:
|
|
return list(COG_REGISTRY.keys())
|
|
if name in COG_REGISTRY:
|
|
selected_cogs.append(name)
|
|
else:
|
|
LOGGER.warning("Unknown cog '%s'. Available cogs: %s", cog_name, ', '.join(COG_REGISTRY.keys()))
|
|
|
|
return list(dict.fromkeys(selected_cogs))
|
|
|
|
|
|
def register_cogs(cogs=None):
|
|
selected_cogs = _normalize_cog_names(cogs)
|
|
|
|
existing_cog_names = set(COG_REGISTRY.values())
|
|
for existing_name in list(bot.cogs.keys()):
|
|
if existing_name in {cog_class.__name__ for cog_class in existing_cog_names}:
|
|
bot.remove_cog(existing_name)
|
|
|
|
for cog_name in selected_cogs:
|
|
cog_class = COG_REGISTRY[cog_name]
|
|
bot.add_cog(cog_class(bot))
|
|
|
|
return selected_cogs
|
|
|
|
|
|
|
|
def reload_feature(feature: str):
|
|
normalized_feature = str(feature).strip().lower()
|
|
LOGGER.debug(bot.cogs)
|
|
|
|
if normalized_feature in {'all', '*'}:
|
|
register_cogs()
|
|
LOGGER.debug('All cogs reloaded!')
|
|
return
|
|
|
|
if normalized_feature not in COG_REGISTRY:
|
|
LOGGER.warning("Unknown cog '%s'. Available cogs: %s", feature, ', '.join(COG_REGISTRY.keys()))
|
|
return
|
|
|
|
LOGGER.debug(f'Reloading {feature}...')
|
|
target_cog_name = COG_REGISTRY[normalized_feature].__name__
|
|
for existing_name in list(bot.cogs.keys()):
|
|
if existing_name == target_cog_name:
|
|
bot.remove_cog(existing_name)
|
|
break
|
|
|
|
bot.add_cog(COG_REGISTRY[normalized_feature](bot))
|
|
LOGGER.debug(f'{feature} reloaded!')
|