Как написать бота для вк на python для беседы

Всем доброго времени суток!

Я очень долго прочесывал интернет в поисках рабочего варианта бота для ВК, разработанного на Python. Никак не мог найти ни одной нормальной, целой статьи — в одной устаревший метод, в другой непонятные ошибки и так далее…

Друзья, я решил поделиться с вами всеми теми знаниями которые приобрел и сейчас мы с вами шаг за шагом напишем хорошего рабочего бота ВК для текущего, 2020, года. Впрочем надеюсь статья не потеряет актуальности и позже.

С чего начать?

Начнем с установки необходимых библиотек. Естественно открываем cmd.exe ( в некоторых случаях может понадобиться запустить от имени администратора) и прописываем туда следующее:

pip install vk
pip install vk_api

Мы установили две библиотеки для работы нашего Python-а с сервисом VK.

Теперь запускаем IDLE и начинаем писать код.

import vk_api, vk
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.utils import get_random_id

Объясняю: импортируем установленные ранее библиотеки и модули для работы с ними.

Авторизация

vk_session = vk_api.VkApi(token='#ВСТАВЬ СЮДА ТОКЕН ГРУППЫ СО ВСЕМИ РАЗРЕШЕНИЯМИ')

Авторизовались как группа. Важно создать такой токен, который будет разрешать отправку, прием, обработку сообщений и, в принципе, все что нам захочется.

from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
longpoll = VkBotLongPoll(vk_session, 'ID вашей группы без кавычек')
vk = vk_session.get_api()
from vk_api.longpoll import VkLongPoll, VkEventType

Импортируем модуль longpool для работы с чатами.

Нюансы

Дело в том, что в одной программе нельзя одновременно запустить бота для ответов на ЛС и для работы в беседе, поскольку для этого используются два разных модуля longpool и как только запускается прослушивание longpool-ом на канале «ЛС»(Личные Сообщения) прослушивание другого канала, т.е. чата недоступно, пока не завершится первый процесс прослушивания. Проще говоря задачи могут выполняться исключительно последовательно, а не параллельно. Поэтому в целом коде я деактивирую часть с ЛС, заключив ее в »’ кавычки.

Теперь импортируем то же самое, но для ЛС.

Lslongpoll = VkLongPoll(vk_session)
Lsvk = vk_session.get_api()

Кнопки

Теперь объявим пару функций для кнопок, которые наш бот в будущем будет выдавать по требованию. К ним мы обратимся вскоре ещё раз.

keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Привет', color=VkKeyboardColor.NEGATIVE)
keyboard.add_button('Клавиатура', color=VkKeyboardColor.POSITIVE)
keyboard.add_line()
keyboard.add_location_button()
keyboard.add_line()
keyboard.add_vkpay_button(hash="action=transfer-to-group&group_id=183415444")

Прием-отправка сообщений из беседы

А теперь будем слушать longpool на предмет новых сообщений. event — переменная в которой будет храниться само сообщение и некоторые данные о нем.

for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW:

if 'Ку' in str(event) or 'Привет' in str(event) or 'Хай' in str(event) or 'Хелло' in str(event) or 'Хеллоу' in str(event):

Перевод того, что выше: Если слово «Привет» или «…» или «…» содержится в переменной event, тогда:


if event.from_chat:
    vk.messages.send(
    key = (''),
    server = (''),
    ts=(''),
    random_id = get_random_id(),
    message='Привет!',
    chat_id = event.chat_id
    )

Проверяем куда направлен наш event. Если в чат тогда вызываем метод отправки сообщений «vk.messages.send».

Внимание

… переменные key, server и ts необходимо заполнить. Эти переменные нужны для установки связи с сервером VK. Чтобы узнать эти переменные, а они у всех свои, нужно авторизованным перейти на сайт VK разработчикам и во вкладке «Пример запроса» ввести ID своей группы.

random_id — это случайный id сообщения, который в новых версиях VK_API теперь обязателен.

chat_id — это идентификатор беседы, из которой пришел event или иначе говоря сообщение.

if ‘Клавиатура’ in str(event):

         	
if event.from_chat:
    vk.messages.send(
        keyboard = keyboard.get_keyboard(),
        key = ('21b7e67abf6b938c8223242c37b4ff873efe1453'),
        server = ('https://lp.vk.com/wh183415444'),
        ts=('3539'),
        random_id = get_random_id(),
        message='Держи',
        chat_id = event.chat_id
        )

Теперь, если пользователь напишет «Клавиатура«, то наш бот щедро предоставит кнопки, о которых мы говорили ранее.

На сложном всё.

Часть с Личными Сообщениями

Теперь отпишем вторую часть для ЛС без особых подробностей.

for event in Lslongpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
        vars1 = ['Привет', 'Ку', 'Хай', 'Хеллоу']
        if event.text in vars1:
            if event.from_user:
                Lsvk.messages.send(
                    user_id = event.user_id,
                    message = 'Привет)',
                    random_id = get_random_id()
                    )
            vars2 = ['Клавиатура', 'клавиатура']
        if event.text in vars2:
            if event.from_user:
                Lsvk.messages.send(
                    user_id = event.user_id,
                    random_id = get_random_id(),
                    keyboard = keyboard.get_keyboard(),
                    message = 'Держи'
                    )

Поздравляю! Мы с вами разобрали бота на Python 2020 года. А сейчас я приведу весь код целиком.


import random, vk_api, vk
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.utils import get_random_id
vk_session = vk_api.VkApi(token='ВСТАВИТЬ ТОКЕН СЮДА')
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
longpoll = VkBotLongPoll(vk_session, 'ID группы без кавычек')
vk = vk_session.get_api()
from vk_api.longpoll import VkLongPoll, VkEventType
Lslongpoll = VkLongPoll(vk_session)
Lsvk = vk_session.get_api()

keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Привет', color=VkKeyboardColor.NEGATIVE)
keyboard.add_button('Клавиатура', color=VkKeyboardColor.POSITIVE)
keyboard.add_line()
keyboard.add_location_button()
keyboard.add_line()
keyboard.add_vkpay_button(hash="action=transfer-to-group&group_id=еще_раз_ID_группы")

for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW:
        if 'Ку' in str(event) or 'Привет' in str(event) or 'Хай' in str(event) or 'Хелло' in str(event) or 'Хеллоу' in str(event):
            if event.from_chat:
                vk.messages.send(
                    key = (''),          #ВСТАВИТЬ ПАРАМЕТРЫ
                    server = (''),
                    ts=(''),
                    random_id = get_random_id(),
              	    message='Привет!',
            	    chat_id = event.chat_id
                    )
        if 'Клавиатура' in str(event):
            if event.from_chat:
                vk.messages.send(
                    keyboard = keyboard.get_keyboard(),
                    key = (''),          #ВСТАВИТЬ ПАРАМЕТРЫ
                    server = (''),
                    ts=(''),
                    random_id = get_random_id(),
              	    message='Держи',
             	    chat_id = event.chat_id
            	    )
'''
for event in Lslongpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
        vars1 = ['Привет', 'Ку', 'Хай', 'Хеллоу']
        if event.text in vars1:
            if event.from_user:
                Lsvk.messages.send(
                    user_id = event.user_id,
                    message = 'Привет)',
                    random_id = get_random_id()
                    )
        vars2 = ['Клавиатура', 'клавиатура']
        if event.text in vars2:
            if event.from_user:
                Lsvk.messages.send(
                    user_id = event.user_id,
                    random_id = get_random_id(),
                    keyboard = keyboard.get_keyboard(),
                    message = 'Держи'
                    )
'''

P.S. Ключевые слова, по которым ведется поиск в переменной event будут строгими. Т.Е. если вы сделаете ключевым слово «Ап», то слова «Апостроф», «Аптека» и даже «ап» не будут найдены.

Всем удачи!

Из песочницы, Python, API, Вконтакте API


Рекомендация: подборка платных и бесплатных курсов 3D-моделирования — https://katalog-kursov.ru/

Сейчас боты стали обыденностью и находятся на каждом шагу, но если тебе нужен свой бот в социальной сети вконтакте, то это легко реализовать.

Нам понадобятся:

  1. Python
  2. VK Api
  3. Желание

Ну прям совсем для новичков

Как установить Python?

Скачиваем, запускаем установщик.

Куда писать этот код?

В текстовый документ с расширением .py

А чем писать?

Да хоть блокнотом. Лично я рекомендую Notepad++

А как запускать?

Через командную строку.
python путь до папки с файломфайл.py

Как оно работает?

Всё очень просто, в vk api есть такая штука, называется longpool работает она так:

Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдёт какое-либо событие (например, придёт новое сообщение), либо истечёт заданное время ожидания.

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

Техническая реализация

Для начала нам нужно доказать вконтакту что мы — это мы, а не кто-либо ещё. Делается это очень просто.

import vk_api
import requests

session = requests.Session()
login, password = 'Ваш логин, email или телефон', 'Ваш пароль'
vk_session = vk_api.VkApi(login, password)
try:
    vk_session.auth(token_only=True)
except vk_api.AuthError as error_msg:
    print(error_msg)
    return

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

Если бот будет сидеть в группе то авторизация выглядит по другому.

import requests
import vk_api

vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото')

— Что такое токен?
— Такая штука из циферок и буковок которую нужно получить в настройках группы. Для этого достаточно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».

Теперь вызовем longpool.

from vk_api.longpoll import VkLongPoll, VkEventType
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
   #Слушаем longpoll, если пришло сообщение то:			
        if event.text == 'Первый вариант фразы' or event.text == 'Второй вариант фразы': #Если написали заданную фразу
            if event.from_user: #Если написали в ЛС
                vk.messages.send( #Отправляем сообщение
                    user_id=event.user_id,
                    message='Ваш текст'
		)
            elif event.from_chat: #Если написали в Беседе
                vk.messages.send( #Отправляем собщение
                    chat_id=event.chat_id,
                    message='Ваш текст'
		)

В сообщениях может быть не только заданный вами текст. Например:

import datetime
vk.messages.send(
    user_id=event.user_id,
    message='Московское время: ' + str(now.strftime("%H:%M"))
)

А ещё можно прикреплять картинки.

attachments = []
from vk_api import VkUpload 
upload = VkUpload(vk_session)
image_url = 'Ссылка на картинку'
image = session.get(image_url, stream=True)
photo = upload.photo_messages(photos=image.raw)[0]
attachments.append(
    'photo{}_{}'.format(photo['owner_id'], photo['id'])
)
vk.messages.send(
    user_id=event.user_id,
    attachment=','.join(attachments),
    message='Ваш текст'
)

Можно придумать ещё много всего интересного, но тут подумайте сами, а я лишь скажу что: ссылки можно делить на части. Например:

image_url = 'http://сайт.com/uploads/' + event.text + '.png'

и никто не запретил нам получать ответ от пользователя на примере Википедии:

import wikipedia #Модуль Википедии
wikipedia.set_lang("RU")
if event.text == 'Википедия' or event.text == 'Вики' or event.text == 'википедия' or event.text == 'вики' or event.text == 'Wikipedia' or event.text == 'wikipedia' or event.text == 'Wiki' or event.text == 'wiki': #если нам пришло сообщение с текстом Википедия или Вики или ... или wiki
    if event.from_user: #Если написали в KC
        vk.messages.send(
            user_id=event.user_id,
            message='Введите запрос' #Пишем "Введите запрос"
	)
    elif event.from_chat: #Если написали в беседе
        vk.messages.send(
            chat_id=event.chat_id,
            message='Введите запрос' #Пишем "Введите запрос"
	)
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Пинаем longpoll
            if event.from_user:
                vk.messages.send( #Если написали в ЛС
                    user_id=event.user_id,
                    message='Вот что я нашёл: n' + str(wikipedia.summary(event.text)) #Пишем "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения
		)
                break #выходим из цикла
        elif event.from_chat: #Если написали в беседе
            vk.messages.send(
                chat_id=event.chat_id,
                message='Вот что я нашёл: n' + str(wikipedia.summary(event.text)) #Пишем "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения
	    )
            break #выходим из цикла
    continue

Ссылки на примеры и документацию

Пример бота работающего на DuckDuckGo api
Примеры использования VK api (общие)
Документация по VK api Раз, Два

На этом я с вами попрощаюсь. Хорошего кодинга.

Доброго времени суток, дорогие друзья!

1610374526835.png

Это моя первая статья(помидоры придержите), по этому тут будет все кратко и понятно:yesmate:

Сразу нужно понять, что нам понадобится:

  1. Python последней версии.
  2. vk_api
  3. json (для фикса бота)
  4. Ну и наверное, мозги..

Первым делом скачиваешь python
Не забудь нажать на галочку снизу!

1610368262484.png

дальше заходишь в cmd и пишешь:

1610368392652.png

Думаю дальше все понятно.

Перейдем к главному!
Бота мы будем писать с помощью longpoll, по этому трудностей не должно быть.
Подробнее о longpoll можете прочитать тут.

Для начала импортим либы

import vk_api
import requests
import json
import random
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

Дальше делаем авторизацию (Вписываем токен)

vk = vk_api.VkApi(token='Твой токен')
vk._auth_token()
vk.get_api()

Ну это так скажем, ключ авторизации твоей группы.

Так как же его получить?

Заходим в свою группу, нажимаем сюда:

скриншотик

Дальше кликаем сюда:

скриншотик

нажимаем сюда:

скриншотик

Дальше нажимаем на все галочки и «Cоздать»

скришнотик

Теперь надо, чтобы бот брал random id и мог писать в беседу

def get_random_id():
    return random.randint(0, 100000000)

Пишем id группы

Теперь сделаем главный фикс для будущих функций. (json)

longpoll = VkBotLongPoll(vk, group_id)

for event in longpoll.listen():
   if event.type == VkBotEventType.MESSAGE_NEW:
         
            d1 = event.object.message
            s1 = json.dumps(d1)
            d2 = json.loads(s1)

            json_object = d2
            message = json_object['text']

            message = message.split(" ")

            str1 = message[0].split("|")[0]

            str1 = str1.replace("[club", "")
            if group_id == str1:
                message.pop(0)

            message = ' '.join(message).lower()

            id = json_object['peer_id']
            print(message)

А вот и самая интересная часть. Делаем vk.metod с ответами на твои сообщения

Можно сделать ответы на любые слова, веселитесь:D

# if message == 'слово на которое будет отвечать бот'
if message == 'начать' or message == 'помощь':
# Сам метод отправки сообщения.
    vk.method("messages.send", {"peer_id": id, 'random_id':get_random_id(), "message": Тут либо словарь, либо сообщение })
# Метод отправки сообщения с изображением! На месте photo-200206824_457239017 можете поставить свое.        
elif message == 'nigger' or message == 'ниггеры' or message == 'ниггер' or message == 'нигга' or message == 'черный':
    vk.method("messages.send", {"peer_id": id, "message": "Nigga?", "attachment": "photo-200206824_457239017", "random_id": 0})

Пример самого просто словаря:

slovar1 = '''
Привет это супер бот!
Я умею:
сказать привет!
'''

Молодец! За 10 минут ты научился писать бота, а теперь иди и делай 1000 триггеров на все слова!

Надеюсь что было понятно. Если понравится первая часть, оставляйте реакцию и пишите аргументированную критику(Она помогает мне улучшать свой контент)!

В следующих частях мы научимся:

  1. Писать первые функции.
  2. Пофиксим возможные баги.
  3. Научим бота отправлять сообщения в определенный срок.
  4. Сделаем парсер сайтов для бота.
  5. Использовать vk клавиатуру.

Остались вопросы ? Пиши в tg
Пример моего кода:

import vk_api
import requests
import json
import random
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
vk = vk_api.VkApi(token='ala3f4554g464g4ssr3354f434f34ssr3354f434f34ssr3354f434f34ssr3354f434f34')
vk._auth_token()
vk.get_api()

def get_random_id():
    return random.randint(0, 100000000)

bot_help = '''
⚙ Всю актуальную информацию об SuperBot вы можете найти тут:
Ссылочка
'''

creators = '''
Говнокодеры - @d3c0dik(Sergey)

'''
group_id = '1337433'

longpoll = VkBotLongPoll(vk, group_id)

for event in longpoll.listen():
   if event.type == VkBotEventType.MESSAGE_NEW:
            #print(event.object)
            d1 = event.object.message
            s1 = json.dumps(d1)
            d2 = json.loads(s1)

            json_object = d2
            message = json_object['text']

            message = message.split(" ")

            str1 = message[0].split("|")[0]

            str1 = str1.replace("[club", "")
            if group_id == str1:
                message.pop(0)

            message = ' '.join(message).lower()

            id = json_object['peer_id']
            print(message)
            if message == 'начать' or message == 'помощь':
                vk.method("messages.send", {"peer_id": id, 'random_id':get_random_id(), "message":  bot_help })
            elif message == 'баг' or message == 'нашел баг':
                vk.method("messages.send", {"peer_id": id, 'random_id':get_random_id(), "message":  'Привет! Появились какие-то проблемы или же нашел баг'})
            elif message == 'создатель':
                vk.method("messages.send", {"peer_id": id, 'random_id':get_random_id(), "message": creators })

VBot

Для работы бота необходим
Python 3.6+ или PyPy3.5
С версиями ниже бот не работает

Настройка

  1. Перейдите в папку с ботом
  2. Установить зависимости из файла requirements.txt
    Возможные команды для установки:
    pip3 install -r requirements.txt
    python -m pip install -r requirements.txt
    python3.6 -m pip install -r requirements.txt
  3. Запустите бота, чтобы он создал файл settings.py(после чего он выключится)
    Возможные команды для запуска(из консоли, из папки с ботом):
    python3 vbot.py
    python vbot.py
    python3.6 vbot.py
  4. В settings.py замените TOKEN на access_token группы или LOGIN и PASSWORD на логин и пароль аккаунта ВК соответственно. И уберите # перед введёнными данными
    Если ввести и то и другое — бот будет работать как группа, и сможет использовать методы VK API пользователя.
    Можно вводить несколько аккаунтов, но отвечать бот будет со всех без разбора, так что рекомендуется вводить только 1 группу и 1 пользователя максимум!
    Без данных пользователя некоторые плагины могут не работать! Например, !скажи не будет работать!
  5. Там же в settings.py вы можете ввести PROXY в указанном формате, но не гарантированно, что ВК пустит вас без подтверждения телефонного номера с этого PROXY, что бот автоматически не делает.
  6. Укажите данные базы данных PostgreSQL или MySQL в DATABASE_SETTINGS в указанном формате. Создать свою БД можно на вашем сервере или, например, на Heroku
  7. Можете запускать бота, как в п.3. Теперь бот должен работать!
  8. Бота можно бесплатно захостить на Heroku. Гайд, Еще один гайд.
  • Важно: плагины будут загружены из репозитория с плагинами: https://github.com/VKBots/vbot-plugins
  • Параметры при запуске бота из командной строки:
    • -ou — только обновление плагинов
    • -nu — обновление плагинов перед запуском.
  • Примеры:
    • python3.6 vbot.py -nu — обновление плагинов перед запуском бота
    • python vbot.py -ou — только обновление плагинов
  • Чтобы переустановить плагин — удалите его из папки plugins.
  • Некоторые плагины содержат в своей папке settings.ini, где вы можете настраивать эти плагины.

Текущая версия бота: 6.0

Смена префиксов

По умолчанию бот отзывается на префикс: !.
Сменить их можно в settings.py на 32 строке (PREFIXES = ('!', )).

Плагины

  • Приветствие (плагин приветствия)
  • Список плагинов (список загруженных плагинов)
  • Музыка (список музыки из ваших рекомендаций в ВК)
  • Случайное число (случайное число в разных диапазонах)
  • Случайные мемы (берутся из паблика, указанного в плагине memes.py)
  • Ближайшие дни рождения в группе (берутся из паблика, указанного в плагине birthday.py)
  • Курс валют (отображение основных курсов валют)
  • Список команд (список всех команд бота с описанием, как их использовать)
  • Шар восьмерка (решает за вас)
  • Время (показывает текущую дату и время)
  • Статистика бота (показывает данные о счетчиках аккаунта)
  • Послать сообщение (посылает сообщение другому пользователю, в том числе анонимное)
  • Блокнот (может запоминать и вспоминать строки)
  • Рассказать шутку (рассказывает случайный анекдот)
  • Контроль бота (только для админов)
  • Поиск видео (Ищет видео в ВК по запросу пользователя)
  • Скриншот сайта (делает скриншот сайта)
  • Погода (показывает погоду в Москве или указанном городе)
  • Перечеркиватель (перечеркивает строку)
  • Автоматическое добавление друзей (принимает входящие заявки в друзья раз в 10 секунд)
  • Новости (показывает последние новости из Yandex)
  • Объявление (не рассылка)(позволяет администраторам оставлять сообщение, которое могут прочитать только определённые люди)
  • Переписка с ботом (пользователи могут пообщаться с ботом от ChatterBot! Работает только при USE_CHATTER = False)
  • Рассылка сообщений (рассылает сообщение пользователям)

Общение с ботом (элементы чат-бот)

VBot так-же позволяет развлекать пользователей беседами.
Инструкции по написанию логики бесед вы можете найти в chat/chat.py, а так-же в настройках.
Вы можете сами описание поведение бота, или воспользоваться ChatterBot.
Настроить ChatterBot вы можете в chat/chatter.py внизу(класс ChatterBot).

Миграции БД

Миграции производятся с помощью файла migrate.py в папке scripts

Примечания

  • Для того, чтобы узнать ID пользователя или группы, используйте https://vk.com/linkapp
  • Чтобы очистить списки администраторов, белый лист, чёрный список, используйте программу clear_lists.py в папке scripts

Создание плагинов

В папке plugins есть пример плагина в файле example.py, отвечающий на команду !тест.
В нём подробно расписана структура плагина. Для примера работы plugin.data или plugin.temp_data
вы можете посмотреть memo.py, weather.py. Для примера цикличных задач friends.py.
Там есть и другие плагины, код которых можно просмотреть для понимания того, что можно сделать с помощью бота.

Каждый плагин должен иметь экземпляр класса Plugin (из plugin_system) под именем (обязательно) plugin.
Все команды, на которые подписывается плагин, должны быть в нижнем регистре.

Вот пример простого плагина:

# Импортируем класс Plugin
from plugin_system import Plugin
# Создаём объект класса, через него мы будем "подписываться" на команды
plugin = Plugin('Плагин для еды')

# Использование async и await обязательно, т.к. бот асинхронный
@plugin.on_command('еда')
async def test(msg, args):
    # Отвечаем пользователю
    await msg.answer('Где еда?!')

Для хранения данных используется peewee-async.
После импорта всего из database(именно таким образом)

Вы можете использовать db, который является экземпляром peewee_async.Manager.
В database.py хранятся основные модели бд.
Каждый плагин может создавать свои модели после импорта database с помощью, например, такого объявления:

class NameForYourModel(BaseModel):
    text = peewee.TextField(null=True)

NameForYourModel.create_table(True)

Помле этого можно рассматривать NameForYourModel как обычную модель.


Плагины размещаются в папке plugins. Если два плагина имеют одинаковые команды — они обрабатываются в обоих плагинах.
Плагины могут работать со всеми методами API ВКонтакте.

Помощь и вклад

Проект открыт, любой может отправить свой Pull request на рассмотрение! Мы обязательно изучим, обсудим и, возможно, примем изменения.

Связь с нами

Разработчиков этого бота можно найти в вк:

  • https://vk.com/michaelkrukov

Статьи / Python

Это новый вид статьи, в котором мы не будем говорить про PHP, многим python превосходит php, а для начинающих он покажется проще. Данная статья будет содержать в себе следующие шаги:

1. Установка Python 3.7.3 на Windows.
2. Установка PyCharm и его настройка.
3. Создание проекта и установка библиотеки VK_API
4. Запуск скрипта используя LongPoll VK.
5. Разница между CallBack API и LongPoll

1. Установка Python 3.7.3 на Windows.

Установка не занимает много времени и умений. Переходим на официальный сайт

https://www.python.org/downloads/

и скачиваем установщик себе на ПК.

Запускаем установщик, обязательно поставьте галочку возле надписи Add Python 3.7 to PATH, так у вас не возникнет проблем при работе с командной строкой Windows.

После установки запускаем командую строку:

И пишем команду:

pip


Если Вы сделали все правильно, то увидите список команд и опций

На этом установка Python успешно завершена. Переходим к установке IDE PyCharm

2. Установка PyCharm и его настройка.

Переходим на сайт 

jetbrains.com/pycharm

и скачиваем среду PyCharm Community, она бесплатная.

После чего устаналвиваем и запускаем PyCharm


Забегая вперед, у меня по умолчанию в настройках программы стоял Python 2.7

Нам нужна последняя версия, открываем File -> Settings… -> Project interpreter и из выпадающего меню выбираем последнюю версию, или добавляем ее туда нажав на Show All…

Теперь можно создавать новый проект.

3. Создание проекта и установка библиотеки VK_API

В Pycharm выбираем: File -> New Project и создаем новый проект, выбрав необходимые настройки:

Теперь создаем новый файл, назовем его new.py, так как Python использует расширение .py (английскими буквами, не путайте) расширение указывать не обязательно.

Пишем наш первый самый простой код:

print("Привет :)")

 

И нажав правой кнопкой мыши по файлу, выбираем: Run ‘new’

Все работает. Теперь нам нужно установить библиотеку vk_api, для этого открываем терминал прямо в PyCharm и пишем команду:

pip install vk_api

Installing collected packages: urllib3, chardet, idna, certifi, requests, enum34, six, vk-api
  Running setup.py install for vk-api … done
Successfully installed certifi-2019.6.16 chardet-3.0.4 enum34-1.1.6 idna-2.8 requests-2.22.0 six-1.12.0 urllib3-1.25.3 vk-api-11.4.0

Если в конце видите такой текст, библиотека успешно установлена, можно импортировать ее в проект и писать первый код:

# -*- coding: utf-8 -*-
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType


def main():
    """ Пример использования bots longpoll
        https://vk.com/dev/bots_longpoll
    """

    vk_session = vk_api.VkApi(token='your_group_token')

    longpoll = VkBotLongPoll(vk_session, 'your_group_id')

    for event in longpoll.listen():

        if event.type == VkBotEventType.MESSAGE_NEW:
            print('Новое сообщение:')

            print('Для меня от: ', end='')

            print(event.obj.from_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_REPLY:
            print('Новое сообщение:')

            print('От меня для: ', end='')

            print(event.obj.peer_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_TYPING_STATE:
            print('Печатает ', end='')

            print(event.obj.from_id, end=' ')

            print('для ', end='')

            print(event.obj.to_id)
            print()

        elif event.type == VkBotEventType.GROUP_JOIN:
            print(event.obj.user_id, end=' ')

            print('Вступил в группу!')
            print()

        elif event.type == VkBotEventType.GROUP_LEAVE:
            print(event.obj.user_id, end=' ')

            print('Покинул группу!')
            print()

        else:
            print(event.type)
            print()


if __name__ == '__main__':
    main()

Это код из примера, благодаря нему мы убедимся что сделали все правильно. Вставить его нужно в файл new.py предварительно удалив все оттуда, что мы написали ранее. 

4. Запуск скрипта используя LongPoll VK.

Для начала настроим наше сообщество.
Создаем ключ

Копируем ключ и вставляем его в наш скрипт:
Вместо ‘your_group_token‘ указываем ключ сообщества
Вместо ‘your_group_id‘ указываем ID нашего сообщества

Теперь переходим во вкладку Long Poll APIи включаем его

Далее, обязательно включаем тип событий, это частая ошибка при создании ботов, забыв включить события, бот не будет работать! Выбираем все что есть.

Вернемся к нашему коду. Давайте запустим наш скрипт и проверим как он будем обрабатывать события, запускаем скрипт:

Давайте покинем сообщество и снова вступим в него:

В консоли мы сразу увидели последние события. Немного добавим строк в наш код, и научим отвечать наше сообщество сообщением в ЛС на одно из событий:

Импортируем:

from vk_api.utils import get_random_id

После:

longpoll = VkBotLongPoll(vk_session, '176771278')

Добавляем:

vk = vk_session.get_api()

 

И отправляем сообщение самому пользователю:

vk.messages.send(
    user_id=event.obj.from_id,

    random_id=get_random_id(),
    message=("Новое сообщение - ", event.obj.text)
)
print('ok')

Полный код:

# -*- coding: utf-8 -*-
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
from vk_api.utils import get_random_id

def main():
    """ Пример использования bots longpoll
        https://vk.com/dev/bots_longpoll
    """

    vk_session = vk_api.VkApi(token='Ттут ваш токен')

    longpoll = VkBotLongPoll(vk_session, 'Ид сообщества')
    vk = vk_session.get_api()
    for event in longpoll.listen():

        if event.type == VkBotEventType.MESSAGE_NEW:
            print('Новое сообщение:')

            print('Для меня от: ', end='')

            print(event.obj.from_id)

            print('Текст:', event.obj.text)
            print()

            vk.messages.send(
                user_id=event.obj.from_id,

                random_id=get_random_id(),
                message=("Новое сообщение - " + event.obj.text)
            )
            print('ok')

        elif event.type == VkBotEventType.MESSAGE_REPLY:
            print('Новое сообщение:')

            print('От меня для: ', end='')

            print(event.obj.peer_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_TYPING_STATE:
            print('Печатает ', end='')

            print(event.obj.from_id, end=' ')

            print('для ', end='')

            print(event.obj.to_id)
            print()

        elif event.type == VkBotEventType.GROUP_JOIN:
            print(event.obj.user_id, end=' ')

            print('Вступил в группу!')
            print()

        elif event.type == VkBotEventType.GROUP_LEAVE:
            print(event.obj.user_id, end=' ')

            print('Покинул группу!')
            print()

        else:
            print(event.type)
            print()


if __name__ == '__main__':
    main()

напишем любое сообщение нашему боту и получим ответ:

Как узнать названия других событий? Они будут выводится в консоли, так как в коде используется:

else:
    print(event.type)
    print()


Тут мы получили 2 события:

VkBotEventType.WALL_POST_NEW — Новый пост
VkBotEventType.GROUP_OFFICERS_EDIT — Выдача админ прав в самой группе

Документация и больше примеров можно посмотреть на 

GitHub

. Если Вам интересен этот язык и вы хотите видеть больше статей по Python, пишите в комментарии об этом!

5. Разница между CallBack API и LongPoll

И все же в чем разница между CallBack API и Long Poll API? А разница есть и она большая.
Когда Вы используете CallBack API, ВК сам отправляет Вам происходящее событие на сервер, нам остается только получить его и обработать, у Long Poll API все наоборот, ВК ничего не отправляет, а хранит все события у себя на серверах, Вам нужно самому их получать и обрабатывать, Long Poll API подходит для высоко нагруженных проектов, в идеале советуем использовать оба типа получения событий. На этом наша статья подходит к концу, в следующий раз мы напишем как запустить Long Poll используя PHP, всем хорошего кодинга и настроения 

kissing_heart

Разработка ботов на заказ, любой сложности, обращаться:

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

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

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

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

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

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

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

События:

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Код:

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Написал(а):

robot

4 лет,4 месяцев назад

https://habr.com/post/427691/

  • Python

Создание основы для работы бота будет состоять из следующих этапов:

  1. Создание бота в ВК
  2. Генерирование API- ключа
  3. Создание программы бота через LongPoolVK

Для кого эта статья?

Статья рассчитана для начинающих программистов. Метод работы программы очень прост и любой, кто умеет разбираться в синтаксисе Питона и немного знающий ООП сможет его реализовать для своих нужд. Но в принципе даже не зная никаких принципов ООП, думаю можно научиться добавлять простые функции или хотя бы в крайнем случае использовать готовые исходники из 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', {'user_id': user_id, 'message': message})

# 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 пользователя ВК <user_id>, которому оно отправит сообщение и собственно само сообщение .

def write_msg(user_id, message):
    vk.method('messages.send', {'user_id': user_id, 'message': message})

Авторизовавшись как сообщество и настроив longpool:

# API-ключ созданный ранее
token = "6a9c267cd469388709a9e9acaddbe0aa81a0abbf12239b3e597a31729ffbddb9c88e80a443554c918b8f7"

# Авторизуемся как сообщество
vk = vk_api.VkApi(token=token)

# Работа с сообщениями
longpoll = VkLongPoll(vk)
Войдем в основной цикл:

# Основной цикл
for event in longpoll.listen():

В нем мы циклически будем проверять на наличие event-ов. А получить тип event-а сможем с помощью event.type.

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

Итак, мы создали очень простого бота в ВК с такой же простой реализацией. А логику бота можно программировать как душе угодно.

Листинг кода в GH

Теперь приступим к более реальному программированию

Создадим класс 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 == "<":
                not_skip = False
            else:
                result += i
        else:
            if i == ">":
                not_skip = True
    
    return result

Измените параметр _get_weather на нужный город, в последствии этот метод можно будет вызывать с указанием города, а по умолчанию будет ваше указанное значение.

С помощью этих методов мы сможем получить время и погоду. Эти методы вырезаны из моего основного проекта бота. Следует организовать их в отдельных пакетах и классах, применяя наследование. Но ради примера работы, я решил вместить все это в один класс бота, что конечно плохо.

Создадим основной метод new_message, который будет обрабатывать сообщение пользователя и возвращать ответ:

def new_message(self, message):

    # Привет
    if message.upper() == self._COMMANDS[0]:
        return f"Привет-привет, {self._USERNAME}!"
    
    # Погода
    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"Пока-пока, {self._USERNAME}!"
    
    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: {event.user_id}', end='')
            
            bot = VkBot(event.user_id)
            write_msg(event.user_id, bot.new_message(event.text))
            
            print('Text: ', event.text)

То есть теперь мы будем передавать полученное сообщение объекту бота, который вернет нам нужный ответ.

Это усложнение программы просто необходимо, если вы хотите дальше улучшить функционал бота:

Создайте отдельные пакеты и классы для каждой функции _get_time и _get_weather. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.

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

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

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

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

Бот из статьи

Основной проект бота (улучшенный) на GH

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

Понравилась статья? Поделить с друзьями:
  • Как написать бота для ватсап
  • Как написать бота для вайбер
  • Как написать бота для браузера
  • Как написать бота для биржи криптовалют
  • Как написать бота для бинарных опционов