NovCord Bot API

Пишите ботов для NovCord на Python или на чистом HTTP. Сообщения, файлы, inline-кнопки, команды. Боты хостятся вами — скрипт работает на вашем ПК или сервере.

pip install novcord-bot

Начало

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

  • Base URL: https://novcord.online/bot/api
  • Формат ответов: { "ok": true, "result": ... } при успехе, { "ok": false, "error_code": int, "description": str } при ошибке.
  • v1: только личные сообщения (DM).

Создать бота и получить токен: в приложении NovCord → Настройки → Мои боты → Создать бота. Токен (формат botId:secret) — это пароль бота, не публикуйте его.

Авторизация

Токен передаётся в заголовке каждого запроса:

Authorization: Bearer <ТОКЕН>

Альтернатива — заголовок X-Bot-Token: <ТОКЕН>.

Что такое chat_id

В методах отправки chat_id — это id пользователя (поле from.id из апдейта), а не id диалога (chat.id).

Самый простой способ узнать chat_id: пользователь пишет боту в ЛС, бот ловит апдейт через getUpdates и берёт from.id — это и есть chat_id для ответа.

Методы

GETgetMe

Информация о боте.

curl -s -H "Authorization: Bearer ТОКЕН" \
  https://novcord.online/bot/api/getMe

POSTsendMessage

Отправить текст. Параметры: chat_id (обяз.), text (обяз.), reply_markup, reply_to_message_id.

curl -s -X POST https://novcord.online/bot/api/sendMessage \
  -H "Authorization: Bearer ТОКЕН" -H "Content-Type: application/json" \
  -d '{"chat_id":"0be9c372","text":"Привет!"}'
await bot.send_message("0be9c372", "Привет!")

POSTsendPhoto / sendDocument

Отправить картинку / файл. Либо multipart-файл (file), либо ссылка (file_url). Доп. параметры: caption, reply_markup.

# файлом
curl -s -X POST https://novcord.online/bot/api/sendPhoto \
  -H "Authorization: Bearer ТОКЕН" \
  -F "chat_id=0be9c372" -F "caption=Котик" -F "[email protected]"
await bot.send_photo("0be9c372", photo="cat.jpg", caption="Котик")
await bot.send_document("0be9c372", document="report.pdf")

GETgetUpdates

Получить новые апдейты (long-polling). Параметры: offset (вернуть с update_id ≥ offset и подтвердить меньшие), limit (≤100), timeout (сек, ≤50).

Храните offset = последний update_id + 1. Передавая его, вы подтверждаете обработанные апдейты (они удаляются) и получаете только новые.
curl -s -H "Authorization: Bearer ТОКЕН" \
  "https://novcord.online/bot/api/getUpdates?offset=0&timeout=25"

POSTeditMessageText

Изменить текст (и клавиатуру) своего сообщения. Параметры: chat_id, message_id, text, reply_markup.

await bot.edit_message_text("0be9c372", "dmsg_...", "Новый текст")

POSTdeleteMessage

Удалить своё сообщение. Параметры: chat_id, message_id.

await bot.delete_message("0be9c372", "dmsg_...")

POSTanswerCallbackQuery

Подтвердить нажатие inline-кнопки. Параметры: callback_query_id, text.

В v1 это просто подтверждение приёма. Чтобы отреагировать на нажатие — отправьте новое сообщение или измените текущее.

POSTsetMyCommands GETgetMyCommands

Задать / получить список команд бота.

await bot.set_my_commands([("start", "Запуск")])

Объект Update

getUpdates возвращает массив. У каждого элемента есть update_id и одно из полей: message или callback_query.

{
  "update_id": 5,
  "message": {
    "message_id": "dmsg_...",
    "chat": { "id": "dm_...", "type": "private" },
    "from": { "id": "userId", "is_bot": false, "username": "...", "first_name": "..." },
    "text": "текст", "type": "text",
    "file_url": null, "file_name": null, "reply_to_message_id": null
  }
}
{
  "update_id": 6,
  "callback_query": {
    "id": "6",
    "from": { "id": "userId", "username": "...", "first_name": "..." },
    "message": { "message_id": "dmsg_...", "chat": { "id": "dm_...", "type": "private" } },
    "data": "callback_data_кнопки"
  }
}

Inline-кнопки (reply_markup)

Объект с массивом рядов кнопок. Кнопка с callback_data присылает боту callback_query; кнопка с url открывает ссылку.

{
  "inline_keyboard": [
    [ {"text": "Вариант A", "callback_data": "a"},
      {"text": "Вариант B", "callback_data": "b"} ],
    [ {"text": "Открыть сайт", "url": "https://novcord.online"} ]
  ]
}

Первый бот за 5 минут

pip install novcord-bot
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("Привет! Я бот на novcord 🤖", 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(f"Ты написал: {message.text}")

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

asyncio.run(main())

Запустите скрипт (python bot.py), затем в приложении найдите бота в поиске → Написать → отправьте /start. Бот ответит с кнопками, на текст будет эхо.

Лимиты

  • v1 — только личные сообщения (DM).
  • До 20 ботов на пользователя.
  • Загрузка файлов ботом — до 50 МБ.
  • getUpdates держит соединение до 50 секунд.
  • Бот «онлайн», только пока запущен ваш скрипт.

Скачать эту документацию в Markdown · Библиотека novcord-bot на PyPI