Quiz bot pour VKontakte

Administrateurs de communauté pour "Smeshariki"
, — .



introduction



Il y a environ trois mois, mes amis et moi sur le réseau VKontakte dans une discussion générale (conversation) avons joué à un jeu de devinettes - un jeu basé sur le dessin animé "Smeshariki", que nous aimons tous. Règles: l'hôte écrit des citations de personnages de dessins animés, les joueurs devinent de quelle série cette citation est. J'ai décidé de rendre le jeu plus intéressant et de l'attribuer au rôle de robot leader.



Création de groupe



Afin de créer un groupe ou une communauté pour notre bot, vous devez vous rendre dans la section "Communautés" de VKontakte et cliquer sur le bouton "Créer une communauté" dans le coin supérieur droit.



image



Nous sélectionnons le type de communauté "Groupe d'intérêt".



image



Trouver un nom, choisir un sujet, laisser le type de groupe ouvert.



image



Nous devons maintenant trouver l'ID et créer un jeton de groupe.



Si l'ID se trouve dans la barre d'adresse après le mot «club», vous devrez vous inquiéter un peu avec le jeton.



image



Accédez à la gestion des groupes:



image



sélectionnez la section "Travailler avec l'API" et activez "Long Poll API" pour que le bot fonctionne.



image



Ensuite, allez dans "Clés d'accès", créez une clé d'accès avec les paramètres suivants:



image



La clé d'accès résultante est notre jeton:



image



La seule chose qui reste est de permettre au groupe d'être ajouté aux conversations.



Allez dans la section "Messages -> Paramètres du bot", activez les "Capacités Bots" et cliquez sur "Autoriser l'ajout d'une communauté aux conversations". Nous sauvons.



image



Installation du module vk_api



Afin d'installer le module pour travailler avec l'API Vkontakte, vous devez écrire la commande suivante dans la ligne de commande:



pip3 install vk_api


Vous devez également créer un fichier "points.pickle" dans le répertoire du bot.



Les fonctions de base



Passons à la partie logicielle: Nous

connectons les plugins nécessaires: pickle, random, requests et la bibliothèque vk_api, grâce à laquelle vous pouvez travailler avec VKontakte.



import random
import pickle
import requests
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType 
#  BotLongpoll -        .


Nous créons un dictionnaire avec des citations et des dictionnaires pour stocker des informations:



series = {"":[" 1", " 2"], "":[" 1", " 2"]}
series_in_chats = {} 
quotes_in_chats = {}
points = {}


Les citations elles-mêmes sont enfermées dans des listes dans les clés du dictionnaire «séries» de sorte qu'il y ait beaucoup de citations par série.



La variable "series_in_chats" est nécessaire pour stocker des informations sur la série dans une conversation séparée, la variable "quotes_in_chats" est similaire, uniquement pour stocker des informations sur le devis.



Maintenant, nous nous connectons au groupe:



vk_session = vk_api.VkApi(token=" ") #  ID 
longpoll = VkBotLongPoll(vk_session, "ID  ") #  
vk = vk_session.get_api()


Vous pouvez créer une fonction pour envoyer des messages plus facilement:



def send(ch_id, msg):
    vk.messages.send(chat_id=ch_id, random_id=random.randint(1, 9999999), message=msg)


Arguments:
ch_id # ID ,     
msg #  




vk.messages.send(chat_id, random_id, message)


Méthode d'envoi de messages.



Paramètres requis:



chat_id - ID ,    ,
random_id -   ,        ,
message -  .


En savoir plus sur la méthode ici.



Traitement des messages



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 -    - 
        #  ,   


Nous pouvons désormais traiter les messages reçus par le groupe, envoyer des messages au nom du groupe et bien plus encore.



Nous introduisons des lunettes



Ce code doit être inséré après avoir vérifié "if chat_id not in 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
                        #   
                       


Devinant



Nous vérifions: si le message reçu dans la conversation équivaut au mot "deviner", le bot répondra avec une citation qu'il faut deviner (tout cela après avoir vérifié "si c'est une instance"):




if text == "":
    send(chat_id, ",     : "+ quotes_in_chats.get(chat_id))


Il ne reste plus qu'à vérifier l'exactitude de la série - si le message contient le nom de la série, le bot répondra que la série a été devinée:




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


Conclusion



En conséquence, le bot fonctionnera comme ceci:







bien sûr, sur cette base, vous pouvez créer presque n'importe quel bot - pas seulement une supposition.



Le bot créé peut être vu dans la communauté VKontakte " Demeure de quêtes | Smeshariki ".



À propos, il travaille non seulement dans les chats, mais également dans les messages privés.



Et il y a aussi quelques choses dont je n'ai pas parlé ici.



All Articles