đ„ 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 :
- â VĂ©rifier si un utilisateur est membre d'un groupe ou canal
- đ« Bannir ou dĂ©bannir un utilisateur
- đ Muter ou dĂ©muter un membre
- đ Promouvoir un membre en administrateur
- đ RĂ©cupĂ©rer les informations d'un groupe/canal
await Api.call(method, params) en JavaScript ou bot.api(method, params) en Python, qui appelle directement l'API Telegram Bot.
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 :
| Action | Permission requise |
|---|---|
| VĂ©rifier un membre | Aucune (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) |
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 :
| Statut | Signification |
|---|---|
creator | Propriétaire du groupe |
administrator | Administrateur |
member | Membre normal |
restricted | Membre avec restrictions (muté) |
left | A quitté le groupe |
kicked | Banni du groupe |
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.
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.
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.
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.
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
- Entrez l'ID du groupe (ex :
-1001234567890) dans le champ « Groupe » - Le API vérifiera automatiquement que l'utilisateur est membre de ce groupe avant d'exécuter la commande
- Si l'utilisateur n'est pas membre, il recevra un message d'erreur
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.
// 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})
| Option | Effet |
|---|---|
ephemeral: true | Visible par la personne en cours seulement (groupes) |
ephemeral: "replace" | Sur un clic : remplace, pour elle seule, le message qui portait le bouton |
receiver_user_id | Un autre destinataire que la personne en cours |
delete_after | Efface le message au bout de N secondes |
- 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
@userinfobotau groupe ou forwardez un message du groupe Ă ce bot
⥠Performance
- Chaque appel
getChatMemberest 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
- 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, etmembersont des statuts « abonné »
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éthode | Description | Doc |
|---|---|---|
getChat | Infos d'un chat (titre, description, photo) | â |
getChatMember | Statut d'un membre dans un chat | â |
getChatMemberCount | Nombre total de membres | â |
getChatAdministrators | Liste des admins | â |
banChatMember | Bannir un membre | â |
unbanChatMember | DĂ©bannir | â |
restrictChatMember | Muter / restreindre | â |
promoteChatMember | Promouvoir admin | â |
setChatTitle | Changer le nom du chat | â |
setChatPhoto | Changer la photo | â |
pinChatMessage | Ăpingler un message | â |
unpinChatMessage | DĂ©sĂ©pingler | â |
exportChatInviteLink | GĂ©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.")