diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e69de29 diff --git a/.github/workflows/check-required-files.yml b/.github/workflows/check-required-files.yml new file mode 100644 index 0000000..09ea766 --- /dev/null +++ b/.github/workflows/check-required-files.yml @@ -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!" diff --git a/.github/workflows/close-issues-on-dev.yml b/.github/workflows/close-issues-on-dev.yml new file mode 100644 index 0000000..90f0f89 --- /dev/null +++ b/.github/workflows/close-issues-on-dev.yml @@ -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" + }); + } diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..e69de29 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..fbb6726 --- /dev/null +++ b/CONTRIBUTING.md @@ -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. \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..a55a42d --- /dev/null +++ b/INSTALL.md @@ -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//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 | diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/database/ddd.md b/docs/database/ddd.md index 220f7af..7cba29d 100644 --- a/docs/database/ddd.md +++ b/docs/database/ddd.md @@ -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 :** diff --git a/docs/database/mld.md b/docs/database/mld.md index 0cf2ff7..4dd617b 100644 --- a/docs/database/mld.md +++ b/docs/database/mld.md @@ -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]) --- diff --git a/docs/database/mpd.sql b/docs/database/mpd.sql index 7d33bbb..c6543f5 100644 --- a/docs/database/mpd.sql +++ b/docs/database/mpd.sql @@ -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) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7c5cb83 --- /dev/null +++ b/requirements.txt @@ -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