يتكون إنشاء البوت من الخطوات التالية:
- إنشاء روبوت في VK
- إنشاء مفتاح API
- إنشاء برنامج بوت من خلال LongPoolVK
لمن هذه المقالة؟
تم تصميم المقالة للمبرمجين المبتدئين. طريقة عمل البرنامج بسيطة للغاية وأي شخص يعرف بنية Python ويعرف القليل من OOP سيكون قادرًا على تنفيذها وفقًا لاحتياجاته. ولكن من حيث المبدأ ، حتى بدون معرفة أي مبادئ لـ OOP ، أعتقد أنه يمكنك تعلم كيفية إضافة وظائف بسيطة أو على الأقل في الحالات القصوى استخدام مصادر جاهزة من GitHub.
ماذا يوجد في هذه المقالة؟
إنشاء قاعدة البوت بعد ذلك ، يمكن برمجته كما تريد. أتمتة بعض الروتين أو استخدامه كمحاور.
تحسين (نسخة معقدة قليلاً من البوت). قررت أولاً تقديم رمز إجرائي بسيط للبوت ، ثم تعقيده قليلاً عن طريق إضافة وظائف تحسن البوت بشكل كبير.
إضافة وظيفة نقل الطقس. سنعلم البوت ليخبرنا عن الطقس.
إنشاء روبوت في VK
سنبدأ بإنشاء روبوت ، أي مجموعة في VK.
للقيام بذلك ، انتقل إلى "مجموعات" → "إنشاء مجتمع".
حدد أي نوع من المجتمع وأدخل اسمًا أو موضوع مجموعة.
في صفحة الإعدادات التي تفتح ، حدد "العمل مع واجهة برمجة التطبيقات"
بعد ذلك ، تحتاج إلى إنشاء مفتاح API.
ثم حدد المعلمات التي تحتاج إليها مع الوصول إلى مفتاح API الخاص بك.
على الأرجح ، سيكون عليك تأكيد الإجراء في VK باستخدام هاتفك المحمول. ثم انسخ مفتاح واجهة برمجة التطبيقات الناتج في مكان ما إلى ملف. ما زلنا بحاجة إليها.
ثم تحتاج إلى السماح بالرسائل. للقيام بذلك ، انتقل إلى "الرسالة" وقم بتشغيلها.
دعنا ننتقل إلى جزء البرنامج من البوت
لن نقوم بتنفيذها من خلال الطلبات إلى VK ، أو لنكون أكثر دقة ، نستخدم فقط مكتبة VkLongPool ، والتي ستقوم بذلك لنا.
هذا يتطلب مكتبة vk_api. تثبيته عبر النقطة:
بيثون-م تثبيت نقطة vk_api
لكن شخصياً ، أعمل مع بيئة Anaconda الافتراضية. هذا غالبا ما يسبب مشاكل أثناء العمل الأول. عادة ما تكون المشكلة هي أن النظام لا يتعرف على الأمر python. ويتم حل هذه المشكلة عن طريق إضافتها إلى PATH.
دعونا ننتقل إلى الكود نفسه:
نقوم باستيراد الوحدات اللازمة:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType
ثم الكود:
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
تتلقى الدالة write_msg معرف مستخدم VK <user_id> ، والذي سترسل إليه الرسالة والرسالة نفسها.
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
تسجيل الدخول كمجتمع وإعداد longpool:
في ذلك ، سوف نتحقق دوريًا من الأحداث. ويمكننا الحصول على نوع الحدث باستخدام event.type.
بعد ذلك ، بعد تلقي رسالة من المستخدم ، سنتمكن من إرسال خطاب مناظر له باستخدام الوظيفة write_msg التي تم إنشاؤها بالفعل.
لذلك ، أنشأنا روبوتًا بسيطًا جدًا في VK بنفس التنفيذ البسيط. ويمكن برمجة منطق الروبوت كما يحلو لك.
قائمة كود GHلنبدأ الآن ببرمجة أكثر واقعية.
قم بإنشاء فئة VkBot في الملف vk_bot.py ، والذي سيخدمنا كنظام روبوت.
class VkBot: def __init__(self, user_id): print(" !") self._USER_ID = user_id self._USERNAME = self._get_user_name_from_vk_id(user_id) self._COMMANDS = ["", "", "", ""]
وأضف طريقة يمكنك من خلالها الحصول على اسم المستخدم عبر vk id.
def _get_user_name_from_vk_id(self, user_id): request = requests.get("https://vk.com/id"+str(user_id)) bs = bs4.BeautifulSoup(request.text, "html.parser") user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) return user_name.split()[0]
يتم ذلك باستخدام beatifulsoup4.
التثبيت إذا لم يكن:
بيثون- m pip تثبيت bs4
هناك ما يكفي من المقالات التي تستحق الدراسة. باستخدامه ، سننشئ بعض الطرق الإضافية:
قم بتغيير معلمة _get_weather إلى المدينة المطلوبة ، وبعد ذلك يمكن استدعاء هذه الطريقة مع المدينة ، وتكون القيمة المحددة لك بشكل افتراضي.
باستخدام هذه الأساليب ، يمكننا الحصول على الوقت والطقس. يتم قطع هذه الأساليب من مشروع الروبوت الخاص بي. يجب عليك تنظيمها في مجموعات وفصول منفصلة ، باستخدام الميراث. ولكن من أجل مثال على العمل ، قررت أن أضع كل هذا في فئة بوت واحدة ، وهو أمر سيئ بالتأكيد.
نقوم بإنشاء الطريقة الرئيسية new_message ، التي ستعالج رسالة المستخدم وترد استجابة:
def new_message(self, message):
نعود الآن إلى الملف القابل للتنفيذ:
استيراد فئة الروبوت لدينا:
from vk_bot import VkBot
دعنا نغير حلقتنا الرئيسية:
print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: print('New message:') print(f'For me by: {event.user_id}', end='') bot = VkBot(event.user_id) write_msg(event.user_id, bot.new_message(event.text)) print('Text: ', event.text)
أي أننا سنرسل الآن الرسالة المستلمة إلى كائن البوت ، والذي سيعيد لنا الإجابة المطلوبة.
هذا التعقيد في البرنامج ضروري ببساطة إذا كنت ترغب في تحسين وظائف البوت:
قم بإنشاء حزم وفصول منفصلة لكل وظيفة _get_time و _get_weather. تنظيم الميراث من الطبقة العامة. وتحديد كل وظيفة جديدة في فصول منفصلة ، من الأفضل بالطبع التقسيم إلى حزم.
أضف قاموسًا بمفتاح معرف المستخدم وقيمة كائن الروبوت. وبالتالي ، ليس من الضروري إنشاء كائن بوت في كل مرة في دورة. بالإضافة إلى ذلك ، سيضمن هذا استخدام العديد من المستخدمين في وقت واحد في التصاميم المعقدة.
وبالتالي ، باختيار بنية رمز جيدة ، يمكنك إنشاء روبوت متعدد الوظائف.
على سبيل المثال ، قمت بتعليم برنامج الروبوت الخاص بي لتشغيل الموسيقى على جهاز الكمبيوتر ، وفتح المواقع أثناء الجلوس على الهاتف. إرسال وصفات لتناول الإفطار والغداء والعشاء.
يمكنك تعديل البوت بنفسك.
بوت من المقالمشروع البوت الرئيسي (متقدم) على هرمون النموسأكون سعيدا لأفكارك. لأية أسئلة ، اكتب.