Files
TuneBot/bot.py
T
2021-10-31 11:23:54 +01:00

85 lines
2.7 KiB
Python

import discord
from discord.colour import Color
from discord.ext import commands
import sys
import json
from typing import Any, Dict, List, Sequence
from discord import Message
from discord.ext.commands.errors import (
ExtensionAlreadyLoaded,
ExtensionFailed,
ExtensionNotFound,
NoEntryPointError,
)
class ChristmasBot(commands.Bot):
def __init__(self, config: Dict[Any, Any]):
intents = discord.Intents(
voice_states=True, guild_messages=True, guilds=True, messages=True
)
self.config = config
self.initial_cog_names: List[str] = self.config.get("cogs", [])
self.colors: Dict[str, Color] = self.process_colours(config.get("colors", []))
self.invite_link: str = ""
super().__init__(
command_prefix=self.prefix_callable,
description=self.config["info"].get("description", ""),
case_insensitive=False,
fetch_offline_members=False,
intents=intents,
slash_commands=True,
slash_command_guilds=[227431704426446848],
)
self.loop.create_task(self.async_init())
async def async_init(self):
await self.load_cogs(self.initial_cog_names)
async def prefix_callable(self, _, msg: Message) -> List[str]:
return commands.when_mentioned_or(*self.config["prefixes"])(self, msg)
async def load_cogs(self, cog_names: Sequence[str]):
for cog in cog_names:
try:
self.load_extension(cog)
print(f"Succesfully loaded extension {cog}.")
except (
ExtensionNotFound,
ExtensionAlreadyLoaded,
NoEntryPointError,
ExtensionFailed,
) as e:
print(f"Failed to load extension {cog}.\n\t{e}", file=sys.stderr)
async def on_ready(self):
self.invite_link = f"https://discord.com/oauth2/authorize?client_id={self.user.id}&permissions=3230720&scope=bot%20applications.commands"
print(f"Logged in as: {self.user}")
print(f"Version: {discord.__version__}")
print(f"Invite: {self.invite_link}")
def process_colours(self, colors: Dict[str, str]) -> Dict[str, Color]:
colour_dict: Dict[str, Color] = {}
for name, color in colors.items():
colour_dict[name] = Color(int(color, 16))
return colour_dict
if __name__ == "__main__":
try:
import uvloop
uvloop.install()
print("Succesfully initialized uvloop")
except ModuleNotFoundError:
pass
config = json.load(open("config.json", "r", encoding="utf-8"))
token = config.pop("token")
ChristmasBot(config).run(token, reconnect=True)