Tous les articles

Bot RP inventaire et boutique Discord : gérer le stock, la boutique et la banque d’un serveur RP (D&D, DayZ, GTA RP)

L’équipe CordBase

Pour un serveur D&D ou RP, garde une table CordBase pour les inventaires des joueurs (une ligne par objet, avec son propriétaire) et une pour le stock de la boutique (une ligne par objet, avec une quantité). Les joueurs consultent avec des commandes slash, et le staff change les quantités avec /shop update ... _mode:Decrement. Ça enregistre le stock ; ça ne fait pas tourner une boutique.

La plupart des serveurs commencent avec un message épinglé, un tableur ou un bot d’économie. Le message épinglé casse quand deux personnes le modifient en même temps, le tableur vit en dehors de Discord, et les bots d’économie sont construits autour de l’achat d’objets avec des points. Ce guide met plutôt en place de simples registres dans Discord, avec CordBase, que nous développons. L’inventaire et la boutique prennent une dizaine de minutes.

Si tes joueurs ont aussi besoin de fiches de personnage, le modèle de fiche de personnage gratuit te donne des fiches à copier-coller pour D&D 5e, le RP, la fantasy et la SF.

Ce que tu auras à la fin

  • Une commande /inventory (add, query, view, update, delete, leaderboard) qui contient ce que porte chaque personnage.
  • Une commande /shop qui contient ce qu’un marchand a en stock et à quel prix.
  • En option, une commande /bank avec les dépôts et les prêts de chaque membre, sous forme de simples nombres.
  • Des permissions par rôle pour que les joueurs puissent consulter et que seul le staff puisse changer les quantités.

Étape 1 : mettre en place l’inventaire par personnage

L’inventaire se configure comme dans le guide de la banque de guilde : installe le modèle Suivi d’inventaire (item, quantity, owner, rarity, notes), renomme le slug en inventory, donne aux joueurs l’accès read et à ton rôle MJ ou staff l’accès write. Deux points comptent plus sur un serveur RP que pour une banque de guilde.

D’abord, des commandes comme update et view te font choisir une ligne dans une liste qui n’affiche que la première colonne de texte de la table. Si Mara et Joss ont tous les deux une Healing Potion, tu obtiens deux lignes identiques, donc mets le détenteur dans le nom de l’objet : Healing Potion (Mara). La colonne owner filtre toujours par membre.

Ensuite, la permission write couvre toutes les lignes, pas seulement celles du joueur, donc un joueur qui a write peut modifier l’inventaire de n’importe qui. Garde write pour le staff et donne read aux joueurs.

/inventory add item:Healing Potion (Mara) quantity:3 owner:@Mara rarity:Common

/inventory update row:Healing Potion (Mara) quantity:1 _mode:Decrement

/inventory query owner:@Mara liste tout ce que détient Mara. Query affiche les lignes les plus récentes d’abord (10 par défaut, jusqu’à 25 avec limit) et seulement les quatre premières colonnes, donc garde les plus importantes devant. Le mode Ajouter ajoute, Soustraire soustrait, et Définir (la valeur par défaut) remplace la valeur.

Étape 2 : ajouter une table de stock pour la boutique

L’offre Free comprend deux tables, donc inventaire et boutique rentrent. Dans le tableau de bord, crée une table appelée Shop avec ces colonnes : item (texte, obligatoire), stock (nombre, obligatoire), price (nombre), category (liste de choix, avec tes propres choix comme Weapons, Ammo, Medical) et notes (texte). Le type d’une colonne ne peut plus être changé après la création, donc fais des quantités et des prix des nombres.

  • /shop add item:Bandage stock:40 price:25 category:Medical
  • /shop update row:Bandage stock:1 _mode:Decrement enregistre une vente. Le staff la lance quand une vente a lieu dans le RP.
  • /shop update row:Bandage stock:20 _mode:Increment enregistre un réapprovisionnement.
  • /shop update row:Bandage price:30 change le prix.
  • /shop query stock:0 liste les objets en rupture (une correspondance exacte, pas « inférieur à »).

_mode s’applique à chaque nombre passé dans une même commande. Si tu envoies stock et price ensemble avec le mode Soustraire, les deux baissent. Change-les dans des commandes séparées.

Pour un concessionnaire de véhicules, utilise la même structure avec vehicle, stock, price et une colonne dealer (de type membre), puis /shop query dealer:@Kade affiche le stock d’un concessionnaire.

Le stock peut passer sous zéro. Rien n’arrête une décrémentation à 0, donc vérifie la quantité si ça compte pour toi.

Étape 3 : banque et prêts en simples registres (facultatif)

Crée une table appelée Bank avec account (texte, obligatoire, en premier pour que le sélecteur de ligne l’affiche), member (membre), balance (nombre), loan_owed (nombre) et notes (texte). L’inventaire et la boutique utilisent déjà les deux tables gratuites, donc cette troisième demande Pro.

  • /bank add account:Mara member:@Mara balance:500 loan_owed:0
  • /bank update row:Mara balance:200 _mode:Increment enregistre un dépôt.
  • /bank update row:Mara loan_owed:100 _mode:Decrement enregistre un remboursement.
  • /bank leaderboard column:loan_owed classe les plus grosses dettes en premier.

Il n’y a ni intérêts, ni échéance, ni virement automatique. Le staff tape les nombres. Il n’y a pas non plus d’historique des changements : view montre qui a créé une ligne et quand elle a changé pour la dernière fois, pas les anciennes valeurs. Si tu as besoin d’une trace, ajoute une table Transactions (account, amount, kind, date) et ajoute une ligne pour chaque mouvement. Pour une réserve commune de guilde, vois plutôt le guide de la banque de guilde.

Quand autre chose convient mieux

CordBase n’a ni passage en caisse, ni monnaie que les joueurs gagnent ou dépensent, ni paiements entre membres. Les commandes sont toujours le nom de la table suivi d’une des actions fixes, donc tu ne peux pas créer un /withdraw personnalisé. Il ne lit pas les messages, donc « -100 flèches » tapé dans le chat ne fait rien. Si tu veux une économie virtuelle où les membres gagnent des pièces et achètent dans une boutique, utilise un bot d’économie comme UnbelievaBoat. Si tu veux des règles et des dés, utilise un bot de jeu de rôle comme Avrae (voir le guide des fiches de personnage). Un tableur est préférable si tu as besoin de formules.

Les limites à connaître

  • Free : 2 tables, 100 lignes chacune. Pro (8 $/mois) : tables illimitées, 10 000 lignes par table et modifications groupées. Max (15 $/mois) : 50 000 lignes. L’export CSV et JSON est inclus dans toutes les offres. Voir les tarifs.
  • Jusqu’à 25 colonnes par table. Les tables se conçoivent sur le web, pas depuis Discord.
  • Chaque membre peut lancer 5 commandes toutes les 10 secondes.
  • Pas d’import CSV pour l’instant, donc les listes existantes s’ajoutent avec add ou par le tableau de bord.
  • Voir la référence des commandes pour toutes les options.

Questions fréquentes

Je peux avoir une commande /withdraw ou laisser les joueurs acheter eux-mêmes ?

Non. Chaque table reçoit les actions fixes add, query, view, update, delete et leaderboard sous son propre nom. Le plus proche, c’est /shop update row:... stock:1 _mode:Decrement, que toute personne avec l’accès en écriture peut lancer. Rien n’est débité au joueur et aucune monnaie ne bouge.

Chaque joueur peut-il voir ou modifier uniquement son propre inventaire ?

Pas avec les permissions. Toute personne qui a l’accès en lecture peut interroger toute la table, et toute personne qui a l’accès en écriture peut changer n’importe quelle ligne. Les membres peuvent filtrer sur leurs propres objets avec /inventory query owner:@yourname.

Est-ce que ça rentre dans l’offre gratuite ?

Les tables d’inventaire et de boutique, oui, puisque Free permet 2 tables de 100 lignes chacune. Une troisième table, comme une banque, demande Pro à 8 $/mois.