Um bot VK, um C # e uma laranja

Continuando minhas experiências com uma casa “inteligente”, por diversão, decidi adicionar um grupo ao VK para controlar algumas de suas características. Para este artigo, especificamos a tarefa: tentaremos escrever na linguagem C # um bot simples que responda em nome da comunidade no VK e considere como iniciá-lo rapidamente no arm32 (no meu caso, orange pi zero).



Pensou em implantação
existem muitas outras opções (por exemplo, put runtime), essa é uma delas

Então, coloque nas prateleiras.

Crie um aplicativo no VK
Aqui está a documentação detalhada
  1. Para criar um bot, vá aqui
    Clique em "Criar aplicativo" e selecione "Aplicativo autônomo".
  2. Agora passamos para o gerenciamento e, na guia ID do aplicativo, lembramos do seu ID. Será útil para nós ainda mais.


Recebemos um token para trabalhar com grupos
  1. Enviamos a solicitação simplesmente inserindo-a na linha do navegador:
    https://oauth.vk.com/authorize?client_id=YOURAPPID&group_ids=YOURGROUPID6&display=page&scope=messages,wall,manage&response_type=token&v=5.92 

    onde YOURAPPID é o ID do aplicativo que encontramos no spoiler anterior, e YOURGROUPID é a sua comunidade.
  2. Damos acesso ao aplicativo
  3. E nós temos essa resposta
     https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN 

    Onde o token será uma combinação muito longa de letras e números latinos


É mais fácil obter um token
  1. Ir para gerenciamento de comunidade


Configure uma comunidade para trabalhar com pesquisas longas
  1. Vamos para a guia de gerenciamento de nossa comunidade.
  2. Uso da API e nela LongPoll Api
  3. Tipos de eventos (eventos), neles marcamos necessários, para testes eu marcaria tudo.


Passamos para a parte principal:

Inicie seu ide favorito, crie um aplicativo de console no net core



Adicionar VkNet

spoiler
Infelizmente no wiki, a documentação está um pouco desatualizada. Um dos motivos para a criação deste guia.
Mas há um grande apoio aqui.


Efetue login usando nosso token:

 var api = new VkApi(); api.Authorize(new ApiAuthParams(){AccessToken =MyAppToken }); 

E em um loop sem fim, receberemos atualizações

 var s = api.Groups.GetLongPollServer(MyGroupId); while (true) { var poll = api.Groups.GetBotsLongPollHistory( new BotsLongPollHistoryParams() {Server = s.Server, Ts = s.Ts, Key = s.Key, Wait = 1}); } 

Vamos verificar se algo veio até nós

 if(poll?.Updates== null) continue; 

Para todos os dados recebidos, descobrimos se algo é uma mensagem e, em caso afirmativo, imprima seu conteúdo

  foreach (var a in poll.Updates) { if (a.Type == GroupUpdateType.MessageNew) { Console.WriteLine(a.Message.Body); } } 

E nós responderemos ao usuário com o mesmo texto

  api.Messages.Send(new MessagesSendParams() { UserId = a.Message.UserId, Message = a.Message.Body }); 


Código recebido
 class Program { public static string MyAppToken => "f6bf5e26*************************************************************"; public static ulong MyGroupId => 10******; static void Main(string[] args) { var api = new VkApi(); api.Authorize(new ApiAuthParams(){AccessToken =MyAppToken }); var s = api.Groups.GetLongPollServer(MyGroupId); while (true) { try { var poll = api.Groups.GetBotsLongPollHistory( new BotsLongPollHistoryParams() {Server = s.Server, Ts = s.Ts, Key = s.Key, Wait = 1}); if(poll?.Updates== null) continue; foreach (var a in poll.Updates) { if (a.Type == GroupUpdateType.MessageNew) { Console.WriteLine(a.Message.Body); api.Messages.Send(new MessagesSendParams() { UserId = a.Message.UserId, Message = a.Message.Body }); } } } } } catch (LongPollException exception) { if (exception is LongPollOutdateException outdateException) server.Ts = outdateException.Ts; else { s = api.Groups.GetLongPollServer(MyGroupId); } } catch (Exception e) { Console.WriteLine(e.Message); } } } 


Vamos coletar o código recebido para o nosso quadro

 dotnet publish . -r linux-arm 

E arraste no quadro o diretório desejado



Nós passamos por ssh e corremos

 chmod +x ConsoleApp1 ./ConsoleApp1 

Resultado
Enviar mensagem



Recebemos a mensagem no console



Nós obtemos a resposta



Diálogo


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


All Articles