مسؤولي المجتمع لـ "Smeshariki"
, — .
المقدمة
منذ حوالي ثلاثة أشهر ، لعب أصدقائي على شبكة فكونتاكتي في محادثة عامة (محادثة) لعبة تخمين - وهي لعبة تعتمد على الرسوم المتحركة "Smeshariki" ، والتي نحبها جميعًا. القواعد: يكتب المضيف اقتباسات من شخصيات كرتونية ، ويخمن اللاعبون من أي سلسلة يأتي هذا الاقتباس. قررت أن أجعل اللعبة أكثر تشويقًا وأسندها إلى دور الروبوت الرائد.
إنشاء المجموعة
من أجل إنشاء مجموعة أو مجتمع لبرنامج الروبوت الخاص بنا ، تحتاج إلى الانتقال إلى قسم "المجتمعات" في فكونتاكتي والنقر على الزر "إنشاء مجتمع" في الزاوية اليمنى العليا.
نختار نوع المجتمع "مجموعة المصالح".
ابتكار اسم واختيار موضوع وترك نوع المجموعة مفتوحًا.
نحتاج الآن إلى معرفة المعرف وإنشاء رمز مميز للمجموعة.
إذا كان من الممكن العثور على المعرف في شريط العناوين بعد كلمة "club" ، فستحتاج إلى القلق قليلاً بشأن الرمز المميز.
انتقل إلى إدارة المجموعة:
حدد قسم "العمل مع API" وقم بتمكين "Long Poll API" هناك حتى يعمل الروبوت.
بعد ذلك ، انتقل إلى "Access Keys" ، وأنشئ مفتاح وصول بالإعدادات التالية:
مفتاح الوصول الناتج هو رمزنا المميز:
الشيء الوحيد المتبقي هو السماح للمجموعة بالإضافة إلى المحادثات.
انتقل إلى قسم "الرسائل -> إعدادات الروبوت" ، وقم بتشغيل "إمكانات الروبوت" وانقر على "السماح بإضافة مجتمع إلى المحادثات". ننقذ.
تثبيت وحدة vk_api
لتثبيت الوحدة النمطية للعمل مع واجهة برمجة تطبيقات فكونتاكتي ، تحتاج إلى كتابة الأمر التالي في سطر الأوامر:
pip3 install vk_api
تحتاج أيضًا إلى إنشاء ملف "Points.pickle" في دليل bot.
وظائف أساسية
الانتقال إلى جزء البرنامج: نقوم
بتوصيل المكونات الإضافية الضرورية: pickle ، و random ، وطلبات ومكتبة vk_api ، والتي بفضلها يمكنك العمل مع VKontakte.
import random
import pickle
import requests
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
# BotLongpoll - .
نقوم بإنشاء قاموس مع اقتباسات وقواميس لتخزين المعلومات:
series = {"":[" 1", " 2"], "":[" 1", " 2"]}
series_in_chats = {}
quotes_in_chats = {}
points = {}
علامات الاقتباس نفسها محاطة بقوائم بمفاتيح قاموس "السلسلة" بحيث يكون هناك العديد من علامات الاقتباس لكل سلسلة.
مطلوب المتغير "series_in_chats" لتخزين المعلومات حول السلسلة في محادثة منفصلة ، المتغير "quotes_in_chats" مشابه ، فقط لتخزين المعلومات حول عرض الأسعار.
الآن نحن نتواصل مع المجموعة:
vk_session = vk_api.VkApi(token=" ") # ID
longpoll = VkBotLongPoll(vk_session, "ID ") #
vk = vk_session.get_api()
يمكنك إنشاء وظيفة لإرسال الرسائل بسهولة أكبر:
def send(ch_id, msg):
vk.messages.send(chat_id=ch_id, random_id=random.randint(1, 9999999), message=msg)
الحجج:
ch_id # ID ,
msg #
vk.messages.send(chat_id, random_id, message)
طريقة إرسال الرسائل.
المعلمات المطلوبة:
chat_id - ID , ,
random_id - , ,
message - .
اقرأ المزيد عن الطريقة هنا.
معالجة الرسائل
while True: #
try:
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat:
chat_id = int(event.chat_id) #ID ,
text = event.object.text.lower() #
man = event.obj.from_id #ID ,
if chat_id not in series_in_chats:
episode = random.choice(series.keys()) #
#
quote = random.choice(series.get(episode)) #
#
series_in_chats.update({chat_id:episode}) #
quotes_in_chats.update({chat_id:quote}) #
# ,
# .
except:
continue
# try except - -
# ,
الآن يمكننا معالجة الرسائل التي تتلقاها المجموعة ، وإرسال الرسائل نيابة عن المجموعة وغير ذلك الكثير.
نقدم النظارات
يجب إدخال هذا الرمز بعد التحقق من "إذا لم يكن chat_id في series_in_chats":
if points == {}:
with open('points.pickle', 'wb') as f:
pickle.dump(points, f)
with open('points.pickle', 'rb') as f:
points = pickle.load(f)
if isinstance(points.get(man), int) == False:
points.update({man:0})
with open('data.pickle', 'wb') as f:
pickle.dump(points, f)
# points
#
التخمين
نجري فحصًا: إذا كانت الرسالة الواردة في المحادثة تساوي كلمة "guess" ، فسوف يرد الروبوت باقتباس يجب تخمينه (كل هذا بعد التحقق من "if isinstance"):
if text == "":
send(chat_id, ", : "+ quotes_in_chats.get(chat_id))
كل ما تبقى هو التحقق من صحة السلسلة - إذا كانت الرسالة تحتوي على اسم السلسلة ، سيرد الروبوت بأنه تم تخمين السلسلة:
if series_in_chats.get(chat_id) in text:
send(chat_id, " !")
points.update({man:points.get(man)+1}) # 1
with open('points.pickle', 'wb') as f:
pickle.dump(points, f) #
send(chat_id, " !\n : "+str(points.get(man)))
# :
episode = random.choice(series.keys()) #
#
quote = random.choice(series.get(episode)) #
#
series_in_chats.update({chat_id:episode}) #
quotes_in_chats.update({chat_id:quote}) #
خاتمة
نتيجة لذلك ، سيعمل الروبوت شيئًا كالتالي:
بالطبع ، على هذا الأساس ، يمكنك إنشاء أي روبوت تقريبًا - وليس مجرد تخمين.
يمكن رؤية الروبوت الذي تم إنشاؤه في مجتمع فكونتاكتي " دار المهام | Smeshariki ".
بالمناسبة ، إنه لا يعمل فقط في المحادثات ، ولكن أيضًا في الرسائل الخاصة.
يحتوي أيضًا على بعض الأشياء التي لم أقم بتغطيتها هنا.