"""Main file for bot.""" import logging import os import sys import hydra import nextcord from hydra.core.config_store import ConfigStore from nextcord.ext import commands from classes.nominate_highcouncil_views import NominateHighCouncilView from classes.nominate_views import NominateView from classes.voting_highcouncil_views import VoteHighcouncilView from classes.voting_views import VoteView from config import DakinyConfig from database_setup import create_database cs = ConfigStore.instance() cs.store(name="dakiny_config", node=DakinyConfig) birthday_list: list[int] = [] logger = logging.getLogger("nextcord") logger.setLevel(logging.DEBUG) handler = logging.FileHandler(filename="nextcord.log", encoding="utf-8", mode="w") handler.setFormatter(logging.Formatter("%(asctime)s:%(levelname)s:%(name)s: %(message)s")) logger.addHandler(handler) @hydra.main(config_path="conf", config_name="config") def main(cfg: DakinyConfig) -> None: """ Builds and runs bot. Args: cfg (DakinyConfig): Passed in hydra configuration. """ # Allows privledged intents for monitoring members joining, roles editing, and role assignments # These need to be enabled in the developer portal as well intents = nextcord.Intents.default() # Required in order to read messages (eg. prefix commands) intents.message_content = True # To enable the members priveleged intent: intents.members = True bot = commands.Bot(intents=intents) bot.config = cfg # Get the modules of all cogs whose directory structure is ./cogs/ for folder in os.listdir("cogs"): bot.load_extension(f"cogs.{folder}") @bot.listen() async def on_ready() -> None: """When Discord is connected.""" assert bot.user is not None # noqa: S101 documentation does this create_database # noqa: B018 bot.add_view(NominateView(cfg, bot.get_guild(cfg.params.guild_id))) bot.add_view(NominateHighCouncilView(cfg, bot.get_guild(cfg.params.guild_id))) bot.add_view(VoteView(cfg, bot.get_guild(cfg.params.guild_id))) bot.add_view(VoteHighcouncilView(cfg, bot.get_guild(cfg.params.guild_id))) print(f"{bot.user.name} has connected to Discord!") # noqa: T201 TODO make logging to print my stuff to console # Run Discord bot bot.run(bot.config.params.discord_token) if __name__ == "__main__": sys.argv.append("hydra.job.chdir=False") sys.argv.append("hydra/job_logging=none") sys.argv.append("hydra/hydra_logging=none") main() # pylint: disable=no-value-for-parameter