Add Telegram bot support #23

Merged
Berack96 merged 23 commits from 6-telegram-interface into main 2025-10-13 10:49:46 +02:00
4 changed files with 72 additions and 0 deletions
Showing only changes of commit b5e203ddfe - Show all commits

View File

@@ -5,6 +5,7 @@
# https://makersuite.google.com/app/apikey
GOOGLE_API_KEY=
###############################################################################
# Configurazioni per gli agenti di mercato
###############################################################################
@@ -21,6 +22,7 @@ CRYPTOCOMPARE_API_KEY=
BINANCE_API_KEY=
BINANCE_API_SECRET=
###############################################################################
# Configurazioni per gli agenti di notizie
###############################################################################
@@ -31,6 +33,7 @@ NEWS_API_KEY=
# https://cryptopanic.com/developers/api/
CRYPTOPANIC_API_KEY=
###############################################################################
# Configurazioni per API di social media
###############################################################################
@@ -38,3 +41,11 @@ CRYPTOPANIC_API_KEY=
# https://www.reddit.com/prefs/apps
REDDIT_API_CLIENT_ID=
REDDIT_API_CLIENT_SECRET=
###############################################################################
# Configurazioni per API di messaggistica
###############################################################################
# https://core.telegram.org/bots/features#creating-a-new-bot
TELEGRAM_BOT_TOKEN=

View File

@@ -0,0 +1,46 @@
# Implementazione Bot Telegram (Python + InlineKeyboard)
Il progetto si basa sulla libreria **`python-telegram-bot`** e sull'uso di **`InlineKeyboard`** per gestire le scelte dell'utente, assicurando un'interfaccia rapida e pulita.
## 1. Setup e Flusso Iniziale
### Inizializzazione
Dovrai innanzitutto inizializzare l'oggetto bot con il tuo **token API** di Telegram e configurare l'**Application** (o il Dispatcher).
### Handler Principali
* **Comando `/start`** : Implementa l'handler per questo comando. La sua funzione è inviare un messaggio di benvenuto e presentare immediatamente la prima **`InlineKeyboard`** per la scelta della strategia (A/B).
## 2. Gestione dei Menu (InlineKeyboard)
Per le scelte di Strategia (A/B) e LLM (Dropdown), la soluzione è basata interamente sulla gestione delle **`InlineKeyboard`** e dei `CallbackQuery`.
### Tasti e Azioni
* **Strategia (A/B)** : Crea una `InlineKeyboard` con i pulsanti 'A' e 'B', ciascuno con un `callback_data` univoco (es. `strategy_A`).
* **Selezione LLM** : Dopo la scelta della strategia, invia una nuova `InlineKeyboard` per la selezione dell'LLM (es. GPT-3.5, Gemini), assegnando un `callback_data` (es. `llm_gpt35`) ad ogni opzione.
* **`CallbackQuery` Handler** : Un unico handler catturerà la pressione di tutti questi pulsanti. Questo gestore deve analizzare il `callback_data` per determinare quale scelta è stata fatta.
### Gestione dello Stato
È fondamentale utilizzare un meccanismo (come il **`ConversationHandler`** della libreria o un sistema di stato personalizzato) per **memorizzare le scelte** dell'utente (`Strategia` e `LLM`) man mano che vengono fatte, guidando il flusso verso la fase successiva.
## 3. Interazione con la LLM e Output
### Acquisizione del Prompt
* **Prompt Handler** : Dopo che l'utente ha selezionato sia la Strategia che l'LLM, il bot deve attendere un **messaggio di testo** dall'utente. Questo handler si attiverà solo quando lo stato dell'utente indica che le scelte iniziali sono state fatte.
### Feedback e Output (Gestione degli aggiornamenti)
Questo è il punto cruciale per evitare lo spam in chat:
1. **Indicatore di Lavoro** : Appena ricevuto il prompt, invia l'azione **`ChatAction.TYPING`** (`sta scrivendo...`) per dare feedback immediato all'utente.
2. **Messaggio Placeholder** : Invia un messaggio iniziale (es. "Elaborazione in corso, attendere...") e **memorizza il suo `message_id`** .
3. **Aggiornamento in Tempo Reale** : Per ogni *output parziale* (`poutput`) ricevuto dalla tua LLM, utilizza la funzione **`edit_message_text`** passando l'ID del messaggio memorizzato. Questo aggiornerà continuamente l'unico messaggio esistente in chat.
4. **Output Finale** : Una volta che la LLM ha terminato, esegui l'ultima modifica del messaggio (o inviane uno nuovo, a tua discrezione) e **resetta lo stato** dell'utente per un nuovo ciclo di interazione.
### Gestione degli Errori
Integra un gestore di eccezioni (`try...except`) per catturare eventuali errori durante la chiamata all'API della LLM, inviando un messaggio informativo e di scuse all'utente.

View File

@@ -13,6 +13,7 @@ dependencies = [
"pytest", # Test
"dotenv", # Gestire variabili d'ambiente (generalmente API keys od opzioni)
"gradio", # UI web semplice con user_input e output
"python-telegram-bot", # Interfaccia Telegram Bot
# Per costruire agenti (ovvero modelli che possono fare più cose tramite tool) https://github.com/agno-agi/agno
# altamente consigliata dato che ha anche tools integrati per fare scraping, calcoli e molto altro

14
uv.lock generated
View File

@@ -1289,6 +1289,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" },
]
[[package]]
name = "python-telegram-bot"
version = "22.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "httpx" },
]
sdist = { url = "https://files.pythonhosted.org/packages/0b/6b/400f88e5c29a270c1c519a3ca8ad0babc650ec63dbfbd1b73babf625ed54/python_telegram_bot-22.5.tar.gz", hash = "sha256:82d4efd891d04132f308f0369f5b5929e0b96957901f58bcef43911c5f6f92f8", size = 1488269, upload-time = "2025-09-27T13:50:27.879Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/bc/c3/340c7520095a8c79455fcf699cbb207225e5b36490d2b9ee557c16a7b21b/python_telegram_bot-22.5-py3-none-any.whl", hash = "sha256:4b7cd365344a7dce54312cc4520d7fa898b44d1a0e5f8c74b5bd9b540d035d16", size = 730976, upload-time = "2025-09-27T13:50:25.93Z" },
]
[[package]]
name = "pytz"
version = "2025.2"
@@ -1614,6 +1626,7 @@ dependencies = [
{ name = "praw" },
{ name = "pytest" },
{ name = "python-binance" },
{ name = "python-telegram-bot" },
{ name = "yfinance" },
]
@@ -1631,6 +1644,7 @@ requires-dist = [
{ name = "praw" },
{ name = "pytest" },
{ name = "python-binance" },
{ name = "python-telegram-bot" },
{ name = "yfinance" },
]