* Extracts the search query from the message. * @param {string} message Message to extract the search query from * @returns {string} Search query
(message)
| 357 | * @returns {string} Search query |
| 358 | */ |
| 359 | function extractSearchQuery(message) { |
| 360 | if (message && message.trim().startsWith('.')) { |
| 361 | console.debug('WebSearch: message starts with a dot, ignoring'); |
| 362 | return; |
| 363 | } |
| 364 | |
| 365 | message = processInputText(message); |
| 366 | |
| 367 | if (!message) { |
| 368 | console.debug('WebSearch: processed message is empty'); |
| 369 | return; |
| 370 | } |
| 371 | |
| 372 | console.log('WebSearch: processed message', message); |
| 373 | |
| 374 | if (extension_settings.websearch.use_backticks) { |
| 375 | // Remove triple backtick blocks |
| 376 | message = message.replace(/```[^`]+```/gi, ''); |
| 377 | // Find the first backtick-enclosed substring |
| 378 | const match = message.match(/`([^`]+)`/i); |
| 379 | |
| 380 | if (match) { |
| 381 | const query = match[1].trim(); |
| 382 | console.debug('WebSearch: backtick-enclosed substring found', query); |
| 383 | return query; |
| 384 | } |
| 385 | } |
| 386 | |
| 387 | if (extension_settings.websearch.use_regex) { |
| 388 | for (const rule of extension_settings.websearch.regex) { |
| 389 | const regex = regexFromString(rule.pattern); |
| 390 | |
| 391 | if (regex && regex.test(message)) { |
| 392 | const groups = message.match(regex); |
| 393 | const query = substituteParamsExtended(rule.query).replace(/\$(\d+)/g, (_, i) => groups[i] || ''); |
| 394 | console.debug('WebSearch: regex rule matched', rule.pattern, query); |
| 395 | return query; |
| 396 | } |
| 397 | } |
| 398 | } |
| 399 | |
| 400 | if (extension_settings.websearch.use_trigger_phrases) { |
| 401 | // Find the first index of the trigger phrase in the message |
| 402 | let triggerPhraseIndex = -1; |
| 403 | let triggerPhraseActual = ''; |
| 404 | const triggerPhrases = extension_settings.websearch.triggerPhrases; |
| 405 | |
| 406 | for (let i = 0; i < triggerPhrases.length; i++) { |
| 407 | const triggerPhrase = triggerPhrases[i].toLowerCase(); |
| 408 | const indexOf = message.indexOf(triggerPhrase); |
| 409 | |
| 410 | if (indexOf !== -1) { |
| 411 | console.debug(`WebSearch: trigger phrase found "${triggerPhrase}" at index ${indexOf}`); |
| 412 | triggerPhraseIndex = indexOf; |
| 413 | triggerPhraseActual = triggerPhrase; |
| 414 | break; |
| 415 | } |
| 416 | } |
no test coverage detected