diff --git a/nise-discord/.dockerignore b/nise-discord/.dockerignore new file mode 100644 index 0000000..77ec066 --- /dev/null +++ b/nise-discord/.dockerignore @@ -0,0 +1,11 @@ +venv/ +.idea/ +*.pyc +*.log +.git/ +.pytest_cache/ +cache/ +.env +image.png +text_image.png +modified_prefectures.svg \ No newline at end of file diff --git a/nise-discord/Build.sh b/nise-discord/Build.sh new file mode 100755 index 0000000..43926c7 --- /dev/null +++ b/nise-discord/Build.sh @@ -0,0 +1,2 @@ +docker build . -t git.gengo.tech/nuff/nise-discord:latest +docker push git.gengo.tech/nuff/nise-discord:latest \ No newline at end of file diff --git a/nise-discord/Dockerfile b/nise-discord/Dockerfile new file mode 100644 index 0000000..923de72 --- /dev/null +++ b/nise-discord/Dockerfile @@ -0,0 +1,22 @@ +# Use the specified Python base image +FROM python:3.11-slim + +ENV version=2 + +# Set a working directory +WORKDIR /app + +RUN apt update + +# Copy only the requirements.txt file first to leverage Docker cache +COPY requirements.txt ./requirements.txt + +# Upgrade pip and install required python packages +RUN pip3 install --upgrade pip && \ + pip3 install -r requirements.txt + +# Copy only the src directory, if you're sure all your code resides there +COPY . ./src/ + +# Set the command to run your application +CMD ["python", "src/bot.py"] \ No newline at end of file diff --git a/nise-discord/bot.py b/nise-discord/bot.py new file mode 100644 index 0000000..725a4bd --- /dev/null +++ b/nise-discord/bot.py @@ -0,0 +1,79 @@ +import asyncio +import logging +import os +import sys + +import discord +from discord.ext import commands + + +def setup_logging() -> None: + logging.getLogger("discord").setLevel(logging.INFO) + logging.getLogger("discord.http").setLevel(logging.WARNING) + + log = logging.getLogger() + log.setLevel(logging.INFO) + + log_format = logging.Formatter("%(asctime)s %(levelname)s - %(message)s", '%Y-%m-%d %H:%M:%S') + + stdout_handler = logging.StreamHandler(sys.stdout) + stdout_handler.setFormatter(log_format) + log.addHandler(stdout_handler) + + log.info('Done setting up logging...') + + +class NiseBot(commands.Bot): + def __init__(self, bot_loop): + intents = discord.Intents.default() + intents.members = True + super().__init__( + command_prefix='!', + help_command=None, + intents=intents + ) + + self.loop = bot_loop + self.log = logging.getLogger() + + self.reaction_channel_id = 1203671883728293999 + self.reaction_emoji_id = 1211660688947417138 + + async def on_ready(self): + self.log.info('Bot loaded!') + + def run(self): + super().run(os.getenv("DISCORD_TOKEN"), reconnect=True) + + async def on_raw_reaction_add(self, payload): + if payload.channel_id != self.reaction_channel_id or payload.emoji.id != self.reaction_emoji_id: + return + + role = discord.utils.get(payload.member.guild.roles, name="ping-when-update") + await payload.member.add_roles(role) + + async def on_raw_reaction_remove(self, payload): + if payload.channel_id != self.reaction_channel_id or payload.emoji.id != self.reaction_emoji_id: + return + + guild_id = payload.guild_id + guild = discord.utils.find(lambda g: g.id == guild_id, self.guilds) + + user_id = payload.user_id + member = guild.get_member(user_id) + + role = discord.utils.get(guild.roles, name="ping-when-update") + await member.remove_roles(role) + + async def on_command_error(self, ctx, error): + if isinstance(error, commands.CommandOnCooldown): + await ctx.send('This command is currently on cooldown. Please try again in a second!') + else: + self.log.error(error) + + +if __name__ == "__main__": + setup_logging() + loop = asyncio.get_event_loop() + bot = NiseBot(bot_loop=loop) + bot.run() diff --git a/nise-discord/requirements.txt b/nise-discord/requirements.txt new file mode 100644 index 0000000..2319045 --- /dev/null +++ b/nise-discord/requirements.txt @@ -0,0 +1,2 @@ +wheel +py-cord==2.4.1 \ No newline at end of file