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
      
      





結果
メッセージを送る







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







答えを得る







対話








All Articles