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.
Nous sélectionnons le type de communauté "Groupe d'intérêt".
Trouver un nom, choisir un sujet, laisser le type de groupe ouvert.
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.
Accédez à la gestion des groupes:
sélectionnez la section "Travailler avec l'API" et activez "Long Poll API" pour que le bot fonctionne.
Ensuite, allez dans "Clés d'accès", créez une clé d'accès avec les paramètres suivants:
La clé d'accès résultante est notre jeton:
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.
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.