From fd626cb73f04d849a27273f24336b1454161d4df Mon Sep 17 00:00:00 2001 From: quarterturn Date: Fri, 23 May 2025 21:03:09 -0400 Subject: [PATCH] update src/events/messageCreate.ts to slience or mask errors going to the discord chat --- src/events/messageCreate.ts | 47 ++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index dacc10b..ae2341c 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -30,6 +30,18 @@ interface UserConfig { } } +// List of in-character error responses for unavoidable Discord replies +const friendlyErrorResponses = [ + 'Huh?', + 'Sorry, I wasn’t listening. Can you say that again?', + 'Um... what was that?', + 'Oops, my mind wandered! Could you repeat that?', + 'Hehe, I got distracted. Say it one more time?' +] + +// Function to get a random friendly error response +const getFriendlyError = () => friendlyErrorResponses[Math.floor(Math.random() * friendlyErrorResponses.length)] + /** * Max Message length for free users is 2000 characters (bot or not). * Bot supports infinite lengths for normal messages. @@ -142,9 +154,9 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client if (config === undefined) { redis.set(`server:${message.guildId}:config`, JSON.stringify({ options: { 'toggle-chat': true } })) .catch(err => log(`Failed to set default server config in Redis: ${err}`)); - reject(new Error('Failed to locate or create Server Preferences\n\nPlease try chatting again...')) + reject(new Error('Failed to locate or create Server Preferences')) } else if (!config.options['toggle-chat']) { - reject(new Error('Admin(s) have disabled chat features.\n\nPlease contact your server\'s admin(s).')) + reject(new Error('Admin(s) have disabled chat features')) } else { resolve(config) } @@ -154,10 +166,12 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } catch (error) { ++attempt if (attempt < maxRetries) { - log(`Attempt ${attempt} failed for Server Preferences. Retrying in ${delay}ms...`) + log(`Attempt ${attempt} failed for Server Preferences: ${error.message}. Retrying in ${delay}ms...`) await new Promise(ret => setTimeout(ret, delay)) } else { - throw new Error(`Could not retrieve Server Preferences, please try chatting again...`) + log(`Could not retrieve Server Preferences after ${maxRetries} attempts: ${error.message}`) + message.reply(getFriendlyError()) + return } } } @@ -192,7 +206,7 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client redis.set(userConfigKey, JSON.stringify(defaultConfig)) .catch(err => log(`Failed to set default user config in Redis: ${err}`)); log(`Created default config for ${message.author.username}`) - reject(new Error('No User Preferences is set up.\n\nCreating preferences with defaults.\nPlease try chatting again.')) + reject(new Error('No User Preferences set up. Created defaults.')) return } @@ -207,7 +221,7 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client shouldStream = config.options['message-stream'] || false if (typeof config.options['switch-model'] !== 'string') { - reject(new Error(`No Model was set. Please set a model by running \`/switch-model \`.\n\nIf you do not have any models. Run \`/pull-model \`.`)) + reject(new Error('No Model set. User must run `/switch-model` or `/pull-model`.')) } resolve(config) @@ -220,10 +234,12 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } catch (error) { ++attempt if (attempt < maxRetries) { - log(`Attempt ${attempt} failed for User Preferences. Retrying in ${delay}ms...`) + log(`Attempt ${attempt} failed for User Preferences: ${error.message}. Retrying in ${delay}ms...`) await new Promise(ret => setTimeout(ret, delay)) } else { - throw new Error(`Could not retrieve User Preferences, please try chatting again...`) + log(`Could not retrieve User Preferences after ${maxRetries} attempts: ${error.message}`) + message.reply(getFriendlyError()) + return } } } @@ -251,7 +267,9 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } if (!userConfig) { - throw new Error(`Failed to initialize User Preference for **${message.author.username}**.\n\nIt's likely you do not have a model set. Please use the \`switch-model\` command to do that.`) + log(`Failed to initialize User Preference for ${message.author.username}: No config available`) + message.reply(getFriendlyError()) + return } // Get message attachment if exists @@ -377,7 +395,7 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client }) } catch (error) { log(`Ollama chat error: ${error}`) - message.reply('Sorry, I’m having trouble contacting the AI model. Try again later?') + message.reply(getFriendlyError()) msgHist.pop() return } @@ -396,13 +414,14 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } } catch (error) { log(`Failed to parse model response: ${error}`) - message.reply('Sorry, I’m having trouble thinking right now. Try again?') + message.reply(getFriendlyError()) msgHist.pop() return } if (jsonResponse.status === 'error') { - message.reply(jsonResponse.reply) + log(`Model returned error status: ${jsonResponse.reply}`) + message.reply(getFriendlyError()) msgHist.pop() return } @@ -439,7 +458,7 @@ 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 reply = jsonResponse.reply || 'Huh?' let replyMessage; try { replyMessage = await message.reply(reply) @@ -487,7 +506,7 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client } } catch (error: any) { log(`Error in message processing: ${error.message}`) - message.reply(`**Error Occurred:**\n\n**Reason:** *${error.message}*`) + message.reply(getFriendlyError()) msgHist.pop() } })