Гайд Простой бот для VK на Python
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.
Mamashin
Известный
Автор темы
Всем привет! В этом гайде я возможно буду для кого то нубом, для кого то копипастом но все же решил сделать этот гайд, так как опять же не нашёл подобной темы на 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», затем нажимаем «Создать ключ», там же разрешаем то что вам нужно, можете разрешить всё 😀
После того как создали, копируем его и сохраняем где нибудь для себя, чтобы по 100 раз не брать, после этого заходим во вкладку Long Poll API, включаем его, и в типах событий и включаем то что нам нужно, я же включу только отправку фотографий и сообщения.
После этого, переходим в пункт «Сообщения» и включаем их.
Так же включаем возможности бота:
Всё, теперь токен у нас есть, осталось использовать его по назначению.
Открываем диск на котором хотели бы держать вашего бота, затем создаём там папку с любым английским названием, я же буду использовать диск 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', ) # Слушаем longpoll(Сообщения) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: # Чтобы наш бот не слышал и не отвечал на самого себя if event.to_me: # Для того чтобы бот читал все с маленьких букв message = event.text.lower() # Получаем id пользователя # Доисторическая логика общения на ифах # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации. # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа) if message == 'привет': blasthack(id, 'Привет, я бот!') elif message == 'как дела?': blasthack(id, 'Хорошо, а твои как?' ) else: blasthack(id, 'Я вас не понимаю! :(')
После этого сохраняем файл и пишем в директории со скриптом следующие:
python название.py, если у вас ошибка то командная строка или терминал скажут вам об этом и программа не запуститься.
У меня же:
python easyvkbot.py
Если вы все сделали правильно, то наш бот будет отвечать вам!
Как видим всё прекрасно работает, но я считаю это слишком простым ботом даже если добавить туда 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', ) # Слушаем longpoll(Сообщения) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: # Чтобы наш бот не слышал и не отвечал на самого себя if event.to_me: # Для того чтобы бот читал все с маленьких букв message = event.text.lower() # Получаем id пользователя # Доисторическая логика общения на ифах # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации. # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа) if message == 'привет': blasthack(id, 'Привет, я бот!') elif message == 'как дела?': blasthack(id, 'Хорошо, а твои как?' ) elif message == 'картинка': # Отправляем картинку и текст bh.method("messages.send", ) else: blasthack(id, 'Я вас не понимаю! :(')
А теперь результат:
Тоже самое можно сделать и с видео, аудио, товарами, документами, записями со стены, опросами.
На этом свой гайд я хочу закончить, спасибо всем за внимание, мне будет приятно если этот гайд хоть кому то да поможет! В этом гайде мы создали самого самого простого и лёгкого бота на python.
Исходный файлик я прикреплю к данной теме, если у вас что либо не получится — постараюсь вам помочь!
Так, же чтобы не морочиться с командной строкой и постоянным вводом команды, скрипт можно компилировать с помощью библиотеки pyinstaller
Переходим в директорию со скриптом, затем:
pyinstaller -F название.py
После этого нужно будет подождать секунд 30, после чего в нашей папке появится куча других папок, но нам нужна будет папочка dist, в ней и будет наш скрипт, только уже в exe формате, кстати для его запуска не обязательно устанавливать даже питон 🙂
Вложения
easyvkbot.py
2.3 KB · Просмотры: 878
wulfandr
Известный
Всем привет! В этом гайде я возможно буду для кого то нубом, для кого то копипастом но все же решил сделать этот гайд, так как опять же не нашёл подобной темы на 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», затем нажимаем «Создать ключ», там же разрешаем то что вам нужно, можете разрешить всё 😀
После того как создали, копируем его и сохраняем где нибудь для себя, чтобы по 100 раз не брать, после этого заходим во вкладку Long Poll API, включаем его, и в типах событий и включаем то что нам нужно, я же включу только отправку фотографий и сообщения.
После этого, переходим в пункт «Сообщения» и включаем их.
Так же включаем возможности бота:
Всё, теперь токен у нас есть, осталось использовать его по назначению.
Открываем диск на котором хотели бы держать вашего бота, затем создаём там папку с любым английским названием, я же буду использовать диск 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', ) # Слушаем longpoll(Сообщения) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: # Чтобы наш бот не слышал и не отвечал на самого себя if event.to_me: # Для того чтобы бот читал все с маленьких букв message = event.text.lower() # Получаем id пользователя # Доисторическая логика общения на ифах # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации. # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа) if message == 'привет': blasthack(id, 'Привет, я бот!') elif message == 'как дела?': blasthack(id, 'Хорошо, а твои как?' ) else: blasthack(id, 'Я вас не понимаю! :(')
После этого сохраняем файл и пишем в директории со скриптом следующие:
python название.py, если у вас ошибка то командная строка или терминал скажут вам об этом и программа не запуститься.
У меня же:
python easyvkbot.py
Если вы все сделали правильно, то наш бот будет отвечать вам!
Как видим всё прекрасно работает, но я считаю это слишком простым ботом даже если добавить туда 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', ) # Слушаем longpoll(Сообщения) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: # Чтобы наш бот не слышал и не отвечал на самого себя if event.to_me: # Для того чтобы бот читал все с маленьких букв message = event.text.lower() # Получаем id пользователя # Доисторическая логика общения на ифах # Перед вами структура сообщений на которые бот сможет ответить, elif можно создавать сколько угодно, if и else же могут быть только 1 в данной ситуации. # if - если, else - иначе(значит бот получил сообщение на которое не вызвана наша функция для ответа) if message == 'привет': blasthack(id, 'Привет, я бот!') elif message == 'как дела?': blasthack(id, 'Хорошо, а твои как?' ) elif message == 'картинка': # Отправляем картинку и текст bh.method("messages.send", ) else: blasthack(id, 'Я вас не понимаю! :(')
А теперь результат:
Тоже самое можно сделать и с видео, аудио, товарами, документами, записями со стены, опросами.
На этом свой гайд я хочу закончить, спасибо всем за внимание, мне будет приятно если этот гайд хоть кому то да поможет! В этом гайде мы создали самого самого простого и лёгкого бота на python.
Исходный файлик я прикреплю к данной теме, если у вас что либо не получится — постараюсь вам помочь!
Так, же чтобы не морочиться с командной строкой и постоянным вводом команды, скрипт можно компилировать с помощью библиотеки pyinstaller
Переходим в директорию со скриптом, затем:
pyinstaller -F название.py
После этого нужно будет подождать секунд 30, после чего в нашей папке появится куча других папок, но нам нужна будет папочка dist, в ней и будет наш скрипт, только уже в exe формате, кстати для его запуска не обязательно устанавливать даже питон 🙂
таких ботов МИЛЛИАРД, если не больше. да и под каждой библиотекой есть свой документация. самый неопытный разберется
Создание бота для ВКонтакте на языке програмирования Python
Создание бота для ВКонтакте на языке программирования Python
Для начала нам надо установить нужные библиотеки, а точнее vk_api.
В начале разберемся как получить токен для нашего бота.
- Создайте сообщество
- В меню справа выберете вкладку «Управление»
- Во вкладке «Сообщения» выберете «Настройки для ботов»
- Включите возможности бота
- В меню справа выберете вкладку «Настройки», в которой выберете «Работа с API»
- Создайте ключ доступа
- Разрешите, что вам нужно
Начинаем писать код
Импортируем что нужно:
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() > Между циклом и авторизацием (назовём это место аиц) будет код позволяющий отправлять сообщения.
Для того что бы отправить сообщение надо в аиц добавить код:
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() if msg == 'hi': sender(id, 'hello') send_stick(id, 112) send_photo(id, 'photo337511104_457242663')
Удачи в ваших начинаниях!
- боты для социальных сетей
- python
- вконтакте
- вконтакте бот
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 Jun 6, 2023. It is now read-only.
my own bot for vk on python
License
dan63047/dan63047pythonbot
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
README.md
Мой личный бот на python для ВК
от dan63047
Этот бот просто отвечает на поддерживаемые запросы в переписке с сообществом. Был написан мною в целях изучения python. Этот README является инструкцией по установке и использованию бота.
Функции бота
Чтобы воспользоваться функциями бота, необходимо отправить команду и в некоторых случаях аргумент. Все команды начинаются с восклицательного знака
- !h, !help, !п, !помощь — бот отправляет список команд и их краткое описание из help.txt , а так же дату последнего обновления и ссылку на этот репозиторий
- !my_id, !ид — бот достаёт из вашего сообщения user_id и отправляет его вам
- !user_id, !пользователь id — бот отправляет id нужного вам пользователя в vk api методом users.get и отправляет вам полученные этим методом данные: имя, фамилия, id, пол, время последнего онлайна и платформы, закрыт ли профиль
- !group_id, !группа id — бот отправляет id нужного вам сообщества в vk api методом groups.getById и отправляет вам полученные этим методом данные: название, описание, id, количество подписчиков
- !image, !картинка — бот, с помощью костыля в виде сервисного ключа приложения, получает vk api методом photos.get фотографии альбома, выбирает с помощью функции в python random.randrange одну фотографию и отправляет вам её как attachment
- !random, !рандом число1число2 — бот генерирует с помощью random.randint() случайное число и отправляет его вам. Если без аргументов, то число от 0 до 10. Если есть одно число, то от 0 до число1. Если есть оба числа, то от число1 до число2
- !weather, !погода город — бот получает с помощью OpenWeather API текущую погоду в городе и отправляет её вам
- !wiki, !вики запрос — бот получает с помощью Wikipedia API краткое описание статьи по запросу и отправляет её вам
- !byn, !белруб — бот получает с помощью НБ РБ API текущий курс белорусского рубля и отправляет её вам
- !echo, !эхо — бот начинает повторять за вами, чтобы это остановить, надо написать !echo off
- !game, !игра камень/ножницы/бумага/статистика — бот играет с вами в «Камень, ножницы, бумага» и ведет статистику игр, которую записывает в файл БД
- !midnight, !полночь — бот будет уведомлять о каждом миднайте по Московскому времени. Введите ещё раз, чтобы отменить это
- !subscribe, !подписаться — бот будет уведомлять вас о каждом новом посте. Введите ещё раз, чтобы отменить это
- !debug, !дебаг — бот отправляет информацию о своём состоянии
- !debug log, !дебаг лог — бот отправляет последние 10 строк из своего лога. Доступно только вам
- !debug bots, !дебаг боты — бот отправляет информацию об объектах бота в памяти. Доступно только вам
- !debug game, !дебаг игра — бот отправляет всю статистику по игре !game
- !access all/owner, !доступ владелец/все — позволяет в беседе установить уровень доступа к командам !midnight, !subscribe и !debug. all — все могут пользоваться. owner — только вы. Доступно только вам
- !turnoff, !выкл — даёт боту команду на выключение. Доступно только вам
- !admin_mode, !админмод — если чат, в которой активируется команда, является беседой и в ней у бота есть полномочия администратора, то бот переходит в режим модерации. Пока что он может только кикать людей за @all и @online, реагировать на приход/уход участника беседы и дать возможность пользоваться командой !ban. Введите ещё раз, чтобы выключить режим модерации. Доступно только вам
- !ban, !бан @user — банит пользователя из беседы (в смысле выгоняет, юзер не сможет вернуться пока бот или админ не предложит). Требует режим модерации, могут воспользоваться только администраторы
- !resist, !запретить @user — запрещает пользователю пользоваться ботом, могут воспользоваться только администраторы
- !restore, !разрешить @user — снова разрешает пользователю пользоваться ботом, могут воспользоваться только администраторы
- !spammer add@user, !спаммер добавить@user — Добавляет пользователя в «базу спамеров». Если пользователь из этой базы попытается присоединится к беседе, в которой он внесён в эту самую базу, он тут же будет изгнан. Требует режим модерации, могут воспользоваться только администраторы
- !spammer remove@user, !спаммер удалить@user — Убирает пользователя из «базу спамеров». Требует режим модерации, могут воспользоваться только администраторы
- бот дай денег — Посылает вас нахуй
Установка и запуск бота
Лучшим решением будет иметь платный аккаунт на pythonanywhere, чтобы запускать бота, как Always-on task. Можно, конечно, запускать бота в консоли, но pythonanywhere может выключить вашу консоль, если вы долго не будете посещать её.
Основа
Итак, заходим на pythonanywhere, входим или регистрируемся.
Создаём консоль на bash и прописываем:
git clone https://github.com/dan63047/dan63047pythonbot.git
Эта команда создаст папку dan63047pythonbot и поместит туда бота.
Теперь заходим в директорию бота ( cd dan63047pythonbot/ ) и устанавливаем необходимые библиотеки:
pip3 install vk-api pyowm Wikipedia-API —user
Эта команда установит все необходимые библиотеки для работы бота.
Настроим ваше сообщество для работы с ботом: заходим в Управление -> Работа с API. Здесь создаём токен сообщества с правами доступа к сообщениям, фотографиям и стене. Идем в Long Poll API, включаем его и ставим последнюю доступную версию (бот тестировался на версии 5.120). В Типы событий должны стоять галочки на следующих событиях: Входящее сообщение, Запрет на получение, Добавление записи на стене.
Создадим файл конфигурации для бота: В pythonanywhere тыкаем на Files, переходим в директорию dan63047pythonbot и создаём там новый фаил с названием config.py . В нём должно быть написано следующее:
vk_group_token = "vk_group_token" # Токен сообщества group_id = 190322075 # Цифровой ид группы owner_id = 276193568 # Цифровой ид вашей страницы вк, чтобы вы могли управлять ботом в переписке admins = [276193568, 629085267] # Список ид аккаунтов администраторов, которые в любом случае тоже смогут получать доступ к командам администрирования, оставьте пустым, если их нет vk_service_token = "vk_service_token" # Сервисный ключ доступа для команды !image. Оставьте None, если хотите выключить эту команду album_for_command = 269199619 # Цифровой ид альбома для команды !image. Оставьте None, если хотите выключить эту команду openweathermap_api_key = 'openweathermap_api_key' # Ключ OpenWeather API. Оставьте None, если хотите выключить команду !weather
Если вы будете использовать команду !image
Разберёмся с костылём для метода photos.get : Идем на vk.com/dev , нажимаем на Мои приложения и кликаем по Создать приложение. Новое приложение может называться как угодно, от него нам необходимо всего лишь сервисный ключ доступа, который можно найти, если нажать на Настройки
Если вы будете использовать команду !weather
Перейдите по openweathermap.org , пройдите там регистрацию и создайте API ключ
Запуск бота
Если аккаунт платный: в pythonanywhere тыкаем на Tasks, создаём и запускаем в Always-on tasks задачу python3.8 /home/pythonanywhere_nickname/dan63047pythonbot/longpulling.py , где вместо pythonanywhere_nickname должен быть ваш никнейм на pythonanywhere. После небольшого тупления pythonanywhere запустит вашего бота.
Если аккаунт бесплатный: в bash консоли переходим в директорию бота и прописываем python3 longpulling.py . Консоль можно оставить в покое, но лучше раз в день проверять её чтобы консоль не отключили
Другие варианты запуска бота
Скорее всего, вы можете найти где-нибудь VPS или организовать всё на своём компьютере. Там вы просто скачиваете и устанавливаете Python последней версии, настраиваете конфиг бота и запускаете его.
botconsole.py
Если вы введёте команду pyhton3 botconsole.py , то запустится консоль бота. Она пока находится в разработке и не может управлять именно ботом, скорее вы просто будете выполнять действия от лица бота. Вот список поддерживаемых команд:
- help — выводит список доступных команд
- exit — завершает работу консоли
- message peer_idmessage — отправляет message в переписку peer_id от имени сообщества
- msg_history peer_idcount — возвращает историю переписки, последние count сообщений. Если count не указано, то последние 20 сообщений На следующей команде хотелось бы уделить особое внимание, ведь с помощью неё можно вызывать функции бота
Команда bot
Если просто вызвать эту команду, то она покажет список существующих объектов ботов. Однако так же у команды есть и большое количество аргументов:
- bot update — обновляет список объектов ботов и их состояние
- bot createpeer_id — создаёт объект бота для переписки peer_id
- bot deletepeer_id — удаляет существующий объект бота для переписки peer_id
- bot changeMidnightFlagpeer_id — меняет флаг в объекте бота peer_id, по которому он определяет, надо ли оповещать о Midnight
- bot midnightpeer_id — инициирует ивент Midnight для объекта бота peer_id
Использованные библиотеки
- vk_api — модуль для создания скриптов для социальной сети Вконтакте
- pyowm — модуль для получения погоды через OpenWeather API
- Wikipedia-API — модуль для получения статей из Wikipedia
Дополнительно
Буду рад помощи и поддержке
Создание простого чат-бота в 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. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.
Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.
Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.
К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона. Присылать рецепты блюд на завтрак, обед, ужин.
Вы же можете редактировать бота под себя.
Буду рад вашим идеям. По любым вопросам пишите.