From 23a860a9052f648d7d91a3c83260f2c40e3b57bb Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 22 May 2025 09:36:20 -0400 Subject: [PATCH] limit bot-to-bot chat --- docker-compose.yml.nagatoro | 33 +++++++++++++++++++++++++++++ src/events/messageCreate.ts | 42 +++++++++++++++++-------------------- 2 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 docker-compose.yml.nagatoro diff --git a/docker-compose.yml.nagatoro b/docker-compose.yml.nagatoro new file mode 100644 index 0000000..fc98728 --- /dev/null +++ b/docker-compose.yml.nagatoro @@ -0,0 +1,33 @@ +services: + discord2: + build: ./ + container_name: discord2 + restart: always + image: gitea.matrixwide.com/alex/discord-aidolls:0.1.1 + environment: + CLIENT_TOKEN: ${CLIENT_TOKEN} + OLLAMA_IP: ${OLLAMA_IP} + OLLAMA_PORT: ${OLLAMA_PORT} + REDIS_IP: ${REDIS_IP} + REDIS_PORT: ${REDIS_PORT} + MODEL: ${MODEL} + networks: + redis_discord-net: + ipv4_address: ${DISCORD_IP} + volumes: + - ./discord_data2:/app/data + - ./src:/app/src + healthcheck: + test: ["CMD", "redis-cli", "-h", "${REDIS_IP}", "-p", "${REDIS_PORT}", "PING"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + +networks: + redis_discord-net: + external: true + name: redis_discord-net + +volumes: + discord_data2: diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index 7bf095a..186c0e4 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -61,18 +61,18 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } } - // Check if last response was to a bot and require user message - const lastResponseToBotKey = `bot:${clientId}:last_response_to_bot` + // Check if bot has recently replied to a user for bot-to-bot eligibility + const repliedToUserKey = `bot:${clientId}:replied_to_user` let shouldRespond = true if (isBotMessage) { try { - const lastResponseToBot = await redis.get(lastResponseToBotKey) - if (lastResponseToBot === 'true') { - log(`Skipping bot message: Last response was to a bot. Waiting for user message.`) + const hasRepliedToUser = await redis.get(repliedToUserKey) + if (hasRepliedToUser !== 'true') { + log(`Skipping bot message: Bot has not replied to a user recently.`) return } } catch (error) { - log(`Failed to check last response to bot: ${error}`) + log(`Failed to check replied_to_user status: ${error}`) } } @@ -97,16 +97,6 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client if (!shouldRespond) return - // Reset last_response_to_bot flag if this is a user message - if (!isBotMessage) { - try { - await redis.set(lastResponseToBotKey, 'false') - log(`Reset last_response_to_bot flag for bot ${clientId}`) - } catch (error) { - log(`Failed to reset last_response_to_bot flag: ${error}`) - } - } - // Log response trigger log(isMentioned ? 'Responding to mention' : isBotMessage ? 'Responding to bot message' : 'Responding due to random chance') @@ -394,16 +384,22 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client // Send reply to Discord and mark as bot response const reply = jsonResponse.reply || 'Sorry, I didn’t get that. Can you try again?' const replyMessage = await message.reply(reply) - if (isBotMessage) { - try { + try { + // Mark message as bot response if replying to a bot + if (isBotMessage) { await redis.set(`message:${replyMessage.id}:is_bot_response`, 'true', { EX: 3600 }) // 1 hour TTL log(`Marked message ${replyMessage.id} as bot response`) - // Set flag indicating last response was to a bot - await redis.set(lastResponseToBotKey, 'true') - log(`Set last_response_to_bot flag for bot ${clientId}`) - } catch (error) { - log(`Failed to mark message as bot response or set last_response_to_bot flag: ${error}`) + // Reset replied_to_user flag after bot-to-bot reply + await redis.set(repliedToUserKey, 'false') + log(`Reset replied_to_user flag for bot ${clientId} after bot-to-bot reply`) } + // Set replied_to_user flag if replying to a user + if (!isBotMessage) { + await redis.set(repliedToUserKey, 'true') + log(`Set replied_to_user flag for bot ${clientId} after user reply`) + } + } catch (error) { + log(`Failed to set message flags: ${error}`) } // Update message history in Redis