Гайд Простой бот для VK на Python

Mamashin

Известный
Автор темы
1,095
588
Всем привет! В этом гайде я возможно буду для кого то нубом, для кого то копипастом но все же решил сделать этот гайд, так как опять же не нашёл подобной темы на BH.
Между web-интерфейсом для питона, я решил делать гайды по таким стандартным вещам как самые обычные боты и не только для VK. Но сегодня у нас будет как раз таки Vk, поскольку многие когда то думали о своей группе VK в которой будет отвечать бот на определённые сообщения. Бот в данной теме будет крайне простой без классов и множества функций!

Итак, для написания бота на языке Python, нам понадобиться:
1. Python, скачать(клик), можно с официального сайта, желательно последнею версию!
2. Библиотека vk_api, pip install vk_api - главный модуль для работы с вк api.
3. Группа и страница ВК.
4. Любой текстовый редактор, но не блокнот, можете использовать Notepad++, Atom, VS Code, я же буду использовать Sublime Text 2.
5. Умение владеть компьютером и не путаться в двух вещах.

Итак, для начала нам нужно настроить нашу группу вк и создать токен.
Думаю, рассказывать как создать группу не стоит, переходим в настройки нашей группы, затем "Работа с API", затем нажимаем "Создать ключ", там же разрешаем то что вам нужно, можете разрешить всё :D

Создаём токен:

Screenshot_1.png


После того как создали, копируем его и сохраняем где нибудь для себя, чтобы по 100 раз не брать, после этого заходим во вкладку Long Poll API, включаем его, и в типах событий и включаем то что нам нужно, я же включу только отправку фотографий и сообщения.

Long Poll API:
Screenshot_2.png


События:

Screenshot_3.png


После этого, переходим в пункт "Сообщения" и включаем их.

Screenshot_4.png


Так же включаем возможности бота:

Screenshot_5.png


Всё, теперь токен у нас есть, осталось использовать его по назначению.

Открываем диск на котором хотели бы держать вашего бота, затем создаём там папку с любым английским названием, я же буду использовать диск C.
В этой папке создаём текстовый документ с любым английским названием и меняем расширение с .txt на .py, думаю после прошлого гайда не стоит говорить как включить показ расширения на Windows 10.
После всего этого, открываем командную строку (Win +R, cmd) и переходим в директорию нашего скрипта который мы создали только что,
у меня это выглядит так: cd c:/python/blasthack/, у вас же cd диск:/папка/и еще папка есть есть.
Теперь вы в директории вашего скрипта, для работы с кодом который будет ниже, вам предстоит установить библиотеку vkapi, не пугайтесь это легче чем поставить лайк.
В этой же командной строке прописываем следующею команду(-_-) - pip install vkapi
После этого ждём секунд 20-30, после установки можно наконец-то приступить к написанию нашего бота, я вставлю полный закомментированный код, вы же можете просто его скопировать и вставить, вставив токен, поменяв логику общения и даже добавив пару операторов elif.


easyvkbot.py:
# Импортируем библиотеку vk_api
import vk_api
# Достаём из неё longpoll
from vk_api.longpoll import VkLongPoll, VkEventType

# Создаём переменную для удобства в которой хранится наш токен от группы

token="токен" # В ковычки вставляем аккуратно наш ранее взятый из группы токен.

# Подключаем токен и longpoll
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)

# Создадим функцию для ответа на сообщения в лс группы
def blasthack(id, text):
    bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})

# Слушаем longpoll(Сообщения)
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
      # Чтобы наш бот не слышал и не отвечал на самого себя
       if event.to_me:

        # Для того чтобы бот читал все с маленьких букв 
          message = event.text.lower()
          # Получаем id пользователя
          id = event.user_id
    
    # Доисторическая логика общения на ифах
    # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации.
    # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа)

          if message == 'привет':
            blasthack(id, 'Привет, я бот!')

          elif message == 'как дела?':
              blasthack(id, 'Хорошо, а твои как?' )

          else:
             blasthack(id, 'Я вас не понимаю! :(')

После этого сохраняем файл и пишем в директории со скриптом следующие:

python название.py, если у вас ошибка то командная строка или терминал скажут вам об этом и программа не запуститься.
У меня же:
python easyvkbot.py


Если вы все сделали правильно, то наш бот будет отвечать вам!

Screenshot_6.png

Screenshot_7.png

Screenshot_8.png


Как видим всё прекрасно работает, но я считаю это слишком простым ботом даже если добавить туда 100 ответов на определённые команды, давайте сделаем, что то чуть сложнее!

Усложнив задачу я решил прикреплением картинки на сообщение пользователя, предварительно загрузив её в любой альбом и скопировавший её url.
Отправку картинки я решил не усложнять с помощью vkupload, а решил использовать метод отправки уже загруженной в вк картинки и прикрепления текста.


Код:

easyvkbot.py:
# Импортируем библиотеку vk_api
import vk_api
# Достаём из неё longpoll
from vk_api.longpoll import VkLongPoll, VkEventType

# Создаём переменную для удобства в которой хранится наш токен от группы

token="" # В ковычки вставляем аккуратно наш ранее взятый из группы токен.


# Подключаем токен и longpoll
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)

# Создадим функцию для ответа на сообщения в лс группы
def blasthack(id, text):
    bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})

# Слушаем longpoll(Сообщения)
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
      # Чтобы наш бот не слышал и не отвечал на самого себя
       if event.to_me:

        # Для того чтобы бот читал все с маленьких букв 
          message = event.text.lower()
          # Получаем id пользователя
          id = event.user_id
    
    # Доисторическая логика общения на ифах
    # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации.
    # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа)

          if message == 'привет':
            blasthack(id, 'Привет, я бот!')

          elif message == 'как дела?':
              blasthack(id, 'Хорошо, а твои как?' )

          elif message == 'картинка':
            # Отправляем картинку и текст
               bh.method("messages.send", {"peer_id": id, "message": "Вот твоя картинка!", "attachment": "photo381260583_457370887", "random_id": 0})

          else:
             blasthack(id, 'Я вас не понимаю! :(')

А теперь результат:

Screenshot_9.png


Тоже самое можно сделать и с видео, аудио, товарами, документами, записями со стены, опросами.


На этом свой гайд я хочу закончить, спасибо всем за внимание, мне будет приятно если этот гайд хоть кому то да поможет! В этом гайде мы создали самого самого простого и лёгкого бота на python.
Исходный файлик я прикреплю к данной теме, если у вас что либо не получится - постараюсь вам помочь!
Так, же чтобы не морочиться с командной строкой и постоянным вводом команды, скрипт можно компилировать с помощью библиотеки pyinstaller
Переходим в директорию со скриптом, затем:
pyinstaller -F название.py
После этого нужно будет подождать секунд 30, после чего в нашей папке появится куча других папок, но нам нужна будет папочка dist, в ней и будет наш скрипт, только уже в exe формате, кстати для его запуска не обязательно устанавливать даже питон :)

 

Вложения

  • easyvkbot.py
    2.3 KB · Просмотры: 998

wulfandr

Известный
636
260
Всем привет! В этом гайде я возможно буду для кого то нубом, для кого то копипастом но все же решил сделать этот гайд, так как опять же не нашёл подобной темы на BH.
Между web-интерфейсом для питона, я решил делать гайды по таким стандартным вещам как самые обычные боты и не только для VK. Но сегодня у нас будет как раз таки Vk, поскольку многие когда то думали о своей группе VK в которой будет отвечать бот на определённые сообщения. Бот в данной теме будет крайне простой без классов и множества функций!

Итак, для написания бота на языке Python, нам понадобиться:
1. Python, скачать(клик), можно с официального сайта, желательно последнею версию!
2. Библиотека vk_api, pip install vk_api - главный модуль для работы с вк api.
3. Группа и страница ВК.
4. Любой текстовый редактор, но не блокнот, можете использовать Notepad++, Atom, VS Code, я же буду использовать Sublime Text 2.
5. Умение владеть компьютером и не путаться в двух вещах.

Итак, для начала нам нужно настроить нашу группу вк и создать токен.
Думаю, рассказывать как создать группу не стоит, переходим в настройки нашей группы, затем "Работа с API", затем нажимаем "Создать ключ", там же разрешаем то что вам нужно, можете разрешить всё :D

Создаём токен:

Посмотреть вложение 88784

После того как создали, копируем его и сохраняем где нибудь для себя, чтобы по 100 раз не брать, после этого заходим во вкладку Long Poll API, включаем его, и в типах событий и включаем то что нам нужно, я же включу только отправку фотографий и сообщения.

Long Poll API:
Посмотреть вложение 88785

События:

Посмотреть вложение 88786

После этого, переходим в пункт "Сообщения" и включаем их.

Посмотреть вложение 88787

Так же включаем возможности бота:

Посмотреть вложение 88788

Всё, теперь токен у нас есть, осталось использовать его по назначению.

Открываем диск на котором хотели бы держать вашего бота, затем создаём там папку с любым английским названием, я же буду использовать диск C.
В этой папке создаём текстовый документ с любым английским названием и меняем расширение с .txt на .py, думаю после прошлого гайда не стоит говорить как включить показ расширения на Windows 10.
После всего этого, открываем командную строку (Win +R, cmd) и переходим в директорию нашего скрипта который мы создали только что,
у меня это выглядит так: cd c:/python/blasthack/, у вас же cd диск:/папка/и еще папка есть есть.
Теперь вы в директории вашего скрипта, для работы с кодом который будет ниже, вам предстоит установить библиотеку vkapi, не пугайтесь это легче чем поставить лайк.
В этой же командной строке прописываем следующею команду(-_-) - pip install vkapi
После этого ждём секунд 20-30, после установки можно наконец-то приступить к написанию нашего бота, я вставлю полный закомментированный код, вы же можете просто его скопировать и вставить, вставив токен, поменяв логику общения и даже добавив пару операторов elif.


easyvkbot.py:
# Импортируем библиотеку vk_api
import vk_api
# Достаём из неё longpoll
from vk_api.longpoll import VkLongPoll, VkEventType

# Создаём переменную для удобства в которой хранится наш токен от группы

token="токен" # В ковычки вставляем аккуратно наш ранее взятый из группы токен.

# Подключаем токен и longpoll
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)

# Создадим функцию для ответа на сообщения в лс группы
def blasthack(id, text):
    bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})

# Слушаем longpoll(Сообщения)
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
      # Чтобы наш бот не слышал и не отвечал на самого себя
       if event.to_me:

        # Для того чтобы бот читал все с маленьких букв 
          message = event.text.lower()
          # Получаем id пользователя
          id = event.user_id
    
    # Доисторическая логика общения на ифах
    # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации.
    # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа)

          if message == 'привет':
            blasthack(id, 'Привет, я бот!')

          elif message == 'как дела?':
              blasthack(id, 'Хорошо, а твои как?' )

          else:
             blasthack(id, 'Я вас не понимаю! :(')

После этого сохраняем файл и пишем в директории со скриптом следующие:

python название.py, если у вас ошибка то командная строка или терминал скажут вам об этом и программа не запуститься.
У меня же:
python easyvkbot.py


Если вы все сделали правильно, то наш бот будет отвечать вам!

Посмотреть вложение 88791
Посмотреть вложение 88792
Посмотреть вложение 88793

Как видим всё прекрасно работает, но я считаю это слишком простым ботом даже если добавить туда 100 ответов на определённые команды, давайте сделаем, что то чуть сложнее!

Усложнив задачу я решил прикреплением картинки на сообщение пользователя, предварительно загрузив её в любой альбом и скопировавший её url.
Отправку картинки я решил не усложнять с помощью vkupload, а решил использовать метод отправки уже загруженной в вк картинки и прикрепления текста.


Код:

easyvkbot.py:
# Импортируем библиотеку vk_api
import vk_api
# Достаём из неё longpoll
from vk_api.longpoll import VkLongPoll, VkEventType

# Создаём переменную для удобства в которой хранится наш токен от группы

token="" # В ковычки вставляем аккуратно наш ранее взятый из группы токен.


# Подключаем токен и longpoll
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)

# Создадим функцию для ответа на сообщения в лс группы
def blasthack(id, text):
    bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})

# Слушаем longpoll(Сообщения)
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
      # Чтобы наш бот не слышал и не отвечал на самого себя
       if event.to_me:

        # Для того чтобы бот читал все с маленьких букв 
          message = event.text.lower()
          # Получаем id пользователя
          id = event.user_id
    
    # Доисторическая логика общения на ифах
    # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации.
    # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа)

          if message == 'привет':
            blasthack(id, 'Привет, я бот!')

          elif message == 'как дела?':
              blasthack(id, 'Хорошо, а твои как?' )

          elif message == 'картинка':
            # Отправляем картинку и текст
               bh.method("messages.send", {"peer_id": id, "message": "Вот твоя картинка!", "attachment": "photo381260583_457370887", "random_id": 0})

          else:
             blasthack(id, 'Я вас не понимаю! :(')

А теперь результат:

Посмотреть вложение 88799

Тоже самое можно сделать и с видео, аудио, товарами, документами, записями со стены, опросами.


На этом свой гайд я хочу закончить, спасибо всем за внимание, мне будет приятно если этот гайд хоть кому то да поможет! В этом гайде мы создали самого самого простого и лёгкого бота на python.
Исходный файлик я прикреплю к данной теме, если у вас что либо не получится - постараюсь вам помочь!
Так, же чтобы не морочиться с командной строкой и постоянным вводом команды, скрипт можно компилировать с помощью библиотеки pyinstaller
Переходим в директорию со скриптом, затем:
pyinstaller -F название.py
После этого нужно будет подождать секунд 30, после чего в нашей папке появится куча других папок, но нам нужна будет папочка dist, в ней и будет наш скрипт, только уже в exe формате, кстати для его запуска не обязательно устанавливать даже питон :)
таких ботов МИЛЛИАРД, если не больше. да и под каждой библиотекой есть свой документация. самый неопытный разберется
 

Fott

Простреленный
3,461
2,378
Скинь пожалуйста миллиард таких тем именно на bh :)
То что нету на бх - не значит что их нету в интернете. А таких ботов миллион на том же хабре. Да и в репозитории к библиотеке всегда есть пример с использованием
 
  • Нравится
  • Влюблен
Реакции: Vespan, Mamashin и clrn1w

Mamashin

Известный
Автор темы
1,095
588
То что нету на бх - не значит что их нету в интернете. А таких ботов миллион на том же хабре. Да и в репозитории к библиотеке всегда есть пример с использованием
Я полностью согласен, ко всему есть документация и есть много источников например тот же хабр или github так же дают то что дал я, ну может немного по другому, а я решил просто разжевать для тех кто в принципе не разбирается в программировании и сидит по сути только на бх, я знаю что есть такие люди.
Поэтому и решил создать тему в которой разжую все до крошечки. Я не считаю что открыл америку кому то, этих ботов и на том же njs полно, но я решил просто создать гайд именно на bh. :)
 

invilso.

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

kFor

Известный
99
24
Крч можете помочь я хочу заменить картинку через url не работет а картинка которая у тебя прописана не скидывается пишу Картинка он отвечает вот твоя картинка и все
Картинка, указанная в теме, не отправляется, потому что она в закрытом доступе/удалена. Чтобы отправить пользователю свою картинку, ты сначала должен ее загрузить в вк
 

Mamashin

Известный
Автор темы
1,095
588
Так я понял что мне ее загрузить нужно, я не понял как мне это сделать.

Ладно
Показываю на пальцах:
Загружаешь картинку в вк, открываешь её В ВК, копируешь от "=" до "%"
1630165811211.png

Можешь не использовать переменную для передачи этой ссылки, а на прямую вставить через "" или ''.

send_photo:
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType

# ПЕРЕМЕННАЯ В КОТОРУЮ НУЖНО ВСТАВИТЬ КУСОЧЕК ДЛЯ ОТПРАВКИ ФОТО ВК
photo = 'photo381260583_457375752'

vk_session = vk_api.VkApi(token = "вор")
vk = vk_session.get_api()
longpoll = VkLongPoll(vk_session)

# Отправка текста
def text(id, text):
    vk.messages.send(user_id = id, message = text, random_id = 0)

# Отправка фото
def url(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:

            www = event.text.lower()
            id = event.user_id

            # Используем первую функцию:
            if www == "ку":
                text(id, 'Прив')
            # Первая функция + вторая
            elif www == 'как картинку отправить':
                text(id, 'Вот так')
                url(id, photo)
            else:
                print('[ + ]')

1630167256235.png


Думаю теперь все понятно?