Files
antigravity-skills-reference/skills/telegram/references/advanced-features.md
ProgramadorBrasil 61ec71c5c7 feat: add 52 specialized AI agent skills (#217)
New skills covering 10 categories:

**Security & Audit**: 007 (STRIDE/PASTA/OWASP), cred-omega (secrets management)
**AI Personas**: Karpathy, Hinton, Sutskever, LeCun (4 sub-skills), Altman, Musk, Gates, Jobs, Buffett
**Multi-agent Orchestration**: agent-orchestrator, task-intelligence, multi-advisor
**Code Analysis**: matematico-tao (Terence Tao-inspired mathematical code analysis)
**Social & Messaging**: Instagram Graph API, Telegram Bot, WhatsApp Cloud API, social-orchestrator
**Image Generation**: AI Studio (Gemini), Stability AI, ComfyUI Gateway, image-studio router
**Brazilian Domain**: 6 auction specialist modules, 2 legal advisors, auctioneers data scraper
**Product & Growth**: design, invention, monetization, analytics, growth engine
**DevOps & LLM Ops**: Docker/CI-CD/AWS, RAG/embeddings/fine-tuning
**Skill Governance**: installer, sentinel auditor, context management

Each skill includes:
- Standardized YAML frontmatter (name, description, risk, source, tags, tools)
- Structured sections (Overview, When to Use, How it Works, Best Practices)
- Python scripts and reference documentation where applicable
- Cross-platform compatibility (Claude Code, Antigravity, Cursor, Gemini CLI, Codex CLI)

Co-authored-by: ProgramadorBrasil <214873561+ProgramadorBrasil@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:04:07 +01:00

356 lines
9.5 KiB
Markdown

# Recursos Avancados - Telegram Bot
## Table of Contents
1. [Inline Mode](#inline-mode)
2. [Pagamentos (Telegram Stars)](#pagamentos)
3. [Mini Apps (WebApps)](#mini-apps)
4. [Conversation Handlers (FSM)](#conversation-handlers)
5. [Stickers](#stickers)
6. [Games](#games)
7. [Passport](#passport)
8. [Business Bots](#business-bots)
9. [Message Drafts (Streaming)](#streaming)
---
## Inline Mode
Permite que usuarios usem o bot em qualquer chat digitando `@seubot consulta`.
**Habilitar:** Fale com @BotFather e envie `/setinline`.
```python
from telegram import Update, InlineQueryResultArticle, InputTextMessageContent
from telegram.ext import InlineQueryHandler
async def inline_query(update: Update, context):
query = update.inline_query.query
if not query:
return
results = [
InlineQueryResultArticle(
id="1",
title=f"Resultado para: {query}",
input_message_content=InputTextMessageContent(
message_text=f"Voce buscou: {query}"
),
description="Clique para enviar"
),
InlineQueryResultArticle(
id="2",
title="Busca em maiusculas",
input_message_content=InputTextMessageContent(
message_text=query.upper()
)
)
]
await update.inline_query.answer(results, cache_time=10)
app.add_handler(InlineQueryHandler(inline_query))
```
### Tipos de resultado inline
- `InlineQueryResultArticle` - texto generico
- `InlineQueryResultPhoto` - foto com preview
- `InlineQueryResultGif` - GIF
- `InlineQueryResultVideo` - video
- `InlineQueryResultAudio` - audio
- `InlineQueryResultDocument` - documento
- `InlineQueryResultLocation` - localizacao
- `InlineQueryResultVenue` - local/estabelecimento
- `InlineQueryResultContact` - contato
- `InlineQueryResultCachedPhoto` - foto ja no servidor Telegram
---
## Pagamentos (Telegram Stars)
Telegram permite pagamentos via Stars (moeda interna) para bens digitais.
```python
from telegram import LabeledPrice
# Enviar invoice
await bot.send_invoice(
chat_id=chat_id,
title="Assinatura Premium",
description="Acesso premium por 30 dias",
payload="premium_30days",
currency="XTR", # XTR = Telegram Stars
prices=[LabeledPrice("Assinatura Premium", 100)], # 100 Stars
)
# Handler de pre-checkout
async def precheckout(update: Update, context):
query = update.pre_checkout_query
if query.invoice_payload == "premium_30days":
await query.answer(ok=True)
else:
await query.answer(ok=False, error_message="Payload invalido")
# Handler de pagamento concluido
async def successful_payment(update: Update, context):
payment = update.message.successful_payment
await update.message.reply_text(
f"Pagamento recebido! {payment.total_amount} Stars. "
f"Seu acesso premium foi ativado."
)
app.add_handler(PreCheckoutQueryHandler(precheckout))
app.add_handler(MessageHandler(filters.SUCCESSFUL_PAYMENT, successful_payment))
```
### Provedores de pagamento externos
Para bens fisicos, use provedores como Stripe, YooMoney, etc:
```python
await bot.send_invoice(
chat_id=chat_id,
title="Camiseta Bot Telegram",
description="Camiseta tamanho M, algodao",
payload="tshirt_m",
provider_token="SEU_PROVIDER_TOKEN", # do BotFather
currency="BRL",
prices=[
LabeledPrice("Camiseta", 5990), # R$ 59.90 (em centavos)
LabeledPrice("Frete", 1500) # R$ 15.00
],
need_shipping_address=True,
need_name=True,
need_phone_number=True
)
```
---
## Mini Apps (WebApps)
Mini Apps sao aplicacoes web que rodam dentro do Telegram.
```python
from telegram import WebAppInfo, InlineKeyboardButton, InlineKeyboardMarkup
# Botao que abre Mini App
keyboard = InlineKeyboardMarkup([
[InlineKeyboardButton(
"Abrir App",
web_app=WebAppInfo(url="https://seu-app.com")
)]
])
await bot.send_message(chat_id, "Clique para abrir:", reply_markup=keyboard)
# Via Reply Keyboard
from telegram import ReplyKeyboardMarkup, KeyboardButton
keyboard = ReplyKeyboardMarkup([
[KeyboardButton("Abrir App", web_app=WebAppInfo(url="https://seu-app.com"))]
])
```
### Receber dados do Mini App
```python
async def web_app_data(update: Update, context):
data = update.effective_message.web_app_data.data
# data e uma string JSON enviada pelo Mini App
import json
parsed = json.loads(data)
await update.message.reply_text(f"Recebi do app: {parsed}")
app.add_handler(MessageHandler(filters.StatusUpdate.WEB_APP_DATA, web_app_data))
```
---
## Conversation Handlers (FSM)
Para dialogos multi-passo (formularios, wizards):
```python
from telegram.ext import ConversationHandler, CommandHandler, MessageHandler, filters
# Estados
NAME, AGE, CONFIRM = range(3)
async def start_form(update: Update, context):
await update.message.reply_text("Qual seu nome?")
return NAME
async def get_name(update: Update, context):
context.user_data['name'] = update.message.text
await update.message.reply_text("Qual sua idade?")
return AGE
async def get_age(update: Update, context):
context.user_data['age'] = update.message.text
name = context.user_data['name']
age = context.user_data['age']
keyboard = InlineKeyboardMarkup([
[InlineKeyboardButton("Confirmar", callback_data="confirm"),
InlineKeyboardButton("Cancelar", callback_data="cancel")]
])
await update.message.reply_text(
f"Nome: {name}\nIdade: {age}\n\nConfirma?",
reply_markup=keyboard
)
return CONFIRM
async def confirm(update: Update, context):
query = update.callback_query
await query.answer()
if query.data == "confirm":
await query.edit_message_text("Cadastro realizado com sucesso!")
else:
await query.edit_message_text("Cadastro cancelado.")
return ConversationHandler.END
async def cancel(update: Update, context):
await update.message.reply_text("Operacao cancelada.")
return ConversationHandler.END
conv_handler = ConversationHandler(
entry_points=[CommandHandler('cadastro', start_form)],
states={
NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, get_name)],
AGE: [MessageHandler(filters.TEXT & ~filters.COMMAND, get_age)],
CONFIRM: [CallbackQueryHandler(confirm)],
},
fallbacks=[CommandHandler('cancel', cancel)],
conversation_timeout=300 # 5 minutos timeout
)
app.add_handler(conv_handler)
```
---
## Stickers
```python
# Enviar sticker por file_id
await bot.send_sticker(chat_id, sticker="CAACAgIAAxkBAAI...")
# Obter sticker set
sticker_set = await bot.get_sticker_set("set_name")
for sticker in sticker_set.stickers:
print(f"Emoji: {sticker.emoji}, ID: {sticker.file_id}")
# Criar sticker set (requer imagem 512x512 PNG/WEBP)
await bot.create_new_sticker_set(
user_id=user_id,
name="meupack_by_meubot",
title="Meu Sticker Pack",
stickers=[InputSticker(
sticker=open("sticker.webp", "rb"),
emoji_list=["😀"],
format="static"
)]
)
# Adicionar sticker ao set
await bot.add_sticker_to_set(
user_id=user_id,
name="meupack_by_meubot",
sticker=InputSticker(
sticker=open("sticker2.webp", "rb"),
emoji_list=["😎"],
format="static"
)
)
```
---
## Games
```python
# Enviar jogo (precisa registrar no BotFather com /newgame)
await bot.send_game(chat_id, game_short_name="meu_jogo")
# Handler de callback para jogo
async def game_callback(update: Update, context):
query = update.callback_query
await query.answer(url="https://seu-jogo.com/?user_id=" + str(query.from_user.id))
# Salvar score
await bot.set_game_score(
user_id=user_id,
score=150,
chat_id=chat_id,
message_id=game_message_id
)
# Obter high scores
scores = await bot.get_game_high_scores(
user_id=user_id,
chat_id=chat_id,
message_id=game_message_id
)
```
---
## Business Bots
Bots para contas Business do Telegram:
```python
# Receber conexao business
async def business_connection(update: Update, context):
conn = update.business_connection
if conn.is_enabled:
print(f"Bot conectado ao business de {conn.user.first_name}")
else:
print(f"Bot desconectado do business de {conn.user.first_name}")
# Receber mensagens business
async def business_message(update: Update, context):
msg = update.business_message
# Responder em nome do business
await context.bot.send_message(
chat_id=msg.chat.id,
text="Obrigado pela mensagem! Responderemos em breve.",
business_connection_id=msg.business_connection_id
)
app.add_handler(BusinessConnectionHandler(business_connection))
app.add_handler(BusinessMessagesHandler(business_message))
```
---
## Message Drafts (Streaming)
Para respostas longas (como de IA), use drafts para dar feedback em tempo real:
```python
import requests
TOKEN = "SEU_TOKEN"
BASE = f"https://api.telegram.org/bot{TOKEN}"
def stream_response(chat_id, full_text):
"""Simula streaming enviando drafts parciais."""
words = full_text.split()
partial = ""
# Enviar draft inicial
for i, word in enumerate(words):
partial += word + " "
if i % 5 == 0: # Atualizar a cada 5 palavras
requests.post(f"{BASE}/sendMessageDraft", json={
"chat_id": chat_id,
"text": partial.strip() + "..."
})
# Enviar mensagem final
requests.post(f"{BASE}/sendMessage", json={
"chat_id": chat_id,
"text": full_text
})
```
**Nota:** `sendMessageDraft` e um metodo recente. Verifique disponibilidade na versao da API que esta usando.