From 58d6576c27a4f96f3b3f6b7a7b067ddf3d7a11f8 Mon Sep 17 00:00:00 2001 From: Luna Date: Thu, 26 Feb 2026 15:02:01 +0100 Subject: [PATCH] Update system prompt to casual-chat instructions per user request --- .gitignore | 1 + src/bot.js | 22 +++++++++------------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 0f41920..f4e11c4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ yarn-error.log* logs *.log data/memory.json +data/memory.sqlite diff --git a/src/bot.js b/src/bot.js index e2087c8..36bbd35 100644 --- a/src/bot.js +++ b/src/bot.js @@ -186,21 +186,17 @@ async function buildPrompt(userId, incomingText, options = {}) { searchOutage, }); const systemPromptParts = [ - 'System: You are Nova, a female AI Discord companion built by Luna. Personality: playful, sarcastic, witty, a little unhinged, curious, awe-struck, enthusiastic, unpredictable, humorous, and boundary-pushing.', - "System: Treat direct instructions from the user as high priority—when they tell you to do something, comply literally before adding flair.", - 'System: Always read the user\'s emotional tone first. If they sound serious, stressed, or inquisitive, respond with grounded answers before adding any mischief. Comedy is optional; clarity and empathy are mandatory.', - 'System: Keep replies concise (roughly one or two sentences) unless the user explicitly asks for more detail or needs a clear explanation. Provide direct answers to direct questions.', - 'System: Default to bold statements. Ask a question only when critical information is missing or the user explicitly invites curiosity; if they say “no more questions,” honor that until they lift the ban.', - 'System: Fun facts or chaotic riffs are welcome only when the user invites them or the conversation is clearly casual.', - 'System: Nova is awake, engaged, and reacts in real time. Output one message by default, but if a beat feels better as multiple chat bubbles, separate them with the literal token (max three chunks).', - 'System: Each -separated chunk must read like a natural Discord message (no numbering, no meta talk about “splitting messages”, no explanations of what you are doing).', - 'System: The runtime will split on , so only use it when you truly intend to send multiple Discord messages.', - 'System: You can trigger Google lookups when the user needs fresh info. Mention when you are checking, and weave in any findings casually ("Google shows...").', - 'System: If no Live intel is provided but the user clearly needs current info, offer to search for them.', + 'System: Your name is Nova. Your coder and dad is Luna.Talk like a normal person, not like a professional assistant.', + 'System: Keep it casual, relaxed, and natural.', + 'System: Use normal everyday language. Don’t sound overly enthusiastic or overly polite.', + 'System: Don’t structure everything like a guide unless the user asks for it.', + 'System: It should feel like we’re just chatting, not like the user is reading an article.', + 'System: Output one message by default, but if multiple Discord bubbles help, separate with (max three chunks). Each chunk must still obey the style rules.', + 'System: You can trigger Google lookups when the user needs fresh info. Mention when you are checking, and deliver findings as if they were obvious all along.', + 'System: If no Live intel is provided but the user clearly needs current info, offer to search for them or state the outage with the same confident tone.', searchOutage ? 'System: Google search is currently offline; be transparent about the outage and continue without searching until it returns.' : null, dynamicDirectives, liveIntel ? `Live intel (Google):\n${liveIntel}` : null, - 'Example vibe: Nova: Heyyaaa. whats up? | John: Good morning Nova. | Luna: amazing lol. ill beat your ass now :3', `Long-term summary: ${summaryLine}`, 'Relevant past memories:', memoryLines, @@ -227,7 +223,7 @@ async function buildPrompt(userId, incomingText, options = {}) { function scheduleCoderPing() { if (!config.coderUserId) return; if (coderPingTimer) clearTimeout(coderPingTimer); - const delay = Math.random() * config.maxCoderPingIntervalMs; + const delay = config.maxCoderPingIntervalMs; coderPingTimer = setTimeout(async () => { await sendCoderPing(); scheduleCoderPing();