🌍 LocalInfo-Get — Détection de Localisation
Détectez le pays et l'heure locale de vos utilisateurs — manuellement ou automatiquement via un lien sécurisé
Introduction
LocalInfo-Get permet de détecter le pays et l'heure locale d'un utilisateur de votre bot Telegram. Deux modes sont disponibles :
📋 Mode Manuel
Vous demandez directement à l'utilisateur son pays et/ou fuseau horaire, puis vous stockez ces informations avec Props.set(). Simple et sans lien externe.
🔗 Mode Automatique
Génère un lien unique et temporaire. Quand l'utilisateur clique, sa localisation est détectée automatiquement côté navigateur, puis envoyée de manière sécurisée à votre bot.
🌐 Alias anglais & formats
Les données sont disponibles en français (pays, heure, date) et en anglais (country, time, date). Formats multiples : 12h/24h, EU/US/ISO.
• Mode Manuel — Vous gardez le contrôle total. Idéal si vous voulez gérer une liste de pays personnalisée ou si la détection automatique n'est pas nécessaire.
• Mode Automatique — Tout est géré automatiquement. Idéal pour une détection précise du fuseau horaire sans interaction de l'utilisateur.
Installation
Installez LocalInfo-Get depuis l'onglet Bibliothèques de votre bot dans l'application BotStrike.
1. Ouvrez votre bot dans l'application BotStrike
2. Allez dans l'onglet Bibliothèques
3. Trouvez LocalInfo-Get et cliquez Installer
4. Utilisez l'objet
Bs dans vos commandes
Bs lèvera une erreur.
📋 Mode Manuel
Dans le mode manuel, vous demandez à l'utilisateur de choisir son pays ou de fournir ses informations, puis vous les stockez avec Props.set().
• Aucun lien externe nécessaire
• Contrôle total sur les données collectées
• Liste de pays personnalisable
• Pas de dépendance aux APIs tierces
Étape 1 : Demander le pays à l'utilisateur
// Commande /choisirPays — présente un menu de pays
Bot.sendMessage({
text: "🌍 Veuillez choisir votre pays :",
replyMarkup: {
inlineKeyboard: [
[{ text: "🇫🇷 France", callback_data: "pays_France" },
{ text: "🇩🇪 Allemagne", callback_data: "pays_Germany" }],
[{ text: "🇪🇸 Espagne", callback_data: "pays_Spain" },
{ text: "🇷🇺 Russie", callback_data: "pays_Russia" }],
[{ text: "🇺🇸 États-Unis", callback_data: "pays_United States" },
{ text: "🇬🇧 Royaume-Uni", callback_data: "pays_United Kingdom" }]
]
}
});
# Commande /choisirPays — présente un menu de pays
Bot.sendMessage({
"text": "🌍 Veuillez choisir votre pays :",
"replyMarkup": {
"inlineKeyboard": [
[{"text": "🇫🇷 France", "callback_data": "pays_France"},
{"text": "🇩🇪 Allemagne", "callback_data": "pays_Germany"}],
[{"text": "🇪🇸 Espagne", "callback_data": "pays_Spain"},
{"text": "🇷🇺 Russie", "callback_data": "pays_Russia"}],
[{"text": "🇺🇸 États-Unis", "callback_data": "pays_United States"},
{"text": "🇬🇧 Royaume-Uni", "callback_data": "pays_United Kingdom"}]
]
}
})
Étape 2 : Stocker le choix avec Props.set()
// Callback — quand l'utilisateur clique sur un pays
// Le callback_data est "pays_France", "pays_Germany", etc.
const country = message.replace("pays_", "");
// Stocker le pays de l'utilisateur
Props.set("user_country_" + user.id, country);
Bot.sendMessage("✅ Votre pays a été enregistré : " + country);
# Callback — quand l'utilisateur clique sur un pays
country = message.replace("pays_", "")
# Stocker le pays de l'utilisateur
Props.set("user_country_" + str(user["id"]), country)
Bot.sendMessage("✅ Votre pays a été enregistré : " + country)
Étape 3 : Utiliser les données stockées
// Commande /monpays — afficher le pays enregistré
const country = Props.get("user_country_" + user.id);
if (country) {
Bot.sendMessage("📍 Votre pays enregistré : " + country);
} else {
Bot.sendMessage("❌ Pays non enregistré. Envoyez /choisirPays");
}
# Commande /monpays — afficher le pays enregistré
country = Props.get("user_country_" + str(user["id"]))
if country:
Bot.sendMessage("📍 Votre pays enregistré : " + country)
else:
Bot.sendMessage("❌ Pays non enregistré. Envoyez /choisirPays")
Props.set() / Props.get(). Les méthodes Bs.localInfo() et Bs.localInfoUrl() ne sont utilisées qu'en mode automatique.
🔗 Mode Automatique — Générer un lien
Le mode automatique détecte le pays et l'heure via un lien unique. Utilisez Bs.localInfoUrl(userId, returnCommand) pour créer le lien.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
userId | number/string | L'identifiant Telegram de l'utilisateur |
returnCommand | string | La commande à déclencher après détection (ex: "/infoRecu") |
Retour
Retourne l'URL du lien de détection (string), ou null si le rate limit est atteint.
// Commande /detecter — envoie le lien de détection
const url = Bs.localInfoUrl(user.id, "/infoRecu");
if (url) {
Bot.sendMessage({
text: "🌍 Cliquez sur ce lien pour détecter votre localisation :",
replyMarkup: {
inlineKeyboard: [[
{ text: "🔍 Détecter ma localisation", url: url }
]]
}
});
} else {
Bot.sendMessage("⏳ Trop de demandes. Réessayez dans une minute.");
}
# Commande /detecter — envoie le lien de détection
url = Bs.localInfoUrl(user["id"], "/infoRecu")
if url:
Bot.sendMessage({
"text": "🌍 Cliquez sur ce lien pour détecter votre localisation :",
"replyMarkup": {
"inlineKeyboard": [[
{"text": "🔍 Détecter ma localisation", "url": url}
]]
}
})
else:
Bot.sendMessage("⏳ Trop de demandes. Réessayez dans une minute.")
1. Votre bot envoie un lien unique à l'utilisateur
2. L'utilisateur clique → une page sécurisée détecte son fuseau horaire et pays
3. Les données sont sauvegardées et la commande de retour est déclenchée
4. Votre bot peut ensuite accéder aux infos avec
Bs.localInfo()
localInfoUrl() retourne null.
Récupérer les informations
Après la détection automatique, utilisez Bs.localInfo(userId) pour accéder aux données.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
userId | number/string | L'identifiant Telegram de l'utilisateur |
opts | object (optionnel) | Options : { timeUpdate: true } pour recalculer l'heure |
Retour
Retourne un objet avec les propriétés suivantes, ou null si non détecté :
Supprimer le message de détection
Utilisez Bs.deleteDetectMessage(user.id) pour supprimer automatiquement le message contenant le bouton « Détecter ma localisation ». Appelée au début de votre commande de retour.
| Méthode | Description |
|---|---|
Bs.deleteDetectMessage(user.id) | JS — Supprime le message de détection |
Bs.delete_detect_message(user["id"]) | Python — Alias snake_case |
user.id correspond à l'identifiant Telegram de l'utilisateur. Ce n'est pas une variable prédéfinie du API — utilisez directement user.id (JS) ou user["id"] (Python).
// Commande /infoRecu — appelée automatiquement après détection
// Supprimer le message "Détecter ma localisation" (le bouton)
Bs.deleteDetectMessage(user.id);
const info = Bs.localInfo(user.id);
if (info) {
// Propriétés en français
Bot.sendMessage(
"🌍 *Votre localisation*\n\n" +
"📍 Pays: " + info.pays + "\n" +
"🕐 Heure: " + info.heure + "\n" +
"📅 Date: " + info.date
);
// OU propriétés en anglais (alias)
Bot.sendMessage(
"🌍 *Your location*\n\n" +
"📍 Country: " + info.country + "\n" +
"🕐 Time: " + info.time + "\n" +
"📅 Date: " + info.date
);
} else {
Bot.sendMessage("❌ Localisation non encore détectée.");
}
// Avec timeUpdate pour l'heure en temps réel :
const infoLive = Bs.localInfo(user.id, { timeUpdate: true });
if (infoLive) {
Bot.sendMessage(
"🕐 Heure 24h: " + infoLive.time24 + "\n" +
"🕐 Heure 12h: " + infoLive.time12 + "\n" +
"📅 Date EU: " + infoLive.dateEU + "\n" +
"📅 Date US: " + infoLive.dateUS + "\n" +
"📅 Date ISO: " + infoLive.dateISO + "\n" +
"🌐 Timezone: " + infoLive.timezone
);
}
# Commande /infoRecu — appelée automatiquement après détection
# Supprimer le message "Détecter ma localisation" (le bouton)
Bs.delete_detect_message(user["id"])
info = Bs.localInfo(user["id"])
if info:
# Propriétés en français
Bot.sendMessage(
"🌍 *Votre localisation*\n\n"
"📍 Pays: " + info["pays"] + "\n"
"🕐 Heure: " + info["heure"] + "\n"
"📅 Date: " + info["date"]
)
# OU propriétés en anglais (alias)
Bot.sendMessage(
"🌍 *Your location*\n\n"
"📍 Country: " + info["country"] + "\n"
"🕐 Time: " + info["time"] + "\n"
"📅 Date: " + info["date"]
)
else:
Bot.sendMessage("❌ Localisation non encore détectée.")
# Avec timeUpdate pour l'heure en temps réel :
info_live = Bs.localInfo(user["id"], {"timeUpdate": True})
if info_live:
Bot.sendMessage(
"🕐 Heure 24h: " + info_live["time24"] + "\n"
"🕐 Heure 12h: " + info_live["time12"] + "\n"
"📅 Date EU: " + info_live["dateEU"] + "\n"
"📅 Date US: " + info_live["dateUS"] + "\n"
"📅 Date ISO: " + info_live["dateISO"] + "\n"
"🌐 Timezone: " + info_live["timezone"]
)
Sans cette option, l'heure retournée est celle du moment de la détection. Avec
timeUpdate: true, l'heure est recalculée à partir du fuseau horaire stocké — vous obtenez l'heure actuelle de l'utilisateur.
Propriétés & Alias
Bs.localInfo() retourne un objet riche avec des propriétés en français, en anglais et sous différents formats :
Propriétés principales
| Propriété FR | Alias EN | Exemple | Description |
|---|---|---|---|
pays | country | "France" | Nom du pays détecté |
heure | time | "14:30:25" | Heure locale (format 24h) |
date | date | "13/04/2026" | Date locale (DD/MM/YYYY) |
Formats d'heure
| Propriété | Exemple | Description |
|---|---|---|
time24 | "14:30:25" | Format 24 heures |
time12 | "2:30:25 PM" | Format 12 heures avec AM/PM |
Formats de date
| Propriété | Exemple | Description |
|---|---|---|
dateEU | "13/04/2026" | Format européen (DD/MM/YYYY) |
dateUS | "04/13/2026" | Format américain (MM/DD/YYYY) |
dateISO | "2026-04-13" | Format ISO 8601 (YYYY-MM-DD) |
Autres
| Propriété | Exemple | Description |
|---|---|---|
timezone | "Europe/Paris" | Fuseau horaire IANA |
const info = Bs.localInfo(user.id, { timeUpdate: true });
// Français
info.pays // "France"
info.heure // "14:30:25"
info.date // "13/04/2026"
// Anglais (alias identiques)
info.country // "France"
info.time // "14:30:25"
// Formats d'heure
info.time24 // "14:30:25"
info.time12 // "2:30:25 PM"
// Formats de date
info.dateEU // "13/04/2026"
info.dateUS // "04/13/2026"
info.dateISO // "2026-04-13"
// Timezone
info.timezone // "Europe/Paris"
info = Bs.localInfo(user["id"], {"timeUpdate": True})
# Français
info["pays"] # "France"
info["heure"] # "14:30:25"
info["date"] # "13/04/2026"
# Anglais (alias identiques)
info["country"] # "France"
info["time"] # "14:30:25"
# Formats d'heure
info["time24"] # "14:30:25"
info["time12"] # "2:30:25 PM"
# Formats de date
info["dateEU"] # "13/04/2026"
info["dateUS"] # "04/13/2026"
info["dateISO"] # "2026-04-13"
# Timezone
info["timezone"] # "Europe/Paris"
info.country / info["country"] si votre bot est en anglais, et info.pays / info["pays"] si votre bot est en français. Les deux contiennent exactement la même valeur.
Sécurité
LocalInfo-Get a été conçu avec la sécurité comme priorité.
🔐 Mécanismes de sécurité
| Mécanisme | Description |
|---|---|
| Lien à usage unique | Chaque lien ne peut être utilisé qu'une seule fois. Après utilisation, il est invalidé. |
| Expiration | Les liens expirent après 30 jours. Les tokens expirés sont automatiquement nettoyés. |
| Rate limiting | 4 liens par minute par utilisateur, 5 requêtes/minute sur l'endpoint de sauvegarde. |
| Token SHA-256 | Chaque token est un hash SHA-256 tronqué. Impossible à deviner. |
| Détection côté client | Les APIs de géolocalisation sont appelées depuis le navigateur de l'utilisateur. Le serveur ne voit jamais son IP. |
| Données minimales | Seuls le pays et le fuseau horaire sont collectés. Pas d'IP, pas de position GPS. |
• Adresse IP de l'utilisateur
• Position GPS / coordonnées exactes
• Informations de l'appareil
• Données personnelles
Exemples complets
Exemple 1 : Messages personnalisés par pays
// Commande /bonjour — saluer selon le pays
const info = Bs.localInfo(user.id, { timeUpdate: true });
if (!info) {
// Pas encore détecté → envoyer le lien
const url = Bs.localInfoUrl(user.id, "/bonjour");
if (url) {
Bot.sendMessage({
text: "👋 Pour vous saluer dans votre langue, j'ai besoin de connaître votre pays :",
replyMarkup: {
inlineKeyboard: [[ { text: "🌍 Détecter", url: url } ]]
}
});
}
return;
}
// Supprimer le message de détection si présent
Bs.deleteDetectMessage(user.id);
const greetings = {
"France": "Bonjour",
"Germany": "Guten Tag",
"Spain": "Hola",
"Russia": "Привет",
"Japan": "こんにちは",
};
const greeting = greetings[info.country] || "Hello";
Bot.sendMessage(greeting + " ! 🌍\n\nIl est " + info.time12 + " chez vous (" + info.country + ").");
# Commande /bonjour — saluer selon le pays
info = Bs.localInfo(user["id"], {"timeUpdate": True})
if not info:
url = Bs.localInfoUrl(user["id"], "/bonjour")
if url:
Bot.sendMessage({
"text": "👋 Pour vous saluer dans votre langue, j'ai besoin de connaître votre pays :",
"replyMarkup": {
"inlineKeyboard": [[{"text": "🌍 Détecter", "url": url}]]
}
})
return
# Supprimer le message de détection si présent
Bs.delete_detect_message(user["id"])
greetings = {
"France": "Bonjour",
"Germany": "Guten Tag",
"Spain": "Hola",
"Russia": "Привет",
"Japan": "こんにちは",
}
greeting = greetings.get(info["country"], "Hello")
Bot.sendMessage(greeting + " ! 🌍\n\nIl est " + info["time12"] + " chez vous (" + info["country"] + ").")
Exemple 2 : Affichage multi-format
// Commande /monheure — affiche l'heure dans tous les formats
const info = Bs.localInfo(user.id, { timeUpdate: true });
if (info) {
Bot.sendMessage(
"🌍 *" + info.country + "*\n\n" +
"🕐 24h: " + info.time24 + "\n" +
"🕐 12h: " + info.time12 + "\n\n" +
"📅 EU: " + info.dateEU + "\n" +
"📅 US: " + info.dateUS + "\n" +
"📅 ISO: " + info.dateISO + "\n\n" +
"🌐 Timezone: " + info.timezone
);
} else {
Bot.sendMessage("❌ Localisation non détectée. Envoyez /detecter d'abord.");
}
# Commande /monheure — affiche l'heure dans tous les formats
info = Bs.localInfo(user["id"], {"timeUpdate": True})
if info:
Bot.sendMessage(
"🌍 *" + info["country"] + "*\n\n"
"🕐 24h: " + info["time24"] + "\n"
"🕐 12h: " + info["time12"] + "\n\n"
"📅 EU: " + info["dateEU"] + "\n"
"📅 US: " + info["dateUS"] + "\n"
"📅 ISO: " + info["dateISO"] + "\n\n"
"🌐 Timezone: " + info["timezone"]
)
else:
Bot.sendMessage("❌ Localisation non détectée. Envoyez /detecter d'abord.")
Récapitulatif
Méthodes
| Méthode | Description |
|---|---|
Bs.localInfoUrl(user.id, returnCommand) | Génère un lien unique de détection. Retourne l'URL ou null si rate limit atteint. |
Bs.localInfo(user.id) | Retourne les infos de localisation ou null si non détecté. |
Bs.localInfo(user.id, { timeUpdate: true }) | Idem mais recalcule l'heure en temps réel depuis le fuseau horaire. |
Bs.deleteDetectMessage(user.id) | Supprime automatiquement le message contenant le bouton de détection. |
Propriétés retournées
| Propriété | Exemple |
|---|---|
pays / country | "France" |
heure / time | "14:30:25" |
date | "13/04/2026" |
time24 | "14:30:25" |
time12 | "2:30:25 PM" |
dateEU | "13/04/2026" |
dateUS | "04/13/2026" |
dateISO | "2026-04-13" |
timezone | "Europe/Paris" |
localInfoUrl → local_info_url, localInfo → local_info, deleteDetectMessage → delete_detect_message.
• 4 liens par minute par utilisateur
• 5 requêtes/minute sur l'endpoint de sauvegarde
• Liens valides 30 jours maximum
• Usage unique par lien