O AutoMod do discord que parece aquele tiozão do zap.
Coloque-o em seu servidor »
Sebotiao é um AutoMod para seu servidor do Discord que lembra o tiozão do zap. Ele possui funcionalidades básicas (por em quanto) e é bem simples de configurar. Para adicioná-lo ao seu servidor, basta clicar aqui.
Mas se você está aqui, imagino que tenha vindo para adicionar funcionalidades à ele. Nesse caso, continue lendo o documento.
Feito com discord.py, sqlalchemy. Servido à você por Docker.
Aqui você verá as ferramentas necessárias para o desenvolvimento do Sebotiao. De maneira mega resumida: rode o arquivo ./dev.sh
(use -h
/--help
para ver as opções), ele criará o container com o seu bot em modo de desenvolvimento.
Pessoalmente, recomendo que utilize docker. Nesse caso, utilize o docker-compose.development.yml. Ele criará uma database SQLite local, ao contrário de um container separado de PostgreSQL. Ela ficará salva no volume docker chamado dev_bot_db
.
- Python 3.8
- Virtual Env
- Bibliotecas estão em requirements.txt
- Opuc Codec
- youtube-dl
- ffmpeg
De forma geral, o arquivo src/main.py
roda o bot, utilizando os arquivos da pasta src/cogs/
(leia mais sobre cogs aqui). As interações com a database são feitas pelo arquivo src/utils/dbManager.py
, que simplifica o acesso utilizando a biblioteca sqlalchemy. Os modelos para criação das tabelas ficam no arquivo src/models.py
.
As variáveis de ambiente que o container bot precisa são, dê uma olhada nos arquivos docker-compose
, ou crie a pasta env/
e coloque os arquivos .env
na mesma:
Nome da Variável | Significado | Obrigatória |
---|---|---|
BOT_TOKEN | Token do bot (disponibilizado pelo discord) | Sim |
DB_HOST | IP (ou nome do container) da localidade da database | Não (default=db ) |
DEBUG | Se 1 , a database será SQLite no próprio diretório (único container docker); se 0 , é necessário um segundo container, contendo uma database PostgreSQL. |
Não (default=0 ) |
YT_API_KEY | Chave de API do Youtube (Para ter acesso à função zap ) |
Sim |
As variáveis de ambiente que o container da database precisa são:
Nome da Variável | Significado | Obrigatória |
---|---|---|
POSTGRES_DB | Nome da database para ser criada | Sim |
POSTGRES_USER | Nome do usuário para ser criado (terá privilégios máximos em POSTGRES_DB) | Sim |
POSTGRES_PASSWORD | Senha para o acesso do usuário POSTGRES_USER | Sim |
POSTGRES_PORT | Porta em que a database será hosteada | Sim |
As chaves de acesso para database e o token do bot do discord devem ser providenciados (gerados) por você, assim como a chave da API do YouTube.
Crie um bot por aqui e lembre-se de permitir acesso de administrador e habilitar intents.
Para a API do YouTube, dê uma olhada na documentação oficial.
Para logs, você deve utilizar a classe DockerLogger
, declarada no arquivo src/utils/docker.py. Ela salva arquivos .log
nos host volumes
do docker, ou seja, é criada uma pasta logs/
no diretório do projeto para que sejam salvos lá. E também imprime todos os logs no stdout, para facilitar o acesso por meios como docker logs
e portainer.io.
Os arquivos .log
são separados de acordo com o prefix
especificados na inicialização do objeto. Este prefix
também é usado para marcar no stdout. Formato dos logs:
# Nos arquivos .log
f"{lvl_str}; {str(datetime.now())[:-3]}; {msg};\n"
# No stdout
f"{lvl_str}; {str(datetime.now())[:-3]}; {msg};"
Caso esteja debugando, pode-se chamar o método estático stdout_log
, da mesma classe. Este aceita *args
e **kwargs
, para auxiliar.
Eu optei por não usar o manuseador default de comandos do discordpy
, então montei um parser que pode ser encontrado no arquivo src/extras/messages.py. Mas de forma resumida, basta adicionar seu comando ao arquivo src/extras/commands.yml, mantendo a lógica do arquivo e tudo deve funcionar. (A lógica é:)
nome_do_cog:
msg: "Descrição do cog"
commands:
nome_do_comando:
aliases: "aliases do comando"
msg: "Descrição do comando"
args: "Argumentos do comando"
Este projeto está sob a Licença MIT - veja o arquivo LICENSE.md para detalhes.