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.
Wir wählen den Community-Typ "Interessengruppe".
Einen Namen finden, ein Thema auswählen und den Gruppentyp offen lassen.
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.
Zur Gruppenverwaltung gehen:
Wählen Sie den Abschnitt "Arbeiten mit API" und aktivieren Sie dort "Long Poll API", damit der Bot funktioniert.
Gehen Sie als Nächstes zu "Zugriffsschlüssel" und erstellen Sie einen Zugriffsschlüssel mit den folgenden Einstellungen:
Der resultierende Zugriffsschlüssel ist unser Token:
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.
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.