update src/events/messageCreate.ts to slience or mask errors going to the discord chat
This commit is contained in:
@@ -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).
|
* Max Message length for free users is 2000 characters (bot or not).
|
||||||
* Bot supports infinite lengths for normal messages.
|
* Bot supports infinite lengths for normal messages.
|
||||||
@@ -142,9 +154,9 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client
|
|||||||
if (config === undefined) {
|
if (config === undefined) {
|
||||||
redis.set(`server:${message.guildId}:config`, JSON.stringify({ options: { 'toggle-chat': true } }))
|
redis.set(`server:${message.guildId}:config`, JSON.stringify({ options: { 'toggle-chat': true } }))
|
||||||
.catch(err => log(`Failed to set default server config in Redis: ${err}`));
|
.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']) {
|
} 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 {
|
} else {
|
||||||
resolve(config)
|
resolve(config)
|
||||||
}
|
}
|
||||||
@@ -154,10 +166,12 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
++attempt
|
++attempt
|
||||||
if (attempt < maxRetries) {
|
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))
|
await new Promise(ret => setTimeout(ret, delay))
|
||||||
} else {
|
} 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))
|
redis.set(userConfigKey, JSON.stringify(defaultConfig))
|
||||||
.catch(err => log(`Failed to set default user config in Redis: ${err}`));
|
.catch(err => log(`Failed to set default user config in Redis: ${err}`));
|
||||||
log(`Created default config for ${message.author.username}`)
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +221,7 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client
|
|||||||
shouldStream = config.options['message-stream'] || false
|
shouldStream = config.options['message-stream'] || false
|
||||||
|
|
||||||
if (typeof config.options['switch-model'] !== 'string') {
|
if (typeof config.options['switch-model'] !== 'string') {
|
||||||
reject(new Error(`No Model was set. Please set a model by running \`/switch-model <model of choice>\`.\n\nIf you do not have any models. Run \`/pull-model <model name>\`.`))
|
reject(new Error('No Model set. User must run `/switch-model` or `/pull-model`.'))
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve(config)
|
resolve(config)
|
||||||
@@ -220,10 +234,12 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
++attempt
|
++attempt
|
||||||
if (attempt < maxRetries) {
|
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))
|
await new Promise(ret => setTimeout(ret, delay))
|
||||||
} else {
|
} 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) {
|
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
|
// Get message attachment if exists
|
||||||
@@ -377,7 +395,7 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client
|
|||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log(`Ollama chat error: ${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()
|
msgHist.pop()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -396,13 +414,14 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log(`Failed to parse model response: ${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()
|
msgHist.pop()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jsonResponse.status === 'error') {
|
if (jsonResponse.status === 'error') {
|
||||||
message.reply(jsonResponse.reply)
|
log(`Model returned error status: ${jsonResponse.reply}`)
|
||||||
|
message.reply(getFriendlyError())
|
||||||
msgHist.pop()
|
msgHist.pop()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -439,7 +458,7 @@ 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 || 'Huh?'
|
||||||
let replyMessage;
|
let replyMessage;
|
||||||
try {
|
try {
|
||||||
replyMessage = await message.reply(reply)
|
replyMessage = await message.reply(reply)
|
||||||
@@ -487,7 +506,7 @@ export default event(Events.MessageCreate, async ({ log, msgHist, ollama, client
|
|||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
log(`Error in message processing: ${error.message}`)
|
log(`Error in message processing: ${error.message}`)
|
||||||
message.reply(`**Error Occurred:**\n\n**Reason:** *${error.message}*`)
|
message.reply(getFriendlyError())
|
||||||
msgHist.pop()
|
msgHist.pop()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user