Bot de Discord Open Source em Python

Olá floquinhos ^^, eu resolvi vir aqui mostrar pra vocês um projeto que eu venho fazendo faz um tempinho, e que queria compartilhar com vocês :D

Quem me segue no BlueSky já deve ter visto algum post meu falando sobre isso, eu estou desenvolvendo um bot de Discord de código aberto programado em Python! Meu objetivo com ele é 1- aprender mais sobre programação e gestão de projetos 2- depender menos de bots de Discord de terceiros. Não que eles sejam ruins, mas pq eu gostaria de ter o meu, sabe?

Estrutura do Projeto

O projeto atualmente conta com uma estrutura simples:

Discord_Bot
├── cogs
│   ├── admin-commands.py
│   └── music-commands.py
├── compose.yaml
├── lang.py
├── languages.json
├── LICENSE
├── main-alt.py
├── main.py
├── music.py
├── README.md
├── .env
└── requirements.txt

main.py | main-alt.py

Esses são os arquivos básicos do bot, neles tem a inicialização do bot, o sistema de inicialização de cogs e slash commands, comandos básicos (!join !leave !ping !lang) e funções necessárias pro funcionamento do núcleo dele, além dos imports obviamnete.

Por que dois?

Simples, por que eu rodo dois bots distintos em simultâneo. O principal, Flake, fica no meu server público, enquanto o secundário, Invertebrado, fica no meu server privado, e é usado pra testes. Fica a seu critério se vai incluir isso ou não. Se for usar mais de dois bots, recomendo fortemente nomear cada um como <bot-name>.py pra facilitar a distinção :3

lang.py | language.json

Esses são os arquivos referentes as línguas do bot, o lang.py armazena as funções e scripts pra gerenciar as línguas, e o language.json armazena a língua individual de cada usuário. O arquivo language.json armazena os IDs de usuário em plain text, isso foi intencional pois dá pra descobrir o ID de qualquer usuário a partir de seu username, é só clicar no perfil e aparece a opção de copiar o ID. Criptografar algo que já é público é uma complexidade inútil pro projeto. Se algum dia o bot precisar de algo a mais (como senhas, e-mails e etc), isso sim será criptografado.

music.py | compose.yaml

Esse arquivo contém as funções de música do bot, é através dele, usando a biblioteca yt-dlp que o bot é capaz de tocar qualquer link do YouTube em call!

O compose.yaml está lá como uma forma adicional de verificação de cookies, só é necessário caso você esteja usando o bot em uma VPS por exemplo, ou algo com IP bloqueado. Ainda assim, recomendo usar, é só digitar "docker compose up -d" afinal, e evita problemas!

Cogs

Aqui ficam as seções diferentes do bot, útil pra separar comandos em categorias, e evitar a codebase de ficar gigante.

.env

Esse arquivo por questões óbvias não está incluso no repositório, ele armazena seus tokens do Discord, que podem ser usados para te hackear. Então antes de criar seu fork, verifique que o .gitignore está configurado corretamente!!!

Como testo ele?

Basta instalar as dependências com o pip (requirements.txt inclui todas as dependências), gerar seu token por aqui , colocar ele no .env (DISCORD_TOKEN = "seu-token-:D") e rodar o arquivo main.py.

Você também pode testar os comandos do bot pelo meu servidor , lá eu frequentemente falo sobre o desenvolvimento do bot :3

(O servidor tem suporte pra falantes de português e inglês)

Planejamentos pro Futuro

Se você ver o repositório do bot, verá que tem uma branch de admnistração, ela adiciona uma cog nova. Eu estou usando como referência os comandos do carl-bot e da loritta pra montar ela, quando ficar pronta irei dar um merge :3

Além disso, eu tenho um projetinhos pra esse bot que ainda não começaram a sair do papel:

Web UI

Mantendo o espírito código aberto do projeto, eu planejo montar uma UI web em um repositório separado, e que os usuários possam usar com seus próprios bots! Inspirado no BlueSky, e o sistema deles de PDS, eu quero fazer algo parecido, onde cada fork vai ter uma API gratuita pra acessar o site, você registra sua dashboard e já tem um site pronto com a minha url, sem precisar lidar com domínio de rede e tudo mais.

A estrutura seria algo desse tipo:

https://bot.snowfloke.com/bot/dashboard

Pro bot Flake, como ele é o principal, ele seria só:

https://bot.snowfloke.com/dashboard/server/panel

Exemplos:

https://bot.snowfloke.com/Invertebrado/dashboard (Pra ver todos os servers que o bot está)

https://bot.snowfloke.com/Invertebrado/dashboard/Scuadi-do-Cafi-Duti/home (Home do servidor "Scuadi do Cafi Duti"

https://bot.snowfloke.com/Invertebrado/dashboard/Scuadi-do-Cafi-Duti/reaction-roles (Exemplo de uma config)

Nenhum dos links acima funciona, são apenas exemplos, e poderão ter uma estrutura diferente no futuro!

Gravações de Call

Eu planejo criar um comando !record start e !record stop pra gravar calls, e mandar o arquivo de áudio como .mp3 pro usuário (e deletar logo em seguida), isso será muito útil pra mesas de RPG, YouTubers e Podcasters e etc.

Repositórios

Atualmente o bot está em dois repositórios, um no GitHub e um no Tangled. O principal é o Tangled, o GitHub só está lá pra visibilidade maior.

Os repositórios são mirrors um do outro, mesmas branches, mesmas commits, tudo igual.

GitHub

GitHub - snowyfloke/Discord_Bot: Public Source-Code for my Discord Bot

Public Source-Code for my Discord Bot. Contribute to snowyfloke/Discord_Bot development by creating an account on GitHub.

Tangled

snowfloke.com/Discord_Bot

My personal Discord Bot programmed in python

Obrigada por ler até aqui!

Esse projeto é puramente por diversão e aprendizado, não é nada pra produção final. Talvez um dia vire, mas até lá, é só um projetinho que eu tenho no meu coração e que quis compartilhar com vocês <3

Obrigada por ler até aqui, vejo vocês no próximo post! Se cuidem, e bebam muito chocolate quente pq tá frio QwQ

Gosta desse tipo de post?