1つのVKボット、1つのC#およびオレンジ

「スマート」ホームでの実験を続けるために、楽しみのために、VKにいくつかの特性を制御するグループを追加することにしました。 この記事では、タスクを指定します:VKのコミュニティに代わって応答する単純なボットをC#言語で記述し、arm32(私の場合はオレンジのpiゼロ)ですばやく起動する方法を検討します。



展開についての考え
他の多くのオプションがあります(たとえば、ランタイムを置く)、これはそれらの1つです

それで、棚に置いてください。

VKでアプリケーションを作成する
詳細なドキュメントはこちら
  1. ボットを作成するには、 こちらにアクセスしてください
    [アプリケーションの作成]をクリックし、[スタンドアロンアプリケーション]を選択します。
  2. ここで、管理に移り、[アプリケーションID]タブでそのIDを記憶します。 さらに役立つでしょう。


グループで作業するためのトークンを取得します
  1. ブラウザの行に挿入するだけでリクエストを送信します。
    https://oauth.vk.com/authorize?client_id=YOURAPPID&group_ids=YOURGROUPID6&display=page&scope=messages,wall,manage&response_type=token&v=5.92 

    YOURAPPIDは前のスポイラーで見つかったアプリケーションIDであり、YOURGROUPID IDはコミュニティです。
  2. アプリケーションへのアクセスを許可します
  3. そして、私たちはこの答えを得ます
     https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN 

    トークンがラテン文字と数字の非常に長い組み合わせになる場合


トークンを取得する方が簡単です
  1. コミュニティ管理に移動


長期投票で作業するためのコミュニティを設定する
  1. コミュニティの管理タブに移動します。
  2. APIの使用法とその中​​のLongPoll API
  3. イベントの種類(イベント)で、必要なものをマークします。テストにはすべてをマークします。


主要部分に進みます。

お気に入りのIDEを起動し、ネットコアにコンソールアプリケーションを作成します



VkNetを追加

ネタバレ
残念ながら、ウィキでは、ドキュメントは少し古くなっています。 このガイドを作成する理由の1つ。
しかし、 ここには大きなサポートがあります。


トークンを使用してログインします。

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

そして、無限ループで更新を受け取ります

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

何かが私たちに来たかどうかを確認しましょう

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


受信したコード
 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); } } } 


ボード用に受け取ったコードを収集しましょう

 dotnet publish . -r linux-arm 

そして、ボード上で目的のディレクトリをドラッグします



sshで行って実行します

 chmod +x ConsoleApp1 ./ConsoleApp1 

結果
メッセージを送る



コンソールでメッセージを受け取ります



答えを得る



対話


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


All Articles