Answer the question
In order to leave comments, you need to log in
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))
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question