К сожалению, на данный момент нет хороших библиотек на 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 и передавать параметры в виде словаря.


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


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


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


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


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'\u041f\u0438\u0448\u0435\u043c \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0432\u043a!',
   u'date': 1491934484,
   u'id': 7387,
   u'out': 0,
   u'read_state': 0,
   u'title': u' ... ',
   u'user_id': 23107592},
  {u'body': u'\u041f\u0440\u0438\u0432\u0435\u0442 \u0425\u0430\u0431\u0440!',
   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, чтобы в следующий раз обрабатывать только новые сообщения.


Полный код
# -*- coding: utf-8 -*-
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 строк кода. Успехов!

Поделиться с друзьями
-->

Комментарии (14)


  1. Dross_42
    12.04.2017 21:53
    -3

    Все хорошо, но не осилил куда вставлять данный код. Можно было бы хотя бы на нужную инструкцию по пользованию API VK, раз для новичков.


    1. kucev
      12.04.2017 22:17

      1) Установить Python 2 или Anaconda для Python 2
      2) Установить библиотеку vk_api. Для этого в командной строке надо ввести

      pip install vk_api
      3) Создать текстовый файл, вставить в него полный код и назвать, например, bot_vk.py
      4)В командной строке написать python <путь к файлу>. Например:
      python /home/bot_vk.py


      1. Dross_42
        12.04.2017 22:30

        Спасибо, будем разбираться)


      1. negodnik
        12.04.2017 23:10
        -2

        А ещё установить pip


        1. kucev
          12.04.2017 23:45

          В новых версиях он устанавливается автоматически с питоном)


  1. Roman_Zhuravskiy
    13.04.2017 17:59

    интересно только одно, почему python2?


    1. kucev
      13.04.2017 18:00

      Да, вы верно заметили. Данный код будет работать и на python2 и на python3.


  1. Grinch997
    13.04.2017 18:02

    А почему не lopngpool? Вот пример для новичков.


    1. kucev
      13.04.2017 18:07

      Спасибо, я его не видел) Еще есть LOLBOT для VK, новичкам тоже можно ознакомиться.


  1. Neponyatochka1
    13.04.2017 18:07

    Установил библиотеку, создал файл, написал в командной строке путь к файлу, а что дальше должно произойти? Просто открывается сам файл с кодом и более ничего не происходит. Делаю в первый раз, сложный процесс, однако…


    1. kucev
      13.04.2017 18:12

      Если вы все сделали правильно, не забыли вставить свой логин и пароль, то после команды python <путь к файлу> скрипт должен запуститься и чат бот начать работать. При этом сам файл с кодом не должен открываться.


  1. Neponyatochka1
    14.04.2017 19:23

    Всё сделал правильно на этот раз, но пишет, что не пройдена двухфакторная аутентификация. Приходит код, но я не понимаю, куда его вставлять…


  1. all4me4
    16.04.2017 03:26

    скажите, плиз, что за библиотека vk_api?
    эта https://github.com/python273/vk_api/wiki?


    1. kucev
      16.04.2017 03:26

      да