commit 889d15f05b27693aeafdb67309a775622510449e Author: yrigaudeau Date: Sun Apr 23 17:38:19 2023 +0200 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5db59f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__ +config.toml diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2fe1eed --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}", + "console": "integratedTerminal", + "justMyCode": true + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b7368ca --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.formatting.provider": "black" +} diff --git a/__main__.py b/__main__.py new file mode 100644 index 0000000..7f2e5df --- /dev/null +++ b/__main__.py @@ -0,0 +1,30 @@ +from toml import TomlDecodeError +from discord import Bot, Intents + +from config import Config +from logger import LoggerGetter +from cogs.misc import Greetings + + +if __name__ == "__main__": + # Read Config + try: + config = Config("config.toml") + print(config) + except KeyError as error: + print("Config/KeyError : %s" % error) + exit(1) + except TomlDecodeError as error: + print("Config/DecodeError : %s" % error) + exit(2) + + # Set Logger + logger = LoggerGetter(config.logging)() + + # Bot + intents = Intents.default() + bot = Bot(intents=intents) + + bot.add_cog(Greetings(bot, logger)) + + bot.run(config.discord.token) diff --git a/cogs/misc.py b/cogs/misc.py new file mode 100644 index 0000000..5648aec --- /dev/null +++ b/cogs/misc.py @@ -0,0 +1,16 @@ +from discord import Member, Bot, Cog, ApplicationContext +from discord.commands import slash_command +from logging import Logger + + +class Greetings(Cog): + def __init__(self, bot: Bot, logger: Logger): + self.bot = bot + self.logger = logger + + @slash_command(name="hello") + async def hello(self, context: ApplicationContext, *, member: Member = None): + self.logger.info("Say Hello") + + member = member or context.author + await context.send(f"Hello {member.name}~") diff --git a/config.py b/config.py new file mode 100644 index 0000000..d013fda --- /dev/null +++ b/config.py @@ -0,0 +1,21 @@ +import toml + + +class DiscordConfig(): + def __init__(self, discord_config: any) -> None: + self.token: str = discord_config["token"] + + +class LoggingConfig(): + def __init__(self, logging_config: any) -> None: + self.level: str = logging_config["level"] + + +class Config(): + def __init__(self, config_path: str) -> None: + self._config = toml.load(config_path) + self.discord = DiscordConfig(self._config["discord"]) + self.logging = LoggingConfig(self._config["logging"]) + + def __str__(self) -> str: + return str(self._config) diff --git a/logger.py b/logger.py new file mode 100644 index 0000000..8c25afd --- /dev/null +++ b/logger.py @@ -0,0 +1,19 @@ +import logging +from logging import Logger +import sys + +from config import LoggingConfig + + +class LoggerGetter: + def __init__(self, config: LoggingConfig) -> None: + self._logger = logging.getLogger("discord") + self._logger.setLevel(config.level) + handler = logging.StreamHandler(sys.stdout) + handler.setFormatter( + logging.Formatter("%(asctime)s:%(levelname)s:%(name)s: %(message)s") + ) + self._logger.addHandler(handler) + + def __call__(self) -> Logger: + return self._logger diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ab9d428 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +py-cord==2.4.1 +PyNaCl==1.5.0 +toml==0.10.2