🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

Como construir um Discord Bot com Python em 2026: tutorial completo

⏱️5 min read  ·  981 words

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.

Etapa 1: Crie um aplicativo Discord

  1. Vá para o Portal do Desenvolvedor Discord (discord.com/developers)
  2. Clique emNova aplicação, nomeie seu bot
  3. Vá paraRobô seção, clique emAdicionar bot
  4. Copie oFicha (mantenha segredo — nunca comprometa)
  5. HabilitarIntenção do conteúdo da mensagem em Intents de Gateway Privilegiados
  6. EmOAuth2 e, em seguida, Gerador de URL: selecionebot eapplications.commands escopos, 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.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা