Skip to main content

Асинхронная библиотека для NovCord Bot API

Project description

novcord — Python-библиотека для NovCord Bot API

Асинхронная библиотека для написания ботов NovCord. API: Dispatcher/Router, декораторы-хендлеры, magic-filter F, InlineKeyboardBuilder, лёгкий FSM.

Боты хостятся тобой: запускаешь скрипт на своём ПК/сервере — бот работает, пока скрипт запущен. Сервер NovCord только отдаёт Bot API.

Установка

pip install novcord-bot

Ставится как novcord-bot, а в коде импортируется как import novcord (дефис в импортах Python недопустим). Зависимость — только aiohttp.

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

import asyncio
from novcord import Bot, Dispatcher, Router, F
from novcord.filters import Command
from novcord.keyboard import InlineKeyboardBuilder

dp = Dispatcher()
router = Router()
dp.include_router(router)

@router.message(Command("start"))
async def start(message):
    kb = InlineKeyboardBuilder()
    kb.button(text="Кнопка", callback_data="hi")
    kb.button(text="Сайт", url="https://novcord.online")
    await message.answer("Привет!", reply_markup=kb.as_markup())

@router.callback_query(F.data == "hi")
async def hi(query):
    await query.answer("Нажато!")
    await query.message.answer("Спасибо за нажатие 👍")

@router.message(F.text)
async def echo(message):
    await message.answer(message.text)

async def main():
    bot = Bot("ТВОЙ_ТОКЕН")   # токен из Настройки → Мои боты
    await dp.start_polling(bot)

asyncio.run(main())

Токен берётся в приложении: Настройки → Мои боты → создать бота → скопировать токен.

Локальный сервер

bot = Bot("ТОКЕН", base_url="http://localhost:3008")

Фильтры

Запись Что значит
Command("start") сообщение /start/start аргументы)
F.text у сообщения непустой текст
F.text.startswith("/") текст начинается с /
F.text.contains("foo") текст содержит foo
F.data == "a" у callback data == "a"
F.data.in_({"a", "b"}) data в наборе
MyStates.waiting текущее состояние FSM

Несколько фильтров в одном декораторе = И (все должны пройти):

@router.message(Command("admin"), F.text.contains("secret"))
async def h(message): ...

Inline-клавиатура

kb = InlineKeyboardBuilder()
kb.button(text="A", callback_data="a")
kb.button(text="B", callback_data="b")
kb.button(text="Сайт", url="https://novcord.online")
kb.adjust(2, 1)          # 2 кнопки в первом ряду, 1 во втором
markup = kb.as_markup()

FSM (пошаговые диалоги)

from novcord.fsm import State, StatesGroup

class Form(StatesGroup):
    name = State()
    age = State()

@router.message(Command("form"))
async def start(message, state):       # state инжектится автоматически
    await state.set_state(Form.name)
    await message.answer("Имя?")

@router.message(Form.name)
async def got_name(message, state):
    await state.update_data(name=message.text)
    await state.set_state(Form.age)
    await message.answer("Возраст?")

@router.message(Form.age)
async def got_age(message, state):
    data = await state.update_data(age=message.text)
    await state.clear()
    await message.answer(f"{data['name']}, {data['age']}")

Хендлер может принимать state (FSMContext) и/или bot — они подставляются по имени параметра.

Методы Bot

Метод Описание
get_me() инфо о боте
send_message(chat_id, text, reply_markup=, reply_to_message_id=) текст
send_photo(chat_id, photo=путь | file_url=, caption=, reply_markup=) фото
send_document(chat_id, document=путь | file_url=, caption=) файл
edit_message_text(chat_id, message_id, text, reply_markup=) редактировать
delete_message(chat_id, message_id) удалить
answer_callback_query(id, text=, show_alert=) ответ на нажатие
set_my_commands([("start","Запуск")]) список команд
get_my_commands() получить команды

Про chat_id: это id ПОЛЬЗОВАТЕЛЯ (message.from_user.id), не id диалога. Шорткаты message.answer() / callback.message.answer() подставляют его сами — вручную думать об этом не нужно.

Шорткаты

  • message.answer(text) — ответить в тот же чат
  • message.reply(text) — ответить с цитированием
  • message.answer_photo(...), message.answer_document(...)
  • message.edit_text(...), message.delete()
  • callback.answer(text) — подтвердить нажатие
  • callback.message — сообщение, под которым была кнопка

Примеры

  • examples/echo_bot.py — эхо + inline-кнопки
  • examples/fsm_bot.py — пошаговая анкета (FSM)

Ограничения v1

  • Только личные сообщения (DM). Серверные каналы — позже.
  • answer_callback_query подтверждает нажатие (всплывающий тост в UI — на будущее); отвечай на нажатия обычным message.answer / edit_text.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

novcord_bot-1.0.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

novcord_bot-1.0-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file novcord_bot-1.0.tar.gz.

File metadata

  • Download URL: novcord_bot-1.0.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for novcord_bot-1.0.tar.gz
Algorithm Hash digest
SHA256 6bfe7cdf06baa6f6c45870eaea6d37b676ea458abe5a8cd13a32f2257af1ce33
MD5 c9a3fa18f66b94423a640099dd2f770d
BLAKE2b-256 abad6414cd252418aa57207022239cf5779c55a386e494320e0cdfd5985c4cfd

See more details on using hashes here.

File details

Details for the file novcord_bot-1.0-py3-none-any.whl.

File metadata

  • Download URL: novcord_bot-1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for novcord_bot-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5678663bc6e4b8f4caa2e1dd8bc865af85a4b2d42e7b74398792e63659352f2a
MD5 ad3bd70db9b78dab941e93b84a0b6935
BLAKE2b-256 8ee73958cf13503957282bbf99799364a748a71b33d40296988a2aa2bcad8d82

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page