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
41 changes: 15 additions & 26 deletions .github/workflows/check-commit-message.yml
Original file line number Diff line number Diff line change
@@ -1,55 +1,44 @@
name: Check commit message
name: Check PR title

on:
pull_request:
types: [opened, edited, synchronize]

jobs:
check-commit-message:
check-pr-title:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Validate commit message
- name: Validate PR title
run: |
COMMIT_MSG=$(git log -1 --pretty=%B)
PR_TITLE="${{ github.event.pull_request.title }}"

echo "🔎 Vérification du message de commit"
echo "----------------------------------"
echo "$COMMIT_MSG"
echo "🔎 Vérification du titre de la Pull Request"
echo "------------------------------------------"
echo "$PR_TITLE"
echo ""

REGEX="^(feat|fix|hotfix|docs|refactor|test|chore)(\([a-zA-Z0-9_-]+\))?: .+"

if [[ ! "$COMMIT_MSG" =~ $REGEX ]]; then
echo "❌ Message de commit non conforme"
if [[ ! "$PR_TITLE" =~ $REGEX ]]; then
echo "❌ Titre de PR non conforme"
echo ""
echo "👉 Format attendu :"
echo " type(scope): description courte"
echo ""
echo "👉 Types autorisés : feat, fix, hotfix, docs, refactor, test, chore"
echo ""
echo "📌 Exemples valides :"
echo " feat(auth): ajout du login"
echo " fix(button): correction du style"
echo ""
echo "🛠️ Action attendue :"
echo " modifie ton commit avec :"
echo " git commit --amend"
echo " docs(database): ajout du dictionnaire"
echo " fix(auth): correction login"
exit 1
fi

if ! echo "$COMMIT_MSG" | grep -qiE "(fixes|closes|resolves) #[0-9]+"; then
if ! echo "$PR_TITLE" | grep -qiE "(fix|fixes|closes|resolves) #[0-9]+"; then
echo "⚠️ Aucun lien avec une issue détecté"
echo ""
echo "👉 Bonne pratique recommandée :"
echo " ajoute dans le message : Fixes #<numéro>"
echo ""
echo "ℹ️ Exemple :"
echo " Fixes #12"
echo " ajoute dans le titre : Fixes #<numéro>"
fi

echo "✅ Message de commit conforme"
echo "✅ Titre de PR conforme"
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# WorldBoss

Discord Bot | RPG Game
210 changes: 210 additions & 0 deletions docs/database/ddd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
# 🧩 Dictionnaire des Données — Projet WorldBoss

---

## **SERVERS**

`servers`

| Colonne | Type | Description |
| ------------------- | ------------ | -------------------------------------- |
| id | int, PK | Identifiant unique du serveur |
| discord_id | varchar(50) | Identifiant Discord du serveur, unique |
| name | varchar(100) | Nom du serveur |
| owner_id | varchar(50) | Identifiant Discord du propriétaire |
| level | int | Niveau du serveur |
| prestige | int | Points de prestige |
| gold_reserve | int | Réserve d’or du serveur |
| created_at | datetime | Date de création du serveur |
| category_id | varchar(50) | ID de la catégorie Discord |
| combat_channel_id | varchar(50) | ID du channel combat |
| combat_message_id | varchar(50) | ID du message combat |
| merchant_channel_id | varchar(50) | ID du channel marchand |
| merchant_message_id | varchar(50) | ID du message marchand |
| event_id | varchar(50) | ID du message événement |
| general_channel_id | varchar(50) | ID du channel général |

**Relations principales :**

- 1—N `Players`
- 1—1 `Merchants`
- 1—N `Bosses`

---

## **PLAYERS**

`players`

| Colonne | Type | Description |
| -------------- | ------------------------- | ------------------------------------- |
| id | int, PK | Identifiant du joueur |
| discord_id | varchar(50) | Identifiant Discord du joueur, unique |
| server_id | int, FK vers `servers.id` | Serveur auquel le joueur appartient |
| name | varchar(100) | Nom du joueur |
| level | int | Niveau du joueur |
| exp | int | Expérience |
| hp | int | Points de vie actuels |
| hp_max | int | Points de vie maximum |
| attack | int | Attaque actuelle |
| attack_max | int | Attaque maximale |
| defense | int | Défense actuelle |
| defense_max | int | Défense maximale |
| crit_rate | int | Taux de critique actuel |
| crit_rate_max | int | Taux de critique maximal |
| 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 :**

- N—1 `Servers`
- 1—1 `Inventories`

---

## **INVENTORIES**

`inventories`

| Colonne | Type | Description |
| --------- | ------------------------- | ------------------- |
| id | int, PK | Identifiant |
| player_id | int, FK vers `players.id` | Joueur propriétaire |

**Relations principales :**

- N—1 `Players`
- 1—N `Item_Instances`

---

## **ITEMS**

`items`

| Colonne | Type | Description |
| ------------- | --------------------------------------- | ---------------------------------------- |
| id | int, PK | Identifiant unique |
| name | varchar(100) | Nom de l’objet |
| category | enum('consommable','arme','equipement') | Catégorie de l’objet |
| description | text | Description |
| hp_bonus | int | Bonus points de vie (arme ou équipement) |
| attack_bonus | int | Bonus attaque (arme ou équipement) |
| defense_bonus | int | Bonus défense (arme ou équipement) |
| price | int | Prix d’achat |
| sell_price | int | Prix de vente |

**Relations principales :**

- 1—N `Item_Instances`
- N—N `Merchant_Items`

---

## **ITEM_INSTANCES**

`item_instances`

| Colonne | Type | Description |
| ------------ | ----------------------------- | --------------------------------------- |
| id | int, PK | Identifiant unique de l’instance |
| item_id | int, FK vers `items.id` | Objet associé |
| inventory_id | int, FK vers `inventories.id` | Inventaire auquel appartient l’instance |
| equipped | tinyint(1) | 1 si équipé, 0 sinon |

**Relations principales :**

- N—1 `Items`
- N—1 `Inventories`
- N—1 `Merchants`

---

## **MERCHANTS**

`merchants`

| Colonne | Type | Description |
| ------------ | ------------------------- | -------------------------------------- |
| id | int, PK | Identifiant du marchand |
| server_id | int, FK vers `servers.id` | Serveur associé |
| gold | int | Or détenu par le marchand |
| last_refresh | datetime | Dernière actualisation de l’inventaire |

**Relations principales :**

- N—1 `Servers`
- 1—N `Merchant_Items`

---

## **MERCHANT_ITEMS**

`merchant_items`

| Colonne | Type | Description |
| ----------- | --------------------------- | ---------------- |
| id | int, PK | Identifiant |
| merchant_id | int, FK vers `merchants.id` | Marchand associé |
| item_id | int, FK vers `items.id` | Objet associé |

**Relations principales :**

- N—1 `Merchants`
- N—1 `Items`

---

## **BOSS_TEMPLATES**

`boss_templates`

| Colonne | Type | Description |
| --------------- | ------------ | --------------------- |
| id | int, PK | Identifiant du modèle |
| name | varchar(100) | Nom du boss |
| level | int | Niveau du boss |
| base_hp | int | Points de vie de base |
| base_attack | int | Attaque de base |
| base_defense | int | Défense de base |
| lore | text | Histoire du boss |
| gif_url | varchar(255) | Image du boss |
| gif_url_lore_01 | varchar(255) | Image lore |
| gif_url_lore_02 | varchar(255) | Image lore |
| gif_url_lore_03 | varchar(255) | Image lore |
| gif_url_lore_04 | varchar(255) | Image lore |
| gif_url_lore_05 | varchar(255) | Image lore |
| gif_url_lore_06 | varchar(255) | Image lore |
| gif_url_lore_07 | varchar(255) | Image lore |
| gif_url_lore_08 | varchar(255) | Image lore |
| gif_url_lore_09 | varchar(255) | Image lore |
| gif_url_lore_10 | varchar(255) | Image lore |

**Relations principales :**

- 1—N `Bosses`

---

## **BOSSES**

`bosses`

| Colonne | Type | Description |
| ----------- | -------------------------------- | --------------------------------- |
| id | int, PK | Identifiant du boss |
| server_id | int, FK vers `servers.id` | Serveur associé |
| template_id | int, FK vers `boss_templates.id` | Modèle de boss |
| hp | int | Points de vie actuels |
| attack | int | Attaque actuelle |
| defense | int | Défense actuelle |
| last_reset | datetime | Date de dernière réinitialisation |

**Relations principales :**

- N—1 `Servers`
- N—1 `Boss_Templates`

---
3 changes: 3 additions & 0 deletions docs/database/mcd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 🧩 MCD — Projet WorldBoss

![MCD WorldBoss](./MCD.png)
68 changes: 68 additions & 0 deletions docs/database/mld.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# 🧩 MLD — Projet WorldBoss

---

### **SERVERS**

SERVERS (id, discord_id, name, owner_id, level, prestige, gold_reserve, created_at,
category_id, combat_channel_id, combat_message_id,
merchant_channel_id, merchant_message_id, event_id, general_channel_id)

---

### **PLAYERS**

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,
[server_id])

---

### **INVENTORIES**

INVENTORIES (id, [player_id])

---

### **ITEMS**

ITEMS (id, name, category, description, hp_bonus, attack_bonus, defense_bonus,
price, sell_price)

---

### **ITEM_INSTANCES**

ITEM_INSTANCES (id, equipped, [item_id], [inventory_id])

---

### **MERCHANTS**

MERCHANTS (id, gold, last_refresh, [server_id])

---

### **MERCHANT_ITEMS**

MERCHANT_ITEMS (id, [merchant_id], [item_id])

---

### **BOSS_TEMPLATES**

BOSS_TEMPLATES (id, name, level, base_hp, base_attack, base_defense, lore,
gif_url,
gif_url_lore_01, gif_url_lore_02, gif_url_lore_03, gif_url_lore_04,
gif_url_lore_05, gif_url_lore_06, gif_url_lore_07, gif_url_lore_08,
gif_url_lore_09, gif_url_lore_10)

---

### **BOSSES**

BOSSES (id, hp, attack, defense, last_reset,
[server_id], [template_id])

---
Loading