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

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

نحصل على رمز للعمل مع المجموعات- نرسل الطلب ببساطة عن طريق إدراجه في سطر المتصفح:
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 هو مجتمعك.
- نعطي الوصول إلى التطبيق

- ونحصل على هذه الإجابة
https://oauth.vk.com/blank.html#expires_in=0&access_token_YOURGROUPID=YOURTOKEN
حيث سيكون الرمز المميز مزيجًا طويلًا جدًا من الأحرف والأرقام اللاتينية
من الأسهل الحصول على رمز مميز- انتقل إلى إدارة المجتمع


قم بإنشاء مجتمع للعمل مع استطلاع طويل- نذهب إلى علامة التبويب إدارة مجتمعنا.
- استخدام Api وفيه LongPoll Api

- أنواع الأحداث (الأحداث) ، التي نضع عليها علامة ضرورية ، للاختبارات سأضع علامة على كل شيء.
ننتقل إلى الجزء الرئيسي:إطلاق 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
النتيجةأرسل رسالة

نتلقى الرسالة في وحدة التحكم

نحصل على الجواب

حوار
