discord-havoc/disc_havoc.py

104 lines
2.4 KiB
Python
Raw Permalink Normal View History

2025-02-13 14:51:35 -05:00
import os
import logging
import importlib
2025-02-13 15:48:39 -05:00
from typing import Optional
2025-02-13 14:51:35 -05:00
import discord
import setproctitle
import hypercorn
import hypercorn.asyncio
from dotenv import load_dotenv
2025-02-15 08:36:45 -05:00
from asyncio import Task
2025-02-13 14:51:35 -05:00
from discord.ext import bridge, commands
from termcolor import colored
2025-02-13 15:48:39 -05:00
from constants import OWNERS, BOT_CHANIDS
2025-02-13 14:51:35 -05:00
import api
2025-04-17 14:35:56 -04:00
logging.basicConfig(
level=logging.INFO, format="%(asctime)s %(message)s", encoding="utf-8"
)
setproctitle.setproctitle("disc-havoc")
2025-02-13 14:51:35 -05:00
2025-02-13 15:48:39 -05:00
"""Auto Load Cogs"""
cogs_list: list[str] = [
2025-04-17 14:35:56 -04:00
"misc",
"owner",
"sing",
"meme",
"karma",
"lovehate",
"radio",
2025-02-13 14:51:35 -05:00
]
bot_activity = discord.CustomActivity(name="I made cookies!")
load_dotenv()
intents = discord.Intents.all()
intents.message_content = True
2025-04-17 14:35:56 -04:00
2025-02-15 08:36:45 -05:00
class Havoc(bridge.Bot):
def __init__(self) -> None:
2025-04-17 14:35:56 -04:00
super().__init__(
command_prefix=".",
intents=intents,
owner_ids=OWNERS,
activity=bot_activity,
help_command=commands.MinimalHelpCommand(),
)
2025-02-15 08:36:45 -05:00
self.BOT_CHANIDS = BOT_CHANIDS
2025-02-15 13:57:47 -05:00
self.load_exts()
2025-02-15 08:36:45 -05:00
def load_exts(self, initialRun: Optional[bool] = True) -> None:
"""
Load Cogs/Extensions
2025-04-17 14:35:56 -04:00
Args:
2025-02-15 08:36:45 -05:00
initialRun (Optional[bool]) default: True
Returns:
2025-02-16 20:07:02 -05:00
None
"""
2025-04-17 14:35:56 -04:00
load_method = self.load_extension if initialRun else self.reload_extension
2025-02-13 14:51:35 -05:00
2025-02-15 08:36:45 -05:00
for cog in cogs_list:
logging.info("Loading: %s", cog)
2025-04-17 14:35:56 -04:00
load_method(f"cogs.{cog}")
2025-02-13 14:51:35 -05:00
2025-02-15 08:36:45 -05:00
importlib.reload(api)
2025-04-17 14:35:56 -04:00
from api import API
2025-02-15 08:36:45 -05:00
api_config = hypercorn.config.Config()
2025-04-17 14:35:56 -04:00
api_config.bind = ["127.0.0.1:5992"]
2025-02-15 08:36:45 -05:00
api_instance = api.API(self)
2025-04-17 14:35:56 -04:00
try:
2025-02-15 08:36:45 -05:00
self.fapi_task.cancel()
except Exception as e:
2025-04-17 14:35:56 -04:00
logging.debug("Failed to cancel fapi_task: %s", str(e))
2025-02-15 08:36:45 -05:00
logging.info("Starting FAPI Task")
2025-02-13 14:51:35 -05:00
2025-04-17 14:35:56 -04:00
self.fapi_task: Task = self.loop.create_task(
hypercorn.asyncio.serve(api_instance.api_app, api_config)
)
2025-02-13 14:51:35 -05:00
2025-02-15 08:36:45 -05:00
@commands.Cog.listener()
async def on_ready(self) -> None:
"""Run on Bot Ready"""
2025-04-17 14:35:56 -04:00
logging.info("%s online!", self.user)
2025-02-15 08:36:45 -05:00
2025-02-13 15:48:39 -05:00
def __init__() -> None:
2025-04-17 14:35:56 -04:00
logging.info(
colored(
f"Log level: {logging.getLevelName(logging.root.level)}",
"red",
attrs=["reverse"],
)
)
2025-02-15 08:36:45 -05:00
bot = Havoc()
2025-04-17 14:35:56 -04:00
bot.run(os.getenv("TOKEN"))
2025-02-13 14:51:35 -05:00
if __name__ == "__main__":
2025-04-17 14:35:56 -04:00
__init__()