Satu VK bot, satu C # dan sebuah jeruk

Melanjutkan eksperimen saya dengan rumah "pintar", demi kesenangan, saya memutuskan untuk menambahkan grup ke VK untuk mengendalikan beberapa karakteristiknya. Untuk artikel ini, kami menetapkan tugas: kami akan mencoba menulis dalam bahasa C # bot sederhana yang akan merespons atas nama komunitas di VK dan mempertimbangkan cara cepat meluncurkannya di arm32 (dalam kasus saya, oranye pi nol).



Pikirkan tentang penyebaran
ada banyak opsi lain (misalnya, put runtime), ini salah satunya

Jadi, letakkan di rak.

Buat aplikasi di VK
Berikut ini dokumentasi terperinci
  1. Untuk membuat bot, buka di sini
    Klik "buat aplikasi" dan pilih "Aplikasi Mandiri".
  2. Sekarang kita beralih ke manajemen dan di tab Application Id kita ingat ID-nya. Ini akan bermanfaat bagi kita lebih jauh.


Kami mendapat tanda untuk bekerja dengan kelompok
  1. Kami mengirim permintaan hanya dengan memasukkannya ke dalam baris browser:
    https://oauth.vk.com/authorize?client_id=YOURAPPID&group_ids=YOURGROUPID6&display=page&scope=messages,wall,manage&response_type=token&v=5.92 

    di mana YOURAPPID adalah id aplikasi yang kami temukan di spoiler sebelumnya, dan id YOURGROUPID adalah komunitas Anda.
  2. Kami memberikan akses ke aplikasi
  3. Dan kami mendapatkan jawaban ini
     https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN 

    Di mana token akan menjadi kombinasi huruf dan angka latin yang sangat panjang


Lebih mudah mendapatkan token
  1. Pergi ke manajemen komunitas


Mendirikan komunitas untuk bekerja dengan polling panjang
  1. Kami pergi ke tab manajemen komunitas kami.
  2. Api Penggunaan dan di dalamnya LongPoll Api
  3. Jenis acara (event), di dalamnya kami menandai perlu, untuk tes saya akan menandai semuanya.


Kami lolos ke bagian utama:

Luncurkan ide favorit Anda, buat aplikasi konsol di net core



Tambahkan VkNet

spoiler
Sayangnya di wiki, dokumentasinya agak ketinggalan jaman. Salah satu alasan untuk membuat panduan ini.
Tetapi ada dukungan besar di sini.


Masuk menggunakan token kami:

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

Dan dalam satu lingkaran tanpa akhir kami akan menerima pembaruan

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

Mari kita periksa apakah sesuatu datang kepada kita

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

Untuk semua data yang diterima, kami mencari tahu apakah semua ini adalah pesan, jika demikian, kemudian cetak isinya

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

Dan kami akan menjawab pengguna dengan teks yang sama

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


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


Mari kumpulkan kode yang diterima untuk papan kami

 dotnet publish . -r linux-arm 

Dan seret di papan direktori yang diinginkan



Kami pergi ssh dan lari

 chmod +x ConsoleApp1 ./ConsoleApp1 

Hasil
Kirim pesan



Kami menerima pesan di konsol



Kami mendapat jawabannya



Dialog


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


All Articles