Compare commits

...

17 commits

Author SHA1 Message Date
5adccfa404 changement afficage not user_data de id a displayname
Some checks failed
Deploy Bot on NAS / deploy (push) Failing after 0s
2025-08-28 15:55:08 +02:00
c7e8ab62be fix encodage 2025-08-28 15:32:20 +02:00
d18e148cf2 fix des dossiers 2025-08-28 15:27:38 +02:00
35eba9fae0 clean de l'install 2025-08-28 15:22:58 +02:00
c61a287492 clean de l'install 2025-08-28 15:22:18 +02:00
3cc656ee82 clean de l'install 2025-08-28 15:21:11 +02:00
9a3c55a5a8 Ajout chemin absolu dans deploy 2025-08-28 15:10:43 +02:00
867a9ef36d Forcage encodage utf-8 2025-08-28 14:31:11 +02:00
35b3f28ed1 Merge branch 'main' of https://github.com/ArcElewyn/Discord 2025-08-28 14:24:17 +02:00
e88d6245d0 Fix encodage 2025-08-28 14:24:06 +02:00
Mickaël
1177f770c5
Update deploy.yml 2025-08-28 14:13:22 +02:00
Mickaël
49bfe40507
Update deploy.yml 2025-08-28 14:12:15 +02:00
Mickaël
43581a42b7
correction du if dans Set deployment path 2025-08-28 14:11:08 +02:00
Mickaël
c391e91149
Update deploy.yml 2025-08-28 14:09:36 +02:00
Mickaël
c5e09243fa
Update deploy.yml 2025-08-28 14:07:53 +02:00
Mickaël
5226a5102c
Update deploy.yml 2025-08-28 14:06:33 +02:00
Mickaël
8ba2e3a776
Update deploy.yml 2025-08-28 14:05:06 +02:00
5 changed files with 72 additions and 37 deletions

View file

@ -8,25 +8,38 @@ jobs:
deploy: deploy:
runs-on: self-hosted runs-on: self-hosted
steps: steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Set deployment path - name: Set deployment path
id: set-path id: set-path
run: | run: |
if [ "${GITHUB_REF_NAME}" = "main" ]; then if [ "${GITHUB_REF_NAME}" = "main" ]; then
echo "DEPLOY_PATH=/share/discord-bot-dev" >> $GITHUB_ENV
elif [ "${GITHUB_REF_NAME}" = "dev" ]; then
echo "DEPLOY_PATH=/share/CACHEDEV1_DATA/discord-bot-prod" >> $GITHUB_ENV echo "DEPLOY_PATH=/share/CACHEDEV1_DATA/discord-bot-prod" >> $GITHUB_ENV
elif [ "${GITHUB_REF_NAME}" = "dev" ]; then
echo "DEPLOY_PATH=/share/CACHEDEV1_DATA/discord-bot-dev" >> $GITHUB_ENV
else else
echo "Unsupported branch" echo "Unsupported branch"
exit 1 exit 1
fi fi
- name: Deploy bot - name: Update bot files
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
cd $DEPLOY_PATH cd $DEPLOY_PATH
git config --global --add safe.directory $DEPLOY_PATH
if [ ! -d ".git" ]; then
git init
git remote add origin https://x-access-token:$GITHUB_TOKEN@github.com/ArcElewyn/Discord.git
else
git remote remove origin || true
git remote add origin https://x-access-token:$GITHUB_TOKEN@github.com/ArcElewyn/Discord.git
fi
git fetch origin $GITHUB_REF_NAME git fetch origin $GITHUB_REF_NAME
git reset --hard origin/$GITHUB_REF_NAME git reset --hard origin/$GITHUB_REF_NAME
docker compose down || true
docker compose up --build -d - name: Restart bot
run: |
cd $DEPLOY_PATH
docker compose -f $DEPLOY_PATH/docker-compose.yml down || true
docker compose -f $DEPLOY_PATH/docker-compose.yml up --build -d

View file

@ -14,11 +14,6 @@ RUN pip install --no-cache-dir -r requirements.txt
# Copy source code # Copy source code
COPY . . COPY . .
# Create required folders
RUN mkdir -p screenshots/hydra/normal screenshots/hydra/hard screenshots/hydra/brutal screenshots/hydra/nightmare \
screenshots/chimera/easy screenshots/chimera/normal screenshots/chimera/hard screenshots/chimera/brutal screenshots/chimera/nightmare screenshots/chimera/ultra \
screenshots/cvc
# Environment variables # Environment variables
ENV PYTHONUNBUFFERED=1 ENV PYTHONUNBUFFERED=1

26
bot.py
View file

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import discord import discord
import os
import sys
from discord.ext import commands from discord.ext import commands
from config import DISCORD_TOKEN from config import DISCORD_TOKEN
@ -9,6 +11,11 @@ from utils.MercyManager_class import MercyManager
from utils.pb_handler import set_managers from utils.pb_handler import set_managers
from utils.leaderboard_handler import set_db_manager from utils.leaderboard_handler import set_db_manager
# Force UTF-8
os.environ["PYTHONIOENCODING"] = "utf-8"
sys.stdout.reconfigure(encoding='utf-8')
# Définir les intents # Définir les intents
intents = discord.Intents.default() intents = discord.Intents.default()
intents.message_content = True intents.message_content = True
@ -33,6 +40,25 @@ initial_cogs = [
"cogs.mercy", "cogs.mercy",
] ]
# Liste des dossiers
folders = [
"screenshots/hydra/normal",
"screenshots/hydra/hard",
"screenshots/hydra/brutal",
"screenshots/hydra/nightmare",
"screenshots/chimera/easy",
"screenshots/chimera/normal",
"screenshots/chimera/hard",
"screenshots/chimera/brutal",
"screenshots/chimera/nightmare",
"screenshots/chimera/ultra",
"screenshots/cvc",
]
# Création des dossiers si nécessaire (exist_ok=True évite d'écraser)
for f in folders:
os.makedirs(f, exist_ok=True)
class MyBot(commands.Bot): class MyBot(commands.Bot):
def __init__(self): def __init__(self):
super().__init__(command_prefix="!", intents=intents) super().__init__(command_prefix="!", intents=intents)

View file

@ -3,7 +3,7 @@ import discord
from discord.ext import commands from discord.ext import commands
from config import AUTHORIZED_CHANNEL_ID, BOSS_CONFIG from config import AUTHORIZED_CHANNEL_ID, BOSS_CONFIG
from utils.helpers import format_damage_display, format_date_only from utils.helpers import format_damage_display, format_date_only
from utils.pb_handler import db_manager # Assurez-vous que db_manager est initialisé correctement from utils.pb_handler import db_manager # Assurez-vous que db_manager est initialisé correctement
class MyStats(commands.Cog): class MyStats(commands.Cog):
"""Cog pour afficher tous les PB d'un utilisateur""" """Cog pour afficher tous les PB d'un utilisateur"""
@ -13,7 +13,7 @@ class MyStats(commands.Cog):
@commands.command(name="mystats") @commands.command(name="mystats")
async def mystats(self, ctx, target_user: str = None): async def mystats(self, ctx, target_user: str = None):
"""Affiche tous les PB d'un utilisateur avec les nouvelles difficultés""" """Affiche tous les PB d'un utilisateur avec les nouvelles difficultés"""
if ctx.channel.id != AUTHORIZED_CHANNEL_ID: if ctx.channel.id != AUTHORIZED_CHANNEL_ID:
return return
@ -22,15 +22,15 @@ class MyStats(commands.Cog):
user_data = db_manager.get_user_all_pbs(username) user_data = db_manager.get_user_all_pbs(username)
if not user_data: if not user_data:
await ctx.send(f"❌ No data found for **{username}**.") await ctx.send(f"❌ No data found for **{ctx.author.display_name}**.")
return return
embed = discord.Embed( embed = discord.Embed(
title=f"📊 {ctx.author.display_name}'s Complete Stats", title=f"📊 {ctx.author.display_name}'s Complete Stats",
color=0x00bfff color=0x00bfff
) )
# Hydra - toutes les difficultés # Hydra - toutes les difficultés
hydra_stats = [] hydra_stats = []
for difficulty in BOSS_CONFIG['hydra']['difficulties']: for difficulty in BOSS_CONFIG['hydra']['difficulties']:
pb_key = f'pb_hydra_{difficulty}' pb_key = f'pb_hydra_{difficulty}'
@ -39,13 +39,13 @@ class MyStats(commands.Cog):
if pb_key in user_data and user_data[pb_key] > 0: if pb_key in user_data and user_data[pb_key] > 0:
pb_value = user_data[pb_key] pb_value = user_data[pb_key]
pb_date = user_data.get(date_key) pb_date = user_data.get(date_key)
date_text = f" • {format_date_only(pb_date)}" if pb_date else "" date_text = f" {format_date_only(pb_date)}" if pb_date else ""
hydra_stats.append(f"**{difficulty.title()}:** {format_damage_display(pb_value)}{date_text}") hydra_stats.append(f"**{difficulty.title()}:** {format_damage_display(pb_value)}{date_text}")
hydra_text = "\n".join(hydra_stats) if hydra_stats else "No records" hydra_text = "\n".join(hydra_stats) if hydra_stats else "No records"
embed.add_field(name="🗡️ Hydra PBs", value=hydra_text, inline=False) embed.add_field(name="⚔️ Hydra PBs", value=hydra_text, inline=False)
# Chimera - toutes les difficultés # Chimera - toutes les difficultés
chimera_stats = [] chimera_stats = []
for difficulty in BOSS_CONFIG['chimera']['difficulties']: for difficulty in BOSS_CONFIG['chimera']['difficulties']:
pb_key = f'pb_chimera_{difficulty}' pb_key = f'pb_chimera_{difficulty}'
@ -54,12 +54,12 @@ class MyStats(commands.Cog):
if pb_key in user_data and user_data[pb_key] > 0: if pb_key in user_data and user_data[pb_key] > 0:
pb_value = user_data[pb_key] pb_value = user_data[pb_key]
pb_date = user_data.get(date_key) pb_date = user_data.get(date_key)
date_text = f" • {format_date_only(pb_date)}" if pb_date else "" date_text = f" {format_date_only(pb_date)}" if pb_date else ""
display_name = "Ultra Nightmare" if difficulty == "ultra" else difficulty.title() display_name = "Ultra Nightmare" if difficulty == "ultra" else difficulty.title()
chimera_stats.append(f"**{display_name}:** {format_damage_display(pb_value)}{date_text}") chimera_stats.append(f"**{display_name}:** {format_damage_display(pb_value)}{date_text}")
chimera_text = "\n".join(chimera_stats) if chimera_stats else "No records" chimera_text = "\n".join(chimera_stats) if chimera_stats else "No records"
embed.add_field(name="🛡️ Chimera PBs", value=chimera_text, inline=False) embed.add_field(name="🛡️ Chimera PBs", value=chimera_text, inline=False)
# CvC # CvC
cvc_pb = user_data.get('pb_cvc', 0) cvc_pb = user_data.get('pb_cvc', 0)
@ -68,19 +68,19 @@ class MyStats(commands.Cog):
if cvc_pb > 0 and cvc_date: if cvc_pb > 0 and cvc_date:
formatted_date = format_date_only(cvc_date) formatted_date = format_date_only(cvc_date)
if formatted_date: if formatted_date:
cvc_text += f" • {formatted_date}" cvc_text += f" {formatted_date}"
embed.add_field(name="⚔️ CvC PB", value=cvc_text, inline=False) embed.add_field(name="🗡️ CvC PB", value=cvc_text, inline=False)
# Total combiné # Total combiné
total_damage = sum(user_data.get(f'pb_hydra_{d}', 0) for d in BOSS_CONFIG['hydra']['difficulties']) total_damage = sum(user_data.get(f'pb_hydra_{d}', 0) for d in BOSS_CONFIG['hydra']['difficulties'])
total_damage += sum(user_data.get(f'pb_chimera_{d}', 0) for d in BOSS_CONFIG['chimera']['difficulties']) total_damage += sum(user_data.get(f'pb_chimera_{d}', 0) for d in BOSS_CONFIG['chimera']['difficulties'])
total_damage += user_data.get('pb_cvc', 0) total_damage += user_data.get('pb_cvc', 0)
embed.add_field(name="💯 Total Combined Damage", value=f"**{format_damage_display(total_damage)}**", inline=False) embed.add_field(name="💯 Total Combined Damage", value=f"**{format_damage_display(total_damage)}**", inline=False)
await ctx.send(embed=embed) await ctx.send(embed=embed)
except Exception as e: except Exception as e:
await ctx.send(f"❌ Error: {e}") await ctx.send(f" Error: {e}")
async def setup(bot): async def setup(bot):
await bot.add_cog(MyStats(bot)) await bot.add_cog(MyStats(bot))

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
import os import os
from dotenv import load_dotenv from dotenv import load_dotenv
@ -13,22 +14,22 @@ DATABASE_PATH = "/app/data/bot_data.db"
# Configuration des clans # Configuration des clans
CLAN_CONFIG = { CLAN_CONFIG = {
'RTF': {'name': 'RTF', 'emoji': '⭐', 'color': 0x00ff00}, 'RTF': {'name': 'RTF', 'emoji': '🛡️', 'color': 0x00ff00},
'RTFC': {'name': 'RTFC', 'emoji': '🔥', 'color': 0xff4500}, 'RTFC': {'name': 'RTFC', 'emoji': '🔥', 'color': 0xff4500},
'RTFR': {'name': 'RTFR', 'emoji': 'âš¡', 'color': 0x1e90ff} 'RTFR': {'name': 'RTFR', 'emoji': '⚔️', 'color': 0x1e90ff}
} }
# Configuration des boss avec difficultées # Configuration des boss avec difficultés
BOSS_CONFIG = { BOSS_CONFIG = {
'hydra': {'name': 'Hydra', 'emoji': '🐍', 'color': 0xff6b35, 'hydra': {'name': 'Hydra', 'emoji': '📍', 'color': 0xff6b35,
'difficulties': ['normal', 'hard', 'brutal', 'nightmare']}, 'difficulties': ['normal', 'hard', 'brutal', 'nightmare']},
'chimera': {'name': 'Chimera', 'emoji': '🦁', 'color': 0x9932cc, 'chimera': {'name': 'Chimera', 'emoji': '🦁', 'color': 0x9932cc,
'difficulties': ['easy', 'normal', 'hard', 'brutal', 'nightmare', 'ultra']}, 'difficulties': ['easy', 'normal', 'hard', 'brutal', 'nightmare', 'ultra']},
'cvc': {'name': 'Clan vs Clan', 'emoji': '⚔️', 'color': 0xff0000, 'difficulties': []} 'cvc': {'name': 'Clan vs Clan', 'emoji': '✔️', 'color': 0xff0000, 'difficulties': []}
} }
# Mappings pour diminutifs de difficultés # Mappings pour diminutifs de difficultés
DIFFICULTY_SHORTCUTS = { DIFFICULTY_SHORTCUTS = {
'nm': 'nightmare', 'nm': 'nightmare',
'unm': 'ultra' 'unm': 'ultra'
} }