Бот VK на Python 2020 года с ответами в беседу / Хабр
Я очень долго прочесывал интернет в поисках рабочего варианта бота для ВК, разработанного на Python. Никак не мог найти ни одной нормальной, целой статьи — в одной устаревший метод, в другой непонятные ошибки и так далее…
Друзья, я решил поделиться с вами всеми теми знаниями которые приобрел и сейчас мы с вами шаг за шагом напишем хорошего рабочего бота ВК для текущего, 2020, года. Впрочем надеюсь статья не потеряет актуальности и позже.
С чего начать?
Начнем с установки необходимых библиотек. Естественно открываем cmd.exe ( в некоторых случаях может понадобиться запустить от имени администратора) и прописываем туда следующее:
pip install vk
pip install vk_api
Мы установили две библиотеки для работы нашего Python-а с сервисом VK.
Теперь запускаем IDLE и начинаем писать код.
import vk_api, vk from vk_api.keyboard import VkKeyboard, VkKeyboardColor from vk_api.utils import get_random_id
Объясняю: импортируем установленные ранее библиотеки и модули для работы с ними.
Авторизация
vk_session = vk_api.VkApi(token='#ВСТАВЬ СЮДА ТОКЕН ГРУППЫ СО ВСЕМИ РАЗРЕШЕНИЯМИ')
Авторизовались как группа. Важно создать такой токен, который будет разрешать отправку, прием, обработку сообщений и, в принципе, все что нам захочется.
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType longpoll = VkBotLongPoll(vk_session, 'ID вашей группы без кавычек') vk = vk_session.get_api() from vk_api.longpoll import VkLongPoll, VkEventType
Импортируем модуль longpool для работы с чатами.
Нюансы
Дело в том, что в одной программе нельзя одновременно запустить бота для ответов на ЛС и для работы в беседе, поскольку для этого используются два разных модуля longpool и как только запускается прослушивание longpool-ом на канале «ЛС»(Личные Сообщения) прослушивание другого канала, т.е. чата недоступно, пока не завершится первый процесс прослушивания. Проще говоря задачи могут выполняться исключительно последовательно, а не параллельно. Поэтому в целом коде я деактивирую часть с ЛС, заключив ее в »’ кавычки.
Теперь импортируем то же самое, но для ЛС.
Lslongpoll = VkLongPoll(vk_session) Lsvk = vk_session.get_api()
Кнопки
Теперь объявим пару функций для кнопок, которые наш бот в будущем будет выдавать по требованию. К ним мы обратимся вскоре ещё раз.
keyboard = VkKeyboard(one_time=True) keyboard.add_button('Привет', color=VkKeyboardColor.NEGATIVE) keyboard.add_button('Клавиатура', color=VkKeyboardColor.POSITIVE) keyboard.add_line() keyboard.add_location_button() keyboard.add_line() keyboard.add_vkpay_button(hash="action=transfer-to-group&group_id=183415444")
Прием-отправка сообщений из беседы
А теперь будем слушать longpool на предмет новых сообщений. event — переменная в которой будет храниться само сообщение и некоторые данные о нем.
for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW:
if 'Ку' in str(event) or 'Привет' in str(event) or 'Хай' in str(event) or 'Хелло' in str(event) or 'Хеллоу' in str(event):
Перевод того, что выше: Если слово «Привет» или «…» или «…» содержится в переменной event, тогда:
if event.from_chat: vk.messages.send( key = (''), server = (''), ts=(''), random_id = get_random_id(), message='Привет!', chat_id = event.chat_id )
Проверяем куда направлен наш event. Если в чат тогда вызываем метод отправки сообщений «vk.messages.send».
Внимание
… переменные key, server и ts необходимо заполнить. Эти переменные нужны для установки связи с сервером VK. Чтобы узнать эти переменные, а они у всех свои, нужно авторизованным перейти на сайт VK разработчикам и во вкладке «Пример запроса» ввести ID своей группы.
random_id — это случайный id сообщения, который в новых версиях VK_API теперь обязателен.
chat_id — это идентификатор беседы, из которой пришел event или иначе говоря сообщение.
if ‘Клавиатура’ in str(event):
if event.from_chat: vk.messages.send( keyboard = keyboard.get_keyboard(), key = ('21b7e67abf6b938c8223242c37b4ff873efe1453'), server = ('https://lp.vk.com/wh283415444'), ts=('3539'), random_id = get_random_id(), message='Держи', chat_id = event.chat_id )
Теперь, если пользователь напишет «Клавиатура«, то наш бот щедро предоставит кнопки, о которых мы говорили ранее.
На сложном всё.
Часть с Личными Сообщениями
Теперь отпишем вторую часть для ЛС без особых подробностей.
for event in Lslongpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: vars1 = ['Привет', 'Ку', 'Хай', 'Хеллоу'] if event.text in vars1: if event.from_user: Lsvk.messages.send( user_id = event.user_id, message = 'Привет)', random_id = get_random_id() ) vars2 = ['Клавиатура', 'клавиатура'] if event.text in vars2: if event.from_user: Lsvk.messages.send( user_id = event.user_id, random_id = get_random_id(), keyboard = keyboard.get_keyboard(), message = 'Держи' )
Поздравляю! Мы с вами разобрали бота на Python 2020 года. А сейчас я приведу весь код целиком.
import random, vk_api, vk from vk_api.keyboard import VkKeyboard, VkKeyboardColor from vk_api.utils import get_random_id vk_session = vk_api.VkApi(token='ВСТАВИТЬ ТОКЕН СЮДА') from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType longpoll = VkBotLongPoll(vk_session, 'ID группы без кавычек') vk = vk_session.get_api() from vk_api.longpoll import VkLongPoll, VkEventType Lslongpoll = VkLongPoll(vk_session) Lsvk = vk_session.get_api() keyboard = VkKeyboard(one_time=True) keyboard.add_button('Привет', color=VkKeyboardColor.NEGATIVE) keyboard.add_button('Клавиатура', color=VkKeyboardColor.POSITIVE) keyboard.add_line() keyboard.add_location_button() keyboard.add_line() keyboard.add_vkpay_button(hash="action=transfer-to-group&group_id=еще_раз_ID_группы") for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: if 'Ку' in str(event) or 'Привет' in str(event) or 'Хай' in str(event) or 'Хелло' in str(event) or 'Хеллоу' in str(event): if event.from_chat: vk.messages.send( key = (''), #ВСТАВИТЬ ПАРАМЕТРЫ server = (''), ts=(''), random_id = get_random_id(), message='Привет!', chat_id = event.
chat_id ) if 'Клавиатура' in str(event): if event.from_chat: vk.messages.send( keyboard = keyboard.get_keyboard(), key = (''), #ВСТАВИТЬ ПАРАМЕТРЫ server = (''), ts=(''), random_id = get_random_id(), message='Держи', chat_id = event.chat_id ) ''' for event in Lslongpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: vars1 = ['Привет', 'Ку', 'Хай', 'Хеллоу'] if event.text in vars1: if event.from_user: Lsvk.messages.send( user_id = event.user_id, message = 'Привет)', random_id = get_random_id() ) vars2 = ['Клавиатура', 'клавиатура'] if event.text in vars2: if event.from_user: Lsvk. messages.send( user_id = event.user_id, random_id = get_random_id(), keyboard = keyboard.get_keyboard(), message = 'Держи' ) '''
P.S. Ключевые слова, по которым ведется поиск в переменной event будут строгими. Т.Е. если вы сделаете ключевым слово «Ап», то слова «Апостроф», «Аптека» и даже «ап» не будут найдены.
Всем удачи!
vkbot | вк бот
ПОЧЕМУ ВЫБИРАЮТ НАС?
Для новых пользователей
90 дней бесплатно
Одновременная работа
в разных соц. сетях
Обширные функциональные
возможности
Гибкий поиск
целевой аудитории
Отзывы от наших пользователей
Мы работаем с ruCaptchaЗАДАНИЯ
- Посещение страниц пользователей (поиск целевой аудитории)
- Лайки и репосты ЦА для привлечения на рекламную страницу
- Приглашение в друзья
- Отправка личных сообщений
- Комментарии постов ЦА
- Комментарии постов в своей ленте
- Публикация постов на своей стене
- Принятие заявок в друзья
- Постинг записей в группах
- Лайки постов в ленте
- Репост постов с выбранных страниц (наполнение стены)
- Продвижение поста
ФУНКЦИИ
- Приглашение в группу
- Подписаться на сообщество
- Лайки и репосты
- Выйти из всех сообществ
- Удалить собак из друзей
- Очистить стену от постов
- Добавление в друзья
- Парсинг групп
- Приглашения на встречу
- Парсинг id из лайков
- Удалить все фото
- Массовая смена аватаров
- Массовая смена паролей
- Массовая настройка приватности
- Массовая настройка информации
- Экспорт аккаунтов
ДОПОЛНИТЕЛЬНО
- Неограниченное использование одновременно работающих анкет
- Ввод капчи через сервисы antigate и rucaptcha
- Автоответчик
- Гибкие настройки таймингов
- Гибкая настройка использования прокси
- Групповые выполнения выбранных заданий
- Черные списки пользователей и постов
- Возможность просматривать страницу аккаунта
- Возможность прикреплять фото и видео к постам и комментариям
- Коллекция публикуемых постов
- Рандомизация текста посредством тегов
- Оповещение о новых личных сообщениях
- Возможность открывать каждую анкету в новом окне для ведения диалогов
НАШИ ПОЛЬЗОВАТЕЛИ ДЕЛЯТСЯ ОПЫТОМ
Больше кейсовСтатьи и отзывы наших пользователей
Больше статейВНЕШНИЙ ВИД ПРОГРАММЫ
Пакет API— github.

- Константы
- func ExistsUser (строка ссылки) bool
- Тип Приложение
- тип Бот
- функция GetBotInstance() *Bot
- func (bot *Bot) GetGroup() Group
- func (bot *Bot) Обработчик GetHandler()
- func (bot *Bot) GetToken() строка
- func (bot *Bot) GetUserToken() строка
- func (bot *Bot) GetWidgetToken() строка
- func (bot *Bot) Init(токены []string, userTokens []string, groupId int)
- func (bot *Bot) SetHandler (обработчик vkHandler)
- Тип Кнопка
- введите чат
- func GetChat (внутренний идентификатор) Чат
- func (c Чат) GetAdmin() Пользователь
- func (c чат) GetId() int
- func (с чат) GetMembersCount() целое число
- func (c чат) SendMessage (сообщение Сообщение)
- тип Колонка
- введите ColumnWithImage
- тип Данные
- тип Группа
- func (группа Group) GetId() int
- func (группа Group) GetSubsCount() int
- func (группа Group) SetStatus(текстовая строка)
- func (группа) SetWidgetTable (виджет WidgetTable)
- тип Обработчик
- введите InlineKeyboard
- func (kb InlineKeyboard) AddButton (кнопка Кнопка) Клавиатура
- func (kb InlineKeyboard) GetJsonKey() строка
- func (клавиатура InlineKeyboard) Init() Keyboard
- тип Клавиатура
- введите LinkButton
- тип LongPoll
- функция (длинный опрос * длинный опрос) Init ()
- func (longpoll *LongPoll) RegisterChatResponser (функция func (чат, пользователь, данные))
- func (longpoll *LongPoll) RegisterInviteToChatEvent (функция func (чат, пользователь))
- func (longpoll *LongPoll) RegisterPersonalResponser (функция func (пользователь, данные))
- func (longpoll *LongPoll) Run()
- введите Сообщение
- тип NormalButton
- введите OneTimeKeyboard
- func (kb OneTimeKeyboard) AddButton (кнопка Кнопка) Клавиатура
- func (kb OneTimeKeyboard) AddLinkButton (кнопка LinkButton) Клавиатура
- func (kb OneTimeKeyboard) GetJsonKey() строка
- func (клавиатура OneTimeKeyboard) Init() Keyboard
- тип Пост
- func (сообщение на стене) GetReposts() map[int]User
- тип Ряд
- тип StaticKeyboard
- func (kb StaticKeyboard) AddButton (кнопка Кнопка) Клавиатура
- func (kb StaticKeyboard) GetJsonKey() строка
- func (клавиатура StaticKeyboard) Init() Keyboard
- введите Пользователь
- func GetUser(id int) Пользователь
- func GetUserByDomain (строка идентификатора) Пользователь
- func GetUserByLink (строка ссылки) Пользователь
- func (пользователь usr) GetFirstname() строка
- func (пользователь usr) GetGender() int
- func (пользователь-пользователь) GetId() int
- func (пользователь usr) GetLastname() string
- func (пользователь usr) SendMessage (сообщение Сообщение)
- тип ВиджетТаблица
- func (widjet WidgetTable) AddRow(row Row, column1 ColumnWithImage, column2, column3 Column) WidgetTable
- func (виджет WidgetTable) GetJsonKey() строка
- func (widjet WidgetTable) Init(строка заголовка, строка URL, строка столбца 1, строка столбца 2, строка столбца 3)
Просмотреть исходный код
константа ( ColorGreen = "положительно" ColorBlue = "основной" ColorRed = "отрицательный" ColorWhite = "вторичный" )
Просмотр исходного кода
константа ( ПользовательЖенский = 1 UserMale = 2 UserNoGender = 0 )
Этот раздел пуст.
func ExistsUser(строка ссылки) bool
type Attachment struct { Введите строку Владелец внутр. Идентификатор внутр. Строка доступа }
тип структуры бота { // содержит отфильтрованные или неэкспортированные поля }
var Instance *Bot
func GetBotInstance() *Bot
func (bot *Bot) GetGroup() Group
func (bot *Bot) GetHandler() Обработчик
func (bot *Bot) GetToken() string
func (bot *Bot) GetUserToken() string
func (bot *Bot) GetWidgetToken() string
func (bot *Bot) Init(tokens []string , userTokens []string, groupId int)
func (bot *Bot) SetHandler(vkHandler Handler)
type Интерфейс кнопки { // содержит отфильтрованные или неэкспортированные методы }
тип Структура чата { // содержит отфильтрованные или неэкспортированные поля }
функция GetChat(id int) Чат
func (c Chat) GetAdmin() User
func (c Chat) GetId() int
func (c Chat) GetMembersCount() int
func (c Chat) SendMessage(message Message)
столбец типа ¶
тип Структура столбца { Столбец внутр.Текстовая строка Строка URL }
введите ColumnWithImage ¶
тип ColumnWithImage struct { Столбец внутр. Текстовая строка Строка URL Строка значка }
тип Структура данных { Текстовая строка TextArgs [] строка Строка полезной нагрузки PayloadArgs [] строка Карта вложений[int]Вложение }
тип Структура группы { // содержит отфильтрованные или неэкспортированные поля }
func (группа Group) GetId() int
func (группа Group) GetSubsCount() int
func (группа Group) SetStatus(текстовая строка)
func (группа Group) SetWidgetTable(widjet WidgetTable)
type Интерфейс обработчика { В этом() Бежать() RegisterPersonalResponser (функция func (Пользователь, Данные)) RegisterChatResponser(функция func(Чат, Пользователь, Данные)) RegisterInviteToChatEvent(функция func(Чат, Пользователь)) // содержит отфильтрованные или неэкспортированные методы }
введите структуру InlineKeyboard { // содержит отфильтрованные или неэкспортированные поля { Инициализировать() Клавиатура AddButton (Кнопка) Клавиатура Строка GetJsonKey() // содержит отфильтрованные или неэкспортированные методы }
тип структуры LinkButton { Строка внутр.Столбец внутр. Текстовая строка Строка ссылки }
введите структуру LongPoll { // содержит отфильтрованные или неэкспортированные поля }
func (longpoll *LongPoll) Init()
func (longpoll *LongPoll) RegisterChatResponser(function func(Chat, User, Data))
func (longpoll *LongPoll) RegisterInviteToChatEvent(function func(Chat, User))
func (longpoll *LongPoll) RegisterPersonalResponser(function func(User, Data))
func (longpoll *LongPoll) Run()
type Message struct { Текстовая строка Клавиатура Клавиатура Вложения []Вложение }
тип NormalButton struct { Строка внутр. Столбец внутр. Текстовая строка Строка полезной нагрузки Цветная строка }
введите структуру OneTimeKeyboard { // содержит отфильтрованные или неэкспортированные поля }
func (kb OneTimeKeyboard) AddButton (кнопка Button) Клавиатура
func (kb OneTimeKeyboard) AddLinkButton (кнопка LinkButton) Keyboard
func (kb OneTimeKeyboard) GetJsonKey() string
func (клавиатура OneTimeKeyboard) 90 Keyboard 913 Keyboardвведите Post struct { Идентификатор внутр.}
func (сообщение на стене) GetReposts() map[int]Usertype Row struct { Строка внутр. }тип StaticKeyboard struct { // содержит отфильтрованные или неэкспортированные поля { // содержит отфильтрованные или неэкспортированные поля }функция GetUser(id int) Пользовательфункция GetUserByDomain ¶
func GetUserByDomain(id string) Userfunc GetUserByLink(link string) Userfunc (usr User) GetFirstname() stringfunc (usr User) GetGender() intfunc (user User) GetId() intfunc (пользователь usr) GetLastname() stringfunc (пользователь usr) SendMessage(message Message)type WidgetTable struct { // содержит отфильтрованные или неэкспортированные поля }func (widjet WidgetTable) AddRow(row Row, column1 ColumnWithImage, column2, column3 Column) WidgetTableфункция (виджет WidgetTable) GetJsonKey() строкафункция (виджет WidgetTable) Инициализация (строка заголовка, строка URL, строка столбца 1, строка столбца 2, строка столбца 3)Автоматизируйте свои процессы | Задумчивый
Уверенно сокращайте эксплуатационные расходы.
Наши интеллектуальные боты снижают риск ваших инициатив по сокращению расходов, повышая эффективность существующих систем и сквозных процессов.
Начало работыИсследуйте ботов
Показан в:
Как наши боты могут автоматизировать бизнес
Обеспечьте бесперебойную, безошибочную работу бизнес-процессов с непревзойденной скоростью и точностью. В нашем ролике рассказывается, как мы экономим лидерам отрасли миллионы.
изучить наших ботов
Как мы работаем
открыть
и определитьоткрыть и определить
Вы показываете нам работу, которую нужно сделать, мы берем ее оттуда. Когда вы нанимаете бота, каждый из них предназначен для выполнения конкретных задач и рабочих процессов вашего отдела.
просматривать наши боты
на борту
и обучениина борту и обучении
Мы обучаем и адаптируем ваших ботов для бесперебойной работы во всех ваших бизнес-системах. Никаких интеграций не требуется, они работают так же, как и их коллеги-люди.
просмотр вариантов использования
мониторинг
и отчетмониторинг и отчет
Мы отслеживаем и отслеживаем ваших ботов после их развертывания, чтобы оптимизировать их производительность. Мы покажем вам, что именно они сделали и создали ценность.
наши тематические исследования
отзывы
клиенты любят нас
Мы автоматизировали часть нашего процесса, что позволило нашему бизнесу расти и процветать.
Время, затрачиваемое на обработку соответствия пациентов требованиям, сократилось на 60 %.
Наши боты регулярно собирают и публикуют до 11 000 ролей каждый день в Google Sheet.
Мы сэкономили более 5000 часов на ручном вводе данных, сортировке и сопоставлении
Компания Thoughtful разработала робота-работника, который автоматизировал 45 кликов в процессе.
Время завершения процесса сократилось на 90 %
Мы сократили усилия по выявлению изменений в политике Medicaid, что позволило нам повысить производительность.
Время проверки соответствия требованиям пациентов сократилось на 95 %
Наш бот высвободил время рекрутеров на 50 %, чтобы они могли сосредоточиться на закрытии вакансий.
Мы восстановили 400 часов в месяц, наняв бота.
Наш бот теперь является частью команды и выполняет жизненно важную роль за небольшую плату.
Мы освоили 30% времени нашего бухгалтера, выполняя ручные задачи.
До создания «Вдумчивого» мы всегда пытались наверстать упущенное, чтобы обработать накопившуюся задолженность.
5 ботов сократили время выполнения каждого процесса на 70 %
Задумчивость позволила нам реинвестировать наше время в более прибыльные области бизнеса.
Эта юридическая фирма достигла 90% эффективности благодаря автоматизации
сотни
умных ботов
бесконечные возможностиIA
RV
DR
Dashboard Gen
Si
Invoice Check
ME
EF
PDF Create
SO
Sales Order
CP
Claims
CC
BD
CS
AR
Journal Entry
AP
Capture
BP
Report Gen
ER
Expenses
EO
Onboarding
IR
Inventory
IS
Invoicing
CP
Case Prep
ZP
Zero Pay
JP
Job Posting
BP
Payments
CO
Collections
JB
Соскребание
FS
Аудит
Аренда Идеальный.