Найти в Дзене

Как создать "БОТА" в ВКОНТАКТЕ на "Python"

Оглавление

Сейчас боты плотно вошли в нашу жизнь они есть на ПК , мобильных устройствах в социальных и много где ещё . Как сделать бота ???

Нам понадобятся:

  1. Желание

Как это работает ???

Всё очень просто, в vk api есть такая штука , называется longpool работает она так :

Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдёт какое- либо событие (например, придёт новое сообщение), либо истечёт заданное время ожидания.

Говорят русским языком, мы отправляем на сервер запрос, а он в свою очередь тыкает вконтакте если там произойдёт что либо, например, нам сообщение он бежит и говорит об этом нам. От этого и будем плясать.

Техническая часть:

Для начала нам нужно доказать вконтакту что мы — это мы, а не кто-либо ещё. Делается это очень просто.

import vk_api

import requests

session = requests.Session()

login, password = 'Ваш логин, emaтелефон', 'Ваш пароль'

vk_session = vVkApi(login, password)

try:

vk_session.auth(token_only=True)

except vk_api.AuthError as error_msg:

print(error_msg)

return

Замечание, ребята из ВК рекомендуют использовать в качестве логина номер телефона т.к. иначе можно нарваться на проверку антиробот, ту самую где тебя просят ввести недостоющие цыфры из номера телефона.

Если бот будет сидеть в группе то авторизация выглядит по другому.

import requests

import vk_api

vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото')

Что такое токен?

— Такая штука из циферок и буковок которую нужно получить в настройках группы. Для этого достаточно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».

Теперь вызовем longpool.

from vk_api.longpoll import VkLongPoll, VkEventType

longpoll = VkLongPoll(vk_session)

vk = vk_session.get_api()

for event in longpoll.listen():

if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:

#Слушаем longpoll, если пришло сообщение то:

if event.text == 'Первый вариант фразы' or event.text == 'Второй вариант фразы': #Если написали заданную фразу

if event.from_user: #Если написали в ЛС

vk.messages.send( #Отправляем сообщени user_id=event.user_id,

message='Ваш текст'

)

elif event.from_chat: #Если написали в Беседе

vk.messages.send( #Отправляем собщени#Отправляем chat_id=event.chat_id,

#Если message='Ваш текст'

)

В сообщениях может не только заданный вами текст. Например:

import datetime

vk.messages.send(

user_id=event.user_id,

messagское время: ' + str(now.strftime("%H:%M"))

)

А ещё можно прикреплять картинки.

attachments = []

from vk_api import VkUpload

upload = VkUpload(vk_session)

image_url = 'Ссылка на картинку'

image = session.get(image_url, stream=True)

photo = upload.photo_messages(photos=image.raw)[0]

attachments.append(

'photo{}_{}'.format(photo['owner_id'], photo['id'])

)

vk.messages.send(

user_id=event.user_id,

attachment=','.join(attachments),

message='Ваш текст'

)

Можно придумать ещё много всего интересного, но тут подумайте сами, а я лишь скажу что: ссылки можно делить на части. Например:

image_url = 'http://сайт.com/uploads/' + event.text + '.png'

и никто не запретил нам получать ответ от пользователя на примере Википедии:

import wikipedia Википедии

wikipedia.set_lang("RU")

if event.text == 'Википедия' or event.text == 'Вики' or event.text == 'википедия' or event.text == 'вики' or event.text == 'Wikipedia' or event.text == 'wikipedia' or event.text == 'Wiki' or event.text == 'wiki': нам пришло сообщение с текстом Википедия или Вики или ... или wiki

if event.from_user: написали в KC

vk.messages.send(

user_id=event.user_id,

message='Введите запрос' "Введите запрос"

)

elif event.from_chat: написали в беседе

vk.messages.send(

chat_id=event.chat_id,

message='Введите запрос' "Введите запрос"

)

for event in longpoll.listen():

if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Пинаем longpoll

if event.from_user:

vk.messages.send(

написали в ЛС

user_id=event.user_id,

message='Вот что я нашёл: \n' + str(wikipedia.summary(event.text)) "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения

)

break из цикла

elif event.from_chat: написали в беседе

vk.messages.send(

chat_id=event.chat_id,

message='Вот что я нашёл: \n' + str(wikipedia.summary(event.text)) "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения

)

break из цикла

continue