Ein VK-Bot, ein C # und eine Orange

Aus Spaß setzte ich meine Experimente mit einem „intelligenten“ Zuhause fort und beschloss, VK eine Gruppe hinzuzufügen, um einige seiner Eigenschaften zu kontrollieren. In diesem Artikel geben wir die Aufgabe an: Wir werden versuchen, in der C # -Sprache einen einfachen Bot zu schreiben, der im Namen der Community in VK antwortet, und überlegen, wie er schnell auf arm32 gestartet werden kann (in meinem Fall orange pi zero).



Ich dachte über den Einsatz nach
Es gibt viele andere Optionen (z. B. Put Runtime), dies ist eine davon

Stellen Sie es also in die Regale.

Erstellen Sie eine Anwendung in VK
Hier ist die detaillierte Dokumentation
  1. Um einen Bot zu erstellen, klicken Sie hier
    Klicken Sie auf "Anwendung erstellen" und wählen Sie "Eigenständige Anwendung".
  2. Jetzt gehen wir zum Management und auf der Registerkarte Anwendungs-ID merken wir uns die ID. Es wird uns weiter nützlich sein.


Wir bekommen ein Zeichen für die Arbeit mit Gruppen
  1. Wir senden die Anfrage, indem wir sie einfach in die Browserzeile einfügen:
    https://oauth.vk.com/authorize?client_id=YOURAPPID&group_ids=YOURGROUPID6&display=page&scope=messages,wall,manage&response_type=token&v=5.92 

    Dabei ist YOURAPPID die Anwendungs-ID, die wir im vorherigen Spoiler gefunden haben, und YOURGROUPID-ID ist Ihre Community.
  2. Wir geben Zugriff auf die Anwendung
  3. Und wir bekommen diese Antwort
     https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN 

    Wobei der Token eine sehr lange Kombination aus lateinischen Buchstaben und Zahlen sein wird


Es ist einfacher, einen Token zu bekommen
  1. Gehen Sie zum Community-Management


Richten Sie eine Community für die Arbeit mit langen Umfragen ein
  1. Wir gehen zur Registerkarte "Verwaltung" unserer Community.
  2. Api Usage und darin LongPoll Api
  3. Ereignistypen (Ereignisse), in denen wir als notwendig markieren, für Tests würde ich alles markieren.


Wir gehen zum Hauptteil über:

Starten Sie Ihre Lieblingsidee und erstellen Sie eine Konsolenanwendung auf Net Core



Fügen Sie VkNet hinzu

Spoiler
Leider ist die Dokumentation im Wiki etwas veraltet. Einer der Gründe für die Erstellung dieses Handbuchs.
Aber hier gibt es große Unterstützung .


Melden Sie sich mit unserem Token an:

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

Und in einer Endlosschleife erhalten wir Updates

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

Lassen Sie uns überprüfen, ob etwas zu uns gekommen ist

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

Bei allen empfangenen Daten stellen wir fest, ob es sich um eine Nachricht handelt. Wenn ja, drucken Sie den Inhalt aus

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

Und wir werden dem Benutzer mit dem gleichen Text antworten

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


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


Sammeln wir den erhaltenen Code für unser Board

 dotnet publish . -r linux-arm 

Und ziehen Sie das gewünschte Verzeichnis auf die Tafel



Wir fahren mit SSH und rennen

 chmod +x ConsoleApp1 ./ConsoleApp1 

Ergebnis
Nachricht senden



Wir erhalten die Nachricht in der Konsole



Wir bekommen die Antwort



Dialog


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


All Articles