Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Python Sul 2025 - Automatizando servidores do D...

Python Sul 2025 - Automatizando servidores do Discord com Python

Tutorial ministrado dia 21 de novembro de 2025, na Python Sul 2025 em Porto Alegre.

Repositório do tutorial:
https://github.com/jjpaulo2/discord-example

Avatar for João Paulo Carvalho

João Paulo Carvalho

November 21, 2025
Tweet

More Decks by João Paulo Carvalho

Other Decks in Technology

Transcript

  1. SOBRE MIM Apaixonado por games. Entusiasta de Linux, open-source e

    evangelista do Python. Atualmente Engenheiro de Plataforma na Vinta Software. Participa da organização do Hackerspace Blumenau e GruPy Blumenau.
  2. SUMÁRIO • O que é o Discord • Criando um

    servidor • Usando webhooks • Criando um bot • Lendo eventos do servidor • Interagindo com o servidor • Respondendo a comandos • Tocando áudio em canais de voz
  3. O que é o Discord Discord é um aplicativo de

    comunicação gratuito que permite que as pessoas conversem por voz, vídeo e texto. É muito popular entre comunidades de jogos, mas também é usado para outros grupos e interesses.
  4. Criando um servidor Basta clicar no símbolo de “mais” e

    seguir o passo a passo. É rápido e gratuito.
  5. Configurando um webhook no servidor Dê um nome, um ícone

    e selecione o canal destino da notificação webhook. Salve as alterações e clique em copiar a URL do webhook.
  6. Requisição do webhook POST {URL DO WEBHOOK QUE VOCÊ CRIOU}

    { "content": "Texto da notificação" } Fonte: https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html
  7. Exemplo em Python import requests webhook_url = "..." payload =

    {"content": "Minha primeira notificação via webhook"} headers = {"content-type": "application/json"} requests.post( url, json=payload, headers=headers )
  8. Console de desenvolvedor do Discord Acesse o link abaixo e

    clique no botão “New application ”. https://discord.com/developers/applications
  9. Configuração inicial do bot Vá para a área de “Installation

    ”. E replique as mesmas configurações da próxima página.
  10. Por que usar o discord.py? • A biblioteca mais usada

    para integrar no Discord com Python ◦ Tem mais casos de uso para referência na internet ◦ Atualizações constantes de usabilidade e segurança • Suporte a programação assíncrona moderna em Python ◦ Totalmente compatível com asyncio e a sintaxe async/await • Interface de controle de concorrência ◦ Ajuda a contornar rate-limits na API do Discord • Interface de código moderna ◦ Funciona perfeitamente tanto em arquiteturas orientadas à objeto (Django-like) quanto arquiteturas mais funcionais (Flask-like)
  11. Instalando o discord.py Apenas suporte básico a mensagens $ pip

    install discord.py Suporte a interação em canais de voz $ pip install discord.py[voice]
  12. Estrutura básica de um bot from discord import Client, Intents

    intents = Intents.default() client = Client(intents=intents) # Implementação aqui if __name__ == '__main__': client.run('Meu token do Discord aqui')
  13. Estrutura básica da leitura de eventos client = Client(...) @client.event

    async def on_event(...): # Implementação da lógica do evento
  14. Exemplo de leitura de mensagens from discord import Client, Message,

    Intents intents = Intents.default() intents.message_content = True client = Client(intents=intents) @client.event async def on_message(message: Message): print(message.author, ":", message.content) if __name__ == "__main__": client.run("Meu token do Discord aqui")
  15. Outros eventos muito usados • on_ready • on_member_join • on_member_remove

    • on_member_ban • on_member_unban • on_message_edit • on_message_delete • on_reaction_add • on_reaction_remove • on_voice_state_update
  16. DESAFIO 2 Júnior Salve em um arquivo de texto chamado

    chat.txt todas as mensagens enviadas no canal #bate-papo
  17. Introdução sobre interação Eventos sempre irão passar parâmetros via callback

    que podem ser manipulados. @client.event async def on_message(message: Message): await message.edit(...) await message.delete() await message.reply(...) await message.channel.send(...) await message.author.kick() await message.author.ban()
  18. DESAFIO 3 Pleno Implemente um sistema de moderação no servidor

    Sempre que alguém mandar um palavrão no canal #bate-papo a mensagem deve ser apagada instantâneamente
  19. COMANDOS COMUNS @client.event async def on_message(message: Message): if message.content.startswith('!comando1'): #

    Lógica para o comando 1 # ... await message.channel.send('Você executou o comando 1!') if message.content.startswith('!comando2'): # Lógica para o comando 2 # ... await message.channel.send('Você executou o comando 2!') ...
  20. DESAFIO 4 Sênior Implemente um bot de música para o

    servidor Ele irá responder ao comando /play e irá tocar uma música Ele irá responder ao comando /stop e vai parar de tocar a música