Создание бота для ВКонтакте на языке программирования Python
Для начала нам надо установить нужные библиотеки, а точнее vk_api.
В начале разберемся как получить токен для нашего бота.
- Создайте сообщество
- В меню справа выберете вкладку «Управление»
- Во вкладке «Сообщения» выберете «Настройки для ботов»
- Включите возможности бота
- В меню справа выберете вкладку «Настройки», в которой выберете «Работа с API»
- Создайте ключ доступа
- Разрешите, что вам нужно
Теперь (по желанию, но рекомендую) создадим файл config.py, в нем сделаем переменную TOKEN и помести в нее наш токен в кавычках.
Начинаем писать код
Импортируем что нужно:
import json
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
#для тех кто поместил токен в config.py
from config import TOKEN
Далее пишем строки, которые просто обязательно нужны, для того что бы работать с сообществом (авторизируем бота):
vk_session = vk_api.VkApi(token=TOKEN) #для людей поместивших токен в config
vk_api.VkApi(token='Ваш токен') #Для остальных
vk = vk_session.get_api()
longpoll = VkLongPoll(vk_session)
Далее пишем цикл, в котором будут обрабатываться сообщения:
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
if event.to_me:
msg = event.text.lower()
id = event.user_id
Между циклом и авторизацием (назовём это место аиц) будет код позволяющий отправлять сообщения.
Для того что бы отправить сообщение надо в аиц добавить код:
def sender(id, text):
vk.messages.send(user_id=id, message=text, random_id=0)
Теперь в цикл мы можем добавить обработку сообщений:
if msg == 'hi':
sender('hello', id) #Первым аргументом передаем сообщение, которое он скажет, а вторым id человека
Учимся отправлять стикеры и фотографии
Для того что бы отправлять стикеры в аиц добавляем:
def send_stick(id, number):
vk.messages.send(user_id=id, sticker_id=number, random_id=0)
Теперь надо получить id стикера для этого надо:
- Правой кнопкой мыши нажать на стикер (неважно есть ли он у вас или нет)
- Иследуем элемент
(то что подчеркнуто красным и есть айди стикера)
Далее в цикл добавляем строку:
send_stick(id, "id стикера без кавычек")
Что бы отправить фотографию надо в первых что бы фотография была либо у вас на устройстве либо во Вконтакте (я расскажу только о втором).
Для того что бы найти айди фото надо открыть фотографию и в ссылке скопировать текст начиная со слова photo включительно и до % не включительно, например:photo-190960458_457239182
Далее в аиц добавляем:
def send_photo(id, url):
vk.messages.send(user_id=id, attachment=url, random_id=0)
а в цикл добавляем:
send_photo(id, 'photo337511104_457242663')
Создание клавиатуры
Для начала импортируем
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
Потом идет описание самой клавиатуры
keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Привет', color=VkKeyboardColor.SECONDARY)
keyboard.add_button('Клавиатура', color=VkKeyboardColor.POSITIVE)
Далее добавляем в функцию которую будем вызывать keyboard=keyboard.get_keyboard()
def sender(id, text):
vk.messages.send(user_id=id, message=text, random_id=0, keyboard=keyboard.get_keyboard())
Теперь при вызове данной функции будет появляться клавиатура
Весь код, который был показан в данном уроке:
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
from config import vk_token
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
vk_session = vk_api.VkApi(token=vk_token)
vk = vk_session.get_api()
longpoll = VkLongPoll(vk_session)
# Создание клавиатуры
keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Привет', color=VkKeyboardColor.SECONDARY)
keyboard.add_button('Клавиатура', color=VkKeyboardColor.POSITIVE)
# Отправление сообщений с клавиатурой
def sender(id, text):
vk.messages.send(user_id=id, message=text, random_id=0, keyboard=keyboard.get_keyboard())
# Отправление сообщений без клавиатуры
def sender_1(id, text):
vk.messages.send(user_id=id, message=text, random_id=0)
# Отправление стикеров
def send_stick(id, number):
vk.messages.send(user_id=id, sticker_id=number, random_id=0)
# Отправление фото
def send_photo(id, url):
vk.messages.send(user_id=id, attachment=url, random_id=0)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
if event.to_me:
msg = event.text.lower()
id = event.user_id
if msg == 'hi':
sender(id, 'hello')
send_stick(id, 112)
send_photo(id, 'photo337511104_457242663')
Удачи в ваших начинаниях!