Перейти к содержимому
Разделы документации
SDKPython

Примеры для фреймворков

Готовые примеры для каждого поддерживаемого фреймворка. Каждый пример — полноценный обработчик.

aiogram 3.x — с middleware

bot.py
from aiogram import Bot, Dispatcher, types
from sidekick_ads import Sidekick
from sidekick_ads.middleware import SidekickMiddleware
bot = Bot(token="BOT_TOKEN")
dp = Dispatcher()
# Register middleware — injects `sidekick` into every handler
sidekick_middleware = SidekickMiddleware(
api_key="sk_live_xxxxx",
platform_id="plt_xxxxx",
)
dp.message.middleware(sidekick_middleware)
# Close the HTTP pool cleanly on dispatcher shutdown
dp.shutdown.register(sidekick_middleware.aclose)
@dp.message()
async def handle(message: types.Message, sidekick: Sidekick):
llm_reply = await get_llm_response(message.text)
# Your existing keyboard (if any)
kb = types.InlineKeyboardMarkup(inline_keyboard=[
[types.InlineKeyboardButton(text="👍", callback_data="like"),
types.InlineKeyboardButton(text="👎", callback_data="dislike")],
])
result = await sidekick.inject(
user_id=message.from_user.id,
message=llm_reply,
language_code=message.from_user.language_code or "en",
is_premium=message.from_user.is_premium,
keyboard=kb,
)
await message.answer(result.message, reply_markup=result.keyboard)

aiogram 3.x — без middleware

bot.py
from aiogram import Bot, Dispatcher, types
from sidekick_ads import Sidekick
bot = Bot(token="BOT_TOKEN")
dp = Dispatcher()
sk = Sidekick(api_key="sk_live_xxxxx", platform_id="plt_xxxxx")
@dp.message()
async def handle(message: types.Message):
llm_reply = await get_llm_response(message.text)
result = await sk.inject(
user_id=message.from_user.id,
message=llm_reply,
language_code=message.from_user.language_code or "en",
is_premium=message.from_user.is_premium,
)
await message.answer(result.message, reply_markup=result.keyboard)

python-telegram-bot v20+

bot.py
from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import ApplicationBuilder, MessageHandler, ContextTypes, filters
from sidekick_ads import Sidekick
sk = Sidekick(api_key="sk_live_xxxxx", platform_id="plt_xxxxx")
async def handle(update: Update, context: ContextTypes.DEFAULT_TYPE):
user = update.message.from_user
llm_reply = await get_llm_response(update.message.text)
kb = InlineKeyboardMarkup([
[InlineKeyboardButton("👍", callback_data="like"),
InlineKeyboardButton("👎", callback_data="dislike")],
])
result = await sk.inject(
user_id=user.id,
message=llm_reply,
language_code=user.language_code or "en",
is_premium=user.is_premium,
keyboard=kb,
)
await update.message.reply_text(result.message, reply_markup=result.keyboard)
app = ApplicationBuilder().token("BOT_TOKEN").build()
app.add_handler(MessageHandler(filters.TEXT, handle))
app.run_polling()

Без фреймворка

main.py
import httpx
from typing import Optional
from sidekick_ads import Sidekick
sk = Sidekick(api_key="sk_live_xxxxx", platform_id="plt_xxxxx")
async def on_message(user_id: int, text: str, lang_code: Optional[str], premium: Optional[bool]):
llm_reply = await get_llm_response(text)
result = await sk.inject(
user_id=user_id,
message=llm_reply,
language_code=lang_code or "en",
is_premium=premium,
)
# Build JSON explicitly; SDK keyboards may be framework objects.
keyboard = None
if result.has_ad and result.ad:
ad = result.ad
keyboard = {"inline_keyboard": [[
{"text": ad["button_text"], "url": ad["button_url"]}
]]}
# Send via any HTTP client.
async with httpx.AsyncClient() as client:
await client.post(
f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
json={
"chat_id": user_id,
"text": result.message,
**({"reply_markup": keyboard} if keyboard else {}),
},
)