Начало
Боты хостятся вами: запускаете скрипт на своём ПК или сервере — бот работает, пока скрипт запущен. Сервер 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.
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