- PVSM.RU - https://www.pvsm.ru -

Как написать чат-бота для vk.com за 3 минуты

К сожалению, на данный момент нет хороших библиотек на Python2, для того, чтобы быстро создать чат-бота. Ниже я покажу, как легко можно написать примитивного чат бота для VK, используя API VK.

Статья написана для новичков, чтобы показать, что ничего сложного в написании ботов на Python нет.

Авторизация

Нам понадобится библиотека vk_api. Авторизоваться в вк можно двумя способами:
— Как пользователь
— Как сообщество

В первом случае надо будет ввести логин и пароль. Во втором случае в группе надо включить "Сообщения сообщества" и создать ключ доступа к API:

image

image

Авторизация в две строчки:

import time
import vk_api
vk = vk_api.VkApi(login = 'login', password = 'password')
#vk_api.VkApi(token = 'a02d...e83fd') #Авторизоваться как сообщество
vk.auth()

Отправка сообщений

Теперь напишем короткую функцию, которая отправляет сообщение выбранному человеку.

P.S. Сообщество может отправлять сообщения только ранее писавшим пользователям.

def write_msg(user_id, s):
    vk.method('messages.send', {'user_id':user_id,'message':s})

В vk.method мы можем вызывать любой метод из VK API [1] и передавать параметры в виде словаря.

В данном случае мы вызываем метод messages.send [2] и в качестве параметров передаем id пользователя и текст сообщения.

Прием сообщений

Отлично! Отправлять сообщения мы научились, осталось научиться их принимать. Для этого нам нужен метод messages.get [3].

Несколько параметров, на которые стоит обратить внимание:

1) out — если этот параметр равен 1, сервер вернет исходящие сообщения.
2) count — количество сообщений, которое необходимо получить.
3) time_offset — максимальное время, прошедшее с момента отправки сообщения до текущего момента в секундах.
4) last_message_id — идентификатор сообщения, полученного перед тем, которое нужно вернуть последним (при условии, что после него было получено не более count сообщений)

values = {'out': 0,'count': 100,'time_offset': 60}
vk.method('messages.get', values)

В нашем случае этот метод вернет все полученные сообщения за последние 60 сек, если их конечно было меньше 100, а если больше, то последние 100.

В итоге мы получаем список items:

{u'count': 3441,
 u'items': [{u'body': u'u041fu0438u0448u0435u043c u0431u043eu0442u0430 u0434u043bu044f u0432u043a!',
   u'date': 1491934484,
   u'id': 7387,
   u'out': 0,
   u'read_state': 0,
   u'title': u' ... ',
   u'user_id': 23107592},
  {u'body': u'u041fu0440u0438u0432u0435u0442 u0425u0430u0431u0440!',
   u'date': 1491934479,
   u'id': 7386,
   u'out': 0,
   u'read_state': 0,
   u'title': u' ... ',
   u'user_id': 23107592}]}

Если объяснять простыми словами, то items — это то, что можно выделить в диалоге.

image

Финальный аккорд, делаем вечный цикл, где на каждое сообщение будем отвечать "Привет!".

while True:
    response = vk.method('messages.get', values)
    if response['items']:
        values['last_message_id'] = response['items'][0]['id']
    for item in response['items']:
            write_msg(item[u'user_id'],u'Привет!')
    time.sleep(1)

Чат-бот готов.

P.S. Мы запоминаем параметр last_message_id, чтобы в следующий раз обрабатывать только новые сообщения.

Полный код

import time
import vk_api
vk = vk_api.VkApi(login = 'login', password = 'password')
#vk_api.VkApi(token = 'a02d...e83fd') #Авторизоваться как сообщество
vk.auth()
values = {'out': 0,'count': 100,'time_offset': 60}

def write_msg(user_id, s):
    vk.method('messages.send', {'user_id':user_id,'message':s})

while True:
    response = vk.method('messages.get', values)
    if response['items']:
        values['last_message_id'] = response['items'][0]['id']
    for item in response['items']:
            write_msg(item[u'user_id'],u'Привет!')
    time.sleep(1)

Получилось 17 строк кода. Успехов!

Автор: kucev

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/252489

Ссылки в тексте:

[1] VK API: https://vk.com/dev/methods

[2] messages.send: https://vk.com/dev/messages.send

[3] messages.get: https://vk.com/dev/messages.get

[4] Источник: https://habrahabr.ru/post/326312/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox