Быстрый старт

На этой странице показано небольшое вступление к библиотеке. Предпологается, что она у вас уже установлена. Если нет, посмотрите Создание Бота.

Простейший бот

Давайте сделаем бота, который отвечает на конкретное сообщение, и посмотрим, как все работает.

Выглядит он примерно так:

import vk_botting

bot = vk_botting.Bot('your-prefix-here')


@bot.listen()
async def on_ready():
    print(f'Logged in as {bot.group.name}')


@bot.listen()
async def on_message_new(message):
    if message.text.startswith('Hello'):
        await message.send('Hello!')


bot.run('your-token-here')

Назовем файл example_bot.py.

Тут много чего происходит, так что разложим все по полкам.

  1. Первая строка просто импортирует библиотеку. Если при этом вылетает ModuleNotFoundError или ImportError, тогда вам стоит посмотреть раздел Создание Бота.

  2. Дальше, мы создаем экземпляр класса Bot. Этот бот и связывает нас с ВК.

  3. Потом мы используем Bot.listen(), чтобы ловить события. В этой библиотеке куча событий. Эта библиотека асинхронная, так что все происходит в стиле «обратного вызова».

    Функция обратного вызова, по сути, это функция, которая вызывается, когда что-то происходит. В нашем случае, событие on_ready() вызывается когда бот закончил входить и настраивать все, а on_message_new() - когда бот получает сообщение.

  4. После мы проверяем, начинается ли Message.text с '$hello'. Если да, то мы отправляем ответное 'Hello!'.

  5. Наконец, мы запускаем бота с ключом доступа. Если у вас сложности с созданием бота или получением ключа доступа, посмотрите Создание Бота.

Теперь, когда мы сделали бота, его надо запустить. Но все просто. Так как это просто скрипт на Python, его можно запустить напрямую.

Для Windows:

$ py -3 example_bot.py

Для других систем:

$ python3 example_bot.py

А теперь можете попробовать нового бота.

Использование команд

vk-botting - библиотека с уймой возможностей для создания команд.

Посмотрите на этот пример:

import vk_botting

bot = vk_botting.Bot('your-prefix-here')


@bot.listen()
async def on_ready():
    print(f'Logged in as {bot.group.name}')


@bot.listen()
async def on_message_new(message):
    if message.text.startswith('Hello'):
        await message.send('Hello!')


@bot.command(name='greet')
async def greet(context):
    await context.reply('Greetings!')


bot.run('your-token-here')

Как вы, наверное, заметили, это просто слегка модифицированный предыдущий бот.

Вся разница заключается в части, начинающейся с bot.command()

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

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

Предположим, что вы выбрали '!' как префикс. Он может быть любым, но об этом позже.

Тогда теперь, когда пользователь отправляет !greet боту, тот пришлет Greetings! в ответ

context тут - экземпляр класса Context , который автоматически передается как первый аргумент к каждой команде, так что будьте на чеку.

Context содержит всю информацию, необходимую для обработки сообщения. Больше можно найти в отделенном ему разделе в описании классов

Команды могут принимать аргументы, как показано тут:

@bot.command(name='greet')
async def greet(context, name):
    await context.reply(f'Greetings, {name}!')

Теперь пользователь может вызывать команду как !greet Santa, а бот ответит Greetings, Santa. Принимаемые аргументы позиционны и разделяются пробелами, так что если пользователь вызовет !greet Santa Claus бот все равно ответит Greetings, Santa.

Если необходимо получить в один аргумент весь текст после определенного аргумента (или даже весь вообще), то можно сделать так:

@bot.command(name='greet')
async def greet(context, *, name):
    await context.reply(f'Greetings, {name}!')

Теперь бот запишет весь полученный текст в name