BotStrike
BotStrike
🌙
Fonctionnement
Configuration
Attendre la réponse
Réactions
Variables
Boutons
Exemples
Médias & User
Référence Telegram
Commande *
Commande !

⚡ Commandes — BSJS (JavaScript)

Configuration et programmation des commandes pour les bots JavaScript

Fonctionnement

Chaque commande de votre bot correspond à un fichier .js dans le dossier commands/.

⚠️ La barre oblique fait partie du nom. /game et game sont deux commandes différentes, avec chacune son propre fichier et son propre code. Une commande n'est pas « quelque chose qui commence par / » : c'est n'importe quel texte qui déclenche un script. /game, game, *, <game, to/, la_ sont toutes des commandes valides.

Le trait de soulignement en début de nom de fichier ajoute la barre oblique :

  • _start.js → commande /start — l'utilisateur tape /start
  • start.js → commande start — l'utilisateur tape start, sans barre
  • _help.js → /help  ·  help.js → help
  • *.js → commande * — attrape tout message non reconnu
  • !error.js → commande !error — gestionnaire d'erreur

Les deux peuvent coexister : un bot peut avoir _game.js et game.js, qui répondront différemment.

📌 Noms libres. Un nom de commande n'est pas limité aux lettres. Vous pouvez créer <game, to/, la_, ?aide… L'application se charge de stocker le fichier sous un nom sûr et garde la correspondance avec le vrai nom. Vous écrivez le nom que vous voulez, le serveur le respecte à l'identique.
📖 Aucun import nécessaire — Les objets Bot, Api, Props, message, user, chat_id sont automatiquement disponibles dans vos scripts. Pas besoin de require() ou import.

Exemple de commande /start (fichier _start.js) :

// Pas de require() nécessaire !
Bot.sendMessage("Bienvenue sur mon bot ! 🎉");
Bot.react("👋");

Configuration d'une commande

Dans l'application BotStrike, chaque commande dispose de ces paramètres. Tout est optionnel sauf le Nom. Chaque option agit automatiquement, sans écrire de code :

ParamètreEffet automatiqueValeur exemple
NomLe texte exact que l'utilisateur tape. La barre oblique fait partie du nom : /start et start sont deux commandes distinctes. Tout nom est accepté — /game, game, <game, to/, la_…/start
AideDescription affichée dans /help et dans la liste des commandes TelegramDémarre le bot
Alias Noms alternatifs qui déclenchent exactement la même commande. L'utilisateur peut taper n'importe lequel. Séparez par des virgules. bonjour, hi, hello
Réponse directe Envoie ce texte automatiquement quand la commande est déclenchée, sans avoir besoin de code. Pratique pour les messages fixes. Merci de votre message !
Clavier Clavier affiché sous le message. Syntaxe : Btn1, Btn2 \n Btn3 (, = côte à côte, \n = nouvelle rangée). Ajouter (callback) sur un bouton pour en faire un bouton inline. Menu, Aide \n Retour
Attendre la réponse Le prochain message de l'utilisateur est re-injecté dans le même script. Dans le script, message contient la réponse. Équivalent à appeler Bot.waitForResponse() sans code supplémentaire. ☑ (coché)
Réaction emoji (autoret) Le bot réagit automatiquement au message de l'utilisateur avec cet emoji, juste avant d'exécuter le script. Équivalent à Bot.react("emoji") en première ligne. 👍   ❤️   🔥
Grande réaction (isBig) Rend la réaction grande et animée (occupe tout l'écran). Équivalent à Bot.react("emoji", {is_big: true}). ☑ (coché)
Action de chat Indicateur affiché à l'utilisateur pendant l'exécution. Valeurs possibles : typing (en train d'écrire…), upload_photo, upload_document, record_voice… typing
Durée d'action Secondes pendant lesquelles l'indicateur est affiché avant d'exécuter le code. 2
Dossier Catégorie d'organisation dans l'éditeur. Aucun effet sur le comportement du bot. admin, shop
Groupes autorisés Restreint l'exécution à certains groupes Telegram. La commande est ignorée dans les autres groupes. ID de groupe
Autoriser diffusion Autorise l'utilisation de cette commande lors d'une diffusion broadcast de masse. ☑ (coché)

Alias — Plusieurs noms pour une même commande

Un alias permet à l'utilisateur de taper différentes variantes pour déclencher la même commande :

// Commande : /start
// Alias : bonjour, hi, hello, salut
// → L'utilisateur peut taper l'un ou l'autre, le même script s'exécute

Bot.sendMessage("Bienvenue ! Comment puis-je vous aider ? 😊");

Réaction emoji automatique (autoret)

Configurer une réaction dans l'application évite d'écrire Bot.react() à chaque fois :

// Config : réaction = "👍" (isBig = coché)
// Le bot réagit automatiquement avant d'exécuter ce script

Bot.sendMessage("Commande reçue ! ✅");
// Équivalent à écrire :
// Bot.react("👍", {is_big: true});
// Bot.sendMessage("Commande reçue ! ✅");

Action de chat (indicateur d'écriture)

// Config : action = "typing", durée = 2
// L'utilisateur voit "[Nom du bot] est en train d'écrire..." pendant 2 secondes
// puis le code s'exécute

let res = await HTTP.get("https://api.example.com/data");
Bot.sendMessage(res.result);

🔁 Retry auto (retentative automatique)

Le champ « Délai retentative auto (secondes) » dans la configuration d'une commande permet de retenter automatiquement une fois l'envoi vers Telegram si la première tentative échoue (problème réseau passager, erreur serveur Telegram, etc.).

Méthodes couvertes : sendMessage, editMessageText, editMessageCaption, sendPhoto, sendVideo, sendDocument, sendAnimation, sendAudio, sendVoice, sendSticker.

Les erreurs de quota (HTTP 402) ne déclenchent pas de retry — c'est une situation finale qui exige une action utilisateur (rechargement d'itérations).

Attendre la réponse

Quand l'option « Attendre la réponse » est cochée dans la configuration de la commande, le bot attend automatiquement le prochain message de l'utilisateur.

La réponse de l'utilisateur est ensuite passée au script via la variable message.

Exemple : demander le nom

// Fichier : ask_name.js (commande /ask_name)
// Option "Attendre la réponse" cochée dans la config

Bot.sendMessage("Comment tu t'appelles ?");

// La variable 'message' contient la réponse de l'utilisateur
// après qu'il ait écrit son prochain message

Via le code (sans cocher l'option)

Vous pouvez aussi programmer l'attente manuellement avec Bot.waitForResponse() :

// Fichier : ask_age.js
Bot.sendMessage("Quel est ton âge ?");

Bot.waitForResponse(function(ctx) {
    let msg = ctx.message;
    Bot.sendMessage("Tu as " + msg + " ans !");
});

Avec runCommand (séparation des commandes)

Au lieu de tout traiter dans un seul callback, vous pouvez rediriger la réponse vers une autre commande avec runCommand. Chaque commande gère son propre travail :

// Fichier : ask_name.js — demande le nom
Bot.sendMessage("Comment tu t'appelles ?");
Bot.waitForResponse({ runCommand: "/got_name" });
// Fichier : got_name.js — reçoit et traite la réponse
// 'message' contient la réponse de l'utilisateur
Props.set("nom_" + chat_id, message);
Bot.sendMessage("Merci " + message + " ! Quel est ton âge ?");
Bot.waitForResponse({ runCommand: "/got_age" });
// Fichier : got_age.js — traite l'âge
let nom = Props.get("nom_" + chat_id);
Bot.sendMessage(nom + ", tu as " + message + " ans ! ✅");
💡 Note — Bot.waitForResponse(handler) attend le prochain message de l'utilisateur uniquement. Les autres utilisateurs ne sont pas affectés. Avec runCommand, la réponse est traitée par la commande cible. Le nom donné à runCommand doit être exactement celui d'une commande existante. Un bouton du menu ou une /commande tapée par l'utilisateur sort de l'attente.

Réactions

Les réactions permettent de mettre un emoji sur le message de l'utilisateur. Il existe deux types :

Réaction simple

Un petit emoji qui apparaît dans le coin du message :

Réaction simple — petit emoji dans le coin du message
// Réaction simple (par défaut)
Bot.react("👍");
Bot.react("❤️");
Bot.react("🤖");

Réaction isBig (grande animation)

Un gros emoji animé qui prend tout l'écran :

Réaction isBig — gros emoji animé à l'écran
// Grande réaction animée
Bot.react("👍", { is_big: true });
ParamètreDéfautDescription
emoji"👍"L'emoji à utiliser
{ is_big: true }falsetrue pour la grande animation
📖 Deux façons — Vous pouvez configurer la réaction dans l'application BotStrike (automatique) ou la programmer manuellement via Bot.react() dans votre script.

Variables disponibles

Dans chaque fichier de commande, ces variables sont automatiquement disponibles (aucun require) :

VariableTypeDescription
BotobjectInstance du bot — sendMessage(), sendPhoto(), react(), etc.
ApiproxyAppels directs à l'API Telegram — Api.sendMessage({...})
PropsproxyStockage — Props.set(), Props.get()
messagestringLe texte du message envoyé par l'utilisateur
chat_idnumberL'ID du chat de l'utilisateur
message_idnumberL'ID du message de l'utilisateur
userobjectInfos complètes : user.first_name, user.username, etc.
paramsstringTexte après la commande — /start hello → "hello"
inspect(val)functionConvertit n'importe quelle valeur en chaîne lisible (object, array…). Utile pour débugger.

🔍 Fonction inspect() — Débogage

inspect(val) convertit n'importe quelle valeur JavaScript en texte lisible. Équivalent de JSON.stringify(val, null, 2) mais sans planter sur les valeurs non-sérialisables.

// Afficher toutes les infos de l'utilisateur
Bot.sendMessage(inspect(user));

// Débugger une propriété stockée
const val = Props.get("mon_objet");
Bot.sendMessage(inspect(val));

// Afficher n'importe quelle valeur
Bot.sendMessage(inspect({ a: 1, b: [2, 3] }));
// Résultat :
// {
//   "a": 1,
//   "b": [2, 3]
// }

Boutons (Inline Keyboard & Reply Keyboard)

Telegram propose deux types de claviers : les boutons inline (sous le message) et les reply keyboards (menu en bas). Vous pouvez les personnaliser avec des styles, des liens, et plus.

Bouton inline simple (callback)

Un bouton qui déclenche une action dans le bot :

// Bouton simple avec callback_data
Bot.sendButtons("Choisissez une option :", [
    { text: "⭕ Normal", data: "afficher_infos" },
    { text: "📞 Contact", data: "contact" }
]);

Bouton URL (ouvrir un lien)

Un bouton qui ouvre un lien dans le navigateur :

// Bouton qui ouvre une page web
Bot.sendButtons("🌐 Visitez notre site :", [
    { text: "🔗 Ouvrir le site", url: "https://exemple.com" },
    { text: "💬 Telegram", url: "https://t.me/moncanal" }
]);

Styles de boutons

Telegram supporte des styles pour changer l'apparence des boutons inline :

StyleApparenceUsage
(aucun)⭕ Neutre / grisAction standard
primary🟦 Bleu principalAction principale
success🟩 VertConfirmer / Valider
danger🟥 RougeSupprimer / Annuler

Exemple complet avec styles (via Api)

// Interface de boutons colorés
Api.sendMessage({
    chat_id: chat_id,
    text: "<b>🔥 Interface de Boutons</b>\n\nToutes les couleurs disponibles :",
    parse_mode: "HTML",
    reply_markup: {
        inline_keyboard: [
            // Rangée 1 — Neutre et Principal
            [
                { text: "⭕ Normal", callback_data: "afficher_infos" },
                { text: "🟦 Principal", callback_data: "confirmer", style: "primary" }
            ],
            // Rangée 2 — Succès et Danger
            [
                { text: "🟩 Valider", callback_data: "valider", style: "success" },
                { text: "🟥 Supprimer", callback_data: "supprimer", style: "danger" }
            ],
            // Rangée 3 — Avec icône custom
            [
                { text: "⭐ Favoris", callback_data: "favoris", style: "primary", icon_custom_emoji_id: "5368324170671202286" }
            ]
        ]
    }
});

Bouton copier du texte

Un bouton qui copie du texte dans le presse-papier de l'utilisateur :

// Bouton qui copie un code promo
Api.sendMessage({
    chat_id: chat_id,
    text: "🎁 Votre code promo :",
    reply_markup: {
        inline_keyboard: [
            [{ text: "📋 Copier le code", copy_text: { text: "PROMO2026" } }]
        ]
    }
});

Reply Keyboard (menu en bas)

Un clavier personnalisé qui reste en bas de l'écran :

// Menu classique (Bot.sendMenu)
Bot.sendMenu("👇 Choisissez :", [
    ["📊 Stats", "⚙️ Paramètres"],
    ["❓ Aide"]
]);

Chaque bouton lance la commande qui porte exactement son texte : le bouton « 📊 Stats » lance la commande nommée 📊 Stats. Pour garder un texte libre, reliez le bouton à une commande avec command :

// Chaque bouton mène à une commande, quel que soit son texte
Bot.sendMenu("👇 Choisissez :", [
    [{ text: "📊 Mes statistiques", command: "/stats" }],
    [{ text: "❓ Besoin d'aide", command: "/aide" }]
]);
💡 Jamais coincé — Un bouton de ce menu, ou une /commande tapée, sort d'une question en cours (Bot.waitForResponse) : la commande demandée s'exécute, la question est abandonnée.

Passer une valeur par un bouton

Nom de la commande, une espace, puis la valeur : la commande la reçoit dans params. Une seule commande /rdv_ok sert ainsi tous les rendez-vous.

Bot.sendButtons("Rendez-vous R12 :", [
    { text: "✅ Confirmer", command: "/rdv_ok R12" },
    { text: "❌ Refuser",   command: "/rdv_non R12" },
]);
// Dans /rdv_ok : params vaut "R12"
Bot.sendMessage("Rendez-vous " + params + " confirmé ✅");

Variante « à préfixe » : une commande nommée /rdv_ok_* (avec l'étoile) reçoit tout ce qui commence par /rdv_ok_ — /rdv_ok_R12, /rdv_ok_R13… La fin (R12) arrive dans params.

Navigation propre : un seul écran à la fois

Quand un bouton change d'écran, l'ancien ne doit pas rester au-dessus. Même genre de message (texte → texte, message riche → message riche) : modifiez-le avec Bot.editMessage / Bot.editRichMessage. D'un texte à une photo (ou l'inverse), Telegram ne sait pas transformer l'un en l'autre : effacez le message cliqué, puis envoyez le nouvel écran. Les boutons vont sous la photo, jamais dans un message à part.

// /tuto, lancé par un bouton sous l'accueil (un message texte)
if (request && request.callback_query) {
  Bot.deleteMessage();   // efface l'écran cliqué
}
Bot.sendPhoto("https://exemple.com/tuto.jpg", "📲 Étape 1 : …", {
  buttons: [{ text: "🏠 Accueil", command: "/start" }]
});
💡 Le test sur callback_query est obligatoire — si la commande a été tapée, le message visé est celui de l'utilisateur : l'effacer supprimerait ce qu'il vient d'écrire.

Reply Keyboard avec styles (via Api)

// Clavier standard avec couleurs
Api.sendMessage({
    chat_id: chat_id,
    text: "👇 Choisissez une option :",
    reply_markup: {
        keyboard: [
            [
                { text: "⭕ Menu Principal" },
                { text: "🟦 Paramètres", style: "primary" }
            ],
            [
                { text: "🟩 Enregistrer", style: "success" },
                { text: "🟥 Annuler", style: "danger" }
            ]
        ],
        resize_keyboard: true
    }
});

Récapitulatif des propriétés d'un bouton inline

PropriétéDescription
textTexte affiché sur le bouton
callback_dataDonnée envoyée au bot quand on clique
urlOuvre un lien dans le navigateur
copy_textCopie du texte — { text: "contenu" }
style"primary", "success", "danger"
icon_custom_emoji_idID d'un emoji custom pour icône

📐 Champ keyboard — syntaxe rapide (formulaire)

Le champ keyboard dans la configuration de la commande permet d'écrire un clavier en une ligne, sans code :

SymboleEffet
,Boutons côte à côte sur la même ligne
\nNouvelle rangée (ligne suivante)
{success}Bouton vert (validation)
{danger}Bouton rouge (suppression / refus)
{primary}Bouton bleu (action principale)
{normal}Bouton gris (par défaut)
(callback)Rend le bouton inline (sous le message). Sans parenthèses ⇒ reply keyboard (clavier en bas).

La syntaxe [success] est aussi acceptée pour compatibilité.

// Reply keyboard (clavier en bas)
Yes{success}, No{danger} \n Annuler

// Inline (sous le message) avec callback
Voir(view_data), Modifier(edit_data) \n Retour(back)

💰 Bot.currency() — compteur numérique

Helper pratique pour gérer une valeur numérique persistante (solde, score, points) sans re-écrire le pattern get → +N → set.

// Crée (ou récupère) un compteur stocké dans Props
const wallet = Bot.currency(`solde_${user.id}`); // 0 par défaut

wallet.add(100);   // +100, retourne la nouvelle valeur
wallet.sub(20);    // -20
wallet.mul(2);
wallet.div(2);
wallet.set(1000);  // remplace par 1000
wallet.reset();    // remet à 0

const v = wallet.value;            // nombre actuel
Bot.sendMessage(`Solde : ${wallet} coins`); // toString auto

⚠️ Asynchrone — await obligatoire

Toutes les méthodes Api.* et Bot.send* qui retournent une réponse Telegram sont asynchrones. Vous devez utiliser await pour récupérer le résultat, sinon vous obtiendrez une Promise et l'accès à .ok ou .result donnera undefined.

// ❌ MAUVAIS — res est une Promise, res.ok = undefined
const res = Api.call("getChatMember", { chat_id: -1001234567890, user_id: user.id });
if (res.ok) { ... } // crash : "Cannot read properties of undefined (reading 'ok')"

// ✅ BON — await pour attendre la réponse
const res = await Api.call("getChatMember", { chat_id: -1001234567890, user_id: user.id });
const isMember = res.ok && ["creator","administrator","member"].includes(res.result.status);
Bot.sendMessage(isMember ? "✅ Abonné" : "❌ Pas abonné");

Le code de votre commande est déjà encapsulé dans une fonction async, vous pouvez donc utiliser await librement à n'importe quel niveau.

Exemples complets

Répéter un texte (/echo)

// echo.js — /echo Bonjour tout le monde
if (!params) return Bot.sendMessage("❌ Utilisation : /echo <texte>")
Bot.sendMessage("🔊 " + params);

Saluer avec réaction

// start.js
Bot.react("👋", { is_big: true });
Bot.sendMessage("Salut " + user.first_name + " ! 🎉");

Message auto-supprimé

// secret.js — le message du BOT se supprime après 5 secondes
Bot.sendMessage("Ce message va disparaître... 👻", { delete_after: 5 });

Message silencieux (sans notification)

// Envoyer sans déclencher de notification chez l'utilisateur
Bot.sendMessage("Mise à jour silencieuse 🔕", { silent: true });

Épingler un message

// Épingler — Telegram affiche "Bot a épinglé..."
Bot.sendMessage("📌 Annonce importante !", { pin: true });

// Épingler sans le message système
Bot.sendMessage("📌 Annonce discrète", { pin: true, pin_silent: true });

Désépingler un message

// Désépingler un message (par message_id)
Bot.unpinMessage(message_id);

// Désépingler le dernier message épinglé
Bot.unpinMessage();

Envoi via Api avec options

// Api.sendPhoto classique
Api.sendPhoto({ chat_id: chat_id, photo: "https://exemple.com/img.jpg", caption: "Photo temporaire" });

// Api.sendMessage silencieux
Api.sendMessage({ chat_id: chat_id, text: "Message direct", disable_notification: true });

// Même chose, dans l'ordre de l'API Telegram (+ options en dernier)
Api.sendMessage(chat_id, "Message direct", { disable_notification: true });
Api.sendPhoto(chat_id, "https://exemple.com/img.jpg", "Légende");

Combinaison d'options

// Tout en un : silencieux + épinglé + supprimé après 60s
Bot.sendMessage("⚡ Promo flash !", {
    silent: true,
    pin: true,
    pin_silent: true,
    delete_after: 60
});

Supprimer le message de l'utilisateur

// delete_user_msg.js — supprime le message de l'utilisateur
Api.deleteMessage({ chat_id: chat_id, message_id: message_id });
Bot.sendMessage("✅ Message supprimé !");

Collecte de données

// register.js
Bot.sendMessage("Quel est ton prénom ?");

Bot.waitForResponse(function(ctx) {
    let nom = ctx.message;
    Props.set("nom_" + chat_id, nom);
    Bot.sendMessage("Merci " + nom + ", inscrit ! ✅");
});

📦 Médias, édition, action & User

Toutes ces fonctions sont disponibles directement dans n'importe quel fichier de commande, sans require(). Les fonctions HTTP/Image/Mail sont async, utilisez await.

📷 Envoyer une photo / vidéo / document

// Photo (URL publique ou chemin /tmp)
Bot.sendPhoto("https://exemple.com/img.jpg", "📸 Légende sous la photo");

// Vidéo
Bot.sendVideo("https://exemple.com/clip.mp4", "🎬 Ma vidéo");

// Document (PDF, ZIP, etc.)
Bot.sendDocument("https://exemple.com/rapport.pdf", "📎 Voici le rapport");

// Fichier généré localement (PDF, image)
Pdf.create({ title: "Facture" }); Pdf.h1("Facture #42"); Pdf.text("Total : 99€");
let filePath = Pdf.save();  // /tmp/...pdf
Bot.sendDocument(filePath, "🧾 Votre facture");
📖 Telegram Bot API — sendPhoto · sendVideo · sendDocument.

♻️ Lien expiré ? Le média continue de partir

Quand vous envoyez un média par URL, Telegram télécharge le fichier et renvoie un file_id : une référence vers sa propre copie. BotStrike mémorise ce file_id au premier envoi réussi et le réutilise pour tous les appels suivants avec la même URL. Le lien d'origine n'a donc besoin d'être valide qu'une seule fois.

C'est ce qui rend utilisable un lien linkmedia.botstrike.net (généré par @CreatorLinksMediaBot), qui expire au bout d'1 heure : passé ce délai, la commande continue d'envoyer l'image sans erreur.

const url = "https://linkmedia.botstrike.net/8e066ffe/cdc05/promo.jpg";

// 1er appel : Telegram télécharge l'URL, BotStrike retient le file_id
Bot.sendPhoto(url, "🔥 Notre promo du jour");

// Appels suivants (demain, dans 1 mois...) : le file_id part à la place.
// Le lien a beau être expiré, l'image arrive quand même.
Bot.sendPhoto(url, "🔥 Notre promo du jour");

Le cache couvre sendPhoto, sendVideo, sendDocument, sendAudio, sendVoice, sendAnimation (GIF), sendSticker et sendVideoNote — via Bot.* comme via Api.* :

// Audio, voix, GIF et stickers s'écrivent en objet via Api
Api.sendAudio({ audio: urlMp3, caption: "🎵 Notre jingle" });
Api.sendAnimation({ animation: urlGif });
Api.sendSticker({ sticker: urlWebp });
🔄 Le contenu derrière l'URL a changé ? Le cache est indexé sur l'URL : si vous remplacez le fichier sans changer d'adresse, l'ancienne image continuerait de partir. Ajoutez force_refresh pour forcer un nouveau téléchargement — à mettre uniquement le jour où vous changez le fichier :
Bot.sendPhoto(url, "Nouvelle version", { force_refresh: true });
Avec @CreatorLinksMediaBot, chaque envoi produit une adresse différente : le cas ne se pose pas.

✏️ Éditer / supprimer un message

// Éditer le dernier message du bot
Bot.sendMessage("⏳ Chargement...");
// ... traitement ...
Bot.editMessage("✅ Terminé !");
// Éditer un message précis (par message_id)
Bot.editMessage("Nouveau texte", { message_id: monMsgId });
// Supprimer le message COURANT — celui que la personne vient
// d’envoyer, ou celui qui porte le bouton sur lequel elle a appuyé.
// ⚠️ Ce n’est PAS « le dernier message du bot ».
Bot.deleteMessage();
// Effacer le menu après un clic sur son bouton :
// sur un appui, message_id est déjà celui du message au bouton.
// Le test est obligatoire — sans lui, une commande TAPÉE ferait
// disparaître le message de la personne.
if (request && request.callback_query) {
  Bot.deleteMessage();
}
// Supprimer un message précis
Bot.deleteMessage(message_id);
📖 Telegram Bot API — editMessageText · deleteMessage.

🎞️ Animation /ecrit — texte qui s'écrit lettre par lettre

// Commande /ecrit
// Les Bot.editMessage sont collectés et exécutés EN SÉQUENCE après le script.
// go_to: next.actionN → passe à l'étape N. run_after: N → attend N secondes.
// Les indices DOIVENT être séquentiels (1, 2, 3…) — max next.action9.
Bot.sendMessage("je tape amas 1 à 1");
Bot.editMessage(" a",   { go_to: next.action1, run_after: 1 });
Bot.editMessage(" am",  { go_to: next.action2 });
Bot.editMessage(" ama", { go_to: next.action3 });
Bot.editMessage(" amas");  // dernier : pas de go_to
Dès qu'un editMessage a go_to, tous les editMessage de la commande s'accumulent et s'exécutent après la fin du script, dans l'ordre. Le message_id de Bot.sendMessage est automatiquement réutilisé comme cible. Maximum next.action9.

⏳ Animation /tape — barre de chargement progressive

// Commande /tape
Bot.sendMessage("⬜⬜⬜⬜  0%");
Bot.editMessage("🟩⬜⬜⬜  25%",  { go_to: next.action1, run_after: 1 });
Bot.editMessage("🟩🟩⬜⬜  50%",  { go_to: next.action2, run_after: 1 });
Bot.editMessage("🟩🟩🟩⬜  75%",  { go_to: next.action3, run_after: 1 });
Bot.editMessage("🟩🟩🟩🟩  100%", { go_to: next.action4, run_after: 1 });
Bot.editMessage("✅ Chargement terminé !");

⌨️ Action de chat (typing, upload…)

// Affiche "... est en train d'écrire" pendant 3 secondes
Bot.action("typing", 3);
Bot.sendMessage("Voici la réponse !");

// Types valides : typing, upload_photo, upload_video,
// upload_document, upload_voice, record_voice, record_video, find_location
📖 Telegram Bot API — sendChatAction.

👤 User.* — données par utilisateur

// Stocker / lire une donnée propre à l'utilisateur courant
User.setProp("langue", "fr");
let langue = User.getProp("langue", "fr");  // 2e arg = défaut

// Compteurs
User.add("score", 10);   // +10
User.sub("score", 3);    // -3
let score = User.getProp("score", 0);

// Envoyer un message à l'utilisateur
User.sendMessage("📬 Message privé pour toi !");

🔁 Bot.run — lancer une autre commande

// Exécute /menu après 5 secondes
Bot.run({ command: "/menu", run_after: 5 });

// Avec un payload
Bot.run({ command: "/notify", options: { content: { id: 42 } } });

📚 Référence Telegram Bot API

BotStrike expose l'intégralité de l'API Bot Telegram. Toute méthode officielle peut être appelée via Api.<methode>({...}) (le chat_id du contexte est injecté automatiquement si vous l'omettez).

Raccourci BotStrikeMéthode TelegramDoc officielle
Bot.sendMessagesendMessage→
Bot.sendPhotosendPhoto→
Bot.sendVideosendVideo→
Bot.sendDocumentsendDocument→
Bot.sendButtonssendMessage + inline_keyboard→
Bot.sendMenusendMessage + reply_markup→
Bot.editMessageeditMessageText→
Bot.deleteMessagedeleteMessage→
Bot.reactsetMessageReaction→
Bot.unpinMessageunpinChatMessage→
Bot.actionsendChatAction→
Api.sendInvoicesendInvoice→
Api.sendDicesendDice→
Api.sendPollsendPoll→

📥 Retour des fonctions Bot.*

Toutes les fonctions Bot.send* retournent l'objet Message Telegram complet :

let res = Bot.sendMessage("Coucou");
// res = {
//   message_id: 1234,
//   chat: { id: 123456789, type: "private" },
//   from: { id: 7890, is_bot: true, first_name: "MonBot" },
//   date: 1734...,
//   text: "Coucou"
// }

let mid = res.message_id;
Bot.editMessage("Coucou (édité)", { message_id: mid });
💡 Astuce — Si une méthode Telegram n'est pas exposée comme raccourci Bot.*, utilisez directement Api.<methode>({...}). Tout l'API officielle fonctionne.

⭐ Commande * — Interception universelle

La commande * est une commande spéciale qui se déclenche pour tous les messages qui ne correspondent à aucune autre commande. C'est le gestionnaire par défaut du bot.

Comment la créer

Créez un fichier nommé *.js dans votre bot. Il sera automatiquement associé à la commande * :

// Fichier : *.js
// Se déclenche pour tout message non reconnu

Bot.sendMessage("Je n'ai pas compris votre message 🤔\nTapez /help pour voir les commandes disponibles.");

Utiliser le message reçu

La variable message contient le texte envoyé par l'utilisateur :

// Fichier : *.js — répéter tout message non reconnu

Bot.sendMessage("Vous avez dit : " + message + "\n\nJe ne connais pas cette commande. Tapez /help.");
Bot.react("🤔");

Exemple : moteur de recherche simple

// Fichier : *.js — tout message devient une recherche

if (!message) { Bot.sendMessage("Envoyez un texte pour rechercher."); return; }
let resultat = await HTTP.get("https://api.exemple.com/search?q=" + message);
Bot.sendMessage("🔍 Résultats pour : " + message + "\n" + (resultat.body || "Aucun résultat"));
💡 Priorité — La commande * est déclenchée en dernier recours uniquement : si aucune commande nommée (ex. /start, bonjour, alias…) ne correspond au message reçu, c'est * qui s'exécute.

⚠️ Commande ! — Gestionnaire d'erreur

La commande ! est une commande spéciale qui s'exécute automatiquement quand une erreur survient dans le code d'une autre commande. Créez simplement une commande nommée ! dans BotStrike — le fichier créé sera !.js.

Comportement par défaut (sans commande !)

Si vous n'avez pas de commande !, le bot réagit avec 😢 et envoie un message localisé :

LangueMessage par défaut
Français😢 Oh, une erreur est survenue de ma part.
Anglais😢 Oh, an error occurred on my end.
Espagnol😢 Oh, ha ocurrido un error de mi parte.
Arabe😢 عذرًا، حدث خطأ من جانبي.

Créer la commande dans BotStrike

Dans l'application, nommez votre commande ! (point d'exclamation). Le fichier !.js est créé automatiquement. Deux variables spéciales sont injectées :

VariableDescription
errorLe message d'erreur (texte)
error_commandLe nom de la commande qui a échoué

Exemples JavaScript

// Commande : ! — message d'erreur personnalisé

Bot.sendMessage(
  `⚠️ Une erreur est survenue dans la commande ${error_command}.\n` +
  `Détail : ${error}\n` +
  "Notre équipe a été notifiée. ✅",
  { parse_mode: "HTML" }
);
// Commande : ! — log + bouton support

Bot.react("😢");
Props.set(`last_error_${chat_id}`, error_command);

Bot.sendButtons(
  "🔧 Oups ! Un problème technique est survenu.\nNotre équipe va corriger ça.",
  [{ text: "💬 Contacter le support", url: "https://t.me/BotstrikeAssiste" }]
);
⚠️ Important — Le code dans la commande ! ne doit pas lui-même générer d'erreur. Le nom !error est accepté comme alias.