Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added .env.example
Empty file.
49 changes: 49 additions & 0 deletions .github/workflows/check-required-files.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Check required files

on:
push:
branches: ["**"]
pull_request:

jobs:
check-files:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Check required files
run: |
REQUIRED_FILES=(
"README.md"
"INSTALL.md"
"CHANGELOG.md"
"CONTRIBUTING.md"
"LICENSE"
".env.example"
"SECURITY.md"
"CODE_OF_CONDUCT.md"
"requirements.txt"
)

MISSING=0

echo "🔍 Checking required files..."
for file in "${REQUIRED_FILES[@]}"; do
if [ ! -f "$file" ]; then
echo "❌ Missing file: $file"
MISSING=1
else
echo "✅ Found: $file"
fi
done

if [ $MISSING -ne 0 ]; then
echo ""
echo "🚨 One or more required files are missing."
exit 1
fi

echo ""
echo "🎉 All required files are present!"
40 changes: 40 additions & 0 deletions .github/workflows/close-issues-on-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Close issues on dev merge

on:
pull_request:
types: [closed]
branches:
- dev

jobs:
close-issues:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest

steps:
- name: Close linked issues
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const body = `${pr.title}\n${pr.body || ""}`;

const issueRegex = /(fixes|closes|resolves)\s+#(\d+)/gi;
const matches = [...body.matchAll(issueRegex)];

if (matches.length === 0) {
console.log("No linked issues found.");
return;
}

for (const match of matches) {
const issueNumber = match[2];
console.log(`Closing issue #${issueNumber}`);

await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
state: "closed"
});
}
Empty file added CODE_OF_CONDUCT.md
Empty file.
19 changes: 19 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# CONTRIBUTING.md

## 🚀 Comment contribuer
1. Forkez le dépôt
2. Clonez votre fork
3. Créez une branche
4. Faites vos modifications
5. Testez votre code
6. Soumettez une Pull Request

## 🧠 Règles de style
- Utilisez Prettier pour formater le code
- Respectez les conventions ESLint

## 🐞 Signaler un bug
Ouvrez une issue avec un titre descriptif et les étapes pour reproduire.

## 💬 Besoin d’aide ?
Contactez l’équipe sur le salon Discord du projet.
135 changes: 135 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# INSTALLATION — WorldBoss Discord Bot

---

## 🧩 Prérequis

Avant de commencer, assure-toi d’avoir installé :
- Python 3.12+
- pip (installé par défaut avec Python)
- Git
- MySQL ou MariaDB

---

## ⚙️ 1. Cloner le projet
```
git clone https://github.com/<ton-username>/WorldBoss.git
cd WorldBoss
```

---

## 🧱 2. Créer et activer l’environnement virtuel
```
python3 -m venv .venv
source .venv/bin/activate # sous Linux / macOS
# ou :
.venv\Scripts\activate # sous Windows
```

---

## 📦 3. Installer les dépendances
```
pip install --upgrade pip
pip install -r requirements.txt
```

---

## 🔐 4. Créer le fichier .env

Crée un fichier .env à la racine du projet (récupérer `.env.example`) :
```
DISCORD_TOKEN=ton_token_discord
DATABASE_URL=mysql+pymysql://user:password@localhost/worldboss
```

> ⚠️ Remplace user, password et worldboss par tes identifiants MySQL réels.

---

## 🗄️ 5. Initialiser la base de données
Tu peux créer la base de données manuellement via MySQL :
```
mysql -u root -p
CREATE DATABASE worldboss CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

Ensuite, initialise les tables avec le script :
```
PYTHONPATH=src python -m src.database.db_utils init_db
```
Autres commandes :
```
# Réinitialiser la bdd
PYTHONPATH=src python -m src.database.db_utils reset_db
# Ajouter des données de tests
PYTHONPATH=src python -m src.database.db_utils seed_db
```
---

## 🧪 6. Vérifier la connexion à la base de données
Lance les tests Pytest :
```
PYTHONPATH=src pytest -v
```

Si tout est bon, tu verras ✅ :
tests/test_db.py::test_database_connection PASSED

---

## 🤖 7. Lancer le bot
Exécuter le bot :
```
python src/main.py
```

---

## 🧰 8. Développement et Qualité de code
Formatage automatique : black
Vérification de style : flake8

Exécution automatique avant chaque commit :

Le hook pre-commit est déjà configuré.
Il formate et vérifie ton code avant d’accepter le commit :
```
pre-commit run --all-files
```

---

## 🧠 Structure du projet
```
WorldBoss/
├── .github/workflows/ # CI/CD
├── .worldboss_data/ # Dossier de sauvegarde
├── src/
│ ├── bot/ # Code du bot Discord
│ ├── database/ # ORM + connexions SQLAlchemy
│ ├── templates/ # Modèle pour les messages, button, etc.
│ ├── config.py # Configuration centralisée
│ └── main.py # Point d'entrée du projet
├── tests/ # Tests unitaires pytest
├── .env.example # Exemple de variables d'environnement
├── requirements.txt
├── INSTALL.md # Ce guide !
└── README.md # Présentation du projet
```
---

## ✅ Vérification rapide
| Commande | Action |
| ---------------------------- | -------------------- |
| `python src/main.py` | Lance le bot |
| `pytest -v` | Exécute les tests |
| `black .` | Formatte le code |
| `flake8` | Vérifie le style |
| `pre-commit run --all-files` | Teste tous les hooks |
Empty file added LICENSE
Empty file.
Empty file added SECURITY.md
Empty file.
1 change: 0 additions & 1 deletion docs/database/ddd.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@
| gold | int | Or détenu par le joueur |
| actions_points | int | Points d’action |
| skills_points | int | Points de compétence |
| alive | tinyint(1) | Joueur vivant ou non |

**Relations principales :**

Expand Down
2 changes: 1 addition & 1 deletion docs/database/mld.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ merchant_channel_id, merchant_message_id, event_id, general_channel_id)

PLAYERS (id, discord_id, name, level, exp, hp, hp_max, attack, attack_max,
defense, defense_max, crit_rate, crit_rate_max, gold,
actions_points, skills_points, alive,
actions_points, skills_points,
[server_id])

---
Expand Down
1 change: 0 additions & 1 deletion docs/database/mpd.sql
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ CREATE TABLE players (
gold INT DEFAULT 0,
actions_points INT DEFAULT 0,
skills_points INT DEFAULT 0,
alive TINYINT(1) DEFAULT 1,

CONSTRAINT fk_players_server
FOREIGN KEY (server_id) REFERENCES servers(id)
Expand Down
23 changes: 23 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# --- Core du bot Discord ---
discord.py

# --- ORM et base de données ---
SQLAlchemy
aiomysql
pymysql

# --- Gestion des variables d'environnement ---
python-dotenv

# --- Outils de développement et qualité de code ---
black
flake8
pytest
pytest-asyncio
pre-commit

# --- (Optionnel) Async utilities ---
aiohttp

# --- Voir list des bibliothèques ---
# python -m pip list
Loading