diff --git a/package-lock.json b/package-lock.json index 9b2cfac..d5afb8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "discord-aidolls", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "discord-aidolls", - "version": "0.1.0", + "version": "0.1.1", "license": "---", "dependencies": { "discord.js": "^14.18.0", diff --git a/package.json b/package.json index 11e8d6a..6d5db06 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discord-aidolls", - "version": "0.1.0", + "version": "0.1.1", "description": "Ollama Integration into discord with persistent bot memories", "main": "build/index.js", "exports": "./build/index.js", diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index 7bf095a..d892759 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -37,7 +37,17 @@ interface UserConfig { * @param message the message received from the channel */ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client, defaultModel }: { log: (msg: string) => void, msgHist: Queue, ollama: Ollama, client: any, defaultModel: string }, message: Message) => { - const clientId = client.user!.id + // Early check to prevent bot from replying to itself + if (!client.user) { + log('Client user is not defined. Skipping message processing.') + return + } + const clientId = client.user.id + if (message.author.id === clientId) { + log(`Skipping message from self (bot ID: ${clientId}).`) + return + } + let cleanedMessage = clean(message.content, clientId) log(`Message "${cleanedMessage}" from ${message.author.tag} in channel/thread ${message.channelId}.`) @@ -61,6 +71,25 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } } + // Check cooldown for bot-to-bot responses only if probability check passes + const botResponseCooldownKey = `bot:${clientId}:last_bot_response` + const cooldownPeriod = 60 // 60 seconds cooldown + if (isBotMessage && randomChance) { + log(`Bot message probability check passed (10% chance). Checking cooldown.`) + try { + const lastResponseTime = await redis.get(botResponseCooldownKey) + const currentTime = Math.floor(Date.now() / 1000) + if (lastResponseTime && (currentTime - parseInt(lastResponseTime)) < cooldownPeriod) { + log(`Bot ${clientId} is in cooldown for bot-to-bot response. Skipping.`) + return + } + } catch (error) { + log(`Failed to check bot response cooldown: ${error}`) + } + } else if (isBotMessage) { + log(`Bot message probability check failed (10% chance). Skipping cooldown check.`) + } + // Check if last response was to a bot and require user message const lastResponseToBotKey = `bot:${clientId}:last_response_to_bot` let shouldRespond = true @@ -76,25 +105,6 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } } - // Check cooldown for bot-to-bot responses only if probability check passes - const botResponseCooldownKey = `bot:${clientId}:last_bot_response` - const cooldownPeriod = 60 // 60 seconds cooldown - if (isBotMessage && randomChance) { - log(`Bot message probability check passed (10% chance). Checking cooldown.`) - try { - const lastResponseTime = await redis.get(botResponseCooldownKey) - const currentTime = Math.floor(Date.now() / 1000) - if (lastResponseTime && (currentTime - parseInt(lastResponseTime)) < cooldownPeriod) { - log(`Bot ${clientId} is in cooldown for bot-to-bot response. Skipping.`) - shouldRespond = false - } - } catch (error) { - log(`Failed to check bot response cooldown: ${error}`) - } - } else if (isBotMessage) { - log(`Bot message probability check failed (10% chance). Skipping cooldown check.`) - } - if (!shouldRespond) return // Reset last_response_to_bot flag if this is a user message