mirror of https://github.com/meshcore-dev/MeshCore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.1 KiB
60 lines
2.1 KiB
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
* BotConfig
|
|
*
|
|
* Runtime bot configuration, persisted to flash so it survives reboots.
|
|
* Set locally over the companion protocol's custom-vars frames - e.g. via
|
|
* meshcore-cli or the phone app's custom variables - NOT via mesh messages,
|
|
* so only the paired/local user can change it:
|
|
*
|
|
* bot = 1 | 0 enable/disable all bot replies
|
|
* bot.channels = <list> comma-separated channel allow-list the bot
|
|
* answers in (e.g. "#test,#bots"); "none" = the
|
|
* bot only answers direct messages
|
|
*
|
|
* Factory defaults: enabled, no channels (DM-only).
|
|
* ------------------------------------------------------------------------- */
|
|
|
|
#define BOT_SETTINGS_MAGIC 0xB0
|
|
#define BOT_SETTINGS_VERSION 1
|
|
#define BOT_SETTINGS_FILE "/bot_prefs"
|
|
|
|
// Persisted verbatim; fixed size so a rewrite always fully overwrites the
|
|
// previous record (nRF52 FILE_O_WRITE does not truncate).
|
|
struct BotSettings {
|
|
uint8_t magic; // BOT_SETTINGS_MAGIC when the record is valid
|
|
uint8_t version; // BOT_SETTINGS_VERSION
|
|
uint8_t enabled; // 0 = bot completely silent
|
|
uint8_t reserved;
|
|
char channels[64]; // comma-separated channel allow-list ("" = none)
|
|
};
|
|
|
|
class BotConfig {
|
|
public:
|
|
BotConfig() { setDefaults(); }
|
|
|
|
bool isEnabled() { ensureLoaded(); return _s.enabled != 0; }
|
|
const char* channels() { ensureLoaded(); return _s.channels; }
|
|
|
|
// For the custom-vars GET frame: show "none" rather than an empty value.
|
|
const char* channelsForDisplay() { ensureLoaded(); return _s.channels[0] ? _s.channels : "none"; }
|
|
const char* enabledForDisplay() { ensureLoaded(); return _s.enabled ? "1" : "0"; }
|
|
|
|
// Setters for the custom-vars SET frame; persist on success.
|
|
// Return false on an unparseable/oversized value (-> ERR frame to the app).
|
|
bool setEnabled(const char* value);
|
|
bool setChannels(const char* value);
|
|
|
|
private:
|
|
void setDefaults();
|
|
void ensureLoaded();
|
|
bool save();
|
|
|
|
BotSettings _s;
|
|
bool _loaded = false;
|
|
};
|
|
|
|
extern BotConfig bot_config;
|
|
|