limit bot-to-bot chat
This commit is contained in:
33
docker-compose.yml.nagatoro
Normal file
33
docker-compose.yml.nagatoro
Normal file
@@ -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:
|
||||||
@@ -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
|
// Check if bot has recently replied to a user for bot-to-bot eligibility
|
||||||
const lastResponseToBotKey = `bot:${clientId}:last_response_to_bot`
|
const repliedToUserKey = `bot:${clientId}:replied_to_user`
|
||||||
let shouldRespond = true
|
let shouldRespond = true
|
||||||
if (isBotMessage) {
|
if (isBotMessage) {
|
||||||
try {
|
try {
|
||||||
const lastResponseToBot = await redis.get(lastResponseToBotKey)
|
const hasRepliedToUser = await redis.get(repliedToUserKey)
|
||||||
if (lastResponseToBot === 'true') {
|
if (hasRepliedToUser !== 'true') {
|
||||||
log(`Skipping bot message: Last response was to a bot. Waiting for user message.`)
|
log(`Skipping bot message: Bot has not replied to a user recently.`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} 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
|
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 response trigger
|
||||||
log(isMentioned ? 'Responding to mention' : isBotMessage ? 'Responding to bot message' : 'Responding due to random chance')
|
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
|
// Send reply to Discord and mark as bot response
|
||||||
const reply = jsonResponse.reply || 'Sorry, I didn’t get that. Can you try again?'
|
const reply = jsonResponse.reply || 'Sorry, I didn’t get that. Can you try again?'
|
||||||
const replyMessage = await message.reply(reply)
|
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
|
await redis.set(`message:${replyMessage.id}:is_bot_response`, 'true', { EX: 3600 }) // 1 hour TTL
|
||||||
log(`Marked message ${replyMessage.id} as bot response`)
|
log(`Marked message ${replyMessage.id} as bot response`)
|
||||||
// Set flag indicating last response was to a bot
|
// Reset replied_to_user flag after bot-to-bot reply
|
||||||
await redis.set(lastResponseToBotKey, 'true')
|
await redis.set(repliedToUserKey, 'false')
|
||||||
log(`Set last_response_to_bot flag for bot ${clientId}`)
|
log(`Reset replied_to_user flag for bot ${clientId} after bot-to-bot reply`)
|
||||||
} catch (error) {
|
|
||||||
log(`Failed to mark message as bot response or set last_response_to_bot flag: ${error}`)
|
|
||||||
}
|
}
|
||||||
|
// 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
|
// Update message history in Redis
|
||||||
|
|||||||
Reference in New Issue
Block a user