Selene
A Selene é um assistente para Discord com personalidade própria, memória vetorial, execução de comandos em sandbox Docker, suporte a visão (Gemini) e troca dinâmica de modelos LLM em tempo real. O selene_server conecta um bot Discord a um "cérebro" de IA capaz de conversar em contexto de canal, lembrar informações relevantes via ChromaDB, usar ferramentas (ler/escrever arquivos, terminal, web, análise de imagem), executar tarefas recorrentes agendadas e alternar entre DeepSeek e modelos OpenAI sob demanda.
Selene is a Discord assistant with its own personality, vector memory, command execution in a Docker sandbox, vision support (Gemini), and real-time LLM model switching. The selene_server connects a Discord bot to an AI "brain" capable of channel-aware conversation, memory recall via ChromaDB, tool use (read/write files, terminal, web, image analysis), scheduled recurring tasks, and on-demand switching between DeepSeek and OpenAI models.
Principais recursosMain features
- Bot Discord com comandos administrativos e de conversa.Discord bot with admin and conversation commands.
- Histórico passivo por canal para contexto recente.Passive per-channel history for recent context.
- Memória vetorial local em
quarto_da_selene/vetor_db.Local vector memory atquarto_da_selene/vetor_db. - Sandbox Docker para execução isolada de comandos.Docker sandbox for isolated command execution.
- Ferramentas de busca web e leitura de links.Web search and link-reading tools.
- Análise de imagens via Gemini.Image analysis via Gemini.
- Scheduler simples para notificações automáticas no canal.Simple scheduler for automatic channel notifications.
StackStack
- Python 3.10+
discord.pyopenai(AsyncOpenAI)chromadb+sentence-transformers- Docker
google-genai
Estrutura do projetoProject structure
. ├── main.py # Entrada do bot Discord ├── selene_brain.py # Orquestração de LLM + tool calls ├── ferramentas.py # Implementação das ferramentas ├── requirements.txt ├── quarto_da_selene/ # Estado local (plano, tarefas, vetor_db, uploads) └── README.md
Pré-requisitosPrerequisites
- Python 3.10 ou superior.Python 3.10 or higher.
- Docker instalado e rodando.Docker installed and running.
- Token de bot no Discord.Discord bot token.
- Chaves de API (OpenAI, DeepSeek, Gemini opcional).API keys (OpenAI, DeepSeek, Gemini optional).
InstalaçãoInstall
$ python -m venv .venv $ source .venv/bin/activate $ pip install -r requirements.txt
Configuração (.env)Configuration (.env)
Crie um arquivo .env na raiz com:
Create a .env file in the project root:
DISCORD_TOKEN=seu_token_do_discord OWNER_ID=123456789012345678 # LLMs DEEPSEEK_API_KEY=sua_chave_deepseek OPENAI_API_KEY=sua_chave_openai # Visão (opcional)Vision (optional) GEMINI_API_KEY=sua_chave_gemini
DISCORD_TOKENé obrigatório para o bot iniciar.DISCORD_TOKENis required for the bot to start.OWNER_IDcontrola quem pode usar comandos administrativos como!setllm.OWNER_IDcontrols who can run admin commands like!setllm.- Sem
GEMINI_API_KEY, a ferramenta de análise de imagem fica indisponível.WithoutGEMINI_API_KEY, the image analysis tool is unavailable.
ExecutandoRunning
$ python main.py
Ao subir, o sistema inicializa automaticamente o container Docker de sandbox e o loop de tarefas agendadas. On startup, the system automatically initializes the sandbox Docker container and the scheduled task loop.
Comandos do botBot commands
| ComandoCommand | FunçãoFunction |
|---|---|
!s <mensagem> | Envia uma solicitação para a Selene.Sends a request to Selene. |
!setllm [modelo] | Troca o modelo ativo (somente OWNER_ID).Switches the active model (only OWNER_ID). |
!csm | Limpa memória de curto prazo da conversa.Clears the conversation's short-term memory. |
!docker_reset | Recria o container de sandbox.Recreates the sandbox container. |
Modelos suportados em !setllmModels supported in !setllm
deepseekgpt-5.4gpt-5.4-minigpt-5.4-nanogpt-5.3-codexgpt-5.3-chat-latest
Persistência localLocal persistence
Os dados gerados em runtime ficam em quarto_da_selene/:
Runtime-generated data lives in quarto_da_selene/:
plano_de_acao.mdtarefas.jsonvetor_db/- uploads e artefatos temporários.uploads and temporary artifacts.
Esse diretório está no .gitignore.
This directory is in .gitignore.
Segurança e operaçãoSecurity and operation
- A execução de comandos ocorre em container Docker dedicado.Command execution happens in a dedicated Docker container.
- O bot usa permissões de
message_contentno Discord — configure no painel de aplicações.The bot uses Discord'smessage_contentintent — configure it in the application panel. - Revise o prompt de sistema e as ferramentas antes de qualquer uso em produção pública.Review the system prompt and tools before any public production use.
MotivaçãoMotivation
A Selene nasceu como um experimento de agente persistente: um bot conversacional que não esquece o que aprendeu, pode executar trabalho real (código, leitura de arquivos, buscas) de forma isolada, e cuja "personalidade" emerge da combinação entre prompt de sistema, memória vetorial e o histórico do canal. A possibilidade de trocar o LLM em tempo de execução é uma ferramenta de comparação prática entre modelos sob a mesma interface, contexto e conjunto de ferramentas. Selene was born as an experiment in persistent agency: a conversational bot that doesn't forget what it has learned, can perform real work (code, file reading, searches) in isolation, and whose "personality" emerges from the combination of system prompt, vector memory, and channel history. Runtime LLM switching is a practical comparison tool — same interface, same context, same tools, different model.