12 subscribers

Написать бота для ВКонтакте и не умереть

Написать бота для ВКонтакте и не умереть

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

Освободившись от оков лени в начале весны, я сажусь за изучение Python, языка, который так расхваливали мои знакомые. Имея небольшую чисто теоретическую базу знаний по Java, C++, Pascal и ещё паре языков, стартовал я легко.

И мне, конечно же, захотелось сделать что-то работающее, что-то выше уровня абстрактных задач из книжек. Я взялся за бота ВКонтакте, потому что:

  • Можно разработать свой подход
  • Можно делать совершенно любые фичи, ставить себе тем самым разнообразные задачи
  • Это очень просто
  • Для этого не нужно часами думать, что же сделать
  • И это не очень серьёзный проект

Итак, первым делом я открыл документацию и установил библиотеку vk_api (которой уже давно не пользуюсь).

На этом этапе необходимо определиться, будете ли вы делать бота-пользователя, или бота сообщества. Первый может пользоваться всеми возможностями соцсети, но страдает от капчи. Второй лишён капчи, но изрядно ограничен, а особенно - в беседах.

Выбрав первый вариант, я погрузился в тестирование запросов к API

В самом начале, я писал код ужасно жутко, и читабельность его стремилась к 0:

текст сообщения хранился в переменной a
ответ на сообщение в
b
номер сообщения в
с
чтобы отправить сообщение, я использовал функцию smg()
поговаривают, что этот код работает
(прекрасный комментарий в нижней части, неправда ли?)
поговаривают, что этот код работает (прекрасный комментарий в нижней части, неправда ли?)

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

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

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

В конце лета я наконец-то решился привести код в порядок, написать новый модуль для работы с ВК (технически, не совсем модуль) и в целом переписать всё.

Открыв файлы старой доброй библиотеки vk_api, я увидел множество интересных для меня тогда конструкций, узнал о существовании *args и **kwargs, и в итоге, показал сам себе: "ты ничего до сих пор не умеешь"

В итоге, с конца лета я изучил больше, чем до этого. Я полностью разобрался в регулярных выражениях, открыл для себя Flask, сделав пару ботов-сообществ, построенных на нормальном модуле, заглянул в threading, subprocess, оценил прекрасную объектно-ориентированную сторону Python, и многое другое.

Определённо, есть ещё гигантский объём неизученной информации, и останавливаться не стоит.

Немного советов, если вы вдруг решили стартовать:

  • Следите за читабельностью. Лучше send_message, чем smg.
  • Прежде чем что-то реализовывать, поищите уже готовые реализации, посмотрите на отдельные подходы к решению нужных вам задач, почитайте документацию языка, в конце концов.
  • Никогда не недооценивайте тестирование.
  • Думайте, нужен ли ваш код на самом деле.

И если вы решили написать бота, то:

  • Внимательнее читайте документацию
  • Пишите функции-"обёртки" для часто используемых методов, например отправки сообщений или получения информации о пользователе
  • Напишите автоматический бан для тех, кто флудит, и, если вы имеете дело с Callback АРI, отсеивайте повторяющиеся сообщения.

Ну и напоследок, та же smg(), но в нынешнем её виде:

да, мне нужна проверка на True, а не на истинность
да, мне нужна проверка на True, а не на истинность

Мой VK: @aternative

Мои действующие боты:

  • @contradict - небольшой бот, сохраняющий картинки и умеющий немного больше.
  • @s8920 - ГачиБот, делающийся для знакомого.

Если интересно посмотреть на штуку для запросов в ВК, то скоро я допилю её и выложу в @inherit

Мусор в словах, 19.11'18