Compare commits
17 commits
71a1222e5e
...
5adccfa404
| Author | SHA1 | Date | |
|---|---|---|---|
| 5adccfa404 | |||
| c7e8ab62be | |||
| d18e148cf2 | |||
| 35eba9fae0 | |||
| c61a287492 | |||
| 3cc656ee82 | |||
| 9a3c55a5a8 | |||
| 867a9ef36d | |||
| 35b3f28ed1 | |||
| e88d6245d0 | |||
|
|
1177f770c5 | ||
|
|
49bfe40507 | ||
|
|
43581a42b7 | ||
|
|
c391e91149 | ||
|
|
c5e09243fa | ||
|
|
5226a5102c | ||
|
|
8ba2e3a776 |
5 changed files with 72 additions and 37 deletions
29
.github/workflows/deploy.yml
vendored
29
.github/workflows/deploy.yml
vendored
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
26
bot.py
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
17
config.py
17
config.py
|
|
@ -1,3 +1,4 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
import os
|
import os
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
|
@ -13,21 +14,21 @@ 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'
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue