mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-08-02 10:16:11 +00:00
fix(bot): preserve trigger case, lowercase only at match time
Trigger is now stored as typed (e.g. "Ping" stays "Ping"). Case-insensitive matching is preserved by lowercasing both the trigger and incoming message at comparison time. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
ec4b7d625f
commit
2766a098a5
@@ -272,7 +272,6 @@ void DataStore::loadPrefsInt(const char *filename, NodePrefs& _prefs, double& no
|
|||||||
rd(&_prefs.bot_channel_enabled, sizeof(_prefs.bot_channel_enabled));
|
rd(&_prefs.bot_channel_enabled, sizeof(_prefs.bot_channel_enabled));
|
||||||
rd(&_prefs.bot_channel_idx, sizeof(_prefs.bot_channel_idx));
|
rd(&_prefs.bot_channel_idx, sizeof(_prefs.bot_channel_idx));
|
||||||
rd(_prefs.bot_trigger, sizeof(_prefs.bot_trigger));
|
rd(_prefs.bot_trigger, sizeof(_prefs.bot_trigger));
|
||||||
for (char* p = _prefs.bot_trigger; *p; p++) *p = (char)tolower((uint8_t)*p);
|
|
||||||
rd(_prefs.bot_reply_dm, sizeof(_prefs.bot_reply_dm));
|
rd(_prefs.bot_reply_dm, sizeof(_prefs.bot_reply_dm));
|
||||||
rd(_prefs.bot_reply_ch, sizeof(_prefs.bot_reply_ch));
|
rd(_prefs.bot_reply_ch, sizeof(_prefs.bot_reply_ch));
|
||||||
rd(&_prefs.clock_hide_seconds, sizeof(_prefs.clock_hide_seconds));
|
rd(&_prefs.clock_hide_seconds, sizeof(_prefs.clock_hide_seconds));
|
||||||
|
|||||||
@@ -8,13 +8,17 @@ void MyMesh::tryBotReplyDM(const ContactInfo& from, const char* text) {
|
|||||||
millis() - _bot_last_dm_reply_ms > 10000UL))
|
millis() - _bot_last_dm_reply_ms > 10000UL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Lower-case the body once, then a single strstr — avoids O(n*m) tolower per offset.
|
// Lower-case both body and trigger for case-insensitive matching.
|
||||||
char low[200];
|
char low[200];
|
||||||
size_t n = strlen(text);
|
size_t n = strlen(text);
|
||||||
if (n >= sizeof(low)) n = sizeof(low) - 1;
|
if (n >= sizeof(low)) n = sizeof(low) - 1;
|
||||||
for (size_t i = 0; i < n; i++) low[i] = (char)tolower((uint8_t)text[i]);
|
for (size_t i = 0; i < n; i++) low[i] = (char)tolower((uint8_t)text[i]);
|
||||||
low[n] = '\0';
|
low[n] = '\0';
|
||||||
if (!strstr(low, _prefs.bot_trigger)) return;
|
char low_trigger[sizeof(_prefs.bot_trigger)];
|
||||||
|
size_t tlen = strnlen(_prefs.bot_trigger, sizeof(low_trigger) - 1);
|
||||||
|
for (size_t i = 0; i < tlen; i++) low_trigger[i] = (char)tolower((uint8_t)_prefs.bot_trigger[i]);
|
||||||
|
low_trigger[tlen] = '\0';
|
||||||
|
if (!strstr(low, low_trigger)) return;
|
||||||
|
|
||||||
uint32_t ts = getRTCClock()->getCurrentTime();
|
uint32_t ts = getRTCClock()->getCurrentTime();
|
||||||
char expanded[200];
|
char expanded[200];
|
||||||
@@ -48,7 +52,11 @@ void MyMesh::tryBotReplyChannel(uint8_t channel_idx, const char* text) {
|
|||||||
if (n >= sizeof(low)) n = sizeof(low) - 1;
|
if (n >= sizeof(low)) n = sizeof(low) - 1;
|
||||||
for (size_t i = 0; i < n; i++) low[i] = (char)tolower((uint8_t)msg[i]);
|
for (size_t i = 0; i < n; i++) low[i] = (char)tolower((uint8_t)msg[i]);
|
||||||
low[n] = '\0';
|
low[n] = '\0';
|
||||||
if (!strstr(low, _prefs.bot_trigger)) return;
|
char low_trigger[sizeof(_prefs.bot_trigger)];
|
||||||
|
size_t tlen = strnlen(_prefs.bot_trigger, sizeof(low_trigger) - 1);
|
||||||
|
for (size_t i = 0; i < tlen; i++) low_trigger[i] = (char)tolower((uint8_t)_prefs.bot_trigger[i]);
|
||||||
|
low_trigger[tlen] = '\0';
|
||||||
|
if (!strstr(low, low_trigger)) return;
|
||||||
|
|
||||||
ChannelDetails ch;
|
ChannelDetails ch;
|
||||||
if (!getChannel(channel_idx, ch)) return;
|
if (!getChannel(channel_idx, ch)) return;
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ public:
|
|||||||
if (_kb_field == 2) {
|
if (_kb_field == 2) {
|
||||||
strncpy(_prefs->bot_trigger, _kb->buf, sizeof(_prefs->bot_trigger) - 1);
|
strncpy(_prefs->bot_trigger, _kb->buf, sizeof(_prefs->bot_trigger) - 1);
|
||||||
_prefs->bot_trigger[sizeof(_prefs->bot_trigger) - 1] = '\0';
|
_prefs->bot_trigger[sizeof(_prefs->bot_trigger) - 1] = '\0';
|
||||||
for (char* p = _prefs->bot_trigger; *p; p++) *p = (char)tolower((uint8_t)*p);
|
|
||||||
} else if (_kb_field == 3) {
|
} else if (_kb_field == 3) {
|
||||||
strncpy(_prefs->bot_reply_dm, _kb->buf, sizeof(_prefs->bot_reply_dm) - 1);
|
strncpy(_prefs->bot_reply_dm, _kb->buf, sizeof(_prefs->bot_reply_dm) - 1);
|
||||||
_prefs->bot_reply_dm[sizeof(_prefs->bot_reply_dm) - 1] = '\0';
|
_prefs->bot_reply_dm[sizeof(_prefs->bot_reply_dm) - 1] = '\0';
|
||||||
|
|||||||
Reference in New Issue
Block a user