104 lines
3.2 KiB
Python
104 lines
3.2 KiB
Python
|
|
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()
|