Coder Social home page Coder Social logo

bot-hackathon-spacex's Introduction

Hackathon bot

Ejemplo de bot desplegado en Heroku para el hackathon del Aula de Software Libre de marzo de 2018.

Instalación

Es imprescindible tener cuenta en Heroku para acelerar la instalación. Para desplegar la aplicación en heroku pulse el siguiente botón:

Deploy

Cuando Heroku se lo solicite indique el token de su bot. El nombre de la aplicación debe coincidir con el dato solicitado en HEROKU_APP_NAME.

Configuración

Dentro del archivo __hackathon/__init.py__ se inicializan las variables necesarias para que el bot funcione.

Este archivo exporta principalmente dos variables:

  • bot: Se debe importar en todos los archivos que quieran hacer uso de la API que ofrece la librería de pyTelegramBotAPI.
  • app: Se debe importar en todos los archivos que quieran hacer uso de la API que ofrece la librería de Flask.

Para configurar las variables que necesitamos en local copiar el archivo siguiente:

cp .env.dist .env

Hay algunos valores que están en blanco, su valor debe ser el mismo que aparece en Heroku. Los podemos ver dentro de la sección Setting del backend o ejecutando lo siguiente:

heroku config

Ejecución

En local

Para instalarlo en local es necesario tener instalado python2.7 y virtualenv. Por defecto lo tenemos en Ubuntu.

Para instalar virtualenv hacemos lo siguiente:

sudo apt-get install virtualenv

A continuación necesitamos tener instaladas las herramientas de Heroku. En Ubuntu 17.10 se puede hacer con snap:

sudo snap install heroku --classic

O podemos seguir las instrucciones de la web de Heroku.

Ejecutar el bot en local desactiva el webhook. Para iniciar en modo local ejecutar lo siguiente:

heroku local polling

Si se quiere volver a usar el bot en el servidor, hay que volver a configurar el webhook como dice el apartado anterior.

En el servidor

Cuando se despliega el proyecto, Heroku lo configura automáticamente. Si fuera necesario volver a ejecutar el webhook ejecutar lo siguiente:

heroku run webhook

O si tenemos configurado el .env:

python webhook.py

También se puede iniciar dentro del apartado Resources de la web de Heroku.

Funciones

Dentro del directorio command se pueden añadir nuevas funciones, ya sea en los archivos existentes o en archivos nuevos.

Las funciones de Telegram, ya sean comandos o expresiones regulares, irán con la anotación correspondiente que permite la librería pyTelegramBotAPI.

Para más información, leed la documentación de pyTelegramBotAPI.

Un template para un nuevo archivo de funciones es el siguiente:

# coding=utf-8
from hackathon import bot


@bot.message_handler(commands=['test'])
def test(message):
    bot.reply_to(message, "Prueba")

Es necesario importar el fichero en command/__init__.py donde se indica.

Base de datos

En local se crea un archivo en /tmp/flask_app.db con la base de datos en sqlite. En remoto, se crea en una base de datos de postgresql proporcionada por Heroku.

Esquema

Dentro del directorio model se ha creado una clase dentro del archivo chat.py que sirve de ejemplo para crear tablas dentro de la aplicación.

Para más información, leed la documentación de Flask-SQLAlchemy

Un template para una nueva clase es el siguiente:

from model import db

class Tabla(db.Model):
    ___table__name = 'tabla'
    id = db.Column(db.Integer, primary_key=True)
    
    # Métodos get/set

Es necesario importar el fichero en model/__init__.py donde se indica.

Clase Chat

Se adjunta una clase Chat que permite almacenar valores en una tabla. Se puede indicar el chat asociado al dato (chat), el nombre del dato (key) y su valor (value). Si se quiere un dato que exista para cualquier chat se puede usar como identificador de chat el 0 (cero).

Un ejemplo de uso se encuentra en commands/db.py.

## Referencias

Para obtener APIs abiertas podeís consultar el siguiente repositorio de Github:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.