واحد VK بوت ، واحد C # والبرتقالي

استمرارًا لتجاربي مع المنزل "الذكي" ، من أجل المتعة ، قررت إضافة مجموعة إلى VK للتحكم في بعض خصائصه. بالنسبة لهذه المقالة ، نحدد المهمة: سنحاول كتابة لغة C # بوت بسيط يستجيب نيابة عن المجتمع في VK ويفكر في كيفية إطلاقه بسرعة على arm32 (في حالتي ، البرتقالي pi zero).



فكرت في النشر
هناك العديد من الخيارات الأخرى (على سبيل المثال ، وضع وقت التشغيل) ، وهذا أحدها

لذا ، ضعها على الرفوف.

إنشاء تطبيق في VK
هنا هي الوثائق التفصيلية
  1. لإنشاء روبوت ، اذهب هنا
    انقر فوق "إنشاء تطبيق" وحدد "تطبيق مستقل".
  2. الآن ننتقل إلى الإدارة وفي علامة تبويب معرف التطبيق نتذكر معرفها. سيكون مفيدا لنا أكثر.


نحصل على رمز للعمل مع المجموعات
  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 هو معرف التطبيق الذي وجدناه في المفسد السابق ، ومعرف YOURGROUPID هو مجتمعك.
  2. نعطي الوصول إلى التطبيق
  3. ونحصل على هذه الإجابة
     https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN 

    حيث سيكون الرمز المميز مزيجًا طويلًا جدًا من الأحرف والأرقام اللاتينية


من الأسهل الحصول على رمز مميز
  1. انتقل إلى إدارة المجتمع


قم بإنشاء مجتمع للعمل مع استطلاع طويل
  1. نذهب إلى علامة التبويب إدارة مجتمعنا.
  2. استخدام Api وفيه LongPoll Api
  3. أنواع الأحداث (الأحداث) ، التي نضع عليها علامة ضرورية ، للاختبارات سأضع علامة على كل شيء.


ننتقل إلى الجزء الرئيسي:

إطلاق IDE المفضل لديك ، وإنشاء تطبيق وحدة التحكم على net core



أضف VkNet

المفسد
لسوء الحظ على الويكي ، الوثائق قديمة بعض الشيء. أحد أسباب إنشاء هذا الدليل.
ولكن هناك دعم كبير هنا.


تسجيل الدخول باستخدام الرمز المميز الخاص بنا:

 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/ar431090/


All Articles