Я очень долго прочесывал интернет в поисках рабочего варианта бота для ВК, разработанного на 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 БОТА ЗА 10 МИНУТ БЫСТРО И УДОБНО
Авторизация
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)
Прием-отправка сообщений из беседы
А теперь будем слушать 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, тогда:
Vkontakte BOT (vk_api python) [2] | Клавиатура, кнопочки.
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/wh183415444’), 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) 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 будут строгими. Т.Е. если вы сделаете ключевым слово «Ап», то слова «Апостроф», «Аптека» и даже «ап» не будут найдены.
- Python
- ВКонтакте API
- Программирование
Источник: habr.com
Пример создания клавиатуры для отправки ботом
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.88 KB | None | 0 0
import vk_api
from vk_api. keyboard import VkKeyboard , VkKeyboardColor
«»» Пример создания клавиатуры для отправки ботом «»»
token = ‘токен сообщества’
vk_session = vk_api. VkApi ( token = token )
vk = vk_session. get_api ( )
keyboard = VkKeyboard ( one_time = True )
keyboard. add_button ( ‘Белая кнопка’ , color = VkKeyboardColor. DEFAULT )
keyboard. add_button ( ‘Зелёная кнопка’ , color = VkKeyboardColor. POSITIVE )
keyboard. add_line ( ) # Переход на вторую строку
keyboard. add_button ( ‘Красная кнопка’ , color = VkKeyboardColor. NEGATIVE )
keyboard. add_line ( )
keyboard. add_button ( ‘Синяя кнопка’ , color = VkKeyboardColor. PRIMARY )
vk. messages . send (
peer_id = 410050173 ,
message = ‘Пример клавиатуры’ ,
keyboard = keyboard. get_keyboard ( )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement
Lua | 16 min ago | 3.32 KB
Arduino | 26 min ago | 2.99 KB
Arduino | 33 min ago | 1.75 KB
Python | 46 min ago | 0.71 KB
Arduino | 53 min ago | 2.50 KB
JavaScript | 54 min ago | 103.78 KB
Java | 56 min ago | 1.56 KB
JavaScript | 1 hour ago | 87.04 KB
Advertisement
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
Источник: pastebin.com
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
vk_api / examples / keyboard.py /
Code definitions
Code navigation index up-to-date
- Go to file T
- Go to line L
- Go to definition R
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Latest commit 047838f Sep 11, 2020
4 contributors
Users who have contributed to this file
40 lines (28 sloc) 1.26 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- |
import vk_api |
from vk_api . keyboard import VkKeyboard , VkKeyboardColor |
from vk_api . utils import get_random_id |
def main (): |
«»» Пример создания клавиатуры для отправки ботом «»» |
vk_session = vk_api . VkApi ( token = ‘bot_api_token’ ) |
vk = vk_session . get_api () |
keyboard = VkKeyboard ( one_time = True ) |
keyboard . add_button ( ‘Белая кнопка’ , color = VkKeyboardColor . SECONDARY ) |
keyboard . add_button ( ‘Зелёная кнопка’ , color = VkKeyboardColor . POSITIVE ) |
keyboard . add_line () # Переход на вторую строку |
keyboard . add_location_button () |
keyboard . add_line () |
keyboard . add_vkpay_button ( hash = «action=transfer-to-groupaid=6222115» ) |
keyboard . add_line () |
keyboard . add_vkapps_button ( app_id = 6979558 , |
owner_id = — 181108510 , |
label = «Отправить клавиатуру» , |
hash = «sendKeyboard» ) |
vk . messages . send ( |
peer_id = 123456 , |
random_id = get_random_id (), |
keyboard = keyboard . get_keyboard (), |
message = ‘Пример клавиатуры’ |
) |
if __name__ == ‘__main__’ : |
main () |
- Copy lines
- Copy permalink
- View git blame
- Reference in new issue
Источник: github.com