Como eu escrevi o bot da escola d / z e mudei o banco de dados

Olá cidadãos de Khabrovsk!
Hoje vou tentar dizer como um aluno pode escrever um bot para armazenar tarefas de casa para o VK.
Cuidado
Imediatamente chamarei a atenção para o fato de que, para projetos sérios, é impossível construir infraestrutura como essa , todo esse projeto foi criado apenas para entretenimento e economia de tempo, e para apresentações em todos os tipos de conferências de projetos escolares.

Observação
17/11/2019 15:55
Eles escreveram para mim em mensagens privadas que, ao longo do artigo, não está muito claro que tipo de lição de casa estão falando.
Esclarecerei imediatamente que todas as tarefas de que falo no artigo são preenchidas como em um diário regular e que as tarefas antigas "desaparecem".
É assim que o usuário recebe as tarefas que ele precisará executar.


O bot foi escrito em PHP e, para fins de experimento, decidi receber atualizações não usando os webhooks da API do CallBack, mas usando o LongPoll.

Devido ao fato de eu nunca escrever bots usando esse método de recebimento de atualizações, fiquei atormentado por vagas dúvidas sobre se eu poderia escrever esse bot em PHP, mas no final tudo deu certo. Agora, passo a como minhas idéias surgiram e como as implementei.

O primeiro, em geral, foi a idéia de escrever um bot para armazenar os trabalhos de casa nele. Bem, como guardar. Algo como notas, mas dentro da VK, já que raramente entro em notas, e elas não são muito convenientes para mim.

Para implementar um bot banal com uma lição de casa, criei uma tabela no banco de dados, na qual foram definidos o nome do item, a lição de casa em si e o número de toda essa felicidade. Isso não é muito interessante para descrever, por isso vou omitir esse ponto, mas darei um poderoso diagrama de ER de como o banco de dados estava no início.

imagem

Então pensei: por que não dar a outras pessoas a oportunidade de usar o bot. Bem, ele deu às pessoas essa oportunidade. Mudei um pouco o banco de dados, mas a tabela em torno da qual tudo isso gira permaneceu praticamente inalterada.

imagem

No gráfico de ER, você pode entender que cada usuário pertence a um grupo. A entrada para um grupo existente é realizada por token e, para cada novo, é gerado um token exclusivo. E as próprias tarefas também pertencem a um ou outro grupo, para que os usuários não vejam o caos nas tarefas deles e de outras pessoas.

Eu adicionei o código, não há nada interessante também, em princípio, não. Acabei de fazer isso para que as tarefas antigas não apareçam, para não excluir a coisa toda manualmente, mas acho que escrever uma consulta SELECT no SQL é bastante simples.

E agora é hora de se divertir: comecei a adicionar funções que retardariam a fila geral de mensagens, então decidi colocá-las em scripts separados, pois não posso multithread no momento, mas escolhi o LongPoll. (E existe algum uso do PHP?)

E estas funções: enviar mensagens para todos os membros do grupo e gerar códigos QR nos quais a chave para ingressar no grupo é criptografada.

Para fazer isso, criei outra tabela no banco de dados, na qual insiro o texto da correspondência e a quem ele se destina. A base acabou assumindo esse formulário.

imagem

E a geração de códigos QR geralmente é feita em um processo separado, que também recebe atualizações da VK sobre mensagens enviadas e analisa qual mensagem contém a chave do grupo.

Até agora, tudo parece mais ou menos adequado, mas fui quebrar o modelo relacional colocando o JSON no banco de dados.

Que tipo de JSON posso colocar no banco de dados? Entro no parâmetro de anexos, que recebo da VK, e depois os processo ao enviar mensagens, para não carregar o processo principal.

Como resultado, a coisa toda se parece com isso.

imagem

Sobre o mesmo método, adicionei anexo de arquivo às tarefas do bot. A tarefa é adicionada imediatamente e os arquivos são anexados gradualmente se eles se ajustarem ao formato e ao tamanho do Telegram Bot Api. Carrego arquivos no Telegram através de um cluster de bots e salvo a identificação do arquivo.

Eu armazeno os arquivos no Telegram devido ao fato de que o servidor no qual guardo tudo isso não tem muito espaço, e expandir para mim é muito difícil financeiramente.

Todo o banco de dados começou a ficar assim:

imagem

Mas agora eu tenho uma tarefa: como devolverei os arquivos aos usuários? Depois, criei quase a mesma lógica da adição de arquivos.

imagem

Em seguida, outro bot foi adicionado ao carrinho, mas ainda não o descreverei.

Basicamente, acho que a estrutura do banco de dados não é ruim, mas não gosto de algo aqui. Talvez seja útil para alguns dos recém-chegados ver como é possível projetar a estrutura do banco de dados no decorrer do desenvolvimento da idéia, e será interessante para mim ouvir críticas sobre a organização da minha base e colocar algo em serviço.

O artigo é pequeno, mas pode trazer críticas.
Klats 1
“Cheio até as 17:00 na minha mesa!”
Vou postar todos os códigos-fonte do bot no git depois de defender o projeto, e não é pecado escrever um artigo.

Klats 2
Algumas idéias relacionadas ao trabalho com arquivos foram sugeridas para mim no bate-papo Habr no carrinho, muitas vezes posso ser visto lá.

Klats 3
Você pode cutucar um bot ao vivo aqui . Terei o maior prazer em feedback.

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


All Articles