Как написать бота в вк на python
Перейти к содержимому

Как написать бота в вк на python

  • автор:

Создание бота для ВКонтакте на языке програмирования Python

Создание бота для ВКонтакте на языке программирования Python

Для начала нам надо установить нужные библиотеки, а точнее vk_api.

В начале разберемся как получить токен для нашего бота.

  1. Создайте сообщество
  2. В меню справа выберете вкладку «Управление»
  3. Во вкладке «Сообщения» выберете «Настройки для ботов»
  4. Включите возможности бота
  5. В меню справа выберете вкладку «Настройки», в которой выберете «Работа с API»
  6. Создайте ключ доступа
  7. Разрешите, что вам нужно

Начинаем писать код

Импортируем что нужно:

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 стикера для этого надо:

  1. Правой кнопкой мыши нажать на стикер (неважно есть ли он у вас или нет)
  2. Иследуем элемент
  3. (то что подчеркнуто красным и есть айди стикера)

Далее в цикл добавляем строку:

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’Новое сообщение от : ‘) vk_session.method(‘messages.send’, < 'user_id': event.user_id, 'message': f'Вы написали: ', 'random_id': 0 >) if __name__ == ‘__main__’: main()

Замените «ваш_сервисный_ключ_доступа» на ранее полученный токен доступа и сохраните код в файл с расширением .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. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.

Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.

Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.

К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона. Присылать рецепты блюд на завтрак, обед, ужин.

Вы же можете редактировать бота под себя.

Буду рад вашим идеям. По любым вопросам пишите.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *