Tanto o python-telegram-bot quanto o aiogram rodam bem em todos os planos de bot da PlayNHost, inclusive no plano STARTER de 0,5 GB (a partir de US$1,99 por mês). Nas nossas próprias medições, um bot python-telegram-bot 22 usou cerca de 40 MB de memória e um bot aiogram 3 cerca de 169 MB, então a memória não é o que decide entre os dois. Escolha aquele cujos exemplos e tutoriais você segue. Nosso bot inicial em Python usa o python-telegram-bot, porque é a biblioteca Python para bots do Telegram com mais estrelas e mais downloads, e a mais leve que medimos.
O que medimos
Medimos cada biblioteca nos nossos próprios servidores, com um bot montado e pronto para iniciar (a memória que o processo usa, antes de qualquer mensagem):
| Biblioteca | Memória |
|---|---|
| python-telegram-bot 22 (Python 3.13) | 40 MB |
| Telegraf (Node.js 22) | 60 MB |
| grammY (Node.js 22) | 61 MB |
| aiogram 3 (Python 3.13) | 169 MB |
O Python sozinho usou 8 MB no mesmo teste. O seu próprio código, os dados que ele guarda na memória e o número de conversas se somam a esses números.
Por que qualquer tamanho de plano serve
O plano STARTER de 0,5 GB roda qualquer uma dessas bibliotecas com espaço para o seu código: até o aiogram, o mais pesado, usa cerca de um terço dele. Escolha 1 GB ou mais quando o seu bot guardar dados na memória, lidar com arquivos ou imagens, ou rodar vários bots em um só processo. Planos e preços: Hospedagem de bot do Telegram.
Lado a lado
| python-telegram-bot | aiogram | |
|---|---|---|
| Memória que medimos | Cerca de 40 MB (versão 22) | Cerca de 169 MB (versão 3) |
| Estrelas no GitHub (29 out 2026) | 29.536 | 5.912 |
| Downloads no PyPI, últimos 30 dias (29 out 2026) | 6,76 milhões | 2,76 milhões |
| Chamada de polling | application.run_polling() | await dp.start_polling(bot) |
| Nome do token nos exemplos oficiais | Nenhum (um espaço reservado "TOKEN") | BOT_TOKEN |
| Um webhook deixado configurado no bot | Removido sozinho quando o polling começa | Não é removido: ele continua tentando no 409 Conflict |
| Um token recusado (401) | Para de tentar: Invalid token. Aborting retry loop. | Continua tentando, então o bot parece estar rodando |
| Outra cópia rodando (409) | Continua tentando | Continua tentando |
O aiogram é comum em tutoriais e respostas em russo. Se você segue um tutorial, use a biblioteca que ele usa.
O que isso significa no seu servidor
- O token: o painel o entrega ao seu código como
TELEGRAM_BOT_TOKEN,BOT_TOKEN,TOKEN,TELEGRAM_TOKENeTELOXIDE_TOKEN. Oos.getenv("BOT_TOKEN")do aiogram funciona como está; nos exemplos do python-telegram-bot, troque o espaço reservado poros.environ["TOKEN"]ouos.environ["TELEGRAM_BOT_TOKEN"]. - Um bot que parece estar rodando mas não responde: o aiogram continua tentando com um token recusado e no
409 Conflict, e o python-telegram-bot no409 Conflict. O painel lê o console e mostra um aviso com a causa, por exemplo Seu bot também está rodando em outro lugar. Veja Como corrigir o erro 409 Conflict do bot do Telegram. - Um webhook de uma hospedagem antiga: o python-telegram-bot o remove quando o polling começa. Com o aiogram, clique em Remover webhook na página Bot, seção Telegram, ou chame
await bot.delete_webhook()antes dostart_polling. - Online no Telegram: o chip em Visão geral passa para Online no Telegram quando o console mostra uma linha de pronto. O aiogram imprime
Run polling for bot @your_botquando o log está emINFO. Com o python-telegram-bot, imprimaLogged in as @your_botvocê mesmo, como o nosso bot inicial faz. - Seu token no console: quando o Telegram recusa o token, a mensagem de erro do python-telegram-bot contém o próprio token. Nosso bot inicial captura
InvalidToken, imprime uma linha simples no lugar e esconde o token nas linhas do log. - Versão do Python: o python-telegram-bot 22 precisa do Python 3.10 ou mais novo. O Runtime na seção Código oferece do 3.10 ao 3.14, com o 3.12 como padrão.
O mesmo bot nas duas bibliotecas
Os dois respondem ao /start e leem o token que o painel entrega. Coloque a biblioteca no requirements.txt e o código no bot.py, o Arquivo de entrada padrão.
python-telegram-bot, arquivo requirements.txt:
python-telegram-bot>=22,<23
Arquivo bot.py:
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.effective_message.reply_text("Hello! I am running on PlayNHost.")
async def post_init(application: Application) -> None:
print(f"Logged in as @{application.bot.username}", flush=True)
application = (
Application.builder()
.token(os.environ["TELEGRAM_BOT_TOKEN"])
.post_init(post_init)
.build()
)
application.add_handler(CommandHandler("start", start))
application.run_polling()
aiogram, arquivo requirements.txt:
aiogram>=3,<4
Arquivo bot.py:
import asyncio
import logging
import os
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: Message) -> None:
await message.answer("Hello! I am running on PlayNHost.")
async def main() -> None:
bot = Bot(os.environ["BOT_TOKEN"])
await bot.delete_webhook()
await dp.start_polling(bot)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
asyncio.run(main())
A versão com aiogram faz o log em INFO, então imprime Run polling for bot @your_bot quando está pronta, e remove um webhook deixado no bot antes de começar o polling.
E em Node.js
Nosso bot inicial em Node.js usa o grammY. No nosso teste, o grammY e o Telegraf usaram quase a mesma memória (61 e 60 MB), então qualquer um serve em qualquer plano. Escolhemos o grammY porque ele ainda é atualizado (1.46.0 em 26 ago 2026, contra a última versão do Telegraf, 4.16.3, em 29 fev 2024).
Perguntas frequentes
Qual delas o bot inicial usa?
python-telegram-bot 22 em um servidor Python e grammY em um servidor Node.js. Clique em Criar um bot inicial no card Configurar seu bot em Visão geral. Veja Como hospedar um bot do Telegram.
Posso trocar de uma biblioteca para a outra depois?
Sim. As duas rodam no mesmo servidor Python: mude o requirements.txt e o seu código, e depois reinicie. O pacote novo é instalado nessa inicialização porque o arquivo de pacotes mudou.
Preciso de um plano maior para o aiogram?
Não. Com cerca de 169 MB, ele cabe no plano STARTER de 0,5 GB com folga. Um plano maior ajuda quando o próprio bot cresce: dados guardados na memória, arquivos e imagens, ou vários bots em um só processo.



