Un bot de Telegram pensado para ayudarte a crecer como desarrollador: encuentra issues reales en GitHub, practica con ejercicios, pon a prueba tus conocimientos con quizzes y mantén una racha diaria de estudio.
- Java 17+
- Maven 3.6+ (o usar
mvnw.cmdincluido en el proyecto) - Una cuenta de Telegram y un bot creado con @BotFather
- Token de GitHub (opcional, aumenta el rate limit de 60 a 5000 req/hora)
Crea un archivo .env en la raíz del proyecto con estas tres variables:
TELEGRAM_BOT_TOKEN=tu_token_del_bot
TELEGRAM_BOT_USERNAME=nombre_de_tu_bot
GITHUB_TOKEN=tu_github_personal_access_tokenEl archivo
.envestá en.gitignorey nunca se sube al repositorio.
# Windows
mvnw.cmd spring-boot:run
# Linux / Mac
./mvnw spring-boot:runPara generar el JAR y ejecutarlo:
mvnw.cmd clean package
java -jar target/TelegramBot-0.0.1-SNAPSHOT.jarOnboarding inicial. El bot te muestra un selector de 12 lenguajes con botones inline.
Flujo de 2 lenguajes favoritos:
- Eliges tu lenguaje principal (ej: Java)
- El bot pregunta si quieres añadir un segundo lenguaje favorito
- Puedes elegir un segundo o pulsar ⏭ Solo con un lenguaje para continuar
Todos los demás comandos usarán tu lenguaje principal automáticamente.
Busca issues abiertas en GitHub mediante un selector interactivo en 2 pasos:
Paso 1 — Idioma de las issues:
| Botón | Descripción |
|---|---|
| 🇪🇸 Español | Busca en repositorios etiquetados en español |
| 🇬🇧 English | Búsqueda estándar en inglés (por defecto) |
Paso 2 — Tipo de issue:
| Botón | Label de GitHub |
|---|---|
| 🟢 Good First Issue | good first issue — ideal para contribuir por primera vez |
| 🤝 Help Wanted | help wanted — el proyecto pide ayuda activamente |
| 🐛 Bug | bug — errores confirmados que necesitan solución |
| 📋 Todas | Sin filtro de etiqueta |
Los resultados aparecen con paginación:
Muestra ejercicios reales de Exercism con enlace directo para resolverlos.
| Uso | Comportamiento |
|---|---|
/exercises |
Usa tu lenguaje guardado, todos los niveles |
/exercises python |
Ejercicios de Python, todos los niveles |
/exercises javascript principiante |
Ejercicios fáciles de JavaScript |
/exercises rust avanzado |
Ejercicios difíciles de Rust |
Dificultades: principiante · intermedio · avanzado
Los ejercicios muestran nombre, descripción y enlace directo a Exercism.
Inicia un quiz de 20 preguntas de programación obtenidas de Open Trivia DB.
- Las respuestas aparecen como botones (A / B / C / D)
- Tras cada respuesta el bot indica si acertaste y cuál era la correcta
- Incluye barra de progreso visual
[████░░░░░░] - Al finalizar muestra tu puntuación con medalla 🏆🥈🥉
Tu reto diario combinado. Cada día te envía:
- 🔍 Issues del día para explorar (siempre incluidas, con mensaje si no hay)
- 💪 Un ejercicio de Exercism
- 🧠 Una pregunta de programación
Al completarlo se actualiza tu racha 🔥. Solo puede hacerse una vez por día.
Muestra tu panel de progreso personal:
- 🔥 Racha de días consecutivos activos
- 💻 Lenguajes favoritos configurados (hasta 2)
- 💪 Ejercicios explorados
- 🔍 Issues revisadas
- 🧠 Quizzes completados
- ⭐ Puntos totales acumulados en quizzes
Muestra un resumen de todos los comandos disponibles.
| Lenguaje | Exercism | Issues GitHub |
|---|---|---|
| Java | ✅ | ✅ |
| Python | ✅ | ✅ |
| JavaScript | ✅ | ✅ |
| TypeScript | ✅ | ✅ |
| Go | ✅ | ✅ |
| Rust | ✅ | ✅ |
| Kotlin | ✅ | ✅ |
| Ruby | ✅ | ✅ |
| C# | ✅ | ✅ |
| C++ | ✅ | ✅ |
| Swift | ✅ | ✅ |
| PHP | ✅ | ✅ |
src/main/java/org/example/telegrambot/
├── bot/
│ ├── BotConsumer.java # Long polling — recibe updates de Telegram
│ └── TelegramCommandHandler.java # Dispatcher: enruta comandos y callbacks inline
├── commands/
│ ├── BotCommand.java # Interfaz base
│ ├── StartCommand.java # /start — onboarding con hasta 2 lenguajes favoritos
│ ├── IssueCommand.java # /issue — selector idioma (🇪🇸/🇬🇧) + etiqueta
│ ├── ExercisesCommand.java # /exercises — ejercicios de Exercism
│ ├── QuestionsCommand.java # /questions — quiz de 20 preguntas
│ ├── DailyCommand.java # /daily — reto diario
│ ├── ProfileCommand.java # /profile — estadísticas del usuario
│ └── HelpCommand.java # /help
├── service/
│ ├── GitHubIssueService.java # GitHub Search API + filtro idioma + caché por chat
│ ├── ExercismService.java # Exercism API + caché por chat
│ ├── TriviaService.java # Open Trivia DB API + estado del quiz por chat
│ └── UserSessionService.java # Hasta 2 lenguajes favoritos, stats y racha
├── ui/
│ ├── IssuesUI.java # Mensajes de issues con teclado inline paginado
│ ├── ExerciseUI.java # Mensajes de ejercicios con teclado inline paginado
│ └── QuizUI.java # Mensajes del quiz con botones de respuesta
├── config/
│ ├── TelegramBotConfig.java # Configuración del bot y registro de comandos
│ ├── TelegramBotProperties.java # Propiedades de Telegram
│ └── GitHubProperties.java # Propiedades de GitHub
└── utils/
└── Constants.java # Mensajes y constantes
| Callback | Descripción |
|---|---|
LANG:java |
Guarda lenguaje principal, pide segundo |
LANG2:python |
Guarda segundo lenguaje |
LANG_SKIP |
Confirma solo con el lenguaje principal |
ISSUE_HLANG:java:es |
Paso 1 de /issue — idioma elegido |
ISSUE_LABEL:java:es:gfi |
Paso 2 de /issue — etiqueta elegida, lanza búsqueda |
ISSUES_PAGE:2 |
Paginación de issues |
ISSUES_REFRESH |
Refresca resultados de issues |
EX_PAGE:java:2 |
Paginación de ejercicios |
EX_REFRESH:java |
Refresca ejercicios |
QA:0 / QA:1 / QA:2 / QA:3 |
Respuesta del quiz |
| API | Uso | Límite gratuito |
|---|---|---|
| GitHub Search API | Buscar issues por lenguaje, etiqueta e idioma | 5000 req/hora (con token) |
| Exercism API v2 | Obtener ejercicios por track y dificultad | Sin límite conocido |
| Open Trivia DB | Preguntas de programación (categoría 18) | Sin límite conocido |
| Tecnología | Versión |
|---|---|
| Java | 17 |
| Spring Boot | 3.5.6 |
| TelegramBots | 9.1.0 (long polling) |
| Spring WebFlux | 3.5.6 (WebClient para APIs) |
| Lombok | — |
| dotenv-java | 3.0.0 |