A
A
aes256sha2020-11-30 19:16:44
Python
aes256sha, 2020-11-30 19:16:44

How to connect two VK bots?

There is a bot that remembers words from a VK conversation, and then generates its own words from these words (example: https://vk.com/vitalik1338 )
The repository of this bot on github is https://github.com/kesha1225/NeuronBot
There is also bot script that makes demotivators (send a photo - you get it in the form of a demotivator with text)
This bot needs to generate demotivators (example: https://vk.com/neurodemotivators ), from the words taken from the conversation, just like the bot above ( on markov-chain)
Demotivator code:

import vk_api
import requests
import random
import os
from PIL import Image
from PIL import ImageOps
from PIL import ImageFont
from PIL import ImageDraw
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

vk = vk_api.VkApi(token='токен')
vk._auth_token()
vk.get_api()
longpoll = VkBotLongPoll(vk, айди группы)


while True:
    try:
        for event in longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:

                if len(event.object['attachments']) >= 1:  # проверяем есть ли вложения в сообщении
                    if 'photo' in event.object['attachments'][0]['type']:  # проверяем является ли вложение фотографией

                        photos = event.object['attachments'][0]['photo']['sizes']  # размеры фотографии
                        max_photo = photos[len(photos)-1]['url']  # выбираем ссылку на фотографию с максимальным размером.

                        img = Image.new('RGB', (1280, 1024), color=('#000000'))  # создаем картинку с черным фоном
                        img_border = Image.new('RGB', (1060, 720), color=('#000000'))  # создаем еще одну картинку с черным фоном
                        border = ImageOps.expand(img_border, border=2, fill='#ffffff')  # добавляем второй картинке белую обводку

                        user_photo_raw = requests.get(f'{max_photo}', stream=True).raw  # вытягиваем из ссылки на фото саму фотографию
                        user_img = Image.open(user_photo_raw).convert("RGBA").resize((1050, 710))  # открываем фотографию, конвертируем в RGBA и меняем размер

                        img.paste(border, (111, 96))  # вставляем картинку с обводкой
                        img.paste(user_img, (118, 103))  # вставляем фотографию

                        drawer = ImageDraw.Draw(img)  # "карандаш", которым мы будем писать текст

                        font_1 = ImageFont.truetype(font='times-new-roman.ttf', size=60, encoding='UTF-8')  # шрифт 1 для большой надписи
                        font_2 = ImageFont.truetype(font='times-new-roman.ttf', size=30, encoding='UTF-8')  # шрифт 2 для маленькой

                        # !!! Шрифт нужно скачать и разместить в 1 папке со скриптом. Качал отсюда https://ffont.ru/font/times-new-roman

                        text_1 = 'едет'  # текст большой надписи
                        text_2 = 'а куда'  # текст маленькой надписи

                        # Здесь подставляете уже какаие вам надо, можете из базы вытягивать сообщения и тд.

                        size_1 = drawer.textsize(f'{text_1}', font=font_1)  # узнаем размер 1 надписи
                        drawer.text(((1280 - size_1[0]) / 2, 850), f'{text_1}', fill=(240, 230, 210), font=font_1)  # вставляем 1 надпись внизу по центру картинки

                        size_2 = drawer.textsize(f'{text_2}', font=font_2)  # узнаем размер 2 надписи
                        drawer.text(((1280 - size_2[0]) / 2, 950), f'{text_2}', fill=(240, 230, 210), font=font_2)  # вставляем 2 надпись внизу по центру картинки

                        name = random.randint(1, 999999999)  # генерация имени

                        img.save(f'{name}.png')  # сохраняем результат в текущую директорию

                        server = vk.method("photos.getMessagesUploadServer")
                        upload = requests.post(server['upload_url'], files={'photo': open(f'{name}.png', 'rb')}).json()  # загружаем фото на сервер вк
                        save = vk.method('photos.saveMessagesPhoto', {'photo': upload['photo'], 'server': upload['server'], 'hash': upload['hash']})[0]  # сохраняем фото на сервере вк
                        photo = "photo{}_{}".format(save["owner_id"], save["id"])  # получаем фото для отправки

                        vk.method("messages.send", {"peer_id": event.object.peer_id, "attachment": photo, "random_id": 0})  # отправляем фото

                        os.remove(f'{name}.png')  # удаляем фото, чтобы не засорять память

    except Exception as e:
        print(repr(e))

Who knows how to put it all together?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
H
HemulGM, 2020-11-30
@HemulGM

There is no "communication" between bots. There is a place where you save words by the first bot. And the second bot will take these words from there. Usually, this place is bd. It is popular to use sqlite. Lightweight file database.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question