Быстрый старт¶
Установка¶
Для максимальной производительности:
Включает msgspec/orjson (быстрый JSON), aiodns (асинхронный DNS), Brotli (сжатие).
Получение токена¶
Токен сообщества (рекомендуется)¶
- Создайте сообщество или откройте существующее
- Настройки → Работа с API → Создать ключ
- Выберите нужные права доступа (как минимум: сообщения сообщества)
- В настройках Long Poll API включите Long Poll и выберите версию 5.199+
- Включите нужные типы событий (как минимум: входящие сообщения)
Токен пользователя¶
Используйте VK Admin или другой способ авторизации.
Переменные окружения
Токен можно передавать через переменные окружения. Если токен начинается с $, VKFlow автоматически подставит значение:
Первый бот¶
import vkflow as vf
app = vf.App()
@app.command("ping")
async def ping():
"""Простая команда -отвечает Pong!"""
return "Pong!"
@app.command("привет")
async def greet(user: vf.User):
"""Приветствие с упоминанием пользователя"""
return f"Привет, {user:@[first_name]}!"
app.run("YOUR_TOKEN")
Замените "YOUR_TOKEN" на свой токен и запустите скрипт. Бот начнёт слушать сообщения через Long Poll.
Как это работает¶
App()- создаёт приложение (наследникPackage)@app.command("ping")- регистрирует команду с именем "ping"return "Pong!"- если команда возвращает строку, она автоматически отправляется как ответuser: vf.User- аргумент автоматически парсится из упоминания/ссылки в сообщенииapp.run("YOUR_TOKEN")- определяет тип токена, создаётBotи запускает Long Poll
Режим отладки¶
В режиме отладки:
- Включается подробное логирование (уровень DEBUG)
- При ошибках парсинга аргументов бот отвечает пользователю описанием проблемы
Строгий режим¶
В строгом режиме:
- Ошибки парсинга аргументов выбрасывают
ArgumentParsingError(вместо молчаливого пропуска) - Лишний текст после аргументов считается ошибкой
- Команда без аргументов отклоняет сообщения с аргументами
Мульти-бот¶
Можно запустить несколько ботов в одном приложении:
app = vf.App()
@app.command("ping")
async def ping():
return "Pong!"
# Все боты разделяют одни и те же команды
app.run("TOKEN_1", "TOKEN_2", "TOKEN_3")
Также можно передать готовый экземпляр API:
Lifecycle: startup и shutdown¶
import vkflow as vf
class MyApp(vf.App):
async def startup(self, bot: vf.Bot):
"""Вызывается при запуске каждого бота"""
print(f"Bot started: {bot}")
async def shutdown(self, bot: vf.Bot):
"""Вызывается при остановке каждого бота"""
print(f"Bot stopped: {bot}")
app = MyApp()
Или через декораторы:
app = vf.App()
@app.on_startup()
async def on_startup(bot):
print(f"Bot started: {bot}")
@app.on_shutdown()
async def on_shutdown(bot):
print(f"Bot stopped: {bot}")
Ожидание готовности¶
# Выполнить код, когда все боты готовы
async def do_something():
await app.wait_until_ready()
print("Все боты готовы!")
app.run_when_ready(do_something)
Что дальше?¶
- Команды - подробнее о создании команд, группах, ошибках
- Аргументы - type hints и парсинг аргументов
- Клавиатуры - интерактивный UI
- FSM - многошаговые диалоги
- Cog-модули - организация кода
- Проверки - контроль доступа, cooldown