| | | | |
| :------------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------: |
|

|

|

|

|
---
## Características Clave
- **Cliente Independiente** — No es un fork de Telegram para Android. MonoGram
está construido completamente desde cero como un proyecto independiente.
- **Material Design 3** — Una bonita y adaptativa UI que se ve grandiosa en
celulares, tablets y plegables.
- **Seguro** — Almacenamiento local encriptado y bloqueo biométrico incluido.
- **Multimedia Rica** — Reproducción de multimedia de alto rendimiento con
ExoPlayer y Coil 3.
- **Rápido y Eficiente** — Empoderado por Kotlin Coroutines y optimizado para
ofrecer rendimiento.
- **Arquitectura Limpia** — Separación clara de propósitos con capas de Domain,
Data y Presentation.
- **Patrón MVI** — Administración de estados predecible usando MVIKotlin.
- **Sin NFTs o Cripto** — MonoGram nunca incluirá promociones sobre NFTs,
regalos u otras características de Telegram que consideremos fuera del ámbito
de una aplicacion de mensajería.
---
## Comenzando
Sigue estos pasos para configurar el proyecto localmente.
### Requisitos Previos
- **Android Studio**: Ladybug o más nuevo (recomendado).
- **JDK**: Java 17 o más nuevo.
### 1. Clona el Repositorio
```bash
git clone --recurse-submodules https://github.com/monogram-android/monogram.git
cd monogram
```
### 2. Configura las API Keys de Telegram
Para conectarse a los servidores de Telegram, necesitas tus propias credenciales
API.
1. Inicia sesión en [my.telegram.org](https://my.telegram.org/).
2. Ve a **API development tools**.
3. Crea una nueva aplicación para obtener tu `App api_id` y `App api_hash`.
4. Crea un nuevo archivo llamado `local.properties` en el directorio raíz del
proyecto. (si no existe).
5. Agrega las siguientes líneas:
```properties
API_ID=12345678
API_HASH=your_api_hash_here
```
### 3. Configurar notificaciones
1. Inicia sesión en la
[consola de Firebase](https://console.firebase.google.com).
2. Crea un nuevo proyecto.
3. Agrega una nueva aplicación con el `applicationId` que necesitas. Si tienes
múltiples aplicaciones con diferentes IDs, crea múltiples aplicaciones de
Firebase. **Por defecto, el `applicationId` para compilaciones debug y
release son diferentes.**
4. Descarga el archivo `google-services.json` y cópialo a la raíz de módulo
**app** (`monogram/app/google-services.json`). Si creaste múltiples
aplicaciones, solo copia la configuración más reciente.
5. Ve a la sección **Cloud Messaging**.
6. Ve a **Manage service accounts**.
7. Selecciona la sección **Keys** en el tope de la ventana que se abre.
8. Clickea en **Add key** y selecciona la opción **JSON**. Espera al archivo a
descargarse.
9. Vuelve a la pagina de la Telegram API donde recibiste tu App ID.
10. Clickea en **Update** después de la sección FCM credentials.
11. Sube el service account JSON en la página que se abre.
### 4. Primera Configuración: Compilar libvpx
Las animaciones requieren que libvpx esté compilado. Esto debe hacerse antes de iniciar una compilación de Gradle; de lo contrario, la compilación fallará.
1. Cambia tu directorio de trabajo a `presentation/src/main/cpp`.
2. En `build.sh`, añade tu `ANDROID_NDK_HOME`.
3. Ejecuta `build.sh` y espera a que termine.
### 5. Compilar y Ejecutar
1. Abre el proyecto en **Android Studio**.
2. Aumenta los límites de indexado del IDE para que `TdApi.java` (el wrapper de
TDLib) sea indexado correctamente. En **Android Studio** o **IntelliJ IDEA**,
abre **Help → Edit Custom Properties...**, pega las siguientes líneas, y
reinicia el IDE si es necesario:
```properties
# size in Kb
idea.max.intellisense.filesize=20480
# size in Kb
idea.max.content.load.filesize=20480
```
3. Sincroniza Gradle.
4. Selecciona la configuración de ejecución `app`.
5. Conecta un dispositivo o inicia un emulador.
6. Clickea **Run**.
---
## Compilando TDLib
Si necesitas compilar TDLib desde el código fuente, primero, instala las
dependencias necesarias. Para distribuciones basadas en Ubuntu o Debian:
```bash
sudo apt-get update
sudo apt-get install build-essential git curl wget php perl gperf unzip zip default-jdk cmake
```
Después ejecuta el script de compilación desde la raíz de tu proyecto:
```bash
./build-tdlib.sh
```
---
## Contribuir
Damos la bienvenida a contribuciones! Dígase solución de bugs, mejorar la
documentación, o sugerir nuevas características.
1. **Chequea las Incidencias** — Busca incidencias abiertas o crea una nueva
para discutir tus ideas.
2. **Trabaja desde `develop`** — Crea tu rama desde `develop` y mantén tu
trabajo basado en esa rama.
3. **Forkea y crea una rama** — Forkea el repositorio y crea una rama de
características.
4. **Estilo de Código** — Sigue el estilo existente de código en Kotlin y
directrices de Clean Architecture.
5. **Sube un PR** — Abre un Pull Request a `develop` con una descripción clara
de tus cambios.
> [!IMPORTANT]
>
> - Respeta los
> [Términos de Servicio de Telegram API](https://core.telegram.org/api/terms).
> - Asegúrate de que tu código pase todas las pruebas y chequeos.
### Reportar Bugs y Sugerir Características
- **Bugs** — Abre una incidencia y usa la etiqueta `[Bug]` en el título (ej.
`[Bug] La aplicación se crashea al iniciar`). También puedes buscar todos los
bugs conocidos en el
[**Bug Tracker**](https://github.com/orgs/monogram-android/projects/3/views/1).
- **Solicitud de Características** — Abre una incidencia y usa la etiqueta
`[Feature]` (ej. `[Feature] Soporte para mensajes programados`). Las
solicitudes de características existentes se pueden encontrar en el
[**Feature Board**](https://github.com/orgs/monogram-android/projects/5/views/1).
---
## Traducciones
MonoGram le da la bienvenida a traducciones de la comunidad! Puedes contribuir
con tu propio lenguaje y editar el archivo strings resource.
Las source strings se pueden encontrar en
[`presentation/src/main/res/values/string.xml`](https://github.com/monogram-android/monogram/blob/develop/presentation/src/main/res/values/string.xml).
Para añadir un nuevo lenguaje, crea el
correspondiente`values-