|
1 | 1 | # Este es el bot del Pycamp |
2 | 2 |
|
3 | | -## Documentación del módulo |
| 3 | +Bot de Telegram para organizar y gestionar PyCamps: carga de proyectos, votación, cronogramas y asignación de magos. |
4 | 4 |
|
5 | | -Puede encontrar una documentación mas detallada para programadores en [https://pyar.github.io/PyCamp_Bot](https://pyar.github.io/PyCamp_Bot) |
| 5 | +--- |
6 | 6 |
|
7 | | -## Variables de entorno |
| 7 | +## 📚 Documentación |
8 | 8 |
|
9 | | -* TOKEN: Token del bot generado con BotFather. |
10 | | -* PYCAMP_BOT_MASTER_KEY: Password para agregar nuevos admins. |
11 | | -* SENTRY_DATA_SOURCE_NAME: ID de proyecto de Sentry para habilitar el monitoreo. |
| 9 | +Encontrá documentación más detallada para programadores en [https://pyar.github.io/PyCamp_Bot](https://pyar.github.io/PyCamp_Bot) |
12 | 10 |
|
13 | | -## Development |
| 11 | +--- |
14 | 12 |
|
15 | | -Si queres contribuir en este proyecto lo primero que vas a necesitar es crearte un bot para hacer |
16 | | -las pruebas. |
| 13 | +## 🚀 Desarrollo |
17 | 14 |
|
18 | | -Esto lo podes hacer hablandole a @BotFather que es el "Bot padre de todos los bots" de telegram. |
19 | | -Él te a a guiar para que puedas hacer tu propio bot. |
| 15 | +### 1️⃣ Crear tu bot de prueba |
20 | 16 |
|
21 | | -Una vez creado el bot, deberías tener un TOKEN\_PERSONAL (BotFather te lo da en el mismo proceso de |
22 | | -creación). |
| 17 | +Para contribuir necesitás tu propio bot de Telegram: |
23 | 18 |
|
24 | | -Despues instala el paquete en modo desarrollo en un virtual environment |
| 19 | +1. Hablale a [@BotFather](https://t.me/BotFather) en Telegram |
| 20 | +2. Seguí las instrucciones para crear tu bot |
| 21 | +3. Guardá el **TOKEN** que te da (lo vas a necesitar) |
25 | 22 |
|
26 | | -~~~bash |
| 23 | +### 2️⃣ Instalar dependencias |
| 24 | + |
| 25 | +```bash |
27 | 26 | python3 -m venv venv |
28 | 27 | source venv/bin/activate |
29 | 28 | pip install -e '.[dev]' |
30 | | -~~~ |
| 29 | +``` |
| 30 | + |
| 31 | +### 3️⃣ Ejecutar el bot |
| 32 | + |
| 33 | +#### Opción 1: Variables inline (más rápido para probar) |
| 34 | + |
| 35 | +```bash |
| 36 | +TOKEN='TU_TOKEN_AQUI' PYCAMP_BOT_MASTER_KEY='TU_CLAVE' python bin/run_bot.py |
| 37 | +``` |
| 38 | + |
| 39 | +#### Opción 2: Con archivo .env (recomendado) |
| 40 | + |
| 41 | +1. Crear el archivo de configuración: |
| 42 | + ```bash |
| 43 | + cp .env.example .env |
| 44 | + ``` |
| 45 | + |
| 46 | +2. Editar `.env` con tus valores: |
| 47 | + ``` |
| 48 | + TOKEN=tu_token_aqui |
| 49 | + PYCAMP_BOT_MASTER_KEY=tu_clave_secreta |
| 50 | + SENTRY_DATA_SOURCE_NAME=tu_sentry_dsn # Opcional |
| 51 | + ``` |
| 52 | + |
| 53 | +3. Ejecutar: |
| 54 | + ```bash |
| 55 | + python bin/run_bot.py |
| 56 | + ``` |
| 57 | + |
| 58 | +#### Opción 3: Con Docker |
| 59 | + |
| 60 | +```bash |
| 61 | +make # Construye la imagen (si no existe) y ejecuta el bot |
| 62 | +``` |
| 63 | + |
| 64 | +**¡Listo!** Tu bot está corriendo. Probalo mandándole `/start` por Telegram. |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +## 🧪 Testing |
| 69 | + |
| 70 | +### Opción 1: Local en tu máquina |
| 71 | + |
| 72 | +Ejecutar todos los tests: |
| 73 | + |
| 74 | +```bash |
| 75 | +pytest |
| 76 | +``` |
| 77 | + |
| 78 | +Ejecutar un test específico: |
| 79 | + |
| 80 | +```bash |
| 81 | +pytest test/test_wizard.py |
| 82 | +``` |
| 83 | + |
| 84 | +Con variables de entorno inline: |
| 85 | + |
| 86 | +```bash |
| 87 | +TOKEN='TOKEN_TEST' PYCAMP_BOT_MASTER_KEY='KEY_TEST' pytest |
| 88 | +``` |
| 89 | + |
| 90 | +### Opción 2: Con Docker |
| 91 | + |
| 92 | +```bash |
| 93 | +make test |
| 94 | +``` |
| 95 | + |
| 96 | +--- |
31 | 97 |
|
32 | | -y estas listo para trabajar. |
| 98 | +## 🔧 Variables de entorno |
33 | 99 |
|
34 | | -## Testeo |
| 100 | +| Variable | Descripción | Requerida | |
| 101 | +|----------|-------------|-----------| |
| 102 | +| `TOKEN` | Token del bot generado con BotFather | ✅ Sí | |
| 103 | +| `PYCAMP_BOT_MASTER_KEY` | Password para comandos de admin | ✅ Sí | |
| 104 | +| `SENTRY_DATA_SOURCE_NAME` | ID de proyecto de Sentry para monitoreo | ❌ No | |
35 | 105 |
|
36 | | -Para correr el bot ejecutá (con el virtual environment activado): |
| 106 | +--- |
37 | 107 |
|
38 | | -~~~bash |
39 | | -TOKEN='TOKEN_PERSONAL' PYCAMP_BOT_MASTER_KEY='KEY' python bin/run_bot.py |
40 | | -~~~ |
| 108 | +## 🎯 ¿Cómo usar el bot en un nuevo PyCamp? |
41 | 109 |
|
42 | | -Y listo! Tu bot está corriendo en tu máquina, esperando que alguien le escriba por telegram. |
43 | | -Podés probarlo mandandole un `/start` |
| 110 | +### Preparación inicial |
44 | 111 |
|
45 | | -## ¿Cómo usar el bot en un nuevo pycamp? |
| 112 | +1. Configurar las variables de entorno (ver tabla arriba) |
| 113 | +2. Ejecutar el bot: `python bin/run_bot.py` |
| 114 | +3. Verificar que funciona enviándole `/start` |
46 | 115 |
|
47 | | -Primero es necesario setear las siguientes variables de entorno: |
| 116 | +--- |
48 | 117 |
|
49 | | -* `TOKEN`: token del bot que se usará durante el pycamp (gestionar desde telegram con BotFather) |
50 | | -* `PYCAMP_BOT_MASTER_KEY`: con alguna password secreta que se va a usar para acceder a comandos de superuser |
51 | | -* `SENTRY_DATA_SOURCE_NAME`: ID del proyecto de Sentry "telegrambot" de la cuenta de PyAr |
| 118 | +## 👥 Comandos del bot |
52 | 119 |
|
53 | | -Una vez creadas las variables de entorno, correr el bot con el comando `python bin/run_bot.py` |
| 120 | +### 🔐 Para Admins |
54 | 121 |
|
55 | | -En este momento ya se puede hablar con el bot. ¿Qué le digo? |
| 122 | +#### Inicialización (al comienzo de cada PyCamp) |
56 | 123 |
|
57 | | -* `/start` para chequear que esté andando bien |
| 124 | +| Comando | Descripción | |
| 125 | +|---------|-------------| |
| 126 | +| `/su <password>` | Reclamar permisos de admin con la clave de `PYCAMP_BOT_MASTER_KEY` | |
| 127 | +| `/empezar_pycamp <nombre>` | Crear el PyCamp (pide fecha de inicio y duración) | |
| 128 | +| `/activar_pycamp <nombre>` | Activar un PyCamp específico (si hace falta) | |
58 | 129 |
|
59 | | -### Flujo admin |
| 130 | +#### Gestión de Proyectos |
60 | 131 |
|
61 | | -#### Inicialización (requerida al comienzo de cada PyCamp) |
| 132 | +| Comando | Descripción | |
| 133 | +|---------|-------------| |
| 134 | +| `/empezar_carga_proyectos` | Habilitar la carga de proyectos | |
| 135 | +| `/terminar_carga_proyectos` | Cerrar la carga de proyectos | |
| 136 | +| `/empezar_votacion_proyectos` | Activar la votación | |
| 137 | +| `/terminar_votacion_proyectos` | Cerrar la votación | |
| 138 | +| `/cronogramear` | Generar el cronograma (pide días y slots) | |
| 139 | +| `/cambiar_slot <proyecto> <slot>` | Mover un proyecto de horario | |
62 | 140 |
|
63 | | -* `/su <password>` para reclamar permisos de admin, reemplazando `<password>` por la contraseña que hayamos elegido en la envvar `PYCAMP_BOT_MASTER_KEY` |
64 | | -* `/empezar_pycamp <pycamp_name>` inicia el flujo de creación de un pycamp. Lo carga en la db, pide fecha de inicio y duración. Lo deja activo. |
65 | | - * `/activar_pycamp <pycamp_name>` activa un pycamp, en caso que haga falta. |
| 141 | +#### Gestión de Magxs |
66 | 142 |
|
67 | | -#### Flujo de Proyectos |
| 143 | +| Comando | Descripción | |
| 144 | +|---------|-------------| |
| 145 | +| `/agendar_magx` | Asignar magos automáticamente (9-13 y 14-19hs) | |
68 | 146 |
|
69 | | -* `/empezar_carga_proyectos` habilita la carga de los proyectos. En este punto los pycampistas pueden cargar sus proyectos, |
70 | | -enviandole al bot el comando `/cargar_proyecto` |
71 | | -* `/terminar_carga_proyectos` termina carga proyectos |
72 | | -* `/empezar_votacion_proyectos` activa la votacion (a partir de ahora los pycampistas pueden votar con `/votar`) |
73 | | -* `/terminar_votacion_proyectos` termina la votacion |
| 147 | +> **Nota:** Los magos deben registrarse primero con `/ser_magx` |
74 | 148 |
|
75 | | -Para generar el schedule: |
| 149 | +--- |
76 | 150 |
|
77 | | -* `/cronogramear` te va a preguntar cuantos dias queres cronogramear y cuantos slots por dia tenes y hacer el cronograma. |
78 | | -* `/cambiar_slot` toma un nombre de proyecto y un slot; y te cambia ese proyecto a ese slot. |
| 151 | +### 🙋 Para Pycampistas |
79 | 152 |
|
80 | | -#### Flujo de magia |
| 153 | +#### Proyectos |
81 | 154 |
|
82 | | -Para agendar los magos todos los candidatos tienen que haberse registrado con `/ser_magx` |
| 155 | +| Comando | Descripción | |
| 156 | +|---------|-------------| |
| 157 | +| `/cargar_proyecto` | Cargar tu proyecto (si la carga está habilitada) | |
| 158 | +| `/votar` | Votar proyectos de tu interés | |
| 159 | +| `/ver_cronograma` | Ver el cronograma del evento | |
83 | 160 |
|
84 | | -* `/agendar_magx` Asigna un mago por hora durante todo el PyCamp. |
85 | | - * De 9 a 13 y de 14 a 19. |
86 | | - * El primer día arranca después del almuerzo (14hs). |
87 | | - * El último día termina al almuerzo (13hs). |
| 161 | +#### Sistema de Magxs |
88 | 162 |
|
89 | | -### Flujo pycampista |
| 163 | +| Comando | Descripción | |
| 164 | +|---------|-------------| |
| 165 | +| `/ser_magx` | Registrarte como mago | |
| 166 | +| `/ver_magx` | Ver la lista de magos registrados | |
| 167 | +| `/evocar_magx` | Llamar al mago de turno para pedir ayuda | |
| 168 | +| `/ver_agenda_magx [completa]` | Ver la agenda de magos (usa `completa` para ver todos los turnos) | |
90 | 169 |
|
91 | | -* `/cargar_proyecto` carga un proyecto (si está habilitada la carga) |
92 | | -* `/votar` envia opciones para votar (si está habilitada la votacion) |
93 | | -* `/ver_cronograma` te muestra el cronograma! |
94 | | -* `/ser_magx` te registra como mago. |
95 | | -* `/ver_magx` Lista los magos registrados. |
96 | | -* `/evocar_magx` llama al mago de turno para pedirle ayuda. |
97 | | -* `/ver_agenda_magx completa` te muestra la agenda de magos del PyCamp. El parámetro `completa` es opcional, si se omite solo muestra los turnos pendientes. |
| 170 | +--- |
98 | 171 |
|
0 commit comments