seven-discord
v2.7.5
Published
A simplified, zero-dependency Discord library for Bun with interactive UI and economy system.
Maintainers
Readme
Seven-Discord (v2.7.0)
Framework para criação de bots de Discord usando Bun ou Node.js, com interpretador de macros baseado em AST e banco de dados SQLite embutido.
📢 Por que o projeto ficou parado e por que apagamos tudo?
O desenvolvimento do Seven-Discord ficou abandonado por bastante tempo devido à falta de tempo livre, trabalho e compromissos da vida pessoal dos mantenedores.
Ao voltarmos para o projeto, a decisão honesta foi apagar 100% do código antigo e recomeçar do zero. O código anterior era um emaranhado confuso (código espaguete), impossível de escalar, com um banco de dados instável e um sistema de macros que quebrava constantemente.
Abaixo está a comparação real do que mudou para você entender o motivo desse recomeço:
🔄 Comparação: Versão Antiga vs. Versão Nova (v2.7.0)
| Recurso | Versão Antiga | Nova Versão (v2.7.0) | Por que mudamos? |
| :--- | :--- | :--- | :--- |
| Leitura de Macros | Feita com Regex (Expressões Regulares). | Parser de AST real (Árvore de Sintaxe Abstrata). | O método antigo quebrava sempre que você tentava colocar uma macro dentro de outra (ex: s.if[s.eq[...]]). O novo parser processa o código caractere por caractere com precisão total. |
| Banco de Dados | Arquivo JSON cru (seven_db.json). | SQLite Nativo (SevenDB). | Gravar dados em arquivos JSON gerava lentidão e corrompia os arquivos com facilidade se o bot caísse. O SQLite é um banco de dados relacional real, rápido e imune a corrupções. |
| Organização | Arquivo único gigante e confuso. | Estrutura Modular e TypeScript. | O código antigo era impossível de estender ou corrigir bugs. Agora, cada macro e gerenciador (Gateway, Rest, DB) tem seu próprio arquivo isolado. |
| Quantidade de Macros | Dezenas de macros instáveis e quebradas. | 5 macros essenciais e otimizadas. | Preferimos entregar apenas 5 macros que funcionam perfeitamente do que manter dezenas de macros de moderação e economia que falhavam na metade da execução. |
📦 Instalação
bun add seven-discord
# ou
npm install seven-discord🚀 Exemplo de Uso
import { SevenClient } from "seven-discord";
const client = new SevenClient({
prefix: "!",
databaseName: "database.db",
// Configuração moderna de intents usando strings
intents: ["Guilds", "GuildMessages", "MessageContent"]
});
// 1. Resposta Simples
client.command("ping", "Pong! s.ping ms");
// 2. Registro com Aliases
client.command({
name: "status",
aliases: ["info", "check"],
code: `
s.db.set[ultimo; s.username]
s.if[s.eq[s.username; admin];
s.reply[Bem-vindo, admin.];
s.reply[Olá s.username. O último a usar este comando foi: s.db.get[ultimo]]
]
`
});
// 3. Carregar todos os comandos de uma pasta dinamicamente (recursivo)
// Suporta arquivos exporting default { name, aliases, code } ou mapeamento { nome: código }
await client.loadCommands("./commands");
// 4. Comando Slash (Compatível com Apps instaláveis no usuário - "User Apps")
client.slashCommand({
name: "ola",
description: "Retorna uma mensagem de boas-vindas",
code: "s.reply[Olá de um comando Slash, s.username!]",
// Pode ser instalado tanto em servidores quanto na conta do usuário
integration_types: ["USER_INSTALL", "GUILD_INSTALL"],
// Onde o comando pode ser executado (Servidores, DMs com o Bot, Canais Privados/Grupos)
contexts: ["GUILD", "BOT_DM", "PRIVATE_CHANNEL"]
});
// Dashboard na porta 3000 (Opcional)
client.startDashboard(3000);
// Inicialização
client.start("SEU_TOKEN_DO_DISCORD");📘 Macros Disponíveis (v2.7.0)
O interpretador de AST executa apenas as seguintes macros essenciais e otimizadas:
📢 Mensagens e Respostas
s.reply[conteúdo; ephemeral?]: Envia uma resposta ao autor ou interação. Em comandos Slash, passartrueno segundo parâmetro torna a mensagem efêmera (visível apenas para quem usou).s.mention[userId?]: Menciona um usuário (<@userId>). Se omitido, menciona o autor da mensagem/interação.s.channelMention[channelId?]: Menciona um canal (<#channelId>). Se omitido, menciona o canal atual.s.roleMention[roleId]: Menciona um cargo (<@&roleId>).
🧠 Lógica e Controle
s.if[condição; verdadeiro; falso?]: Avalia a condição e executa apenas a ramificação correspondente (lazy evaluation).s.eq[valor1; valor2; caseSensitive?]: Retorna"true"se os valores forem iguais. O terceiro parâmetro controla se diferencia maiúsculas/minúsculas (padrão:true).
💾 Banco de Dados (SQLite)
s.db.set[chave; valor; escopo?]: Grava uma chave/valor no SQLite. O escopo pode serglobal(padrão),guild(isolado por servidor) ouuser(isolado por usuário dentro do servidor).s.db.get[chave; escopo?]: Resgata o valor correspondente no SQLite usando o escopo especificado.
📊 Dashboard Web
O painel é ativado ao chamar client.startDashboard(porta). Ele exibe estatísticas básicas do bot (Uptime, Ping, Comandos) e permite consultar ou gerenciar chaves no banco de dados SQLite via navegador.
🛠️ Testes
Para executar os testes unitários da suíte do parser:
bun test