Создание бота для ВКонтакте на языке програмирования 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
- вконтакте
- вконтакте бот
Создание простого чат-бота в 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. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.
Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.
Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.
К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона. Присылать рецепты блюд на завтрак, обед, ужин.
Вы же можете редактировать бота под себя.
Буду рад вашим идеям. По любым вопросам пишите.
Гайд Простой бот для 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 · Просмотры: 882
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 формате, кстати для его запуска не обязательно устанавливать даже питон 🙂
таких ботов МИЛЛИАРД, если не больше. да и под каждой библиотекой есть свой документация. самый неопытный разберется
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.
Шаблон бота для Вконтакте на Python
License
Blackgard/shablbot
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 для социальной сети Вконтакте, работающий через VkBotLongPull.
Данный проект разрабатывался с целью облегчить создание ботов для людей, которые мало/плохо знакомы с программированием. Бот устроен таким образом, что Вам нужно написать минимальное количество кода, чтобы добавить новый функционал. В последствии бот будет дорабатываться и развиваться.
Можете воспользоваться командой pip:
pip install shablbot
Или же использовать poetry:
poetry add shablbot
Чтобы начать работу с ботом необходимо выполнить инициализацию компонентов бота:
Для этого нужно выполнить команду:
C:\shablbot> py -m shablbot --init
blackgard@bar:~/shablbot$ python3 -m shablbot --init
После чего в папке, откуда был вызван скрипт, будут созданы каталоги с следующей структурой:
*yourfolder* ┣ commands ┃ ┣ private ┃ ┃ ┗ show_id_active_chats.py ┃ ┣ public ┃ ┃ ┣ chat_bot_off.py ┃ ┃ ┣ chat_bot_on.py ┃ ┃ ┗ chat_show_statistics.py ┣ keyboards ┃ ┣ clear.json ┃ ┗ default.json ┣ modules ┃ ┗ games ┃ ┗ flip_and_roll.py ┣ phrases ┃ ┣ _default.json ┃ ┣ bye.json ┃ ┗ hello.json ┣ settings ┃ ┣ settings_model.py ┃ ┗ settings.py ┗ manager.py
Более подробно про каждый из каталогов будет рассказано далее
После этого можно перейти к настройке бота.
Настройка бота производится с помощью редактирования файла settings.py, находящегося в папке settings, созданной на шаге выше.
Обязательные поля для работы бота:
- TOKEN - ключ доступа к сообществу вконтакте, ключ должен быть с правами к сообщениям сообщества. Как получить токен для бота?
TOKEN = os.getenv("TOKEN") # "1234566789908798689764867293876243987" (str)
- BOT_CHAT_ID - id страницы вконтакте сообщества, от лица которого будет работать бот.
BOT_CHAT_ID = os.getenv("BOT_CHAT_ID") # 123456789 (int)
- DEFAULT_REACTION_TEMPLATES - слова на которые бот будет всегда как-либо реагировать.
DEFAULT_REACTION_TEMPLATES = (r"бот",) # (tuple)
- ADMIN_ID - id страницы вконтакте человека, от лица которого будет происходить администрирование бота.
ADMIN_ID = os.getenv("ADMIN_ID") # 123456789 (int)
Остальные параметры для начального запуска бота менять не нужно.
Советую для хранения токена и id-ов использовать .env файл. К примеру используйте python-dotenv.
Для запуска бота мы используем файл manager.py, созданный на первом шаге.
C:\shablbot> py manager.py --run
blackgard@bar:~/shablbot$ python3 manager.py --run
Если вы все правильно сделали, то в консоли увидите следующее сообщение:
2099-99-99 at -1:99:99 | INFO | ------- Бот запущен / Bot is runing -------
️ Модульность бота
- Модуль команды
- Модуль клавиатуры
- Модуль пользовательских модулей
- Модуль фраз
- Модуль настроек
То, как бот обрабатывает команды и сообщения от Вас спрятано. По этому Вам доступны 5 типов модулей, для расширения и настройки бота:
Модуль отвечающий за команды управления ботом. Нужен для администрирования. Делятся на два типа:
- private - доступные только администратору бота
- public - доступные всем пользователям
Команды нужно подключать в настройках бота. Переменная ACTIVE_COMMANDS.
Для добавления новой команды вам нужно создай файл в папке private/public с *название_команды*.py.
В созданном файле нужно создать переменную command_settings с следующей структурой:
command_settings = < # Код команды. Должен быть уникальным. "code": "bot_off", # Название команды. Публичная переменная. "name": "Выключить бота", # Слова, на которые бот будет реагировать. # Может быть регулярным выражением. "templates": ["выкл бот", "бот выкл"], # Ответ бота, на результат выполненной команды. "answer": "Теперь бот не читает сообщения в чате", # Описание команды. Публичная переменная. "description": "Команда для выключения бота в чате (Внутри чата)", # Метод обработки templates. Если normal, то сравнивает как слова. # Если regular, то сравнивает как регулярные выражения. "method": "normal", # Какие переменные нужны для выполнения команды. # Доступные значения = processed_chat, chats, commands; "need": ["processed_chat",], # Входная точка для выполнения команды. # Может быть любой функцией. "entry_point": command >
Функция выключения бота в чате:
def command(processed_chat: Chat) -> None: processed_chat.turn_off()
Модуль отвечающий за варианты клавиатуры бота. Нужен для настройки сообщений, если вы хотите использовать клавиатуру в сообщениях бота.
Клавиатуры нужно подключать в настройках бота. Переменная KEYBOARDS.
⚠️ Обязательно для работы бота нужны, "clear.json" и "default.json"
Модуль отвечающий за пользовательские модули для бота. К таким модулям можно отнести:
- Игры
- Утилиты (Погода, время, конвертирование валюты)
Модули нужно подключать в настройках бота. Переменная ACTIVE_MODULES.
⚠️ Данный блок еще не совершенен, т.к. всегда требует возврата строки как ответа, в будущем будет как ответ отправлять все типы данных
Для создания модуля Вам необходимо создать файл с названием модуля и добавить туда переменную settings с следующей структурой:
settings = < # Название модуля. "name": "Flip and roll game", # Версия модуля. "version": "1.0.0", # Автор модуля. "author": "Narteno", # Дата создания модуля. "date_created": "12.11.2019", # Входная точка обработки модуля. "entry_point": activate_module, # Обрабатывающие запросы функции модуля. # В себя включают название функции, описание # и входную точку. Нужен для более гибкой настройки. "func": < "roll": "name": "roll", "description": "", "entry_point": roll>, "flip": "name": "flip", "description": "", "entry_point": flip>, >, # Фразы для реакции. Разделяются по функциям модуля. "templates": "flip": [r"флип"], "roll": [r"ролл"]>, >
Входная точка модуля должна иметь такую структуру, но не ограничена этим:
def activate_module(func) -> str: """Входная точка модуля""" active_func = settings["func"].get(func)["entry_point"] # Если переменная ответа будет в значении None. # То бот не отправит сообщение пользователю. answer_module = None if active_func: answer_module = active_func() return answer_module
Модуль отвечающий за фразы, на которые бот реагирует. Содержит в себе файлы .json формата.
Все фразы из папки подгружаются автоматически. Вы можете исключить ненужные фразы используя в настройках переменную EXCLUDED_PHRASES.
json файл должен содержать следующую структуру:
⚠️ Значения с пометкой "_comment" в реальном файле не должны пристутствовать.
< "#group_comment#":"Стандартная группа. нельзя удалять" "group": "default", "#words_comment#":"Список слов входящих в группу" "words": < "#main_comment#":"Название слова, на которое бот реагирует. Может содержать любые символы. Для файла _default.json 'main' обязательное системное значение" "main": < "#templates_comment#":"Фразы для реакции" "templates": [ "бот" ], "#answer_comment#":"Варианты ответа разбитые по редкости" "answer": < "common": ["Я бот"], "uncommon": ["Я почти бот"], "rare": ["Я точно бот"], "legendary": ["А может быть это ты бот?"] >, "#templates_comment#":"Ключ клавиатуры, которую нужно отправить для данного слова." "keyboard": "default" >, > >
Модуль отвечающий за настройки бота. Все настройки производятся в файле settings.py. В файле для каждой переменной имеются комментарии, поясняющие, что в них хранится.
Для бота разработано CLI. Доступные методы:
(env) C:\Users\user\Desktop\shablbot>py manager.py --help usage: python manage.py [-h] [-r] [-i] [-c] Бот написанный на Python для социальной сети Вконтакте, работающий через VkBotLongPull optional arguments: -h, --help show this help message and exit -r, --run-bot Запустить сервер для работы бота -i, --init Инициировать каталоги для работы бота [ "commands", "keyboards", "modules", "phrases", "settings", "manager.py" ] -c, --check-bot Проверить работоспособность бота без запуска сервера (c) Alex Drachenin
Для старта работы с ботом вы можете воспользоваться методом "--init" таким образом:
(env) C:\Users\user\Desktop\shablbot>py -m shablbot --init Каталог 'commands' инициирован! Каталог 'keyboards' инициирован! Каталог 'modules' инициирован! Каталог 'phrases' инициирован! Каталог 'settings' инициирован! Файл manager.py инициирован!
❔ Как получить токен для работы бота?
Для начала нам нужно создать сообщество. Для этого переходим в вк в вкладку "Сообщества" и нажимаем кнопку "Создать сообщество".
Там вы заполняете всю необходимую вам информацию, со всем соглашаетесь и попадаете на страницу группы. Там нам нужно найти вкладку "Управление". В меню справа найдите "Настройки"->"Работа с API".
На той странице будет 3 вкладки. Из них нам нужны только 1 и 3:
- Нажимаем кнопку "Создать ключ", выбираем все необходимые нам доступы (желательно все) и нажимаем "Создать". Данный ключ нужен для переменной TOKEN в настройках бота.
- Не нужна, пропускаем ее.
- На данной вкладке вам нужно выбрать версию API, бот тестировался на самом последней версии в момент написания (5.131), советую выбирать самую свежую. Так же вам нужно установить "Long Poll API" в значение "Включено". После этого переходим на вкладку "Тип событий" и выбираем нужные вам значения. Минимальные для работы бота:
- Входящее сообщение
- Исходящее сообщение
После этого ваш бот готов к работе, можете начинать его тестировать, удачи!
- @alex_blackgard - создатель бота и человек, который будет рад любой помощи в доработке бота
