Создание бота для ВКонтакте на языке програмирования 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
- вконтакте
- вконтакте бот
Как сделать, чтобы чат бот ВК на питоне отвечал каждому пользователю по отдельности?
Пишу простого чат бота для квиза на питоне. Проблема заключается в том, что если люди пишут ему в разное время, то все хорошо работает и он им отвечает каждому по отдельности. А когда люди пишут ему одновременно, то он работает сразу на всех и мешает их сообщения и свои ответы. Например: Один пользователь один отвечает на вопрос, а бот засчитывает это за ответ и другого пользователя, поэтому сбивается вся программа. Подскажите, пожалуйста, как это исправить.
for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: msg = event.text.lower() if msg == 'хочу проверить свои знания': for i in id_list: if i == id: i = 1 break if i == 1: sender(id, 'Вы уже вытянули свой билет') else: sender(id, answer, old_keyboard) if msg == 'тянуть билет': ticket_num = random.randint(1,max_value) ticket_txt = tickets.tickets[ticket_num]['questions']['first'] id_list.append(id) sender(id, ticket_txt) questions_got = 1 if questions_got == 1 and msg != 'тянуть билет': if msg == tickets.tickets[ticket_num]['answers']['first'].lower(): ticket_txt = 'Правильно! Следующий вопрос: ' + tickets.tickets[ticket_num]['questions']['second'] sender(id, ticket_txt) questions_got = 2 right_answers += 1 else: ticket_txt = 'К сожалению, вы ошиблись. \n Правильный ответ: ' + tickets.tickets[ticket_num]['answers']['first'] + '\nСледующий вопрос:\n ' + tickets.tickets[ticket_num]['questions']['second'] sender(id, ticket_txt) questions_got = 2 elif questions_got == 2 and msg != 'тянуть билет': if msg == tickets.tickets[ticket_num]['answers']['second'].lower(): ticket_txt = 'Правильно! Следующий вопрос: ' + tickets.tickets[ticket_num]['questions']['third'] sender(id, ticket_txt) questions_got = 3 right_answers += 1 else: ticket_txt = 'К сожалению, вы ошиблись. \n Правильный ответ: ' + tickets.tickets[ticket_num]['answers']['second'] + '\nСледующий вопрос:\n ' + tickets.tickets[ticket_num]['questions']['third'] sender(id, ticket_txt) questions_got = 3 elif questions_got == 3 and msg != 'тянуть билет': if msg == tickets.tickets[ticket_num]['answers']['third'].lower(): right_answers += 1 ticket_txt = 'Правильно!\n' + 'Вы ответили правильно на ' + str(right_answers) + ' вопросов.' sender(id, ticket_txt) else: ticket_txt = 'К сожалению, вы ошиблись. \n Правильный ответ: ' + tickets.tickets[ticket_num]['answers']['second'] + '\nВы ответили правильно на ' + str(right_answers) + ' вопросов.' sender(id, ticket_txt)
Создай своего чат-бота ВКонтакте: Простой и доступный гайд для всех
Вам когда-нибудь хотелось создать чат-бота ВКонтакте, но вы не знали, с чего начать? В этой статье я расскажу вам, как легко создать своего чат-бота и научить его интересным вещам. Не волнуйтесь, все будет понятно и доступно даже для новичков!
Шаг 1. Зарегистрировать новое приложение ВКонтакте
Прежде всего, вам нужно зарегистрировать новое приложение на платформе ВКонтакте. Для этого перейдите по ссылке https://vk.com/dev и нажмите «Создать приложение». Выберите «Standalone-приложение» и введите название для своего приложения.
Этот пункт можно пропустить и перейти к 3-ему шагу, вы можете получить токен с помощью одного сайта
Алексей Виноградов
Шаг 2. Получить токен доступа
Теперь получим токен доступа для нашего приложения. Это уникальный ключ, который позволит нашему чат-боту взаимодействовать с API ВКонтакте. Перейдите в настройки приложения и выберите «Авторизация». В разделе «OAuth» найдите строку «Сервисный ключ доступа» и скопируйте его.
Шаг 3. Написать код для чат-бота
Теперь пришло время написать код для нашего чат-бота. В этом примере мы будем использовать Python и библиотеку vk_api. Если у вас нет Python, установите его с официального сайта.
Установите библиотеку vk_api с помощью команды в терминале(cmd):
pip install vk_api
Ниже представлен пример простого эхо-бота:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType def main(): vk_session = vk_api.VkApi(token=’ваш_сервисный_ключ_доступа’) longpoll = VkLongPoll(vk_session) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me: print(f’Новое сообщение от
Замените «ваш_сервисный_ключ_доступа» на ранее полученный токен доступа и сохраните код в файл с расширением .py.
Шаг 4. Запустить чат-бота
Откройте терминал(cmd) или командную строку, перейдите в директорию с вашим файлом .py и выполните команду:
python имя_вашего_файла.py
Поздравляю! Ваш чат-бот ВКонтакте теперь работает! Отправьте ему сообщение, и он ответит вам тем же текстом.
Заключение
В этой статье мы научились создавать простого чат-бота ВКонтакте. Вы можете доработать код, добавить новые функции и сделать вашего бота уникальным. В интернете существует множество ресурсов, которые помогут вам в этом. Удачи в создании вашего собственного чат-бота!
Если вам все еще не понятно как создать чат-бота или вы хотите безграничного функционала, можете заказать его здесь.
Создание простого чат-бота в 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. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.
Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.
Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.
К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона. Присылать рецепты блюд на завтрак, обед, ужин.
Вы же можете редактировать бота под себя.
Буду рад вашим идеям. По любым вопросам пишите.