Es la base para crear bots de telegram.
- Python 3.6+
- PipEnv https://docs.pipenv.org/
Se debe configuar el archivo .env
dentro de src/
con las claves dadas por el Botfather
cp env.example .env
vim .env
Establecer BOT_TELEGRAM_KEY=""
y para ejecutar el bot con
python3 .
Se ha utilizado Docker Compose para poder crear un ambiente de desarrollo.
docker-compose build
docker-compose up -d
Ver logs: docker logs telegram-bot
Se utilizarán los comandos de mac con homebrew https://brew.sh/
brew install python && brew install pipenv
Asegurar de que el entorno esté configurado en .bashrc
o .zshrc
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
También es posible utilizando pip3 normalmente
pip3 install pipenv
Asegurar de que las variables de idioma estén en el entorno
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
Luego se debe ejecutar el comando
pipenv install && pipenv shell
Para poder instalar las dependencias y habilitar el entorno.
El editor de código recomendado es PyCharm https://www.jetbrains.com/pycharm/ edición comunitaria. Otra alternativa es Ninja Ide http://ninja-ide.org/.
Los paquetes utilizados para crear el esqueleto del bot son los siguientes:
-
Python Telegram Bot https://python-telegram-bot.readthedocs.io: Framework de Bots para Telegram
-
Emoji https://github.com/carpedm20/emoji: Funciones para trabajar con emojis
-
Events http://events.readthedocs.io/en/latest/: Sistema para crear y gatillar eventos
-
Unipath https://github.com/mikeorr/Unipath: Funciones para manejo de rutas
-
EnvParse https://github.com/rconradharris/envparse: Archivos de configuración DotEnv
-
JsonLogger https://github.com/madzak/python-json-logger: Formato del Logger para almacenar Json
El bot tiene una estructura que permite crear nuevos comandos de forma simple. Cada comando debe tener como mínimo dos archivos.
Estos archivos deben estar dentro de un directorio con el nombre del comando dentro de bot/commands
directorio/
__init__.py
: Debe tener claseCommand
Subclase deBaseCommand
. Almacena datos generales del comando.controller.py
: Debe tener claseController
Subclase deBaseController
. Ejecuta la lógica y coordina con los otros componentes.
El bot cargará el comando automáticamente. Si se desea deshabilitar un comando
se debe agregar el directorio a la lista de comandos deshabilitados en __main__.py
Los archivos opcionales de cada comando son los siguientes:
view.py
: Almacena los mensajes que el bot puede entregar como respuestarequester.py
: Se encarga de realizar los llamados a los webservices y api restmodel.py
: Se encarga de interactuar con las base de datos u otro tipo de almacenamientovalidator.py
: Se encarga de validar y sanitizar los parámetros de entrada
Los siguientes paquetes pueden ser de utilidad para crear un bot. También se recomienda seguir patrones de diseño como:
- PyChaucha https://github.com/proyecto-chaucha/pychaucha
- CryptoDome (https://www.pycryptodome.org)
- Passlib (https://passlib.readthedocs.io/en/stable/)
- Bit https://github.com/ofek/bit
- Python Telegram Bot https://python-telegram-bot.readthedocs.io: Framework de Bots para Telegram
- Emoji https://github.com/carpedm20/emoji: Funciones para trabajar con emojis
- Requests http://docs.python-requests.org/ : Llamadas a servicios webservice REST
- ParsePy https://github.com/milesrichardson/ParsePy : API para Parseplatform.org
- Socket.io http://python-socketio.readthedocs.io: Implementación de WebSockets
- Json API Requests https://github.com/socialwifi/jsonapi-requests: Funciones para interactuar con servicios web que implementen el estándar Json API.
- Python JWT https://github.com/davedoesdev/python-jwt: Permite generar y validar Jason Web Tokens https://jwt.io
- Jinja2 http://jinja.pocoo.org/: Sistema de templates
- Babel http://babel.pocoo.org: Sistema de traducción e internacionalización
- Money https://github.com/vimeo/py-money): Sistema de transformación de divisas
- Flufli18n https://flufli18n.readthedocs.io: Sistema de traducción
- Arrow https://arrow.readthedocs.io/en/latest/: Permite mejorar el manejo de hora y fecha
- Crython https://github.com/ahawker/crython: Permite ejecutar funciones dependiendo de un tiempo similar a cron
- Promises https://github.com/syrusakbary/promise: Implementa el estandar de promesas
- Events http://events.readthedocs.io/en/latest/: Sistema para crear y gatillar eventos
- PyFileSystem https://www.pyfilesystem.org/: Funciones para manejo de rutas y archivos
- Unipath https://github.com/mikeorr/Unipath: Funciones para manejo de rutas
- Natural Language http://www.nltk.org/ : Procesamiento de escritura e identificación de conceptos
- PyOTP https://github.com/pyotp/pyotp : Identificación de 2 factores
- Tablib https://github.com/kennethreitz/tablib: Creación de datos tabulados y otros formatos
- PwnedApi https://github.com/nikoheikkila/pwnedapi: Permite saber la cantidad de veces que una contraseña fue hackeada.
- Parse https://pypi.python.org/pypi/parse: Permite extraer información de strings.
- Docopt https://github.com/docopt/docopt: Facilita el uso de comandos de terminal.
- Redis (https://pypi.python.org/pypi/redis)
- PonyOrm (https://ponyorm.com/)
- Pewee https://github.com/coleifer/peewee: ORM simple
- Blitz (http://blitzdb.readthedocs.io/en/latest/)
- Cerberus http://docs.python-cerberus.org/: Validación de Parámetros
- DiskCache (http://www.grantjenks.com/docs/diskcache/)
- Keyring https://github.com/jaraco/keyring: Almacenamiento de contraseñas seguro
- EnvParse https://github.com/rconradharris/envparse: Archivos de configuración DotEnv
- JsonLogger https://github.com/madzak/python-json-logger: Formato del Logger para almacenar Json
- SimpleJson (https://simplejson.readthedocs.io/en/latest/)
- HJson (https://github.com/hjson/hjson-py)