StaticGramBot API

Подключение библиотек

Любая библиотека для Telegram Bot API, которая позволяет задать адрес сервера, работает со StaticGram. Меняется только base URL: https://api.staticgram.top.

aiogram 3

Адрес задаётся через TelegramAPIServer в сессии бота. Метод from_base сам построит пути для методов и для скачивания файлов.

bot.py
import asyncio
from aiogram import Bot, Dispatcher, F
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer
from aiogram.types import Message

TOKEN = "1234567890:AAH..."

session = AiohttpSession(api=TelegramAPIServer.from_base("https://api.staticgram.top"))
bot = Bot(TOKEN, session=session)
dp = Dispatcher()


@dp.message(F.text)
async def echo(message: Message):
    await message.answer(f"Вы написали: {message.text}")


async def main():
    await dp.start_polling(bot)


asyncio.run(main())

python-telegram-bot

Используйте base_url и base_file_url в билдере приложения (v20+). Токен библиотека добавит сама.

bot.py
from telegram import Update
from telegram.ext import Application, ContextTypes, MessageHandler, filters

app = (
    Application.builder()
    .token("1234567890:AAH...")
    .base_url("https://api.staticgram.top/bot")
    .base_file_url("https://api.staticgram.top/file/bot")
    .build()
)


async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text(update.message.text)


app.add_handler(MessageHandler(filters.TEXT, echo))
app.run_polling()

telegraf

bot.js
import { Telegraf } from "telegraf";

const bot = new Telegraf(process.env.BOT_TOKEN, {
  telegram: { apiRoot: "https://api.staticgram.top" },
});

bot.on("text", (ctx) => ctx.reply(`Вы написали: ${ctx.message.text}`));
bot.launch();

grammY

bot.js
import { Bot } from "grammy";

const bot = new Bot(process.env.BOT_TOKEN, {
  client: { apiRoot: "https://api.staticgram.top" },
});

bot.on("message:text", (ctx) => ctx.reply(`Вы написали: ${ctx.message.text}`));
bot.start();

Чистый HTTP

Библиотека не обязательна: любой HTTP-клиент подойдёт.

curl
curl "https://api.staticgram.top/bot$TOKEN/sendMessage" \
  -d chat_id=123456789 \
  --data-urlencode "text=Привет из StaticGram"
Python (requests)
import requests

API = "https://api.staticgram.top/bot" + TOKEN
r = requests.post(f"{API}/sendMessage", json={"chat_id": 123456789, "text": "Привет"})
print(r.json())
Node.js (fetch)
const API = `https://api.staticgram.top/bot${process.env.BOT_TOKEN}`;
const res = await fetch(`${API}/sendMessage`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ chat_id: 123456789, text: "Привет" }),
});
console.log(await res.json());

Загрузка файлов

Файлы передаются как в Telegram: новым файлом через multipart/form-data, по file_id уже загруженного на сервер StaticGram файла или по HTTPS-ссылке. Внутри sendMediaGroup и InputMedia поддерживается attach://<name>. Подробно: Sending files.

Shell
curl "https://api.staticgram.top/bot$TOKEN/sendPhoto" \
  -F chat_id=123456789 \
  -F photo=@cat.jpg \
  -F caption="Кот"
file_id из Telegram не работают

Идентификаторы файлов привязаны к серверу. file_id, полученные от api.telegram.org, в StaticGram недействительны: загрузите файл заново.

Описания методов и типов взяты из официальной документации Telegram Bot API (Bot API 10.3). Адрес API: https://api.staticgram.top