VK bot no joelho, ou como agradar as pessoas em 14 de fevereiro

Certamente, cada um de nós ama presentes, mas acima de tudo, amamos os desejos que os acompanham. E, até recentemente, não tínhamos a oportunidade de surpreender agradavelmente uma pessoa com palavras calorosas até que a idéia veio à mente: e se dermos às pessoas a oportunidade de trocar namorados (no nariz, 14 de fevereiro, da mesma forma) sem sair da estrutura da maneira usual comunicação - sala de bate-papo nas redes sociais?

Palavra por palavra, e aqui está - um plano de negócios pronto para criar a atmosfera do feriado do Dia dos Namorados! Vamos fazer as pessoas felizes?


Para a idéia da lua!


Obviamente, em primeiro lugar, foi necessário elaborar um plano de ação e descrever a ideia. Devido ao fato de as pessoas terem se tornado mais tímidas e nem sempre prontas para confiar em alguém, a escolha recai sobre a criação de um bot elegante e conveniente para o VK, que tem uma interface familiar, sempre estará à mão e o anonimato das mensagens será codificado no código do programa.
Infelizmente, além de todas as vantagens acima, as comunidades têm duas desvantagens: baixa largura de banda (número de mensagens por segundo) e a proibição de iniciar um diálogo com um usuário aleatório (o usuário deve primeiro e explicitamente concordar em receber mensagens em nome da comunidade).

Portanto, temos um usuário que está pronto para enviar um cartão de dia dos namorados para sua alma gêmea, um destinatário e um intermediário na forma de um bot de bate-papo. O esquema de interação é simples, o bot deve: oferecer envio → reconhecer o destinatário → salvar até 14 de fevereiro → entregar → repetir.

Mas isso, é claro, não foi suficiente para a imaginação voraz da mente e, para aumentar a atividade e o envolvimento do público, foi pensado um esquema de outra interação, permitindo que as pessoas se familiarizassem com o sistema, enviando mensagens para pessoas aleatórias. Esses "namorados aleatórios" podem ser apreciados e, se os namorados de duas pessoas se gostarem, damos a eles a oportunidade de conversar.

Isenção de responsabilidade


Este projeto foi criado puramente pelo entusiasmo de duas pessoas, um programador semi-educado (eu) e um inspirador ideológico (Stepan sadfun Popov), não tem o objetivo de lhe ensinar algo (embora possa ajudá-lo a entender a essência do universo), apenas conte uma história interessante da criação e siga o caminho de uma idéia para uma implementação ingênua.



Aprendendo a falar com VK


Depois de passar por 3-4 bibliotecas diferentes, a pedido da "API NodeJS VK" , percebi que não existem bibliotecas simples e funcionais que nos permitam usar promessas e trabalhar com a execução. Lembra de um dos problemas descritos acima? Sim, a execução de solicitações ao VKontakte não é direta, mas em lotes de 25 permite aumentar significativamente a taxa de transferência.


Capacidade comparativa de vários métodos de solicitações ao VKontakte

Portanto, decidiu-se escrever algo próprio, uma solução confiável e não muito muleta, com base na biblioteca de busca de nós .

Para não fornecer todo o código aqui, descreverei simplesmente a lógica do trabalho.

Como as solicitações do programa devem ser empacotadas em uma execução, elas são coletadas na fila LIFO e enviadas se:

  • Chamadas 25 ou mais (execução máxima)
  • Tempo suficiente se passou desde o último envio, não menos que 50 milissegundos, mas não mais que 150 (para que a fila se mova, apesar do tamanho pequeno)

As solicitações da fila são compiladas no código VK Script, que (nesta implementação) se parece com o seguinte:

var returnables = []; returnables[0] = API.messages.send({"message": ", !", "peer_id": 1, "random_id": 561427}); returnables[1] = API.users.get({"user_ids": 1, "fields": "sex"}); return returnables; 

Depois que o código é executado por uma solicitação à VK, o resultado de cada solicitação (pelos retornáveis do índice) retorna ao seu retorno de chamada, perfeitamente envolvido no Promise. A eficiência da abordagem é esmagadora - quanto mais usuários (e, portanto, mais solicitações ao VKontakte para envio), menor o atraso na resposta. Para manter o limite sob controle, o sistema de envio possui um contador que mostra o número de solicitações restantes para este segundo, o que permite processar rapidamente uma onda de visitantes.

Aprendendo a ouvir VK


Há duas maneiras de receber notificações do VKontakte sobre eventos: Longpoll-orders e Callback-server . Seu servidor é conveniente, pois não requer gestos especiais para uso e também permite que você receba notificações perdidas (por exemplo, quando você reinicia o servidor). Esse servidor pode ser gravado em várias linhas usando a classe http.Server nativa.

Tudo isso cria um ecossistema ideal para a lógica do programa, que é conveniente de usar.

Tudo acaba


Como o usuário é livre para fazer qualquer coisa no bate-papo e não podemos detê-lo, precisamos limitá-lo a uma quantidade razoável. A máquina de estado faz um ótimo trabalho, definindo todas as transições possíveis dentro do sistema e usando os botões (parâmetro do teclado em messages.send) tornará o uso do bot tão simples quanto um simples toque na tela.

Aqui está a interação do usuário com o bot:


Tudo isso se transforma em um conjunto de estados ("Menu principal", "Entrada dos namorados" e assim por diante), cujas transições são definidas e transmitidas em botões, ou são conhecidas inicialmente e não são alteradas.


A propósito, sobre os botões. Sua gama de cores não é invariável ( 4 cores para todas as ocasiões), mas são os botões que permitem minimizar o número de erros do usuário. Com base nisso, você pode criar absolutamente qualquer sistema não linear, e é por isso que eles são usados ​​em qualquer lugar. E neste projeto também.

Mas você precisa entender: se você está visando um grande público, considere outra maneira de interagir, porque alguém pode ter um aplicativo antigo (o VK para iPad , por exemplo, não é atualizado há muito tempo, não minto, mas parece que há mais de um ano, e suporte de teclado não existe). E acontece (sim, eu verifiquei) que as pessoas, sem perceber que os botões podem ser clicados, simplesmente reescrevem seu conteúdo (e então o parâmetro do botão de carga útil, é claro, não é transmitido e tudo pode quebrar).

Deve-se notar que nem tudo acontece da maneira mais suave, conforme descrito no diagrama, e às vezes ocorrem casos curiosos. Por exemplo, o sistema para determinar o link do VKontakte processou incorretamente os usuários cujos links curtos começaram com id e o cortaram. A surpresa das pessoas que encontraram esse bug não pode ser descrita, porque eles escreveram Valentine Valentine, mas acabou Olezhka.
O que olezhka ????

Acidentes não são acidentais


Então, se tudo fica claro com os namorados comuns, há um destinatário e um remetente, como reduzir dois estranhos? Você precisa trocar o dia dos namorados e, se as pessoas gostam do dia dos namorados, elas devem ser apresentadas! Aqui está, a fórmula do amor!

Embora isso pareça patético, funciona e se torna mais interessante para as pessoas trabalharem com o bot - elas receberão uma resposta positiva se houver pelo menos uma pessoa (da qual, é claro, o bot cuidará).

Uma grande vantagem vem disso - quanto mais pessoas aproveitam essa oportunidade, mais chances elas têm de se conhecer e, portanto, isso, como um jogo, mantém a pessoa em um bate-papo. Vale confessar que a sessão do usuário médio é de aproximadamente 7 minutos, mas existe o potencial de restringir uma pessoa entre 10 e 15 minutos apenas por causa desse recurso.

A própria distribuição de mensagens forçou um esquema separado, uma vez que existem várias opções para usar esse bot, o usuário pode perder de vista algo e o bot o lembra com cuidado.


É interessante como o segundo problema foi resolvido, com a incapacidade da comunidade de iniciar um diálogo com o usuário primeiro: agora esse problema é resolvido com essa mensagem.
Mas eu tenho uma condição! Para que o destinatário receba seu Valentine, ele também deve escrever para mim. Sua tarefa agora é convencê-lo a me escrever alguma coisa. Isso é feito para que você não tenha medo de falar com ele!
Em geral, o tradicional "Não é um bug, mas um recurso!"

Fogos de artifício no final


Isso é tudo! Se você não levar em consideração algumas dificuldades no entendimento da lógica da API VK, além de confirmar a conta com um dos provedores, tudo correu muito bem.


Exemplo de bate-papo com um bot

O bot funciona e encanta as pessoas com o dia dos namorados, deixando-as felizes. Isso é feito para ajudar as pessoas a serem mais gentis umas com as outras. Você pode avaliar tudo isso sozinho na comunidade Valentinych - vk.com/verylovebot , se desejar. Obrigado pela atenção!

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


All Articles