Mientras escribía el bot para la escuela d / z y cambié la base de datos

¡Hola, ciudadanos de Khabrovsk!
Hoy trataré de decirte cómo un estudiante puede escribir un bot para almacenar tareas para VK.
Precaución
Inmediatamente llamaré la atención sobre el hecho de que para proyectos serios es imposible construir infraestructura como esta , todo este proyecto fue creado solo para entretenimiento y matar el tiempo, y para presentaciones en todo tipo de conferencias de proyectos escolares.

Observación
17/11/2019 15:55
Me escribieron en mensajes privados que a lo largo del artículo no está muy claro de qué tipo de tarea están hablando.
Aclararé de inmediato que todas las tareas de las que hablo en el artículo se completan como en un diario normal, y las tareas antiguas "desaparecen".
Así es como el usuario recibe las tareas que tendrá que hacer.


El bot fue escrito en PHP, y por el bien del experimento decidí recibir actualizaciones no usando los webhooks de CallBack API, sino usando LongPoll.

Debido al hecho de que nunca escribí bots usando este método para recibir actualizaciones, me atormentaron las vagas dudas sobre si podría escribir este bot en PHP, pero al final todo funcionó. Ahora pasaré a cómo surgieron mis ideas y cómo las implementé.

El primero, en general, fue la idea de escribir un bot para almacenar la tarea en él. Bueno, como almacenar. Algo así como notas, pero dentro de VK, ya que rara vez entro en notas, y no son muy convenientes para mí.

Para implementar un bot banal con una tarea, creé una tabla en la base de datos, en la que se establecieron el nombre del elemento, la tarea en sí y el número de toda esta felicidad. Esto no es muy interesante de describir, por lo que omitiré este punto, pero daré un poderoso diagrama ER de cómo se veía la base de datos desde el principio.

imagen

Entonces pensé, ¿por qué no dar a otras personas la oportunidad de usar el bot? Bueno, le dio a la gente esta oportunidad. Cambié un poco la base de datos, pero la tabla en torno a la cual gira todo esto prácticamente no ha cambiado.

imagen

Desde el gráfico ER, puede comprender que cada usuario pertenece a un grupo. La entrada a un grupo existente se realiza mediante token, y para cada uno nuevo se genera un token único. Y las tareas mismas también pertenecen a uno u otro grupo, para que los usuarios no vean el caos de sus tareas y las de otras personas.

Agregué el código, tampoco hay nada interesante aquí, en principio, no. Acabo de hacer que las tareas anteriores no aparezcan, para no eliminar todo de forma manual, pero creo que escribir una consulta SELECT en SQL es bastante simple.

Y ahora es el momento de divertirse: comencé a agregar funciones que ralentizarían la cola general de mensajes, así que decidí ponerlas en scripts separados, ya que no puedo multiproceso en este momento, pero elegí LongPoll. (¿Y hay algún uso de PHP?)

Y estas funciones: enviar mensajes a todos los miembros del grupo y generar códigos QR en los que se cifra la clave para unirse al grupo.

Para hacer esto, acabo de crear otra tabla en la base de datos, en la que ingreso el texto de envío y a quién está destinado. La base finalmente tomó esta forma.

imagen

Y la generación de códigos QR generalmente se realiza en un proceso separado, que también recibe actualizaciones de VK sobre los mensajes salientes, y analiza qué mensaje contiene la clave del grupo.

Hasta ahora, todo parece más o menos adecuado, pero luego fui a romper el modelo relacional al poner JSON en la base de datos.

¿Qué tipo de JSON puedo poner en la base de datos? Ingreso el parámetro de archivos adjuntos, que recibo de VK, y luego los proceso al enviar mensajes, para no cargar el proceso principal.

Como resultado, todo se ve así.

imagen

Sobre el mismo método, luego agregué archivos adjuntos a las tareas en el bot. La tarea se agrega de inmediato, y los archivos se adjuntan gradualmente si se ajustan al formato y al tamaño de Telegram Bot Api. Subo archivos a Telegram a través de un grupo de bots y guardo la identificación del archivo.

Guardo los archivos en Telegram debido al hecho de que el servidor en el que guardo todo esto no tiene mucho espacio, y expandirme es muy difícil económicamente.

Toda la base de datos comenzó a verse así:

imagen

Pero ahora tengo una tarea: ¿cómo devolveré los archivos a los usuarios? Luego hice casi la misma lógica que con la adición de archivos.

imagen

Luego se agregó otro bot para el carrito, pero aún no lo describiré.

Básicamente, creo que la estructura de la base de datos no es mala, pero no me gusta algo aquí. Quizás sea útil para algunos de los recién llegados ver cómo puede diseñar la estructura de la base de datos en el curso del desarrollo de la idea, y será interesante para mí escuchar las críticas sobre la organización de mi base y poner algo en servicio.

El artículo es pequeño, pero puede reducir las críticas.
Klats 1
"Completo hasta las 5 pm en mi escritorio!"
Publicaré todos los códigos fuente del bot en git después de defender el proyecto, y no es pecado escribir un artículo.

Klats 2
Me sugirieron algunas ideas relacionadas con el trabajo con archivos en el chat de Habr en el carrito, a menudo se me puede ver allí.

Klats 3
Puedes pinchar un bot en vivo aquí . Estaré encantado de comentarios.

Source: https://habr.com/ru/post/475406/


All Articles