Skip to content

Commit

Permalink
Merge pull request #1 from Garage-ISEP/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
0xEthamin authored Jun 13, 2024
2 parents 192b3be + 18baf21 commit 6797e87
Show file tree
Hide file tree
Showing 8 changed files with 90 additions and 23 deletions.
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.github
.env
.gitignore
docker-compose.yml
Dockerfile
README.md
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
.dockerignore
38 changes: 38 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,39 @@
# GarageDiscordBot

Un bot Discord pour le serveur Garage, créé par Simon Tuloup - promo 2027.

- Attribution automatique des rôles
- Génération d'OTP pour le local NDL
- Informations sur le propriétaire du serveur

## Commandes

`/add_member <pseudo> <lab>` : peut être exécuté par les présidents ou VP de lab pour ajouter des membres à leur lab.

`/remove_member <pseudo> <lab>` : peut être exécuté par les présidents ou VP de lab pour retirer des membres de leur lab.

Fonctionnement: Les membres possédant un rôle nommé "Prez - X" ou "VicePrez - X" peuvent ajouter ou retirer le rôle "X" à un autre membre en utilisant les commandes `/add_member` et `/remove_member`. Les admins aussi.


`/code_ndl` : nécessite le rôle `code`, permet de générer un code valable 1h pour le local NDL.

`/owner` : affiche les informations sur le propriétaire du serveur.

`/ping` : affiche le ping du bot.

`&&getlog` : nécessite le rôle `admin`, affiche les logs de `/code_ndl`.

`&&purge` : nécessite le rôle `admin`, force la purge des OTP périmés de `/code_ndl`. Renvoie un booléen indiquant si des codes ont été supprimés ou non.

## Fonctionnalités supplémentaires

- Fait tourner les fichiers de log pour éviter de dépasser 20MB, archive les anciens fichiers de log sous la forme `CodeLog-Archive-{date}.bak`.


## Installation

1. Téléchargez le fichier `docker-compose.yml` et le fichier `.env`.
2. Remplissez le fichier `.env` avec les informations nécessaires.
3. Exécutez la commande `docker compose up -d` pour lancer le bot.

Lien vers le dépôt GitHub : <https://github.com/Garage-ISEP/GarageDiscordBot>
27 changes: 20 additions & 7 deletions src/GarageBot.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ async def manage_log_task():
log_file_path = "./log/CodeLog.txt"
while True:
if os.path.exists(log_file_path):
file_size = os.path.getsize(log_file_path)
if file_size >= 20*1024*1024: #20 Mb
file_size = os.path.getsize(log_file_path) #return the size in bytes
if file_size >= 20*1024*1024: #20 MB
archive_name = 'CodeLog-Archive-{}.bak'.format(datetime.now().strftime('%Y-%m-%d'))
archive_path = f"./log/{archive_name}"
os.rename(log_file_path, archive_path)
Expand Down Expand Up @@ -58,13 +58,26 @@ async def addMember_command(interaction: discord.Interaction, pseudo: discord.Us
auteur = interaction.user
Prez_Role = discord.utils.get(interaction.guild.roles, name=f"Prez - {role.name}")
VicePrez_Role = discord.utils.get(interaction.guild.roles, name=f"VicePrez - {role.name}")
if not (Prez_Role in auteur.roles or VicePrez_Role in auteur.roles):
Admin_Role = discord.utils.get(interaction.guild.roles, id=int(os.getenv("DISCORD_ROLE_ADMIN_ID")))
if not (Prez_Role in auteur.roles or VicePrez_Role in auteur.roles or Admin_Role in auteur.roles):
await interaction.response.send_message("Vous n'avez pas la permission de faire ça. Vous devez être Prez ou VicePrez du lab concerné.", ephemeral=True)
return
await pseudo.add_roles(role)
await pseudo.add_roles(discord.utils.get(interaction.guild.roles, id=int(os.getenv("DISCORD_ROLE_MEMBRE_ID"))))
await interaction.response.send_message("Done !", ephemeral=True)

@bot.tree.command(name="remove_member", description="Retire un membre du lab")
async def removeMember_command(interaction: discord.Interaction, pseudo: discord.User, role: discord.Role):
auteur = interaction.user
Prez_Role = discord.utils.get(interaction.guild.roles, name=f"Prez - {role.name}")
VicePrez_Role = discord.utils.get(interaction.guild.roles, name=f"VicePrez - {role.name}")
Admin_Role = discord.utils.get(interaction.guild.roles, id=int(os.getenv("DISCORD_ROLE_ADMIN_ID")))
if not (Prez_Role in auteur.roles or VicePrez_Role in auteur.roles or Admin_Role in auteur.roles):
await interaction.response.send_message("Vous n'avez pas la permission de faire ça. Vous devez être Prez ou VicePrez du lab concerné.", ephemeral=True)
return
await pseudo.remove_roles(role)
await interaction.response.send_message("Done !", ephemeral=True)

@bot.tree.command(name="code_ndl", description="Genere un code pour le local de NDL valide 1h")
async def code_ndl(interaction: discord.Interaction):
codeRole = discord.utils.get(interaction.guild.roles, id=int(os.getenv("DISCORD_ROLE_CODE_ID")))
Expand All @@ -78,16 +91,16 @@ async def code_ndl(interaction: discord.Interaction):

code = AddOTP_D(name, int(os.getenv("OTP_DURATION")))
with open("./log/CodeLog.txt", "a") as f:
#append a log line as csv, with time, name, code, valid time
f.write(f"{datetime.now()},{name},{code},{os.getenv('OTP_DURATION')}\n")
#append a log line as csv, with time, name, pseudo, id, code, valid time
f.write(f"{datetime.now()},{interaction.user.display_name},{interaction.user.name},{interaction.user.id},{code},{os.getenv('OTP_DURATION')}\n")

await interaction.user.send(f"Le code est {code}, il est valide pour {os.getenv('OTP_DURATION')} minutes.")
await interaction.response.send_message(f"Le code est {code}", ephemeral=True)

#Purge les codes obsolètes - Pas cencé etre utilisé - Debug
@bot.command(name="purge")
async def purge_outdated(ctx):
admin = discord.utils.get(ctx.guild.roles, name="Admin")
admin = discord.utils.get(ctx.guild.roles, id=int(os.getenv("DISCORD_ROLE_ADMIN_ID")))
if not (admin in ctx.author.roles):
await ctx.send("Vous n'avez pas la permission de faire ça. Vous devez être Admin.", ephemeral=True)
return
Expand All @@ -96,7 +109,7 @@ async def purge_outdated(ctx):

@bot.command(name="getlog")
async def get_log(ctx):
admin = discord.utils.get(ctx.guild.roles, name="Admin")
admin = discord.utils.get(ctx.guild.roles, id=int(os.getenv("DISCORD_ROLE_ADMIN_ID")))
if not (admin in ctx.author.roles):
await ctx.send("Vous n'avez pas la permission de faire ça. Vous devez être Admin.", ephemeral=True)
return
Expand Down
29 changes: 15 additions & 14 deletions src/.env → utils/.env
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
DISCORD_GARAGEBOT_TOKEN=""
DISCORD_ROLE_MEMBRE_ID =

NUKI_API_TOKEN = ""
SMARTLOCK_ID =


############# SETTINGS ############

# in minutes
OTP_DURATION = 60

# in Seconds
PURGE_FREQ = 3600
DISCORD_GARAGEBOT_TOKEN=""
DISCORD_ROLE_MEMBRE_ID =
DISCORD_ROLE_ADMIN_ID =

NUKI_API_TOKEN = ""
SMARTLOCK_ID =


############# SETTINGS ############

# in minutes
OTP_DURATION = 60

# in Seconds
PURGE_FREQ = 3600
2 changes: 1 addition & 1 deletion Dockerfile → utils/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ WORKDIR /bot
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY ./src/ .
COPY ../src/ .

CMD ["python3", "GarageBot.py"]
10 changes: 10 additions & 0 deletions utils/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: "3"
services:
GarageDiscordBot:
image: ghcr.io/garage-isep/garagediscordbot:latest
container_name: GarageDiscordBot
restart: always
env_file:
- .env
volumes:
- ./log:/bot/log
File renamed without changes.

0 comments on commit 6797e87

Please sign in to comment.