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çãoexistem muitas outras opções (por exemplo, put runtime), essa é uma delas
Então, coloque nas prateleiras.
Crie um aplicativo no VKAqui está a documentação detalhada- Para criar um bot, vá aqui
Clique em "Criar aplicativo" e selecione "Aplicativo autônomo". - 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- 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.
- Damos acesso ao aplicativo

- 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- Ir para gerenciamento de comunidade


Configure uma comunidade para trabalhar com pesquisas longas- Vamos para a guia de gerenciamento de nossa comunidade.
- Uso da API e nela LongPoll Api

- 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
VkNetspoilerInfelizmente 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
ResultadoEnviar mensagem

Recebemos a mensagem no console

Nós obtemos a resposta

Diálogo
