diff --git a/README.md b/README.md index d2050dd..c47be9b 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ git clone https://github.com/spudgunman/meshing-around | `whereami` | Returns the address of the sender's location if known | | `whoami` | Returns details of the node asking, also returned when position exchanged 📍 | ✅ | | `whois` | Returns details known about node, more data with bbsadmin node | ✅ | +| 'echo' | Echo string back, disabled by default | ✅ | ### Radio Propagation & Weather Forecasting | Command | Description | | diff --git a/config.template b/config.template index 67c0707..013963e 100644 --- a/config.template +++ b/config.template @@ -98,6 +98,8 @@ dont_retry_disconnect = False #echo command, will echo back your message as the bot enableEcho = False +# command will only echo 1:1 if sent on this channel, otherwise it will prepend @yourname +echoChannel = 9 [emergencyHandler] # enable or disable the emergency response handler diff --git a/mesh_bot.py b/mesh_bot.py index fb78334..621cdca 100755 --- a/mesh_bot.py +++ b/mesh_bot.py @@ -298,12 +298,15 @@ def handle_motd(message, message_from_id, isDM): return msg def handle_echo(message, message_from_id, deviceID, isDM, channel_number): - if "?" in message and isDM: + if "?" in message.lower(): return "echo command returns your message back to you. Example:echo Hello World" elif "echo " in message.lower(): echo_msg = message.split("echo ")[1] if echo_msg.strip() == "": return "Please provide a message to echo back to you. Example:echo Hello World" + if echoChannel and channel_number != echoChannel: + echo_msg = "@" + get_name_from_number(message_from_id, 'short', deviceID) + " " + echo_msg + # return the echo message return echo_msg else: return "Please provide a message to echo back to you. Example:echo Hello World" diff --git a/modules/settings.py b/modules/settings.py index 52eb67d..55fd426 100644 --- a/modules/settings.py +++ b/modules/settings.py @@ -230,7 +230,8 @@ try: llmReplyToNonCommands = config['general'].getboolean('llmReplyToNonCommands', True) dont_retry_disconnect = config['general'].getboolean('dont_retry_disconnect', False) # default False, retry on disconnect favoriteNodeList = config['general'].get('favoriteNodeList', '').split(',') - enableEcho = config['general'].getboolean('enableEcho', False) # default False, undocumented + enableEcho = config['general'].getboolean('enableEcho', False) # default False + echoChannel = config['general'].getint('echoChannel', '9') # default 9, empty string to ignore # emergency response emergency_responder_enabled = config['emergencyHandler'].getboolean('enabled', False) diff --git a/pong_bot.py b/pong_bot.py index 40389eb..ae03c1b 100755 --- a/pong_bot.py +++ b/pong_bot.py @@ -147,22 +147,44 @@ def handle_ping(message_from_id, deviceID, message, hop, snr, rssi, isDM, chann return msg -def handle_motd(message): +def handle_motd(message, message_from_id, isDM): global MOTD - if "$" in message: + isAdmin = False + msg = "" + # check if the message_from_id is in the bbs_admin_list + if bbs_admin_list != ['']: + for admin in bbs_admin_list: + if str(message_from_id) == admin: + isAdmin = True + break + else: + isAdmin = True + + # admin help via DM + if "?" in message and isDM and isAdmin: + msg = "Message of the day, set with 'motd $ HelloWorld!'" + elif "?" in message and isDM and not isAdmin: + # non-admin help via DM + msg = "Message of the day" + elif "$" in message and isAdmin: motd = message.split("$")[1] MOTD = motd.rstrip() - return "MOTD Set to: " + MOTD + logger.debug(f"System: {message_from_id} changed MOTD: {MOTD}") + msg = "MOTD changed to: " + MOTD else: - return MOTD + msg = "MOTD: " + MOTD + return msg def handle_echo(message, message_from_id, deviceID, isDM, channel_number): - if "?" in message and isDM: + if "?" in message.lower() and isDM: return "echo command returns your message back to you. Example:echo Hello World" elif "echo " in message.lower(): echo_msg = message.split("echo ")[1] if echo_msg.strip() == "": return "Please provide a message to echo back to you. Example:echo Hello World" + if echoChannel and channel_number != echoChannel: + echo_msg = "@" + get_name_from_number(message_from_id, 'short', deviceID) + " " + echo_msg + # return the echo message return echo_msg else: return "Please provide a message to echo back to you. Example:echo Hello World" @@ -425,6 +447,8 @@ async def start_rx(): logger.debug("System: Celestial Telemetry Enabled") if motd_enabled: logger.debug(f"System: MOTD Enabled using {MOTD}") + if enableEcho: + logger.debug(f"System: Echo command Enabled") if sentry_enabled: logger.debug(f"System: Sentry Mode Enabled {sentry_radius}m radius reporting to channel:{secure_channel}") if store_forward_enabled: