Quizbot für VKontakte

Community-Administratoren für "Smeshariki"
, — .



Einführung



Vor ungefähr drei Monaten spielten meine Freunde im VKontakte-Netzwerk im allgemeinen Chat (Konversation) ein Ratespiel - ein Spiel, das auf dem Cartoon "Smeshariki" basiert, den wir alle lieben. Regeln: Der Host schreibt Zitate von Zeichentrickfiguren. Die Spieler raten, aus welcher Serie dieses Zitat stammt. Ich beschloss, das Spiel interessanter zu gestalten und es der Rolle des führenden Bots zuzuweisen.



Gruppenerstellung



Um eine Gruppe oder Community für unseren Bot zu erstellen, müssen Sie in VKontakte zum Abschnitt "Communitys" gehen und oben rechts auf die Schaltfläche "Community erstellen" klicken.



Bild



Wir wählen den Community-Typ "Interessengruppe".



Bild



Einen Namen finden, ein Thema auswählen und den Gruppentyp offen lassen.



Bild



Jetzt müssen wir die ID herausfinden und ein Gruppentoken erstellen.



Wenn sich die ID in der Adressleiste nach dem Wort "Verein" befindet, müssen Sie sich ein wenig um den Token kümmern.



Bild



Zur Gruppenverwaltung gehen:



Bild



Wählen Sie den Abschnitt "Arbeiten mit API" und aktivieren Sie dort "Long Poll API", damit der Bot funktioniert.



Bild



Gehen Sie als Nächstes zu "Zugriffsschlüssel" und erstellen Sie einen Zugriffsschlüssel mit den folgenden Einstellungen:



Bild



Der resultierende Zugriffsschlüssel ist unser Token:



Bild



Sie müssen nur noch zulassen, dass die Gruppe zu Konversationen hinzugefügt wird.



Gehen Sie zum Abschnitt "Nachrichten -> Einstellungen für den Bot", aktivieren Sie die "Bots-Funktionen" und klicken Sie auf "Community zu Konversationen hinzufügen". Wir sparen.



Bild



Installieren des vk_api-Moduls



Um das Modul für die Arbeit mit der Vkontakte-API zu installieren, müssen Sie den folgenden Befehl in die Befehlszeile schreiben:



pip3 install vk_api


Sie müssen auch eine Datei "points.pickle" im Bot-Verzeichnis erstellen.



Basisfunktionen



Weiter zum Software-Teil: Wir

verbinden die notwendigen Plugins: pickle, random, request und die vk_api-Bibliothek, dank derer Sie mit VKontakte arbeiten können.



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


Wir erstellen ein Wörterbuch mit Anführungszeichen und Wörterbüchern zum Speichern von Informationen:



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


Die Anführungszeichen selbst sind in Listen in den Schlüsseln des "Serien" -Wörterbuchs eingeschlossen, so dass es viele Anführungszeichen pro Serie gibt.



Die Variable "series_in_chats" wird benötigt, um Informationen über die Serie in einer separaten Konversation zu speichern. Die Variable "quote_in_chats" ist ähnlich, nur um Informationen über das Zitat zu speichern.



Jetzt verbinden wir uns mit der Gruppe:



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


Sie können eine Funktion zum bequemeren Senden von Nachrichten erstellen:



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


Argumente:
ch_id # ID ,     
msg #  




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


Methode zum Senden von Nachrichten.



Erforderliche Parameter:



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


Lesen Sie hier mehr über die Methode .



Nachrichten verarbeiten



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


Jetzt können wir von der Gruppe empfangene Nachrichten verarbeiten, Nachrichten im Namen der Gruppe senden und vieles mehr.



Wir stellen Brillen vor



Dieser Code muss eingefügt werden, nachdem überprüft wurde, ob "chat_id nicht in series_in_chats" enthalten ist:




                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
                        #   
                       


Erraten



Wir überprüfen: Wenn die im Gespräch empfangene Nachricht dem Wort "Vermutung" entspricht, antwortet der Bot mit einem Zitat, das erraten werden muss (dies alles nach der Überprüfung von "Wenn dies der Fall ist"):




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


Es bleibt nur die Richtigkeit der Serie zu überprüfen. Wenn die Nachricht den Namen der Serie enthält, antwortet der Bot, dass die Serie erraten wurde:




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


Fazit



Infolgedessen funktioniert der Bot







ungefähr so: Auf dieser Basis können Sie natürlich fast jeden Bot erstellen - nicht nur eine Vermutung.



Der erstellte Bot ist in der VKontakte-Community " Abode of Quests | Smeshariki " zu sehen.



Er arbeitet übrigens nicht nur in Chats, sondern auch in privaten Nachrichten.



Und es gibt auch ein paar Dinge, über die ich hier nicht gesprochen habe.



All Articles