⚙️ Panneau Admin — Configuration personnalisée
Créez des panneaux de configuration avec des champs personnalisés pour votre bot — via l'application ou via le code
Introduction
Le Panneau Admin vous permet de créer des panneaux de configuration personnalisés pour votre bot. Chaque panneau contient un ou plusieurs champs (texte, nombre, checkbox, mot de passe, etc.) dont les valeurs sont accessibles depuis le code de votre bot.
AdminPanel.setPanel().📱 Méthode 1 : Via l'application
Créez vos panneaux directement depuis l'onglet Panneau Admin de votre bot dans l'application BotStrike. Interface visuelle, simple et rapide.
💻 Méthode 2 : Via le code
Définissez vos panneaux directement dans le code de votre bot avec AdminPanel.setPanel(). Plus flexible, permet de créer des configurations avancées.
• Un panneau créé via l'app est accessible dans le code avec
AdminPanel.getFieldValue()• Un panneau créé via le code apparaît dans l'onglet Panneau Admin de l'app
• Les valeurs modifiées depuis l'app ou le code sont synchronisées
Utilité
| Cas d'usage | Description |
|---|---|
| Clés API | Stockez vos clés API tierces (OpenAI, Stripe, etc.) de manière sécurisée |
| Admin ID | Configurez l'ID Telegram de l'administrateur du bot |
| Options | Mode maintenance, messages personnalisés, limites, etc. |
| Dashboard rapide | Affichez et modifiez des valeurs importantes depuis l'app mobile |
📱 Méthode 1 : Créer via l'application
La méthode la plus simple pour créer un panneau admin. Tout se fait dans l'interface de l'application BotStrike, sans écrire de code.
Étape 1 : Accéder à l'onglet Panneau Admin
1. Ouvrez votre bot dans l'application BotStrike (tapez sur le bot dans la liste)
2. En haut de l'écran, vous verrez une barre d'onglets : Dashboard, Commandes, Bibliothèques… Faites glisser vers la droite.
3. L'onglet Panneau Admin (icône ⚙️) est situé vers la fin de la barre. Tapez dessus.
Étape 2 : Créer un nouveau panneau
Appuyez sur le bouton bleu « + Créer un panneau » en bas de l'écran. Une fenêtre de dialogue s'ouvre avec les champs suivants :
| Champ | Description | Exemple |
|---|---|---|
| Nom du panneau | Identifiant unique (lettres, chiffres, tirets, underscore). Ce nom sera utilisé dans le code pour accéder au panneau. Ne peut pas être modifié après création. | ApiKeys |
| Titre | Titre affiché dans l'interface (peut contenir des espaces et accents) | Clés API |
| Description | Texte court affiché sous le titre pour expliquer le rôle du panneau | Configurez vos API tierces |
| Icône | Choisissez parmi 10 icônes dans le menu déroulant | API |
Icônes disponibles :
Settings Key Person Lock Dashboard
Analytics Notification Message Payment API
Étape 3 : Ajouter des champs au panneau
Après avoir rempli les informations du panneau, appuyez sur « Ajouter un champ ». Pour chaque champ, remplissez :
| Propriété | Obligatoire | Description | Exemple |
|---|---|---|---|
| Nom | ✅ Oui | Identifiant technique (UPPER_SNAKE_CASE recommandé). C'est ce nom que vous utiliserez dans le code via getPanelValues(). | OPENAI_KEY |
| Titre | ✅ Oui | Libellé visible dans l'interface au-dessus du champ | Clé OpenAI |
| Type | ✅ Oui | string, integer, float, text (multi-lignes), password (masqué) ou checkbox (on/off) | password |
| Description | ❌ Non | Texte d'aide affiché en petit sous le champ | Votre clé secrète OpenAI |
| Placeholder | ❌ Non | Texte grisé affiché quand le champ est vide | sk-... |
Vous pouvez ajouter autant de champs que nécessaire. Chaque champ apparaît dans la liste avec une icône de type et un bouton ✕ pour le supprimer.
•
string → champ texte simple (1 ligne)•
integer → champ numérique (entiers uniquement, clavier numérique)•
float → champ numérique (décimaux acceptés)•
text → zone de texte multi-lignes (3-4 lignes visibles)•
password → champ masqué (les caractères sont remplacés par des •••)•
checkbox → interrupteur on/off (true/false)
Étape 4 : Valider et commencer à utiliser
Appuyez sur « Créer » — le panneau apparaît immédiatement dans la liste avec :
- Un header coloré avec l'icône choisie et le titre
- Les champs avec leurs types respectifs (champ texte, switch pour checkbox, champ masqué pour password…)
- Tous les champs sont en lecture seule par défaut (grisés)
Étape 5 : Remplir et modifier les valeurs
Les champs sont verrouillés par défaut. Pour les modifier :
- Appuyez sur l'icône crayon ✏️ dans le coin supérieur droit du header du panneau
- Les champs deviennent éditables (le fond change, les curseurs apparaissent)
- Remplissez ou modifiez les valeurs
- Appuyez sur le bouton « Sauvegarder » qui apparaît en bas
- Les champs se re-verrouillent automatiquement
Vous pouvez aussi ajouter de nouveaux champs pendant le mode édition en tapant « Ajouter un champ ».
Exemple concret n°1 : Clé API + Mode maintenance
Dans l'application :
1. Onglet Panneau Admin → bouton « + Créer un panneau »
2. Nom :
BotConfig / Titre : Configuration du bot / Icône : Settings3. Ajouter un champ → Nom :
OPENAI_KEY / Titre : Clé OpenAI / Type : password4. Ajouter un champ → Nom :
MAINTENANCE / Titre : Mode maintenance / Type : checkbox5. Cliquer Créer
6. ✏️ → Remplir la clé OpenAI → cocher ou décocher Maintenance → Sauvegarder
Dans le code du bot :
// Lire les valeurs configurées dans l'app
var config = AdminPanel.getPanelValues("BotConfig");
if (config.MAINTENANCE) {
Bot.sendMessage("🔧 Bot en maintenance !");
return;
}
// Utiliser la clé OpenAI
var apiKey = config.OPENAI_KEY;
if (!apiKey) {
Bot.sendMessage("❌ Clé OpenAI non configurée. Allez dans Panneau Admin → BotConfig.");
return;
}
Bot.sendMessage("✅ Bot prêt ! Clé API configurée.");
# Lire les valeurs configurées dans l'app
config = AdminPanel.getPanelValues("BotConfig")
if config.get("MAINTENANCE"):
Bot.sendMessage("🔧 Bot en maintenance !")
else:
api_key = config.get("OPENAI_KEY")
if not api_key:
Bot.sendMessage("❌ Clé OpenAI non configurée. Allez dans Panneau Admin → BotConfig.")
else:
Bot.sendMessage("✅ Bot prêt ! Clé API configurée.")
Exemple concret n°2 : Configuration multi-langue
Dans l'application :
1. Créer un panneau → Nom :
LangConfig / Titre : Langue & Messages / Icône : Message2. Champ 1 : Nom :
DEFAULT_LANG / Titre : Langue par défaut / Type : string / Placeholder : fr, en, es...3. Champ 2 : Nom :
WELCOME_TEXT / Titre : Message de bienvenue / Type : text4. Champ 3 : Nom :
GOODBYE_TEXT / Titre : Message d'au revoir / Type : text5. Créer → ✏️ → Remplir les messages → Sauvegarder
// Commande /start — utilise le message configurable
var lang = AdminPanel.getPanelValues("LangConfig");
var welcome = lang.WELCOME_TEXT || "Bienvenue !";
Bot.sendMessage(welcome);
// Commande /bye
var bye = AdminPanel.getFieldValue({
panel_name: "LangConfig",
field_name: "GOODBYE_TEXT"
}) || "Au revoir !";
Bot.sendMessage(bye);
# Commande /start — utilise le message configurable
lang = AdminPanel.get_panel_values("LangConfig")
welcome = lang.get("WELCOME_TEXT") or "Bienvenue !"
bot.send(welcome)
# Commande /bye
bye = AdminPanel.get_field_value({
"panel_name": "LangConfig",
"field_name": "GOODBYE_TEXT"
}) or "Au revoir !"
bot.send(bye)
💻 Méthode 2 : Créer via le code
Utilisez AdminPanel.setPanel() pour définir un panneau avec ses champs directement dans le code de votre bot.
Syntaxe
AdminPanel.setPanel({
panel_name: "NomDuPanneau",
data: { ... }, // Configuration du panneau
force: false // true = réinitialise les valeurs des champs
});
Structure de data
| Propriété | Type | Description |
|---|---|---|
title | string | Titre affiché du panneau |
description | string | Description courte |
icon | string | Icône : "key", "settings", "person", "lock", "dashboard", "analytics", "notification", "message", "payment", "api" |
index | number | Ordre d'affichage (0 = premier) |
button_title | string | Texte du bouton Sauvegarder (défaut: "SAVE") |
fields | array | Liste des champs du panneau |
Exemple complet
// Créer un panneau "AdminInfo" avec 3 champs
var panel = {
title: "Configuration Admin",
description: "Paramètres de l'administrateur du bot",
icon: "key",
index: 0,
button_title: "SAUVEGARDER",
fields: [
{
name: "ADMIN_ID",
title: "ID Admin Telegram",
description: "Votre ID Telegram pour recevoir les notifications",
type: "string",
placeholder: "Ex: 123456789"
},
{
name: "MAINTENANCE_MODE",
title: "Mode maintenance",
description: "Activer pour bloquer les commandes utilisateur",
type: "checkbox",
value: false
},
{
name: "WELCOME_MSG",
title: "Message de bienvenue",
description: "Message envoyé aux nouveaux utilisateurs",
type: "text",
placeholder: "Bienvenue sur notre bot !"
}
]
};
AdminPanel.setPanel({
panel_name: "AdminInfo",
data: panel
});
# Créer un panneau "AdminInfo" avec 3 champs
panel = {
"title": "Configuration Admin",
"description": "Paramètres de l'administrateur du bot",
"icon": "key",
"index": 0,
"button_title": "SAUVEGARDER",
"fields": [
{
"name": "ADMIN_ID",
"title": "ID Admin Telegram",
"description": "Votre ID Telegram pour recevoir les notifications",
"type": "string",
"placeholder": "Ex: 123456789"
},
{
"name": "MAINTENANCE_MODE",
"title": "Mode maintenance",
"description": "Activer pour bloquer les commandes utilisateur",
"type": "checkbox",
"value": False
},
{
"name": "WELCOME_MSG",
"title": "Message de bienvenue",
"description": "Message envoyé aux nouveaux utilisateurs",
"type": "text",
"placeholder": "Bienvenue sur notre bot !"
}
]
}
AdminPanel.setPanel({
"panel_name": "AdminInfo",
"data": panel
})
data. Utilisez avec précaution.
Lire les valeurs
Lire un seul champ
Utilisez AdminPanel.getFieldValue() pour lire la valeur d'un champ spécifique.
var adminId = AdminPanel.getFieldValue({
panel_name: "AdminInfo",
field_name: "ADMIN_ID"
});
Bot.sendMessage("Admin ID: " + adminId);
admin_id = AdminPanel.get_field_value({
"panel_name": "AdminInfo",
"field_name": "ADMIN_ID"
})
Bot.sendMessage("Admin ID: " + str(admin_id))
Lire toutes les valeurs d'un panneau
Utilisez AdminPanel.getPanelValues() pour récupérer toutes les valeurs d'un panneau sous forme d'objet.
var values = AdminPanel.getPanelValues("AdminInfo");
// values = { ADMIN_ID: "123456", MAINTENANCE_MODE: true, WELCOME_MSG: "Bienvenue !" }
Bot.sendMessage("Admin: " + values.ADMIN_ID);
Bot.sendMessage("Maintenance: " + (values.MAINTENANCE_MODE ? "OUI" : "NON"));
values = AdminPanel.get_panel_values("AdminInfo")
# values = {"ADMIN_ID": "123456", "MAINTENANCE_MODE": True, "WELCOME_MSG": "Bienvenue !"}
Bot.sendMessage("Admin: " + str(values["ADMIN_ID"]))
Bot.sendMessage("Maintenance: " + ("OUI" if values["MAINTENANCE_MODE"] else "NON"))
Modifier les valeurs
Utilisez AdminPanel.setFieldValue() pour modifier la valeur d'un champ depuis le code.
// Mettre à jour l'ID admin
var result = AdminPanel.setFieldValue({
panel_name: "AdminInfo",
field_name: "ADMIN_ID",
value: String(user.id)
});
Bot.sendMessage(result ? "✅ ID admin mis à jour" : "❌ Erreur");
// Activer le mode maintenance
AdminPanel.setFieldValue({
panel_name: "AdminInfo",
field_name: "MAINTENANCE_MODE",
value: true
});
# Mettre à jour l'ID admin
result = AdminPanel.set_field_value({
"panel_name": "AdminInfo",
"field_name": "ADMIN_ID",
"value": str(user["id"])
})
Bot.sendMessage("✅ ID admin mis à jour" if result else "❌ Erreur")
# Activer le mode maintenance
AdminPanel.set_field_value({
"panel_name": "AdminInfo",
"field_name": "MAINTENANCE_MODE",
"value": True
})
Types de champs
Chaque champ d'un panneau peut avoir l'un des types suivants :
| Type | Affichage | Description |
|---|---|---|
string | Champ texte (1 ligne) | Texte court : nom, ID, URL, etc. |
integer | Champ numérique | Nombre entier. Clavier numérique sur mobile. |
float | Champ numérique | Nombre décimal. |
text | Zone de texte (multi-lignes) | Texte long : messages, descriptions, etc. |
password | Champ masqué | Valeur cachée (●●●). Pour clés API, tokens, etc. |
checkbox | Interrupteur (switch) | Booléen : true/false. Mode maintenance, options on/off. |
Propriétés d'un champ
| Propriété | Type | Requis | Description |
|---|---|---|---|
name | string | ✅ | Identifiant unique du champ (ex: "API_KEY") |
title | string | — | Titre affiché (défaut: name) |
description | string | — | Texte d'aide sous le champ |
type | string | — | Type du champ (défaut: "string") |
value | any | — | Valeur par défaut |
placeholder | string | — | Texte fantôme dans le champ vide |
hidden | boolean | — | Masquer le champ dans l'interface (défaut: false) |
Exemples complets
Exemple 1 : Mode maintenance avec notification admin
// Commande /start — vérifie le mode maintenance
var maintenance = AdminPanel.getFieldValue({
panel_name: "AdminInfo",
field_name: "MAINTENANCE_MODE"
});
if (maintenance) {
Bot.sendMessage("🔧 Le bot est en maintenance. Revenez plus tard !");
return;
}
var welcomeMsg = AdminPanel.getFieldValue({
panel_name: "AdminInfo",
field_name: "WELCOME_MSG"
}) || "Bienvenue !";
Bot.sendMessage(welcomeMsg);
# Commande /start — vérifie le mode maintenance
maintenance = AdminPanel.get_field_value({
"panel_name": "AdminInfo",
"field_name": "MAINTENANCE_MODE"
})
if maintenance:
Bot.sendMessage("🔧 Le bot est en maintenance. Revenez plus tard !")
else:
welcome_msg = AdminPanel.get_field_value({
"panel_name": "AdminInfo",
"field_name": "WELCOME_MSG"
}) or "Bienvenue !"
Bot.sendMessage(welcome_msg)
Exemple 2 : Panneau de configuration API
// Créer un panneau pour les clés API
AdminPanel.setPanel({
panel_name: "ApiKeys",
data: {
title: "Clés API",
description: "Configurez vos API tierces",
icon: "api",
index: 1,
fields: [
{
name: "OPENAI_KEY",
title: "Clé OpenAI",
type: "password",
placeholder: "sk-..."
},
{
name: "MAX_TOKENS",
title: "Tokens max par requête",
type: "integer",
value: 1000
},
{
name: "AI_ENABLED",
title: "Activer l'IA",
type: "checkbox",
value: true
}
]
}
});
// Utiliser les valeurs dans une commande
var config = AdminPanel.getPanelValues("ApiKeys");
if (config.AI_ENABLED && config.OPENAI_KEY) {
// Appeler l'API OpenAI avec config.OPENAI_KEY
Bot.sendMessage("🤖 IA activée (max " + config.MAX_TOKENS + " tokens)");
} else {
Bot.sendMessage("❌ L'IA n'est pas configurée.");
}
# Créer un panneau pour les clés API
AdminPanel.set_panel({
"panel_name": "ApiKeys",
"data": {
"title": "Clés API",
"description": "Configurez vos API tierces",
"icon": "api",
"index": 1,
"fields": [
{
"name": "OPENAI_KEY",
"title": "Clé OpenAI",
"type": "password",
"placeholder": "sk-..."
},
{
"name": "MAX_TOKENS",
"title": "Tokens max par requête",
"type": "integer",
"value": 1000
},
{
"name": "AI_ENABLED",
"title": "Activer l'IA",
"type": "checkbox",
"value": True
}
]
}
})
# Utiliser les valeurs dans une commande
config = AdminPanel.get_panel_values("ApiKeys")
if config["AI_ENABLED"] and config["OPENAI_KEY"]:
Bot.sendMessage("🤖 IA activée (max " + str(config["MAX_TOKENS"]) + " tokens)")
else:
Bot.sendMessage("❌ L'IA n'est pas configurée.")
Exemple 3 : Panneau e-commerce avec champs cachés
// Commande /setup — Panneau boutique avec prix et limites
AdminPanel.setPanel({
panel_name: "ShopConfig",
data: {
title: "🛍️ Configuration Boutique",
description: "Prix, stock et options de la boutique",
icon: "payment",
index: 2,
button_title: "ENREGISTRER",
fields: [
{
name: "ITEM_PRICE",
title: "Prix d'un article (€)",
type: "float",
value: 9.99,
placeholder: "Ex: 9.99"
},
{
name: "MAX_STOCK",
title: "Stock maximum",
type: "integer",
value: 100
},
{
name: "SHOP_OPEN",
title: "Boutique ouverte",
description: "Désactivez pour fermer la boutique temporairement",
type: "checkbox",
value: true
},
{
name: "STRIPE_KEY",
title: "Clé Stripe",
type: "password",
placeholder: "sk_live_..."
},
{
name: "INTERNAL_COUNTER",
title: "Compteur interne",
type: "integer",
value: 0,
hidden: true // Invisible dans l'app, mais accessible via le code
}
]
}
});
// Commande /buy — Utilise les valeurs du panneau
var shop = AdminPanel.getPanelValues("ShopConfig");
if (!shop.SHOP_OPEN) {
Bot.sendMessage("🚫 La boutique est fermée actuellement.");
return;
}
// Incrémenter le compteur caché
var count = shop.INTERNAL_COUNTER || 0;
AdminPanel.setFieldValue({
panel_name: "ShopConfig",
field_name: "INTERNAL_COUNTER",
value: count + 1
});
Bot.sendMessage(
"🛒 Article ajouté au panier !\n" +
"💰 Prix : " + shop.ITEM_PRICE + " €\n" +
"📦 Stock restant : " + shop.MAX_STOCK
);
# Commande /setup — Panneau boutique avec prix et limites
AdminPanel.set_panel({
"panel_name": "ShopConfig",
"data": {
"title": "🛍️ Configuration Boutique",
"description": "Prix, stock et options de la boutique",
"icon": "payment",
"index": 2,
"button_title": "ENREGISTRER",
"fields": [
{
"name": "ITEM_PRICE",
"title": "Prix d'un article (€)",
"type": "float",
"value": 9.99,
"placeholder": "Ex: 9.99"
},
{
"name": "MAX_STOCK",
"title": "Stock maximum",
"type": "integer",
"value": 100
},
{
"name": "SHOP_OPEN",
"title": "Boutique ouverte",
"description": "Désactivez pour fermer la boutique temporairement",
"type": "checkbox",
"value": True
},
{
"name": "STRIPE_KEY",
"title": "Clé Stripe",
"type": "password",
"placeholder": "sk_live_..."
},
{
"name": "INTERNAL_COUNTER",
"title": "Compteur interne",
"type": "integer",
"value": 0,
"hidden": True # Invisible dans l'app, mais accessible via le code
}
]
}
})
# Commande /buy — Utilise les valeurs du panneau
shop = AdminPanel.get_panel_values("ShopConfig")
if not shop["SHOP_OPEN"]:
Bot.sendMessage("🚫 La boutique est fermée actuellement.")
else:
# Incrémenter le compteur caché
count = shop.get("INTERNAL_COUNTER", 0) or 0
AdminPanel.set_field_value({
"panel_name": "ShopConfig",
"field_name": "INTERNAL_COUNTER",
"value": count + 1
})
Bot.sendMessage(
"🛒 Article ajouté au panier !\n"
"💰 Prix : " + str(shop["ITEM_PRICE"]) + " €\n"
"📦 Stock restant : " + str(shop["MAX_STOCK"])
)
hidden: true sont invisibles dans l'interface de l'application mais restent accessibles en lecture et écriture depuis le code. Utile pour stocker des compteurs, des états internes ou des données techniques que l'admin ne doit pas modifier manuellement.
Bonnes pratiques
📋 Conventions de nommage
| Élément | Convention | Exemples |
|---|---|---|
| Panel name | PascalCase ou kebab-case | ApiKeys, shop-config |
| Field name | UPPER_SNAKE_CASE | ADMIN_ID, MAX_TOKENS |
🔒 Sécurité
Utilisez le type password pour les clés API, tokens et secrets. La valeur est masquée (●●●) dans l'interface mais reste lisible en clair dans le code.
💡 Astuces
- Utilisez
hidden: truepour stocker des données internes (compteurs, timestamps, états) - Appelez
setPanel()dans une commande/setuppour initialiser les panneaux au premier lancement - N'utilisez
force: trueque pour réinitialiser volontairement toutes les valeurs - Combinez
getFieldValue()avec des valeurs par défaut :AdminPanel.getFieldValue({...}) || "valeur par défaut" - Les valeurs sont persistantes — elles survivent aux redémarrages du bot
deletePanel() dans le code.
Récapitulatif
Méthodes
| Méthode | Description |
|---|---|
AdminPanel.setPanel({ panel_name, data, force }) | Crée ou met à jour un panneau avec ses champs. Retourne true / false. |
AdminPanel.getFieldValue({ panel_name, field_name }) | Retourne la valeur d'un champ, ou null si non trouvé. |
AdminPanel.setFieldValue({ panel_name, field_name, value }) | Modifie la valeur d'un champ. Retourne true / false. |
AdminPanel.getPanelValues(panel_name) | Retourne toutes les valeurs sous forme d'objet { field_name: value }. |
set_panel(), get_field_value(), set_field_value(), get_panel_values().
Deux méthodes de création
| Méthode | Avantages |
|---|---|
| 📱 Via l'application | Simple, visuel, pas de code nécessaire. Idéal pour des configurations rapides. |
| 💻 Via le code | Flexible, versionnable, configuration avancée avec valeurs par défaut et types précis. |
AdminPanel est disponible pour tous les bots sans installation de bibliothèque. L'objet est injecté automatiquement dans le sandbox de votre bot.