Guia do SDK de Configurações (Dashboard)
O pacote @botgate/sdk é a ferramenta oficial para integrar as configurações do seu bot definidas no Dashboard do BotGate diretamente no seu código.
Diferente do Reporter (que envia dados), este SDK foca em receber e gerenciar as preferências que seus usuários (donos de servidores) definiram para o seu bot, como prefixos personalizados, canais de log, módulos de boas-vindas e muito mais.
📦 Instalação
No diretório do seu bot, instale o pacote via npm:
npm install @botgate/sdk
🚀 Inicialização
Para começar, instale o SDK e inicialize-o com a sua apiKey. Recomendamos fazer isso uma única vez na inicialização do seu bot.
import { BotGateSDK } from "@botgate/sdk";
const botgate = new BotGateSDK({
apiKey: "SUA_API_KEY_AQUI",
cacheTtl: 300, // (Opcional) Tempo de cache em segundos. Padrão: 5 minutos.
debug: false, // (Opcional) Ativa logs de monitoramento no console.
});
🛠️ Como utilizar
O método principal é o getGuildSettings(guildId), que retorna um objeto contendo todas as configurações daquele servidor específico.
Exemplo: Prefixo Dinâmico
client.on("messageCreate", async (message) => {
if (message.author.bot || !message.guild) return;
// Busca as configurações do servidor direto do BotGate
// O SDK gerencia o cache automaticamente para você
const settings = await botgate.getGuildSettings(message.guild.id);
// Usa o prefixo configurado ou o padrão '!'
const prefix = settings.prefix || "!";
if (!message.content.startsWith(prefix)) return;
// Lógica dos seus comandos...
});
📑 Módulos e Campos Suportados
O BotGate Dashboard oferece um esquema fixo de módulos. Abaixo estão todos os campos disponíveis no objeto settings retornado pelo SDK:
⚙️ Geral (general)
Configurações básicas de identidade e comportamento.
prefix: (String) O prefixo de comandos definido pelo servidor.
👋 Boas-Vindas (welcome)
Mensagens enviadas quando novos membros entram no servidor.
welcome_enabled: (Boolean) Indica se o módulo está ativo.welcome_channel_id: (String) ID do canal de texto para as mensagens.welcome_message: (Object) Objeto de mensagem/embed configurado no Dashboard.
🚪 Saída (leave)
Mensagens enviadas quando membros saem do servidor.
leave_enabled: (Boolean) Indica se o módulo está ativo.leave_channel_id: (String) ID do canal de texto para as mensagens.leave_message: (Object) Objeto de mensagem/embed configurado no Dashboard.
📜 Logs de Auditoria (logs)
Sistema de monitoramento de eventos. Possui uma configuração global e submódulos específicos.
Configuração Global:
logs_enabled: (Boolean) Ativador geral do sistema de logs.logs_channel_id: (String) Canal único onde todos os logs habilitados serão enviados.
Submódulos de Eventos:
Cada submódulo possui um campo _enabled (Boolean) e um campo _message (Objeto de Embed).
ban_log: Logs de banimentos.kick_log: Logs de expulsões.unban_log: Logs de desbanimentos.message_delete_log: Logs de mensagens apagadas.message_edit_log: Logs de mensagens editadas.role_add_log: Logs de cargos adicionados a membros.role_remove_log: Logs de cargos removidos de membros.
💡 Exemplos de Integração de Logs
Abaixo estão os exemplos de como implementar cada evento de log utilizando o SDK.
Dica: O campo
_messageretornado pelo Dashboard já é um objeto compatível comEmbedBuilderdo Discord.js.
🔨 Banimentos e Desbanimentos
// Logs de Banimento (GuildBanAdd)
client.on("guildBanAdd", async (ban) => {
const settings = await botgate.getGuildSettings(ban.guild.id);
if (settings.logs_enabled && settings.ban_log_enabled) {
const channel = ban.guild.channels.cache.get(settings.logs_channel_id);
if (channel) await channel.send({ embeds: [settings.ban_log_message] });
}
});
// Logs de Desbanimento (GuildBanRemove)
client.on("guildBanRemove", async (ban) => {
const settings = await botgate.getGuildSettings(ban.guild.id);
if (settings.logs_enabled && settings.unban_log_enabled) {
const channel = ban.guild.channels.cache.get(settings.logs_channel_id);
if (channel) await channel.send({ embeds: [settings.unban_log_message] });
}
});
🗑️ Mensagens (Excluídas e Editadas)
// Mensagem Excluída (MessageDelete)
client.on("messageDelete", async (message) => {
if (message.author?.bot || !message.guild) return;
const settings = await botgate.getGuildSettings(message.guild.id);
if (settings.logs_enabled && settings.message_delete_log_enabled) {
const channel = message.guild.channels.cache.get(settings.logs_channel_id);
if (channel)
await channel.send({ embeds: [settings.message_delete_log_message] });
}
});
// Mensagem Editada (MessageUpdate)
client.on("messageUpdate", async (oldMsg, newMsg) => {
if (newMsg.author?.bot || !newMsg.guild || oldMsg.content === newMsg.content)
return;
const settings = await botgate.getGuildSettings(newMsg.guild.id);
if (settings.logs_enabled && settings.message_edit_log_enabled) {
const channel = newMsg.guild.channels.cache.get(settings.logs_channel_id);
if (channel)
await channel.send({ embeds: [settings.message_edit_log_message] });
}
});
🏷️ Cargos e Membros
// Mudanças de Cargos (GuildMemberUpdate)
client.on("guildMemberUpdate", async (oldMember, newMember) => {
const settings = await botgate.getGuildSettings(newMember.guild.id);
if (!settings.logs_enabled) return;
const channel = newMember.guild.channels.cache.get(settings.logs_channel_id);
if (!channel) return;
// Detectar cargos adicionados
const addedRoles = newMember.roles.cache.filter(
(r) => !oldMember.roles.cache.has(r.id),
);
if (addedRoles.size > 0 && settings.role_add_log_enabled) {
await channel.send({ embeds: [settings.role_add_log_message] });
}
// Detectar cargos removidos
const removedRoles = oldMember.roles.cache.filter(
(r) => !newMember.roles.cache.has(r.id),
);
if (removedRoles.size > 0 && settings.role_remove_log_enabled) {
await channel.send({ embeds: [settings.role_remove_log_message] });
}
});
🧠 Gerenciamento de Cache
Para garantir a melhor performance do seu bot e não sobrecarregar a API, o SDK possui um sistema de cache inteligente:
- Auto-Cache: Toda busca via
getGuildSettingsfica salva em memória pelo tempo definido nocacheTtl. - Eficiência: Se mil mensagens chegarem no mesmo segundo, apenas a primeira consultará a API.
- Forçar Refresh: Use
botgate.getGuildSettings(guildId, true)para ignorar o cache. - Limpeza Manual:
botgate.clearCache(guildId)(Específico)botgate.clearCache()(Global)
🛡️ Resiliência
O SDK foi construído para ser "silencioso". Em caso de falha na API ou timeout, ele retornará um objeto vazio {} em vez de quebrar a execução do seu bot, garantindo estabilidade ao seu projeto.