Fix retrait DB migration + emojis panel

- db.py: Ajout migration ALTER TABLE pour colonne client_negative_floor
  (correction du bug 'no such column' sur les bases existantes)
- panel.py: Tous les boutons du panel avec emojis
- panel.py: Correction TextSelect -> TextDisplay (panel crash)
This commit is contained in:
utilisateurqu 2026-08-19 21:21:11 +02:00
parent c37a2a0ff9
commit ae451fe894
2 changed files with 48 additions and 38 deletions

View file

@ -37,14 +37,14 @@ def _uid(seed: str) -> str:
return hashlib.md5(seed.encode()).hexdigest()[:12]
def _btn(label, style, cid, cb):
b = discord.ui.Button(label=label, style=style, custom_id=cid)
def _btn(label, style, cid, cb, emoji=None):
b = discord.ui.Button(label=label, style=style, custom_id=cid, emoji=emoji)
b.callback = cb
return b
def _back_btn(cid, cb):
return _btn("◀ Retour", discord.ButtonStyle.secondary, cid, cb)
return _btn("Retour", discord.ButtonStyle.secondary, cid, cb, emoji="◀️")
async def _get_user_bank(guild, user) -> dict:
@ -572,13 +572,13 @@ class CompteDetailView(discord.ui.LayoutView):
items.extend([
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Carte", discord.ButtonStyle.primary, f"cd_card_{safe}", self._card),
_btn("Releve", discord.ButtonStyle.primary, f"cd_stmt_{safe}", self._statement),
_btn("Virement", discord.ButtonStyle.primary, f"cd_vir_{safe}", self._vir),
_btn("Carte", discord.ButtonStyle.primary, f"cd_card_{safe}", self._card, emoji="💳"),
_btn("Relevé", discord.ButtonStyle.primary, f"cd_stmt_{safe}", self._statement, emoji="📄"),
_btn("Virement", discord.ButtonStyle.primary, f"cd_vir_{safe}", self._vir, emoji="💸"),
),
discord.ui.ActionRow(
_btn("+ Depot", discord.ButtonStyle.success, f"cd_dep_{safe}", self._depot),
_btn("- Retrait", discord.ButtonStyle.danger, f"cd_ret_{safe}", self._retrait),
_btn("Dépôt", discord.ButtonStyle.success, f"cd_dep_{safe}", self._depot, emoji="💰"),
_btn("Retrait", discord.ButtonStyle.danger, f"cd_ret_{safe}", self._retrait, emoji="🏧"),
),
discord.ui.Separator(),
discord.ui.ActionRow(_back_btn("back_cd", self._back)),
@ -662,7 +662,7 @@ class ComptePanelView(discord.ui.LayoutView):
solde_str = f"{c['solde']:,.2f} EUR".replace(",", " ")
label = f"{c['bank_name']} — {c['account_type'].title()} — {solde_str}"
safe = _uid(c["rib"])
btn = _btn(label[:80], discord.ButtonStyle.primary, f"cp_acc_{safe}", self._make_acc_cb(c))
btn = _btn(label[:80], discord.ButtonStyle.primary, f"cp_acc_{safe}", self._make_acc_cb(c), emoji="💰")
items.append(discord.ui.ActionRow(btn))
items.extend([
@ -706,16 +706,16 @@ class BanquierPanelView(discord.ui.LayoutView):
),
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Ouvrir Compte", discord.ButtonStyle.success, _uid("bq_open_" + str(author.id)), self._ouvrir),
_btn("Consulter Clients", discord.ButtonStyle.secondary, _uid("bq_clients_" + str(author.id)), self._clients),
_btn("Ouvrir Compte", discord.ButtonStyle.success, _uid("bq_open_" + str(author.id)), self._ouvrir, emoji="➕"),
_btn("Consulter Clients", discord.ButtonStyle.secondary, _uid("bq_clients_" + str(author.id)), self._clients, emoji="👥"),
),
discord.ui.ActionRow(
_btn("Info Banque", discord.ButtonStyle.secondary, _uid("bq_info_" + str(author.id)), self._info),
_btn("Transactions", discord.ButtonStyle.secondary, _uid("bq_tx_" + str(author.id)), self._tx),
_btn("Info Banque", discord.ButtonStyle.secondary, _uid("bq_info_" + str(author.id)), self._info, emoji="ℹ️"),
_btn("Transactions", discord.ButtonStyle.secondary, _uid("bq_tx_" + str(author.id)), self._tx, emoji="📊"),
),
discord.ui.ActionRow(
_btn("Set Plafond", discord.ButtonStyle.primary, _uid("bq_plaf_" + str(author.id)), self._plafond),
_btn("Set Reserve", discord.ButtonStyle.primary, _uid("bq_res_" + str(author.id)), self._reserve),
_btn("Set Plafond", discord.ButtonStyle.primary, _uid("bq_plaf_" + str(author.id)), self._plafond, emoji="📉"),
_btn("Set Reserve", discord.ButtonStyle.primary, _uid("bq_res_" + str(author.id)), self._reserve, emoji="🏦"),
),
discord.ui.Separator(),
discord.ui.ActionRow(_back_btn("back_bp", self._back)),
@ -838,16 +838,16 @@ class GouvernementPanelView(discord.ui.LayoutView):
discord.ui.TextDisplay("Institutions, fisc, banques."),
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Creer Banque", discord.ButtonStyle.success, "gp_cbanque", self._cbanque),
_btn("Creer Institution", discord.ButtonStyle.success, "gp_cinst", self._cinst),
_btn("Créer Banque", discord.ButtonStyle.success, "gp_cbanque", self._cbanque, emoji="🏦"),
_btn("Créer Institution", discord.ButtonStyle.success, "gp_cinst", self._cinst, emoji="🏛️"),
),
discord.ui.ActionRow(
_btn("Config Fisc", discord.ButtonStyle.primary, "gp_fisc", self._fisc),
_btn("Virement Fisc", discord.ButtonStyle.primary, "gp_vfisc", self._vfisc),
_btn("Config Fisc", discord.ButtonStyle.primary, "gp_fisc", self._fisc, emoji="📋"),
_btn("Virement Fisc", discord.ButtonStyle.primary, "gp_vfisc", self._vfisc, emoji="💸"),
),
discord.ui.ActionRow(
_btn("Lister Banques", discord.ButtonStyle.secondary, "gp_lbanques", self._lbanques),
_btn("Lister Institutions", discord.ButtonStyle.secondary, "gp_linst", self._linst),
_btn("Lister Banques", discord.ButtonStyle.secondary, "gp_lbanques", self._lbanques, emoji="📃"),
_btn("Lister Institutions", discord.ButtonStyle.secondary, "gp_linst", self._linst, emoji="📃"),
),
discord.ui.Separator(),
discord.ui.ActionRow(_back_btn("back_gp", self._back)),
@ -943,20 +943,20 @@ class IdentitePanelView(discord.ui.LayoutView):
discord.ui.TextDisplay("Cartes d'identite, permis, visites medicales."),
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Ma Carte", discord.ButtonStyle.primary, "ip_carte", self._carte),
_btn("Ma Carte", discord.ButtonStyle.primary, "ip_carte", self._carte, emoji="🪪"),
),
]
if has_role(author, "gouvernement"):
items.append(discord.ui.ActionRow(
_btn("Creer Carte", discord.ButtonStyle.success, "ip_ccar", self._ccar),
_btn("Créer Carte", discord.ButtonStyle.success, "ip_ccar", self._ccar, emoji="🪪"),
))
action_items = []
if has_role(author, "auto_ecole"):
action_items.append(_btn("Permis", discord.ButtonStyle.primary, "ip_permis", self._permis))
action_items.append(_btn("Permis", discord.ButtonStyle.primary, "ip_permis", self._permis, emoji="🚗"))
if has_role(author, "ems"):
action_items.append(_btn("Visite Medicale", discord.ButtonStyle.primary, "ip_vismed", self._vismed))
action_items.append(_btn("Visite Médicale", discord.ButtonStyle.primary, "ip_vismed", self._vismed, emoji="🏥"))
if action_items:
items.append(discord.ui.ActionRow(*action_items))
@ -1014,9 +1014,9 @@ class TicketsPanelView(discord.ui.LayoutView):
discord.ui.TextDisplay("Gestion des tickets et messages prives."),
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Embed Ticket", discord.ButtonStyle.success, "tp_ticket", self._ticket),
_btn("Envoyer MP", discord.ButtonStyle.primary, "tp_mp", self._mp),
_btn("MP a Tous", discord.ButtonStyle.danger, "tp_mptous", self._mptous),
_btn("Embed Ticket", discord.ButtonStyle.success, "tp_ticket", self._ticket, emoji="📩"),
_btn("Envoyer MP", discord.ButtonStyle.primary, "tp_mp", self._mp, emoji="✉️"),
_btn("MP à Tous", discord.ButtonStyle.danger, "tp_mptous", self._mptous, emoji="📢"),
),
discord.ui.Separator(),
discord.ui.ActionRow(_back_btn("back_tp", self._back)),
@ -1062,8 +1062,8 @@ class SessionsPanelView(discord.ui.LayoutView):
discord.ui.TextDisplay("Annonces de sessions et gestion des presences."),
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Annoncer Session", discord.ButtonStyle.success, "sp_annonce", self._annonce),
_btn("Liste Presences", discord.ButtonStyle.primary, "sp_liste", self._liste),
_btn("Annoncer Session", discord.ButtonStyle.success, "sp_annonce", self._annonce, emoji="📅"),
_btn("Liste Présences", discord.ButtonStyle.primary, "sp_liste", self._liste, emoji="✅"),
),
discord.ui.Separator(),
discord.ui.ActionRow(_back_btn("back_sp", self._back)),
@ -1096,13 +1096,13 @@ class ConfigPanelView(discord.ui.LayoutView):
discord.ui.TextDisplay("Configurer les roles, salons et categories."),
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Definir Role", discord.ButtonStyle.primary, "cfg_role", self._crole),
_btn("Definir Salon", discord.ButtonStyle.primary, "cfg_chan", self._cchan),
_btn("Definir Categorie", discord.ButtonStyle.primary, "cfg_cat", self._ccat),
_btn("Définir Rôle", discord.ButtonStyle.primary, "cfg_role", self._crole, emoji="🎭"),
_btn("Définir Salon", discord.ButtonStyle.primary, "cfg_chan", self._cchan, emoji="💬"),
_btn("Définir Catégorie", discord.ButtonStyle.primary, "cfg_cat", self._ccat, emoji="📂"),
),
discord.ui.ActionRow(
_btn("Voir Config", discord.ButtonStyle.secondary, "cfg_voir", self._cvoir),
_btn("Reset Config", discord.ButtonStyle.danger, "cfg_reset", self._creset),
_btn("Voir Config", discord.ButtonStyle.secondary, "cfg_voir", self._cvoir, emoji="👁️"),
_btn("Reset Config", discord.ButtonStyle.danger, "cfg_reset", self._creset, emoji="🗑️"),
),
discord.ui.Separator(),
discord.ui.ActionRow(_back_btn("back_cfg", self._back)),
@ -1180,13 +1180,13 @@ class DiversPanelView(discord.ui.LayoutView):
discord.ui.TextDisplay("Lancer de de et autres outils."),
discord.ui.Separator(),
discord.ui.ActionRow(
_btn("Lancer un De", discord.ButtonStyle.primary, "dp_roll", self._roll),
_btn("Lancer un Dé", discord.ButtonStyle.primary, "dp_roll", self._roll, emoji="🎲"),
),
]
if author.guild_permissions.administrator:
items.append(discord.ui.ActionRow(
_btn("Stats Bot", discord.ButtonStyle.secondary, "dp_stats", self._stats),
_btn("Stats Bot", discord.ButtonStyle.secondary, "dp_stats", self._stats, emoji="📊"),
))
items.extend([
@ -1281,7 +1281,7 @@ class MainPanelView(discord.ui.LayoutView):
self.add_item(discord.ui.Container(
discord.ui.TextDisplay(f"## {guild_name} — Panel de Commandes"),
discord.ui.TextDisplay(f"**Vos roles :** {role_text}"),
discord.ui.TextSelect("Selectionnez une categorie ci-dessous."),
discord.ui.TextDisplay("Selectionnez une catégorie ci-dessous."),
discord.ui.Separator(),
discord.ui.ActionRow(CategorySelect(author, bot)),
accent_colour=discord.Colour(C_MAIN),