Un bot VK, un C # et une orange

Poursuivant mes expériences avec une maison «intelligente», pour le plaisir, j'ai décidé d'ajouter un groupe à VK pour contrôler certaines de ses caractéristiques. Pour cet article, nous précisons la tâche: nous allons essayer d'écrire en langage C # un bot simple qui répondra au nom de la communauté en VK et réfléchira à la manière de le lancer rapidement sur arm32 (dans mon cas, orange pi zero).



Réflexion sur le déploiement
il existe de nombreuses autres options (par exemple, mettre runtime), c'est l'une d'entre elles

Alors, mettez-le sur les étagères.

Créer une application dans VK
Voici la documentation détaillée
  1. Pour créer un bot, allez ici
    Cliquez sur "créer une application" et sélectionnez "Application autonome".
  2. Nous passons maintenant à la gestion et dans l'onglet Application Id, nous nous souvenons de son ID. Il nous sera utile davantage.


Nous obtenons un jeton pour travailler avec des groupes
  1. Nous envoyons la demande en l'insérant simplement dans la ligne du navigateur:
    https://oauth.vk.com/authorize?client_id=YOURAPPID&group_ids=YOURGROUPID6&display=page&scope=messages,wall,manage&response_type=token&v=5.92 

    où YOURAPPID est l'ID d'application que nous avons trouvé dans le spoiler précédent, et YOURGROUPID id est votre communauté.
  2. Nous donnons accès à l'application
  3. Et nous obtenons cette réponse
     https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN 

    Où le jeton sera une très longue combinaison de lettres et de chiffres latins


Il est plus facile d'obtenir un jeton
  1. Aller à la gestion de communauté


Mettre en place une communauté pour travailler avec un long sondage
  1. Nous allons dans l'onglet gestion de notre communauté.
  2. Utilisation d'API et en elle LongPoll Api
  3. Types d'événements (événements), en eux nous marquons nécessaires, pour les tests, je marquerais tout.


Nous passons à la partie principale:

Lancez votre idée préférée, créez une application console sur net core



Ajouter VkNet

spoiler
Malheureusement sur le wiki, la documentation est un peu dépassée. L'une des raisons de la création de ce guide.
Mais il y a un grand soutien ici.


Connectez-vous en utilisant notre token:

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

Et dans une boucle sans fin, nous recevrons des mises à jour

 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}); } 

Vérifions si quelque chose nous est arrivé

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

Pour toutes les données reçues, nous découvrons s'il s'agit d'un message, si oui, puis imprimons son contenu

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

Et nous répondrons à l'utilisateur avec le même texte

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


Code reçu
 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); } } } 


Collectons le code reçu pour notre tableau

 dotnet publish . -r linux-arm 

Et faites glisser sur le tableau le répertoire souhaité



Nous allons par SSH et courons

 chmod +x ConsoleApp1 ./ConsoleApp1 

Résultat
Envoyer un message



Nous recevons le message dans la console



Nous obtenons la réponse



Dialogue


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


All Articles