phpmx / phpmxbot

A Slack bot for the PHP Mexico Community.
3 stars 7 forks source link

Configuración del Bot #35

Closed javleds closed 2 years ago

javleds commented 2 years ago

¡Que tal, equipo!

En el PR https://github.com/phpmx/phpmxbot/pull/34 se habla de una tabla de configuración en SQL para almacenar los diferentes mensajes de respuesta en la conversación de PlusPlus, se sugiere una columna por cada tipo de mensaje en vez de tener una tabla dedicada para puros mensajes.

Suena genial, pero antes de crear esta tabla de configuraciones, me gustaría saber lo siguiente:

Me gustaría hacer algunas sugerencias dependiendo de las respuestas que se tengan.

gueroverde commented 2 years ago

Yo creo que la idea original es sustituir el viejo robot, que me parece no era tan mantenible, entonces la idea es sustituirlo y mejorarlo, quizas la primer version de este solo venga con la informacion precargada (yo creo que el primer objetivo es salir a prod)

pero igual ustedes que opinan yo invoco a @dmouse y @jashk

eruizdechavez commented 2 years ago

se sugiere una columna por cada tipo de mensaje en vez de tener una tabla dedicada para puros mensajes

Mi sugerencia es tener una tabla de configuración, donde cada registro consiste de 3 columnas: id, key, value. Una vez que esté disponible, se pueden crear (por ahora) 3 registros, uno para cada tipo de mensaje, por ejemplo:

id key value
autoinc points_increased_messages json array with strings
autoinc points_decreased_messages json array with strings
autoinc points_not_allowed_messages json array with strings

¿Cuál es la idea original de la configuración del Bot?

Hasta el momento, el bot no tiene una tabla dedicada para configuración; dicho esto, una de las funcionalidades (Greeter) sí tiene su propia tabla. Puedes revisar #28 para ver cómo se implementó la migración.

¿Cuántas/Qué cosas se van a poder configurar en el Bot?

Por ahora sólo estos mensajes. Más adelante podría usarse para definir administradores de la funcionalidad, y otras cosas que se requieran configurar en tiempo de ejecución.

¿De qué manera se van a realizar las modificaciones de esta configuración, es decir, habrá una interfaz de usuario, será a través de pull request o será a través de comandos del mismo Bot?

Dado que esta sería la implementación inicial, no tenemos una interfaz propia para modificar estos valores. El proyecto incluye una herramienta web para explorar y modificar los datos en la base de datos, pero definitivamente no es una buena alternativa a largo plazo. Creo que usar comandos del bot por ahora podría ser la mejor opción para administrar estos datos pues no requiere una interfaz web adicional.

javleds commented 2 years ago

Antes que nada, ¡gracias por su tiempo @eruizdechavez , @gueroverde!

Mensajes del Bot.

Entiendo la idea general, sin embargo, creo que darle mantenimiento a los mensajes (sobre todo modificarlos) puede ser muy complicado, al menos, hasta que tengamos algún mecanismo para cambiarlos desde el mismo Bot.

Por ejemplo, imaginemos que tenemos la estructura propuesta:

id key value
1 points_increased_messages ["Message 1", "Message 2", "Message 3", "Message 4", "Message 5"]
2 points_decreased_messages ["Message 1", "Message 2", "Message 3", "Message 4", "Message 5"]
3 points_not_allowed_messages ["Message 1", "Message 2", "Message 3", "Message 4", "Message 5"]

Supongamos que queremos cambiar el mensaje 3 de los puntos incrementados, entonces, tendríamos 2 opciones;

  1. Crear una migración que reescriba toda la columna.

    UPDATE settings 
    SET value = json_array('["Message 1", "Message 2", "Replaced", "Message 4", "Message 5"]')
    WHERE key = 'points_increased_messages' # OR WHERE id = 1;
  2. Crear una migración con funciones json:

    UPDATE settings 
    SET value = json_replace(value, '$[2]', "Replaced")
    WHERE key = 'points_increased_messages' # OR WHERE id = 1;

En mi opnión y experiencia generar esas migraciones resulta mucho más complicado que agregar modificar un simple archivo yaml, en la cual no requieres conocimientos técnicos del motor de la base de datos.

Repito, me agrada la idea de la configuración, pero creo que mientras no se tenga algún mecanismo más "user firendly" para modificar los mensajes, sigue siendo más viable el yaml.

Por ejemplo, teniendo el archivo:

parameters:
  plus_plus.increased_messages:
    - 'Message 1'
    - 'Message 2'
    - 'Message 3'
    - 'Message 4'
    - 'Message 5'

  plus_plus.decreased_messages:
    - 'Message 1'
    - 'Message 2'
    - 'Message 3'
    - 'Message 4'
    - 'Message 5'

  plus_plus.not_allowed_messages:
    - 'Message 1'
    - 'Message 2'
    - 'Message 3'
    - 'Message 4'
    - 'Message 5'

Si quisiéramos aplicar el mismo cambio del ejemplo bastaría con modificar una línea, Quedando así el archivo:

parameters:
  plus_plus.increased_messages:
    - 'Message 1'
    - 'Message 2'
    - 'Replaced' # <--- Only this line changed
    - 'Message 4'
    - 'Message 5'

  plus_plus.decreased_messages:
    - 'Message 1'
    - 'Message 2'
    - 'Message 3'
    - 'Message 4'
    - 'Message 5'

  plus_plus.not_allowed_messages:
    - 'Message 1'
    - 'Message 2'
    - 'Message 3'
    - 'Message 4'
    - 'Message 5'

Ya explicando un poco mi punto de vista, realizaré los cambios pertinentes acorde a lo que considere el equipo, si es SQL, lo migramos sin mayor complicación. ¿Qué opinan al respecto?

eruizdechavez commented 2 years ago

La migración es solo para generar la tabla y su estado inicial, no para cambiar los datos. De ahi en adelante todos los cambios a los mensajes (como los que comentas) se harían directo en la DB (directo, con algún comando del bot, algún web admin, etc.).

eruizdechavez commented 2 years ago

Por cierto, estoy asumiendo que sabes que el proyecto tiene un web admin para la DB, pero si no lo has visto, aquí esta la información https://github.com/phpmx/phpmxbot/wiki/SQLite-Admin

javleds commented 2 years ago

Me tomó un rato entender el objetivo, pero ya la tengo, realizo los cambios pertinentes hoy por la tarde/noche y envío nuevamente el PR.

Gracias por la aclaración