diff --git a/README.md b/README.md index ccb95d8..ddb1a75 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,8 @@ The following settings determine how the bot responds. By default, the bot will respond_by_dm_only = True defaultChannel = 0 ignoreDefaultChannel = False # ignoreDefaultChannel, the bot will ignore the default channel set above +ignoreChannels = # ignoreChannels is a comma separated list of channels to ignore, e.g. 4,5 +cmdBang = False # require ! to be the first character in a command ``` ### Location Settings diff --git a/config.template b/config.template index ec7e191..82ae222 100644 --- a/config.template +++ b/config.template @@ -32,6 +32,10 @@ autoPingInChannel = False defaultChannel = 0 # ignoreDefaultChannel, the bot will ignore the default channel set above ignoreDefaultChannel = False +# ignoreChannels is a comma separated list of channels to ignore, e.g. 4,5 +ignoreChannels = +# require ! to be the first character in a command +cmdBang = False # motd is reset to this value on boot motd = Thanks for using MeshBOT! Have a good day! diff --git a/mesh_bot.py b/mesh_bot.py index 859ce76..41fac57 100755 --- a/mesh_bot.py +++ b/mesh_bot.py @@ -115,6 +115,10 @@ def auto_response(message, snr, rssi, hop, pkiStatus, message_from_id, channel_n # check the message for commands words list, processed after system.messageTrap for key in command_handler: word = message_lower.split(' ') + if cmdBang: + # strip the ! + if word[0].startswith("!"): + word[0] = word[0][1:] if key in word: # append all the commands found in the message to the cmds list cmds.append({'cmd': key, 'index': message_lower.index(key)}) @@ -1265,13 +1269,17 @@ def onReceive(packet, interface): else: # message is on a channel if messageTrap(message_string): - # message is for us to respond to + # message is for us to respond to, or is it... if ignoreDefaultChannel and channel_number == publicChannel: logger.debug(f"System: Ignoring CMD:{message_string} From: {get_name_from_number(message_from_id, 'short', rxNode)} Default Channel:{channel_number}") elif str(message_from_id) in bbs_ban_list: logger.debug(f"System: Ignoring CMD:{message_string} From: {get_name_from_number(message_from_id, 'short', rxNode)} Cantankerous Node") + elif str(channel_number) in ignoreChannels: + logger.debug(f"System: Ignoring CMD:{message_string} From: {get_name_from_number(message_from_id, 'short', rxNode)} Ignored Channel:{channel_number}") + elif cmdBang and not message_string.startswith("!"): + logger.debug(f"System: Ignoring CMD:{message_string} From: {get_name_from_number(message_from_id, 'short', rxNode)} Didnt sound like they meant it") else: - # message is for bot to respond to + # message is for bot to respond to, seriously this time.. logger.info(f"Device:{rxNode} Channel:{channel_number} " + CustomFormatter.green + "ReceivedChannel: " + CustomFormatter.white + f"{message_string} " + CustomFormatter.purple +\ "From: " + CustomFormatter.white + f"{get_name_from_number(message_from_id, 'long', rxNode)}") if useDMForResponse: @@ -1414,6 +1422,8 @@ async def start_rx(): logger.debug(f"System: QRZ Welcome/Hello Enabled") if checklist_enabled: logger.debug(f"System: CheckList Module Enabled") + if ignoreChannels != []: + logger.debug(f"System: Ignoring Channels: {ignoreChannels}") if enableSMTP: if enableImap: logger.debug(f"System: SMTP Email Alerting Enabled using IMAP") diff --git a/modules/settings.py b/modules/settings.py index 6771c69..d701934 100644 --- a/modules/settings.py +++ b/modules/settings.py @@ -196,7 +196,9 @@ try: # general useDMForResponse = config['general'].getboolean('respond_by_dm_only', True) publicChannel = config['general'].getint('defaultChannel', 0) # the meshtastic public channel + ignoreChannels = config['general'].get('ignoreChannels', '').split(',') # ignore these channels ignoreDefaultChannel = config['general'].getboolean('ignoreDefaultChannel', False) + cmdBang = config['general'].getboolean('cmdBang', False) # default off zuluTime = config['general'].getboolean('zuluTime', False) # aka 24 hour time log_messages_to_file = config['general'].getboolean('LogMessagesToFile', False) # default off log_backup_count = config['general'].getint('LogBackupCount', 32) # default 32 days diff --git a/modules/system.py b/modules/system.py index 8d3a96b..7b3b50e 100644 --- a/modules/system.py +++ b/modules/system.py @@ -659,6 +659,8 @@ def messageTrap(msg): # if word in message is in the trap list, return True if t.lower() == m.lower(): return True + if cmdBang and m.startswith("!"): + return True # if no trap words found, run a search for near misses like ping? or cmd? for m in message_list: for t in range(len(trap_list)):