Создание простого чат-бота в VK на Python 3
Статья рассчитана для начинающих программистов. Метод работы программы очень прост и любой, кто умеет разбираться в синтаксисе Питона и немного знающий ООП сможет его реализовать для своих нужд. Но в принципе даже не зная никаких принципов ООП, думаю можно научиться добавлять простые функции или хотя бы в крайнем случае использовать готовые исходники из GitHub.
Что есть в этой статье?
Создание основы бота. После этого его можно будет запрограммировать как-угодно. Автоматизировать какую-то рутину или использовать как собеседник.
Улучшенная (слегка усложненная версия бота). Я решил сначала представить простой процедурный код бота, а затем слегка усложнить его, добавив функции, значительно улучшающие работу бота.
Добавление функции передачи погоды. Научим бота говорить нам погоду.
Создание бота в ВК
Начнем мы с создания бота, а именно группу в ВК.
Для это нужно зайти в «группы» → «создать сообщество».
Выберите любой тип сообщества и введите название, тематику группы.
На открывшейся странице настроек, выберите «Работа с API»
Далее, необходимо создать API-ключ.
Затем выберите нужные вам параметры с доступом для вашего API-ключа.
Скорее всего, вам придётся подтверждать действие в ВК с помощью мобильного телефона. Затем скопируйте полученный API-ключ где-нибудь в файл. Он нам еще понадобится.
Затем нужно разрешить сообщения. Для этого переходим в «сообщения» и включаем их.
Приступим к программной части бота
Мы не будем реализовывать его через запросы к ВК, а если быть точнее, просто используем библиотеку VkLongPool, которая сделает это за нас.
Для этого необходима библиотека vk_api. Установим его через pip:
python -m pip install vk_api
Но лично я работаю с виртуальным окружением Anaconda. С этим зачастую возникают проблемы при первой работе. Обычно проблема в том, что система не распознают команду «python». А решается эта проблема путем добавления его в PATH.
Приступим к самому коду:
Импортируем нужные модули:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType
def write_msg(user_id, message): vk.method('messages.send', ) # API-ключ созданный ранее token = "6a9c267cd469388709a9e9acaddbe0aa81a0abbf12239b3e597a31729ffbddb9c88e80a443554c918b8f7" # Авторизуемся как сообщество vk = vk_api.VkApi(token=token) # Работа с сообщениями longpoll = VkLongPoll(vk) # Основной цикл for event in longpoll.listen(): # Если пришло новое сообщение if event.type == VkEventType.MESSAGE_NEW: # Если оно имеет метку для меня( то есть бота) if event.to_me: # Сообщение от пользователя request = event.text # Каменная логика ответа if request == "привет": write_msg(event.user_id, "Хай") elif request == "пока": write_msg(event.user_id, "Пока((") else: write_msg(event.user_id, "Не поняла вашего ответа. ")
Функция write_msg получает id пользователя ВК , которому оно отправит сообщение и собственно само сообщение .
def write_msg(user_id, message): vk.method('messages.send', )
Авторизовавшись как сообщество и настроив longpool:
# API-ключ созданный ранее token = "6a9c267cd469388709a9e9acaddbe0aa81a0abbf12239b3e597a31729ffbddb9c88e80a443554c918b8f7" # Авторизуемся как сообщество vk = vk_api.VkApi(token=token) # Работа с сообщениями longpoll = VkLongPoll(vk) Войдем в основной цикл: # Основной цикл for event in longpoll.listen():
В нем мы циклически будем проверять на наличие event-ов. А получить тип event-а сможем с помощью event.type.
После этого получив сообщение от пользователя сможем отправить ему соответствующее письмо с помощью уже созданной функции write_msg.
Итак, мы создали очень простого бота в ВК с такой же простой реализацией. А логику бота можно программировать как душе угодно.
Теперь приступим к более реальному программированию
Создадим класс VkBot в файле vk_bot.py, который будет служить нам ботом.
class VkBot: def __init__(self, user_id): print("Создан объект бота!") self._USER_ID = user_id self._USERNAME = self._get_user_name_from_vk_id(user_id) self._COMMANDS = ["ПРИВЕТ", "ПОГОДА", "ВРЕМЯ", "ПОКА"]
И добавим туда метод с помощью которого можно получить имя пользователя через vk id.
def _get_user_name_from_vk_id(self, user_id): request = requests.get("https://vk.com/id"+str(user_id)) bs = bs4.BeautifulSoup(request.text, "html.parser") user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) return user_name.split()[0]
Это делается с помощью beatifulsoup4.
Устанавливаем если его нет:
python -m pip install bs4
На него есть достаточное количество статей, которые стоит изучить. С помощью него же создадим еще несколько методов:
# Получение времени: def _get_time(self): request = requests.get("https://my-calend.ru/date-and-time-today") b = bs4.BeautifulSoup(request.text, "html.parser") return self._clean_all_tag_from_str(str(b.select(".page")[0].findAll("h2")[1])).split()[1] # Получение погоды def _get_weather(city: str = "санкт-петербург") -> list: request = requests.get("https://sinoptik.com.ru/погода-" + city) b = bs4.BeautifulSoup(request.text, "html.parser") p3 = b.select('.temperature .p3') weather1 = p3[0].getText() p4 = b.select('.temperature .p4') weather2 = p4[0].getText() p5 = b.select('.temperature .p5') weather3 = p5[0].getText() p6 = b.select('.temperature .p6') weather4 = p6[0].getText() result = '' result = result + ('Утром :' + weather1 + ' ' + weather2) + '\n' result = result + ('Днём :' + weather3 + ' ' + weather4) + '\n' temp = b.select('.rSide .description') weather = temp[0].getText() result = result + weather.strip() return result # Метод для очистки от ненужных тэгов @staticmethod def _clean_all_tag_from_str(string_line): """ Очистка строки stringLine от тэгов и их содержимых :param string_line: Очищаемая строка :return: очищенная строка """ result = "" not_skip = True for i in list(string_line): if not_skip: if i == "
Измените параметр _get_weather на нужный город, в последствии этот метод можно будет вызывать с указанием города, а по умолчанию будет ваше указанное значение.
С помощью этих методов мы сможем получить время и погоду. Эти методы вырезаны из моего основного проекта бота. Следует организовать их в отдельных пакетах и классах, применяя наследование. Но ради примера работы, я решил вместить все это в один класс бота, что конечно плохо.
Создадим основной метод new_message, который будет обрабатывать сообщение пользователя и возвращать ответ:
def new_message(self, message): # Привет if message.upper() == self._COMMANDS[0]: return f"Привет-привет, !" # Погода elif message.upper() == self._COMMANDS[1]: return self._get_weather() # Время elif message.upper() == self._COMMANDS[2]: return self._get_time() # Пока elif message.upper() == self._COMMANDS[3]: return f"Пока-пока, !" else: return "Не понимаю о чем вы. "
Теперь вернемся к запускаемому файлу:
Импортируем класс нашего бота:
from vk_bot import VkBot
Изменим основной наш цикл:
print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: print('New message:') print(f'For me by: ', end='') bot = VkBot(event.user_id) write_msg(event.user_id, bot.new_message(event.text)) print('Text: ', event.text)
То есть теперь мы будем передавать полученное сообщение объекту бота, который вернет нам нужный ответ.
Это усложнение программы просто необходимо, если вы хотите дальше улучшить функционал бота:
Создайте отдельные пакеты и классы для каждой функции _get_time и _get_weather. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.
Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.
Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.
К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона. Присылать рецепты блюд на завтрак, обед, ужин.
Вы же можете редактировать бота под себя.
Буду рад вашим идеям. По любым вопросам пишите.
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
This repository has been archived by the owner on Jan 18, 2019. It is now read-only.
Fogapod / VKBot Public archive
Приложение-бот для социальной сети ВКонтакте
License
Fogapod/VKBot
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
November 24, 2017 14:24
January 21, 2018 12:37
December 2, 2017 13:31
November 21, 2017 22:51
October 25, 2017 22:40
August 29, 2017 11:35
November 30, 2017 23:47
November 9, 2017 16:25
December 2, 2017 13:31
March 12, 2017 23:08
January 18, 2019 16:08
December 2, 2017 13:31
November 27, 2017 12:44
January 16, 2018 19:52
README.md
VKBot
DISCONTINUED | РАЗРАБОТКА ПРЕКРАЩЕНА
Project is discontinued due to recent changes in VK API and outdated source code Разработка проекта прекращена из-за недавних изменений на стороне API VK и устаревшего исходного кода
Оригинальное описание
Данное приложение является ботом для социальной сети ВКонтакте и предназначено для ответа на сообщения (на данном этапе)
Приложение написано на языке python версии 2.7 с использованием фреймворка Kivy. Предполагается использование на OC android, но работа возможна и на других платформах.

Использованы библиотеки:
Руководство к использованию
Руководство написано для версии 0.1.0 и может не соответствовать функционалу других версий
Начало работы
После запуска приложения нажимаем на кнопку включения бота. Если всё работает нормально, появится окно, предлагающее авторизироваться. Без авторизации бот не может начать работать.
Приложение имеет открытый исходный код. Сохранность данных авторизации гарантирована.
После запуска и активации можно ознакомиться с разделом help . Для этого нужно выполнить команду /help
/ является одним из стандартных обращений к боту. Оно может быть любым, я использую его здесь для удобства
Пользовательские команды
Бот поддерживает создание и использование своих команд. Их можно добавлять двумя способами. Через интерфейс и сообщения.
Для работы пользовательских команд необхоимо включить их поддержку через настройки приложения. Регистр команды не учитывается.
Интерфейс

Для работы с пользовательскими командами в интерефейсе необходимо перейти на экран их настройки из главного экрана приложения. Изначально никаких команд нет. Это можно исправить, добавив несколько. Каждая команда содержит 5 опций, переключаемых кнопками ниже поля ответ
Каждая из опций может находиться в двух (0, 2) или трёх (0, 1, 2) состояниях. 0 - красный цевт, 1 - синий, 2 - зелёный.
| Иконка | Описание | Красный (0) | Синий (1) | Зелёный (2) |
|---|---|---|---|---|
![]() |
Использовать регулярные выражения | Нет | - | Да |
![]() |
Помечать сообщение | Да | - | Нет |
![]() |
Пересылать сообщение | Стандартно | Никогда | Всегда |
![]() |
Условие ответа | Всегда | Без обращения | При обращении ( Бот, команда ) |
![]() |
Отключить команду | Нет | - | Да |
Сообщения

Пользовательские команды можно настраивать через сообщения. Для добавления команды или ответа для существующей команды используется команда /learn команда::Ответ::опции
Опции представляют из себя последовательность из 5 цифр. Каждая из них соответствует опции из интерфейса и принимает соответствующие значения (0, 2) или (0, 1, 2). Стандартное значение опций - 00000
Удаление всей команды производится командой /forgot команда . Удаление ответа производится через /forgot команда::Ответ
OpenWeatherMap
Для работы команды погода необходимо зарегистрироваться на сайте https://openweathermap.org (скриншот) После этого нужно перейти в раздел ключей api и скопировать ваш ключ (скриншот)
Далее используйте команду /погода ваш_ключ . Готово.
От момента создания аккаунта до начала работы ключа может пройти от 10 до 60 минут. Если бот ругается на неправильность ключа, немного подождите и попробуйте ещё раз.
Для сброса ключа используется команда /погода -
Вложения
Пользовательские команды поддерживают вложения. Для их отправки в ответе необходимо указать или Указывать подобным образом можно только на свои вложения из вк. Так же можно указать ссылку на альбом. В этом случае будет выбрана случайная фотография из альбома. Поддерживаются до 10 вложений для одного сообщения.
Ссылки на команды
Пользовательские команды могут вызывать другие команды. Для этого в ответе нужно указать self=привет (будет использован ответ и опции команды _привет )
События беседы
Для того, чтобы бот ответил на событие беседы (изменено название, пользователь вышел, . ), нужно создать команду event=. .
Список возможных событий:
- event=photo updated обновлена обложка беседы
- event=photo removed удалена обложка беседы
- event=chat created создана новая беседа
- event=title updated обновлено название беседы (доступен ключ )
- event=user joined пользователь приглашён/вернулся (доступны ключи и )
- event=user kicked пользователь удалён/вышел (доступны ключи и )
Ключи ответов
В ответе для команды можно указать ключ, заключённый в фигурные скобки <> . Бот вставит на это место соответстующий текст.
Список доступных на данный момент ключей (будет пополняться):
- : текущая версия бота
- : имя и ссылка создателя бота
- : текущее время (время определяется в момент отправки сообщения и может быть не актуальным на момент доставки)
- : одно из обращений к боту (рандомно)
- > все обращения к боту, разделённые двумя пробеламм
- имя бота (указывается в настройках)
- id аккаунта, на котором запущен бот
- имя аккаунта, на котором запущен бот
- id аккаунта, от которого пришло сообщение
- имя аккаунта, от которого пришло сообщение
- id случайного пользователя из беседы (и диалога)
- имя случайного пользователя из беседы (и диалога)
- название беседы
- текст события
- id пользователя, который вышел/приглашён в беседу
- имя пользователя, который вышел/приглашён в беседу
- случайное число от 0 до XXX
- имя пользователя (группы или беседы) с id XXX
Работа со стикерами
Бот поддерживает приём и отправку стикеров. Если вы хотите отправить стикер, используйте ключ , где XXX является id стикера. Можно указать несколько ключей со стикерами, тогда будет выбран случайный.
Бот ничего не отправит, если его у вас нет нужного стикера.
Для того, чтобы бот ответил на стикер, в команде необходимо указать sticker=XXX:YYY , где XXX - номер набора, а YYY - id стикера. Возможно использовать паттерн ^sticker=XXX:\d+$ (включена опция use_regex )
В данном случае бот будет отвечать на любой стикер из данного набора.
Полезная команда: ^sticker=(?P\d+):(?P\d+)$ ответ: Стикер из набора
С помощью этой команды можно получить id всех нужных вам наборов и стикеров.
Регулярные выражения (regex)
Язык регулярных выражений - поиск совпадений в тексте по определённым правилам.
Документация по регулярным выражениям: https://docs.python.org/2/library/re.html
Проверка своих регулярных выражений: http://pythex.org
Бот поддерживает группы регулярного выражения. Для использования части полученного сообщения, в ответе необходимо указать , если используется группа с названием. Так же поддерживаются простые группы, которые доступны через <> (не забудьте исключить лишние группы через (?:) в регулярном выражении. Количество возвращаемых групп не ограничено.
Пользовательские плагины (добавлено в 0.1.1dev)
Документация по написанию собственных плагинов бота: ссылка
Известные пррблемы
Вставка/копирование текста в полях ввода
В данный момент в используемом фреймворке kivy существует баг, из-за которого юникод-строки портятся при копировании их из поля ввода на платформе андроид, при попытке вставить текст, приложение вылетит с ошибкой. Затрагивает все версии. Старые версии могут быть пересоьраны, когда баг будет исправлен.
Команда weather
Сервис openweathermap запретил запрашивать погоду по названию города на всех языках кроме английского. Затрагивает все версии бота.
Команда who
Не работает в версии 0.1.0, вызывает ошибку.
VkBot (вк бот) - бот для ВКонтакте улучшенная версия
VkBot (вк бот) - бот для ВКонтакте. Новая улучшенная и переработанная версия ВкБот теперь доступна для скачивания под именем Sobot.
В социальных сетях можно найти множество потенциальных клиентов, но завышенные цены на рекламу и скудные возможности по поиску целевой аудитории не позволяют провести эффективную рекламную компанию.
У нас есть мощный инструмент, который позволит значительно снизить расходы и повысить эффективность рекламной компании!
И что не мало важно для 1 аккаунта новые пользователи смогут использовать программу БЕСПЛАТНО в течении 90 дней.
ПОЧЕМУ ВЫБИРАЮТ НАС?
Для новых пользователей
90 дней бесплатно
Одновременная работа
в разных соц. сетях
Обширные функциональные
возможности
Гибкий поиск
целевой аудитории

Отзывы от наших пользователей

- Посещение страниц пользователей (поиск целевой аудитории)
- Лайки и репосты ЦА для привлечения на рекламную страницу
- Приглашение в друзья
- Отправка личных сообщений
- Комментарии постов ЦА
- Комментарии постов в своей ленте
- Публикация постов на своей стене
- Принятие заявок в друзья
- Постинг записей в группах
- Лайки постов в ленте
- Репост постов с выбранных страниц (наполнение стены)
- Продвижение поста

- Приглашение в группу
- Подписаться на сообщество
- Лайки и репосты
- Выйти из всех сообществ
- Перевод подписчиков
- Удалить собак из друзей
- Очистить стену от постов
- Добавление в друзья
- Парсинг групп
- Приглашения на встречу
- Парсинг id из лайков
- Удалить все фото
- Массовая смена аватаров
- Массовая смена паролей
- Массовая настройка приватности
- Массовая настройка информации
- Экспорт аккаунтов

ДОПОЛНИТЕЛЬНО
- Неограниченное использование одновременно работающих анкет
- Ввод капчи через сервисы antigate и rucaptcha
- Автоответчик
- Гибкие настройки таймингов
- Гибкая настройка использования прокси
- Групповые выполнения выбранных заданий
- Черные списки пользователей и постов
- Возможность просматривать страницу аккаунта
- Возможность прикреплять фото и видео к постам и комментариям
- Коллекция публикуемых постов
- Рандомизация текста посредством тегов
- Оповещение о новых личных сообщениях
- Возможность открывать каждую анкету в новом окне для ведения диалогов
Не нашли необходимых функций?
Предложить идею

НАШИ ПОЛЬЗОВАТЕЛИ ДЕЛЯТСЯ ОПЫТОМ
Тестирование и сравнение нескольких методик привлечения ЦА

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

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

30 000 рублей в месяц нажатием двух кнопок!

Заработок с помощью Sobot

Увеличение продаж на примере группы ВК Needle Needs

Как зарабатывать ВК продвигая товары и услуги
Vkbot


Представляем вашему вниманию - сервис для продвижения рекламной компании в социальной сети Вконтакте, Одноклассники. Работает ресурс с 2015 года. Главный инструмент - усовершенствованная программа Sobot, которую нужно будет скачать и просто запустить на своем ПК. Программа платная. Один аккаунт на месяц обойдется в 30 рублей, раскрутка десяти в 300 рублей, рекламные инструменты для месячного функционирования ПО с неограниченным количеством профилей в 750 рублей.

По утверждению разработчика - это достаточно мощный инструмент, позволяющий соединить множество рекламных функций в одном месте и существенно сэкономить на маркетинговых расходах. День использование программы обойдется среднестатистическому вебмастеру в 1 рубль.
Обзор функционала Vkbot
Программа разработана таким образом, чтобы вебмастер мог максимально удобно распланировать свое время и превратить многокликанье в двошаговую процедуру. Итак, ПО позволяет:
- Выполнять такие поиск заинтересованной клиентской аудитории, посещая станицы пользователей с заданными параметрами.
- Ставить требуемое количество лайков и репостов, чтобы добиться максимального перехода на рекламную станицу.
- Приглашать в друзья по критериям.
- Отправлять личные сообщения.
- Публиковать большое количество постов на стене, одновременно имея несколько мультиаккаунтов.
- Автоматизировать наполнение стены интересным контентом и постами.
- Ставить лайки постов ленте и репостить посты.

Функциональные возможности программы
С программой сервиса VkBot вебмастер сможет автоматизировать такие процессы как:
- Вступление в группы.
- Подписки на сообщества.
- Одновременный выход из многих сообществ.
- Перевод своих подписчиков.
- Чистка стены от ненужных постов.
- Функцию парсинга групп.
- Массово настроить страницу по функции по параметрам приватности, фото профиля, а также паролей.
- Выполнить экспорт аккаунтов и многое другое.

Ключевые особенности программного обеспечения от VkBot (вк бот)
Скачав на свой рабочий стол Sobot, пользователь однозначно облегчит работу с раскруткой неограниченного числе аккаунтов.Так как ПО позволяет использовать широкий ряд дополнительных опций. В их числе:
- Автоматизированный ввод капчи, используя сервисы antigate, а также rucaptcha.
- Использование автоответчика.
- Формирование черных списков друзей и постов.
- Сформировать свою коллекцию постов для публикации.
- Фиксирование извещений о новых сообщениях.
- Открытие анкеты в паралдельных окнах для переписки одновеменно с несколькими пользователями.
- Планирование запуска заданий и многое другое.
Суть партнерской программы сервиса
Вк бот предлагает всем желающим получить дополнительный доход от партнерской программы. Заработок вебмастеров составляет 45% от заработка системы на привлеченных пользователях. Выплаты еженедельные, по пятницам. Минимальная сумма к выводу равна 2000 рублям. Вывод денег на кошельки в платежных системах Qiwi, WebMoney, Яндекс.Деньги.
Что нужно делать чтоб стать партнером?
Для начала стоит зарегистрироваться в партнерской программе. Затем получить ссылку со скачиванием ПО Sobot. После активации платного ключа пользователя, пользующимся программным обеспечением, вам будет начисляться ребиллы системы.

Контакты
Телефон: 8 (800) 707-92-55
Skype: Sobot.ru.net
ICQ: 440004400
Telegram: @SobotRuNet




