Construindo umBot de discórdia é um projeto Python prático e divertido que ensina programação assíncrona, APIs e manipulação de eventos. Em 2026,discord.py torna isso simples. Este guia cria um bot funcional com comandos de barra, incorporações e botões interativos e depois o implanta.
📋 Table of Contents
Etapa 1: Crie um aplicativo Discord
- Vá para o Portal do Desenvolvedor Discord (discord.com/developers)
- Clique emNova aplicação, nomeie seu bot
- Vá paraRobô seção, clique emAdicionar bot
- Copie oFicha (mantenha segredo — nunca comprometa)
- HabilitarIntenção do conteúdo da mensagem em Intents de Gateway Privilegiados
- EmOAuth2 e, em seguida, Gerador de URL: selecione
boteapplications.commandsescopos, escolha as permissões e use a URL gerada para convidar o bot para o seu servidor
Etapa 2: Configuração
pip install discord.py python-dotenv
# Project structure
mybot/
├── bot.py
├── .env
└── requirements.txt
# .env — never commit this
DISCORD_TOKEN=your_bot_token_here
Etapa 3: Bot básico com comandos de barra
# bot.py
import os
import discord
from discord import app_commands
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv()
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
# Sync slash commands with Discord
await bot.tree.sync()
print(f"Logged in as {bot.user}")
# Slash command
@bot.tree.command(name="hello", description="Greet the user")
async def hello(interaction: discord.Interaction):
await interaction.response.send_message(
f"Hello, {interaction.user.mention}!"
)
# Slash command with parameters
@bot.tree.command(name="add", description="Add two numbers")
async def add(interaction: discord.Interaction, a: int, b: int):
await interaction.response.send_message(f"{a} + {b} = {a + b}")
bot.run(os.getenv("DISCORD_TOKEN"))
Etapa 4: incorporações avançadas
@bot.tree.command(name="userinfo", description="Show user information")
async def userinfo(interaction: discord.Interaction, member: discord.Member = None):
member = member or interaction.user
embed = discord.Embed(
title=f"User Info: {member.display_name}",
color=discord.Color.blurple()
)
embed.set_thumbnail(url=member.display_avatar.url)
embed.add_field(name="Username", value=str(member), inline=True)
embed.add_field(name="ID", value=member.id, inline=True)
embed.add_field(
name="Joined",
value=member.joined_at.strftime("%Y-%m-%d"),
inline=False
)
embed.set_footer(text="MyBot")
await interaction.response.send_message(embed=embed)
Etapa 5: Botões interativos
class ConfirmView(discord.ui.View):
def __init__(self):
super().__init__(timeout=60)
self.value = None
@discord.ui.button(label="Confirm", style=discord.ButtonStyle.green)
async def confirm(self, interaction: discord.Interaction, button: discord.ui.Button):
self.value = True
await interaction.response.send_message("Confirmed!", ephemeral=True)
self.stop()
@discord.ui.button(label="Cancel", style=discord.ButtonStyle.red)
async def cancel(self, interaction: discord.Interaction, button: discord.ui.Button):
self.value = False
await interaction.response.send_message("Cancelled.", ephemeral=True)
self.stop()
@bot.tree.command(name="confirm", description="Ask for confirmation")
async def confirm_cmd(interaction: discord.Interaction):
view = ConfirmView()
await interaction.response.send_message("Are you sure?", view=view)
Etapa 6: Tratamento de eventos
# Welcome new members
@bot.event
async def on_member_join(member):
channel = member.guild.system_channel
if channel:
await channel.send(f"Welcome {member.mention} to the server!")
# React to messages
@bot.event
async def on_message(message):
if message.author == bot.user:
return # ignore the bot's own messages
if "hello bot" in message.content.lower():
await message.channel.send("Hello there!")
await bot.process_commands(message) # keep prefix commands working
Etapa 7: Implantar o bot
# Bots need to run 24/7. Deploy to a small VPS or Railway/Fly.io.
# On a VPS with systemd — /etc/systemd/system/mybot.service
[Unit]
Description=Discord Bot
After=network.target
[Service]
WorkingDirectory=/opt/mybot
ExecStart=/opt/mybot/venv/bin/python bot.py
Restart=always
EnvironmentFile=/opt/mybot/.env
[Install]
WantedBy=multi-user.target
# Enable and start
sudo systemctl enable mybot
sudo systemctl start mybot
Perguntas Frequentes
P: Comandos de barra versus comandos de prefixo?
R: Os comandos de barra (/command) são o padrão moderno – o Discord os mostra em um menu com dicas de parâmetros. Comandos de prefixo (!command) ainda funcionam, mas são legados. Use comandos de barra para novos bots.
P: Por que meus comandos de barra não estão aparecendo?
A: Você deve ligarbot.tree.sync() para registrá-los no Discord (feito em on_ready acima). A sincronização global pode levar até uma hora para ser propagada; sincronize com uma guilda específica para testes instantâneos.
P: Como mantenho meu token de bot seguro?
R: Armazene-o em um.env arquivo (gitignored), nunca codifique-o e nunca o confirme. Se vazar, regenere-o imediatamente no Portal do Desenvolvedor — um token vazado permite que qualquer pessoa controle seu bot.
P: Onde devo hospedar meu bot gratuitamente/barato?
R: Railway e Fly.io têm níveis gratuitos/de baixo custo. Um VPS de US$ 4-6/mês (Hetzner, Contabo) com systemd é confiável e barato. Evite níveis gratuitos que ficam inativos – os bots precisam ser executados continuamente.
P: Como adiciono um banco de dados ao meu bot?
R: SQLite para bots simples (via aiosqlite para assíncrono) ou PostgreSQL para bots maiores (asyncpg). Armazene configurações por servidor, dados do usuário ou estado de comando. Sempre use bibliotecas de banco de dados assíncronas para evitar o bloqueio do bot.
Conclusão
Construir um bot Discord com Python é um projeto acessível que ensina programação assíncrona e integração de API. Odiscord.py A biblioteca lida com as partes difíceis – você define comandos de barra, incorporações avançadas e botões interativos com decoradores limpos. Depois que seu bot funcionar localmente, implante-o em um pequeno VPS com systemd (ou Railway/Fly.io) para que ele funcione 24 horas por dia, 7 dias por semana. A partir daqui, adicione um banco de dados, mais comandos e manipuladores de eventos para transformar seu bot em tudo o que sua comunidade precisa.
🔗 Share this article
✍️ Leave a Comment