Files

104 lines
3.2 KiB
Python
Raw Permalink Normal View History

2026-01-18 15:08:40 +01:00
import requests
import time
import os
# CONFIGURAZIONE
BOT_TOKEN = os.getenv("BOT_TOKEN")
BASE_URL = f"https://api.telegram.org/bot{BOT_TOKEN}"
# Funzione per ottenere l'IP pubblico
def get_public_ip():
try:
response = requests.get("https://ifconfig.me")
response.raise_for_status()
return response.text.strip()
except requests.exceptions.RequestException:
return None
# Funzione per ottenere aggiornamenti
def get_updates(offset=None):
url = f"{BASE_URL}/getUpdates"
params = {"offset": offset} if offset else {}
try:
response = requests.get(url, params=params)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException:
return None
# Funzione per configurare i comandi del bot
def set_bot_commands():
url = f"{BASE_URL}/setMyCommands"
commands = [
{"command": "ip", "description": "Mostra l'indirizzo IP pubblico"}
]
payload = {"commands": commands}
try:
response = requests.post(url, json=payload)
response.raise_for_status()
except requests.exceptions.RequestException:
pass
# Funzione per inviare messaggi
def send_telegram_message(chat_id, message, keyboard=None):
url = f"{BASE_URL}/sendMessage"
payload = {"chat_id": chat_id, "text": message}
if keyboard:
payload["reply_markup"] = keyboard
try:
response = requests.post(url, json=payload)
response.raise_for_status()
return response.json().get("result", {}).get("message_id")
except requests.exceptions.RequestException:
return None
# Funzione per processare comandi
def process_command(chat_id, text):
# Tastiera persistente con il pulsante /ip
keyboard = {
"keyboard": [[{"text": "/ip"}]],
"resize_keyboard": True,
"persistent": True
}
if text == "/ip":
ip_address = get_public_ip()
if ip_address:
message = f"IP pubblico: {ip_address}"
else:
message = "Errore nel recupero dell'IP pubblico."
send_telegram_message(chat_id, message, keyboard)
elif text == "/start":
send_telegram_message(chat_id, "Bot attivo. Usa /ip per ottenere l'indirizzo IP pubblico.", keyboard)
else:
send_telegram_message(chat_id, "Comando non riconosciuto.", keyboard)
# Funzione principale del bot
def main():
# Configura i comandi del bot all'avvio
set_bot_commands()
last_update_id = None
while True:
try:
updates = get_updates(last_update_id + 1 if last_update_id else None)
if updates and updates.get("ok"):
for update in updates["result"]:
update_id = update["update_id"]
message = update.get("message")
if message:
chat_id = message["chat"]["id"]
text = message.get("text", "")
process_command(chat_id, text)
last_update_id = update_id
time.sleep(2)
except KeyboardInterrupt:
break
except Exception:
time.sleep(5)
# Avvia il bot
if __name__ == "__main__":
main()