Asynchronous VK API framework for building bots
Project description
aionvk
📦 Установка
pip install aionvk
quickstart Быстрый старт: Эхо-бот за 1 минуту
Этот простой бот будет отвечать на любое текстовое сообщение, отправляя его обратно пользователю.
# echo_bot.py
import asyncio
import os
from aiohttp import web
from dotenv import load_dotenv
from aionvk import Bot, Dispatcher, F, Router
from aionvk.types import Message
load_dotenv()
# Замените на ваши данные в .env файле
VK_TOKEN = os.getenv("VK_BOT_TOKEN")
VK_SECRET = os.getenv("VK_CALLBACK_SECRET")
VK_CONFIRMATION_TOKEN = os.getenv("VK_CALLBACK_CONFIRMATION_TOKEN")
# 1. Инициализация компонентов
router = Router()
bot = Bot(token=VK_TOKEN)
dp = Dispatcher()
# 2. Создание обработчика
@router.message(F.text) # Сработает на любое сообщение с текстом
async def echo_handler(event: Message, bot: Bot):
await bot.send_message(
peer_id=event.peer_id,
text=f"Вы написали: {event.text}"
)
# 3. Настройка веб-сервера для Callback API
async def handle_vk_callback(request: web.Request):
data = await request.json()
if data.get("secret") != VK_SECRET: return web.Response(status=403)
if data.get("type") == "confirmation": return web.Response(text=VK_CONFIRMATION_TOKEN)
# Передаем событие и объект бота в диспетчер
asyncio.create_task(dp.feed_raw_event(data, bot=bot))
return web.Response(text="ok")
async def main():
dp.include_router(router) # Регистрируем наши обработчики
app = web.Application()
app.router.add_post("/callback", handle_vk_callback)
# Не забудьте закрыть сессию бота при выходе
app.on_shutdown.append(lambda _: bot.close())
await web.run_app(app, host='localhost', port=8080)
if __name__ == "__main__":
asyncio.run(main())
✨ Примеры использования
Клавиатуры и Callback-кнопки
aionvk позволяет легко создавать inline-клавиатуры.
from aionvk import KeyboardBuilder, Button, F
from aionvk.types import Message, Callback
router = Router()
@router.message(F.text.lower() == "/start")
async def start_with_keyboard(event: Message, bot: Bot):
kb = KeyboardBuilder(inline=True)
kb.add(Button.callback("Нажми меня!", payload={"cmd": "button_pressed"}))
await bot.send_message(
peer_id=event.peer_id,
text="Это кнопка!",
keyboard=kb.build()
)
@router.callback(F.payload["cmd"] == "button_pressed")
async def button_handler(event: Callback, bot: Bot):
# Убираем "часики" и показываем уведомление
await bot.show_snackbar(event, text="Кнопка была нажата!")
Машина Состояний (FSM)
Создавайте сложные диалоги с помощью StatesGroup и FSMContext.
from aionvk.bot.fsm import FSMContext, State, StatesGroup
class Registration(StatesGroup):
waiting_for_name = State()
waiting_for_age = State()
@router.message(F.text.lower() == "/reg")
async def start_registration(event: Message, state: FSMContext, bot: Bot):
await state.set_state(Registration.waiting_for_name)
await bot.send_message(event.peer_id, "Введите ваше имя:")
@router.message(state=Registration.waiting_for_name)
async def name_entered(event: Message, state: FSMContext, bot: Bot):
await state.update_data(name=event.text)
await state.set_state(Registration.waiting_for_age)
await bot.send_message(event.peer_id, "Отлично! Теперь введите ваш возраст:")
@router.message(state=Registration.waiting_for_age)
async def age_entered(event: Message, state: FSMContext, bot: Bot):
if not event.text.isdigit():
return await bot.send_message(event.peer_id, "Возраст должен быть числом!")
user_data = await state.get_data()
name = user_data.get("name")
age = event.text
await bot.send_message(event.peer_id, f"Регистрация завершена!\nИмя: {name}, Возраст: {age}")
await state.clear()
🗺️ Дальнейшие планы
- Тестирование: Покрытие кода юнит-тестами для обеспечения стабильности.
- Расширение API: Добавление поддержки других типов событий, загрузки фото и т.д.
- Документация: Создание полноценной документации по всем компонентам.
🤝 Участие в разработке
Проект находится на ранней стадии. Любые предложения, сообщения об ошибках (issues) и pull-реквесты приветствуются!
📜 Лицензия
Проект распространяется под лицензией MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aionvk-0.2.3.tar.gz.
File metadata
- Download URL: aionvk-0.2.3.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.11.9 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df2c61af8afcd293f36f4be772327c780d182e43b412ad845f72726756d3cd03
|
|
| MD5 |
403186d2da19be8288a6ac7cbacdfc13
|
|
| BLAKE2b-256 |
9060b67388545724bf40e55f55674a44f1cd0194731ac3aabad90aa1be5e496b
|
File details
Details for the file aionvk-0.2.3-py3-none-any.whl.
File metadata
- Download URL: aionvk-0.2.3-py3-none-any.whl
- Upload date:
- Size: 22.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.11.9 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0cbb8ea345b467b5e1cab0abf98d3a163b25abfef8449bce8632ad529d93a7a
|
|
| MD5 |
ee6b40a8be708fd289e9dedb4bca2875
|
|
| BLAKE2b-256 |
24b3b2c11f1a902675634ebc40fc7f5e012ecf056262b90511a5d98aed78e905
|