BotStrike
BotStrike
🌙
Introduction
Permissions
Vérifier membre
Ban / Unban
Mute / Unmute
Promouvoir
Multi-groupes
Champ Groupe
Bonnes pratiques
Référence API

đŸ‘„ Groupes & Canaux Telegram

VĂ©rifier l'appartenance, bannir, muter, promouvoir — gĂ©rer les membres de vos groupes et canaux directement depuis votre bot

Introduction

Votre bot BotStrike peut interagir avec les groupes et canaux Telegram via l'API Api.sendMessage (proxy vers l'API Telegram). Cela vous permet de :

💡 Rappel — Toutes ces actions utilisent await Api.call(method, params) en JavaScript ou bot.api(method, params) en Python, qui appelle directement l'API Telegram Bot.
⚠ JavaScript — await obligatoire — Api.call() est asynchrone. Sans await vous rĂ©cupĂ©rez une Promise et res.ok vaut undefined. En Python, bot.api() est synchrone : pas besoin d'await.

Permissions requises du bot

Pour pouvoir gĂ©rer les membres, votre bot doit ĂȘtre administrateur du groupe/canal avec les permissions nĂ©cessaires :

ActionPermission requise
VĂ©rifier un membreAucune (le bot doit juste ĂȘtre dans le groupe)
Bannir / DĂ©bannir✅ Bannir des utilisateurs (can_restrict_members)
Muter / DĂ©muter✅ Bannir des utilisateurs (can_restrict_members)
Promouvoir admin✅ Ajouter des administrateurs (can_promote_members)
Supprimer un message✅ Supprimer des messages (can_delete_messages)
Épingler un message✅ Épingler des messages (can_pin_messages)
⚠ Important — Ajoutez votre bot comme administrateur dans le groupe, puis activez les permissions nĂ©cessaires. Sans cela, les appels API retourneront une erreur 403.

Vérifier l'appartenance (getChatMember)

Utilisez getChatMember pour vĂ©rifier si un utilisateur est membre d'un groupe ou abonnĂ© Ă  un canal. Le statut retournĂ© peut ĂȘtre :

StatutSignification
creatorPropriétaire du groupe
administratorAdministrateur
memberMembre normal
restrictedMembre avec restrictions (muté)
leftA quitté le groupe
kickedBanni du groupe
⚡ JavaScript
🐍 Python

Vérifier un groupe

// Vérifier si l'utilisateur est dans un groupe
const groupId = -1001234567890; // ID du groupe (commence par -100)
const result = await Api.call("getChatMember", {
  chat_id: groupId,
  user_id: user.id
});

if (result.ok) {
  const status = result.result.status;
  if (["creator", "administrator", "member"].includes(status)) {
    Bot.sendMessage("✅ Vous ĂȘtes membre du groupe !");
  } else {
    Bot.sendMessage("❌ Vous n'ĂȘtes pas membre du groupe.");
  }
} else {
  Bot.sendMessage("⚠ Impossible de vĂ©rifier. Le bot n'est peut-ĂȘtre pas dans le groupe.");
}

Vérifier un canal

// Vérifier si l'utilisateur est abonné à un canal
const channelId = -1009876543210; // ou "@nomducanal"
const res = await Api.call("getChatMember", {
  chat_id: channelId,
  user_id: user.id
});

const isMember = res.ok &&
  ["creator", "administrator", "member"].includes(res.result.status);

if (isMember) {
  Bot.sendMessage("✅ Merci d'ĂȘtre abonnĂ© au canal !");
} else {
  Bot.sendMessage("❌ Abonnez-vous d'abord au canal pour continuer.");
}

Vérifier un groupe

# Vérifier si l'utilisateur est dans un groupe
group_id = -1001234567890  # ID du groupe
result = bot.api("getChatMember", {
    "chat_id": group_id,
    "user_id": user["id"]
})

if result.get("ok"):
    status = result["result"]["status"]
    if status in ["creator", "administrator", "member"]:
        bot.sendMessage("✅ Vous ĂȘtes membre du groupe !")
    else:
        bot.sendMessage("❌ Vous n'ĂȘtes pas membre du groupe.")
else:
    bot.sendMessage("⚠ Impossible de vĂ©rifier.")

Vérifier un canal

# Vérifier si l'utilisateur est abonné à un canal
channel_id = -1009876543210  # ou "@nomducanal"
res = bot.api("getChatMember", {
    "chat_id": channel_id,
    "user_id": user["id"]
})

is_member = (
    res.get("ok") and
    res["result"]["status"] in ["creator", "administrator", "member"]
)

if is_member:
    bot.sendMessage("✅ Merci d'ĂȘtre abonnĂ© au canal !")
else:
    bot.sendMessage("❌ Abonnez-vous d'abord au canal.")

Bannir / Débannir un utilisateur

Bannir un utilisateur l'empĂȘche de revenir dans le groupe. DĂ©bannir le rĂ©autorise Ă  rejoindre.

⚡ JavaScript
🐍 Python

Bannir

const groupId = -1001234567890;

// Bannir l'utilisateur actuel
await Api.call("banChatMember", {
  chat_id: groupId,
  user_id: user.id
});

// Bannir un utilisateur spécifique par son ID
await Api.call("banChatMember", {
  chat_id: groupId,
  user_id: 123456789
});

// Bannir temporairement (revoke aprĂšs 24h)
await Api.call("banChatMember", {
  chat_id: groupId,
  user_id: user.id,
  until_date: Math.floor(Date.now() / 1000) + 86400 // +24h
});

Débannir

// Débannir un utilisateur (il peut rejoindre à nouveau)
await Api.call("unbanChatMember", {
  chat_id: groupId,
  user_id: 123456789,
  only_if_banned: true // ne pas expulser s'il est déjà membre
});

Bannir

group_id = -1001234567890

# Bannir l'utilisateur actuel
bot.api("banChatMember", {
    "chat_id": group_id,
    "user_id": user["id"]
})

# Bannir temporairement (24h)
bot.api("banChatMember", {
    "chat_id": group_id,
    "user_id": user["id"],
    "until_date": int(time.time()) + 86400
})

Débannir

# Débannir
bot.api("unbanChatMember", {
    "chat_id": group_id,
    "user_id": 123456789,
    "only_if_banned": True
})

Muter / Démuter un membre

Muter empĂȘche un membre d'envoyer des messages tout en restant dans le groupe. Utilisez restrictChatMember.

⚡ JavaScript
🐍 Python

Muter (enlever tous les droits)

const groupId = -1001234567890;

// Muter pendant 1 heure
await Api.call("restrictChatMember", {
  chat_id: groupId,
  user_id: user.id,
  permissions: {
    can_send_messages: false,
    can_send_media_messages: false,
    can_send_polls: false,
    can_send_other_messages: false,
    can_add_web_page_previews: false
  },
  until_date: Math.floor(Date.now() / 1000) + 3600 // +1h
});

Démuter (restaurer les droits)

// Restaurer tous les droits
await Api.call("restrictChatMember", {
  chat_id: groupId,
  user_id: user.id,
  permissions: {
    can_send_messages: true,
    can_send_media_messages: true,
    can_send_polls: true,
    can_send_other_messages: true,
    can_add_web_page_previews: true,
    can_change_info: true,
    can_invite_users: true,
    can_pin_messages: true
  }
});

Muter

group_id = -1001234567890

# Muter pendant 1 heure
bot.api("restrictChatMember", {
    "chat_id": group_id,
    "user_id": user["id"],
    "permissions": {
        "can_send_messages": False,
        "can_send_media_messages": False,
        "can_send_polls": False,
        "can_send_other_messages": False,
        "can_add_web_page_previews": False
    },
    "until_date": int(time.time()) + 3600
})

Démuter

bot.api("restrictChatMember", {
    "chat_id": group_id,
    "user_id": user["id"],
    "permissions": {
        "can_send_messages": True,
        "can_send_media_messages": True,
        "can_send_polls": True,
        "can_send_other_messages": True,
        "can_add_web_page_previews": True,
        "can_change_info": True,
        "can_invite_users": True,
        "can_pin_messages": True
    }
})

Promouvoir en administrateur

Donnez des droits d'administrateur Ă  un membre avec promoteChatMember. Le bot peut seulement donner des droits qu'il possĂšde lui-mĂȘme.

⚡ JavaScript
🐍 Python
const groupId = -1001234567890;

// Promouvoir avec des droits spécifiques
await Api.call("promoteChatMember", {
  chat_id: groupId,
  user_id: user.id,
  can_delete_messages: true,
  can_restrict_members: true,
  can_pin_messages: true,
  can_manage_chat: true
});

Bot.sendMessage("👑 Vous avez Ă©tĂ© promu administrateur !");

Rétrograder (retirer les droits admin)

// Retirer tous les droits admin
await Api.call("promoteChatMember", {
  chat_id: groupId,
  user_id: user.id,
  can_delete_messages: false,
  can_restrict_members: false,
  can_pin_messages: false,
  can_manage_chat: false
});
group_id = -1001234567890

bot.api("promoteChatMember", {
    "chat_id": group_id,
    "user_id": user["id"],
    "can_delete_messages": True,
    "can_restrict_members": True,
    "can_pin_messages": True,
    "can_manage_chat": True
})

bot.sendMessage("👑 Vous avez Ă©tĂ© promu administrateur !")

Rétrograder

bot.api("promoteChatMember", {
    "chat_id": group_id,
    "user_id": user["id"],
    "can_delete_messages": False,
    "can_restrict_members": False,
    "can_pin_messages": False,
    "can_manage_chat": False
})

Vérification multi-groupes / canaux

Vérifiez l'appartenance à plusieurs groupes et canaux en une seule commande. Cet exemple utilise 3 commandes : une commande principale /check, une commande de succÚs /checksuccess et une commande d'échec /checkfail.

💡 Architecture — SĂ©parer en plusieurs commandes rend le code plus lisible et maintenable. La commande principale vĂ©rifie, puis redirige vers la commande appropriĂ©e selon le rĂ©sultat.
⚡ JavaScript
🐍 Python

Commande /check — VĂ©rification

// Commande : /check
// Vérifie l'appartenance à 2 groupes + 1 canal
const chats = [
  { id: -1001234567890, name: "Groupe Principal" },
  { id: -1005556667778, name: "Groupe VIP" },
  { id: -1009998887776, name: "Canal Annonces" }
];

let missing = [];

for (const chat of chats) {
  const res = await Api.call("getChatMember", {
    chat_id: chat.id,
    user_id: user.id
  });

  const ok = res.ok &&
    ["creator", "administrator", "member"].includes(res.result.status);

  if (!ok) missing.push(chat.name);
}

if (missing.length === 0) {
  // Tout est bon → commande succùs
  Bot.runCommand("/checksuccess");
} else {
  // Manque des groupes → sauvegarder la liste et rediriger
  User.setProp("missing_groups", missing.join(", "));
  Bot.runCommand("/checkfail");
}

Commande /checksuccess — AccĂšs accordĂ©

// Commande : /checksuccess
Bot.sendMessage(
  "✅ VĂ©rification rĂ©ussie !\n\n" +
  "Vous ĂȘtes membre de tous les groupes et canaux requis.\n" +
  "Bienvenue ! Vous avez accĂšs Ă  toutes les fonctionnalitĂ©s. 🎉"
);

Commande /checkfail — AccĂšs refusĂ©

// Commande : /checkfail
const missing = User.getProp("missing_groups") || "";

Bot.sendMessage(
  "❌ VĂ©rification Ă©chouĂ©e\n\n" +
  "Vous devez rejoindre :\n" +
  missing.split(", ").map(m => "‱ " + m).join("\n") +
  "\n\nRejoignez-les puis tapez /check pour réessayer.",
  {
    keyboard: [
      [{ text: "🔄 RevĂ©rifier", callback: "/check" }]
    ]
  }
);

Commande /check — VĂ©rification

# Commande : /check
# Vérifie l'appartenance à 2 groupes + 1 canal
chats = [
    {"id": -1001234567890, "name": "Groupe Principal"},
    {"id": -1005556667778, "name": "Groupe VIP"},
    {"id": -1009998887776, "name": "Canal Annonces"}
]

missing = []

for chat in chats:
    res = bot.api("getChatMember", {
        "chat_id": chat["id"],
        "user_id": user["id"]
    })

    ok = (
        res.get("ok") and
        res["result"]["status"] in ["creator", "administrator", "member"]
    )

    if not ok:
        missing.append(chat["name"])

if len(missing) == 0:
    bot.runCommand("/checksuccess")
else:
    bot.setUserProp("missing_groups", ", ".join(missing))
    bot.runCommand("/checkfail")

Commande /checksuccess — AccĂšs accordĂ©

# Commande : /checksuccess
bot.sendMessage(
    "✅ VĂ©rification rĂ©ussie !\n\n"
    "Vous ĂȘtes membre de tous les groupes et canaux requis.\n"
    "Bienvenue ! Vous avez accĂšs Ă  toutes les fonctionnalitĂ©s. 🎉"
)

Commande /checkfail — AccĂšs refusĂ©

# Commande : /checkfail
missing = bot.getUserProp("missing_groups") or ""

lines = "\n".join(f"‱ {m}" for m in missing.split(", "))
bot.sendMessage(
    f"❌ VĂ©rification Ă©chouĂ©e\n\n"
    f"Vous devez rejoindre :\n{lines}\n\n"
    f"Rejoignez-les puis tapez /check pour réessayer.",
    {
        "keyboard": [
            [{"text": "🔄 RevĂ©rifier", "callback": "/check"}]
        ]
    }
)

Champ « Groupe » dans l'application

Dans l'éditeur de commande de l'app BotStrike, le champ Autoriser dans un groupe permet de restreindre l'exécution d'une commande à un groupe spécifique.

📋 Comment ça marche

  1. Entrez l'ID du groupe (ex : -1001234567890) dans le champ « Groupe »
  2. Le API vérifiera automatiquement que l'utilisateur est membre de ce groupe avant d'exécuter la commande
  3. Si l'utilisateur n'est pas membre, il recevra un message d'erreur
💡 Sans code — Le champ Groupe de l'application fait la vĂ©rification automatiquement. Vous n'avez pas besoin d'Ă©crire du code getChatMember si vous utilisez ce champ. Utilisez getChatMember dans votre code uniquement pour des vĂ©rifications plus complexes (multi-groupes, logique conditionnelle, etc.).

Messages Ă©phĂ©mĂšres — visibles par une seule personne

Dans un groupe, l'option ephemeral envoie une réponse que seule la personne qui a lancé la commande (ou cliqué) voit : le groupe n'est pas encombré par les soldes, profils et résultats de chacun.

JavaScript
Python
// Réponse visible par la seule personne, effacée au bout de 60 s
Bot.sendMessage("💰 Ton solde : 120 points", { ephemeral: true, delete_after: 60 });

// Message riche avec boutons : au clic, editRichMessage / deleteMessage
// visent automatiquement ce message éphémÚre.
Bot.sendRichMessage([
  { h3: "đŸ‘€ Ton profil" },
  { table: [["Points", "120"], ["Rang", "3e"]] },
  { buttons: [{ text: "🔄 Actualiser", command: "/profil" }] },
], { ephemeral: true });
# Réponse visible par la seule personne, effacée au bout de 60 s
Bot.sendMessage("💰 Ton solde : 120 points", {"ephemeral": True, "delete_after": 60})

# Message riche avec boutons : au clic, editRichMessage / deleteMessage
# visent automatiquement ce message éphémÚre.
Bot.sendRichMessage([
    {"h3": "đŸ‘€ Ton profil"},
    {"table": [["Points", "120"], ["Rang", "3e"]]},
    {"buttons": [{"text": "🔄 Actualiser", "command": "/profil"}]},
], {"ephemeral": True})
OptionEffet
ephemeral: trueVisible par la personne en cours seulement (groupes)
ephemeral: "replace"Sur un clic : remplace, pour elle seule, le message qui portait le bouton
receiver_user_idUn autre destinataire que la personne en cours
delete_afterEfface le message au bout de N secondes
💡 À savoir
  • Groupes uniquement : en conversation privĂ©e l'option est ignorĂ©e et le message part normalement — la mĂȘme commande marche partout.
  • Le message ne disparaĂźt pas tout seul : ajoutez delete_after.
  • Bot administrateur : envoi Ă  tout moment. Bot simple membre : seulement en rĂ©ponse Ă  un clic ou Ă  une commande, dans les 15 secondes.
  • La livraison n'est pas garantie (personne hors ligne) : n'y mettez rien qu'il faille absolument garder.

Forme brute Api.* — la vraie API Telegram, oĂč rien n'est rempli pour vous : ephemeral_message_parameters: { receiver_user_id } Ă  l'envoi, puis Api.editEphemeralMessageText et Api.deleteEphemeralMessage avec receiver_user_id obligatoire et ephemeral_message_id (le message_id renvoyĂ© vaut 0).

Bonnes pratiques

🔑 IDs de groupe / canal

  • Les IDs de groupe Telegram commencent par -100 (ex : -1001234567890)
  • Pour les canaux publics, vous pouvez utiliser le @username (ex : "@moncanal")
  • Pour obtenir l'ID d'un groupe, ajoutez le bot @userinfobot au groupe ou forwardez un message du groupe Ă  ce bot

⚡ Performance

  • Chaque appel getChatMember est un appel rĂ©seau — Ă©vitez d'en faire trop dans une seule commande
  • Pour les vĂ©rifications frĂ©quentes, vous pouvez mettre en cache le rĂ©sultat dans une User Property avec un timestamp
  • Le rate limit Telegram est d'environ 30 appels/seconde — largement suffisant pour un usage normal
đŸš« Limitations
  • Le bot ne peut pas bannir le crĂ©ateur du groupe ni les autres admins
  • Le bot ne peut donner que des droits qu'il possĂšde lui-mĂȘme
  • Pour les canaux, seuls creator, administrator, et member sont des statuts « abonnĂ© »
✅ RĂ©capitulatif — getChatMember pour vĂ©rifier, banChatMember / unbanChatMember pour bannir/dĂ©bannir, restrictChatMember pour muter/dĂ©muter, promoteChatMember pour les admins. Le bot doit ĂȘtre admin avec les permissions requises.

📚 RĂ©fĂ©rence Telegram Bot API — groupes & canaux

Toutes ces méthodes sont accessibles via Api.<methode>({...}). Documentation officielle : core.telegram.org/bots/api.

MéthodeDescriptionDoc
getChatInfos d'un chat (titre, description, photo)→
getChatMemberStatut d'un membre dans un chat→
getChatMemberCountNombre total de membres→
getChatAdministratorsListe des admins→
banChatMemberBannir un membre→
unbanChatMemberDĂ©bannir→
restrictChatMemberMuter / restreindre→
promoteChatMemberPromouvoir admin→
setChatTitleChanger le nom du chat→
setChatPhotoChanger la photo→
pinChatMessageÉpingler un message→
unpinChatMessageDĂ©sĂ©pingler→
exportChatInviteLinkGĂ©nĂ©rer un lien d'invitation→

đŸ“„ Format de retour de getChatMember

res = Api.getChatMember({"chat_id": -100123456789, "user_id": user["id"]})
# res = {
#   "status": "member",      # creator | administrator | member | restricted | left | kicked
#   "user": {"id": 123, "first_name": "Alice", "username": "alice"},
#   "is_anonymous": False,
#   "can_be_edited": False,    # uniquement si admin
#   ...
# }

if res["status"] in ["creator", "administrator", "member"]:
    Bot.sendMessage("✅ Tu es bien membre du groupe !")
else:
    Bot.sendMessage("❌ Tu dois rejoindre @mongroupe d'abord.")