Vica é um bot para Discord que unifica funcionalidades de chatbot via API da OpenAI (modo IA) e comando de perguntas aleatórias de um banco local (modo banco). Desenvolvido em Node.js para rodar em Raspberry Pi.
- Node.js (versão 16 ou superior recomendada)
- Acesso a um bot registrado no Discord (token e client ID)
- Chave de API compatível com Responses API (ou OpenAI Chat Completions)
- SQLite3 instalado (para banco de dados local)
- Clone o repositório
git clone https://github.com/seuusuario/vica.git
cd vica- Instale as dependências
npm install- Crie o arquivo
config.jsonna raiz do projeto com a estrutura:
{
"discord": {
"token": "SEU_DISCORD_BOT_TOKEN",
"clientId": "SEU_CLIENT_ID"
},
"openai": {
"base_url": "https://sua.api.openai.compativel/responses",
"api_key": "SUA_CHAVE_API",
"model": "gpt-4o",
"model_embeddings": "text-embedding-3-small",
"retries": 3,
"initial_delay_ms": 1000,
"sendSystemPrompt": true
},
"settings": {
"historyLimit": 6,
"maxTokens": 500,
"rate_limit_ms": 5000
}
}-
Adicione perguntas no arquivo
data/perguntas.txt(uma por linha) -
Registre os comandos slash no Discord
node deploy-commands.js- Inicie o bot
node bot.jsbot.js- arquivo principal que inicializa o botcommands/- comandos slash do bot (ex:/perguntar)core/- lógica de comunicação com a API e manipulação de contextodata/- banco de perguntas (perguntas.txt) e banco SQLite (database.db)events/- listeners de eventos Discordutils/- funções auxiliaresconfig.json- configurações do bot e API (não deve ser versionado).gitignore- arquivos e pastas ignorados pelo git
- Chatbot com IA: Responde a menções e replies utilizando modelos compatíveis com OpenAI, com suporte a contexto de conversação.
- Sistema de Níveis (XP): Ganho de XP por mensagens, com ranking e mensagens de level up configuráveis.
- Memória de Longo Prazo: Armazena fatos sobre usuários e o servidor para personalizar interações futuras (via embeddings e busca semântica).
- Configuração via Discord: Painel interativo (
/config) para gerenciar canais, mensagens de boas-vindas, e outras configurações sem reiniciar o bot. - Blacklists: Comandos para impedir o chatbot (
/chat_blacklist) ou o sistema de XP (/rank_blacklist) de funcionar em canais específicos. - Multimodalidade: Suporte a envio de imagens para análise pela IA.
O Model Context Protocol (MCP) é um protocolo padronizado que permite que assistentes de IA se comuniquem com serviços externos e ferramentas. O Vica suporta MCP para estender suas capacidades sem modificar o código principal.
| Servidor | Transporte | Status | Ferramentas |
|---|---|---|---|
| Memory | stdio | ✅ Funcionando | 9 ferramentas (operações de grafo de conhecimento) |
| Sequential Thinking | http | - | |
| Time | http | - |
Os servidores MCP são configurados no arquivo data/tools.json. Adicione servidores com o seguinte formato:
Transporte stdio (servidores locais):
{
"name": "memory",
"type": "mcp",
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory@latest"],
"env": {
"MEMORY_FILE_PATH": "./data/memory.json"
}
}Transporte http (servidores hospedados):
{
"name": "example_server",
"type": "mcp",
"transport": "http",
"url": "https://example.com/mcp-endpoint"
}Servidores MCP podem receber variáveis de ambiente através do campo env:
"env": {
"MEMORY_FILE_PATH": "d:/Projetos/Discord/vica/data/memory.json",
"CUSTOM_VAR": "valor"
}O servidor MCP de memória fornece operações de grafo de conhecimento:
Ferramentas disponíveis:
create_entities- Criar múltiplas entidades no grafocreate_relations- Criar relações entre entidadesadd_observations- Adicionar observações a entidades existentesdelete_entities- Remover entidades e suas relaçõesdelete_observations- Remover observações específicasdelete_relations- Remover relações do graforead_graph- Ler o grafo completosearch_nodes- Buscar nós baseado em queriesopen_nodes- Abrir nós específicos por nome
Execute o script de teste para verificar a conectividade dos servidores MCP:
node test_mcp.jsEste script:
- Inicia todos os servidores MCP configurados
- Lista as ferramentas disponíveis de cada servidor
- Realiza um teste simples de chamada de ferramenta
- Para todos os servidores gracefulmente
Servidores HTTP retornando HTML:
As URLs do mcp.so podem não ser endpoints HTTP MCP corretos. Possíveis problemas:
- Protocolo diferente necessário (SSE, WebSocket)
- Headers de autenticação faltando
- Formato de endpoint incorreto
Compatibilidade com Windows:
- Use
npm.cmd execem vez denpxno Windows - O
core/mcp_client.jsadiciona automaticamenteshell: truepara Windows
Falhas na inicialização do servidor:
- Verifique se o comando está disponível no PATH do sistema
- Confirme que as variáveis de ambiente estão configuradas corretamente
- Certifique-se de que as dependências necessárias estão instaladas
- Revise os logs do servidor para mensagens de erro detalhadas
- Adicione a configuração do servidor em
data/tools.json - Escolha o tipo de transporte apropriado (stdio ou http)
- Configure as variáveis de ambiente necessárias
- Teste com
node test_mcp.js - Reinicie o bot para carregar o novo servidor
- Verifique que as ferramentas estão disponíveis para chamada de função da IA
- Prefira transporte stdio para servidores locais (mais confiável e fácil de debugar)
- Use caminhos absolutos para configurações de servidores baseados em arquivos
- Teste completamente antes de implantar em produção
- Monitore a saúde do servidor através dos logs
- Implemente lógica de fallback quando ferramentas MCP falharem
Vica usa tags especiais para armazenar e sinalizar contexto:
[salvar_memoria]...[/salvar_memoria]: salva um fato no banco comimportance(1–10) econfidence(0.0–1.0).[meta]...[/meta]: bloco de metadados inline.[imagem]: sinaliza que a mensagem possui imagem anexada.
Exemplos:
[salvar_memoria]{GUILD_ID}:123456789012345678:curte animes:8:0.9[/salvar_memoria][meta]user:João|id:123[/meta][imagem] Texto com imagem.
As tags são parseadas por core/tagParser.js e consumidas nas respostas da IA por core/oai_interface.js. Placeholders como {GUILD_ID} são substituídos automaticamente conforme o contexto.
- Refinamento da "personalidade" através de prompt engineering contínuo.
- Melhorias na performance de busca de memórias (embeddings).