Bot de prueba para VKontakte

Administradores de la comunidad de "Smeshariki"
, — .



Introducción



Hace unos tres meses, mis amigos de la red VKontakte en un chat general (conversación) jugaron un juego de adivinanzas, un juego basado en la caricatura "Smeshariki", que a todos nos encanta. Reglas: el presentador escribe citas de personajes de dibujos animados, los jugadores adivinan de qué serie es esta cita. Decidí hacer el juego más interesante y asignarlo al rol del bot líder.



Creación de grupos



Para crear un grupo o comunidad para nuestro bot, debe ir a la sección "Comunidades" en VKontakte y hacer clic en el botón "Crear comunidad" en la esquina superior derecha.



imagen



Seleccionamos el tipo de comunidad "Grupo de interés".



imagen



Proponer un nombre, elegir un tema, dejar el tipo de grupo abierto.



imagen



Ahora tenemos que averiguar el ID y crear un token de grupo.



Si la identificación se puede encontrar en la barra de direcciones después de la palabra "club", entonces tendrá que preocuparse un poco con el token.



imagen



Vaya a la gestión de grupos:



imagen



seleccione la sección "Trabajar con API" y habilite "Long Poll API" allí para que el bot funcione.



imagen



A continuación, vaya a "Claves de acceso", cree una clave de acceso con la siguiente configuración:



imagen



La clave de acceso resultante es nuestro token:



imagen



Lo único que queda es permitir que el grupo se agregue a las conversaciones.



Vaya a la sección "Mensajes -> Configuración del bot", active las "Capacidades de los bots" y haga clic en "Permitir para agregar comunidad a las conversaciones". Nosotros salvamos.



imagen



Instalación del módulo vk_api



Para instalar el módulo para trabajar con la API de Vkontakte, debe escribir el siguiente comando en la línea de comandos:



pip3 install vk_api


También necesita crear un archivo "points.pickle" en el directorio del bot.



Funciones básicas



Pasando a la parte del software:

conectamos los complementos necesarios: pickle, random, solicitudes y la biblioteca vk_api, gracias a la cual puedes trabajar con VKontakte.



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


Creamos un diccionario con citas y diccionarios para almacenar información:



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


Las citas en sí están encerradas en listas en las claves del diccionario de "series" de modo que haya muchas citas por serie.



La variable "series_in_chats" es necesaria para almacenar información sobre la serie en una conversación separada, la variable "quotes_in_chats" es similar, solo para almacenar información sobre la cotización.



Ahora nos conectamos al grupo:



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


Puede crear una función para enviar mensajes de manera más conveniente:



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


Argumentos:
ch_id # ID ,     
msg #  




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


Método de envío de mensajes.



Parámetros requeridos:



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


Lea más sobre el método aquí.



Procesando mensajes



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


Ahora podemos procesar los mensajes recibidos por el grupo, enviar mensajes en nombre del grupo y mucho más.



Introducimos vasos



Este código debe insertarse después de verificar "si chat_id no está en 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
                        #   
                       


Adivinación



Hacemos una comprobación: si el mensaje recibido en la conversación es igual a la palabra "adivinar", el bot responderá con una cita que hay que adivinar (todo esto después de marcar "si es una instancia"):




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


Todo lo que queda es verificar la exactitud de la serie: si el mensaje contiene el nombre de la serie, el bot responderá que la serie fue adivinada:




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


Conclusión



Como resultado, el bot funcionará de la siguiente manera: por







supuesto, sobre esta base, puede crear casi cualquier bot, no solo una suposición.



El bot creado se puede ver en la comunidad de VKontakte " Abode of Quests | Smeshariki ".



Por cierto, trabaja no solo en chats, sino también en mensajes privados.



Y también tiene algunas cosas de las que no hablé aquí.



All Articles