Compare commits

..

No commits in common. "d8eea1640f3a16b34b667efb76015124067d196d" and "b778b8b6cd07516f5826012a3398e3635307904a" have entirely different histories.

4 changed files with 47 additions and 48 deletions

View file

@ -228,12 +228,12 @@ def handle_bb_steps(sender_id, message, step, state, interface, bbs_nodes):
def handle_mail_steps(sender_id, message, step, state, interface, bbs_nodes): def handle_mail_steps(sender_id, message, step, state, interface, bbs_nodes):
message = message.strip() message = message.lower().strip()
if len(message) == 2 and message[1] == 'x': if len(message) == 2 and message[1] == 'x':
message = message[0] message = message[0]
if step == 1: if step == 1:
choice = message.lower() choice = message
if choice == 'r': if choice == 'r':
sender_node_id = get_node_id_from_num(sender_id, interface) sender_node_id = get_node_id_from_num(sender_id, interface)
mail = get_mail(sender_node_id) mail = get_mail(sender_node_id)
@ -360,16 +360,16 @@ def handle_channel_directory_command(sender_id, interface):
def handle_channel_directory_steps(sender_id, message, step, state, interface): def handle_channel_directory_steps(sender_id, message, step, state, interface):
message = message.strip() message = message.lower().strip()
if len(message) == 2 and message[1] == 'x': if len(message) == 2 and message[1] == 'x':
message = message[0] message = message[0]
if step == 1: if step == 1:
choice = message choice = message
if choice.lower() == 'x': if choice == 'x':
handle_help_command(sender_id, interface) handle_help_command(sender_id, interface)
return return
elif choice.lower() == 'v': elif choice == 'v':
channels = get_channels() channels = get_channels()
if channels: if channels:
response = "Select a channel number to view:\n" + "\n".join( response = "Select a channel number to view:\n" + "\n".join(
@ -379,7 +379,7 @@ def handle_channel_directory_steps(sender_id, message, step, state, interface):
else: else:
send_message("No channels available in the directory.", sender_id, interface) send_message("No channels available in the directory.", sender_id, interface)
handle_channel_directory_command(sender_id, interface) handle_channel_directory_command(sender_id, interface)
elif choice.lower == 'p': elif choice == 'p':
send_message("Name your channel for the directory:", sender_id, interface) send_message("Name your channel for the directory:", sender_id, interface)
update_user_state(sender_id, {'command': 'CHANNEL_DIRECTORY', 'step': 3}) update_user_state(sender_id, {'command': 'CHANNEL_DIRECTORY', 'step': 3})

View file

@ -93,7 +93,7 @@ def add_bulletin(board, sender_short_name, subject, content, bbs_nodes, interfac
def get_bulletins(board): def get_bulletins(board):
conn = get_db_connection() conn = get_db_connection()
c = conn.cursor() c = conn.cursor()
c.execute("SELECT id, subject, sender_short_name, date, unique_id FROM bulletins WHERE board = ? COLLATE NOCASE", (board,)) c.execute("SELECT id, subject, sender_short_name, date, unique_id FROM bulletins WHERE board = ?", (board,))
return c.fetchall() return c.fetchall()
def get_bulletin_content(bulletin_id): def get_bulletin_content(bulletin_id):

View file

@ -89,46 +89,47 @@ class JS8CallClient:
''') ''')
self.logger.info("Database tables created or verified.") self.logger.info("Database tables created or verified.")
def insert_message(self, table, sender, recipient, message): def insert_message(self, sender, receiver, message):
"""
Inserts a message into the specified table in the database.
This method saves a message along with its sender and receiver or group name into the specified table.
If the database connection is not available, it logs an error message.
Parameters:
-----------
table : str
The name of the table where the message should be inserted. It can be 'messages', 'groups', or 'urgent'.
sender : str
The meshtastic node identifier of the sender who issued the command
recipient : str
The identifier of the receiver of the message or the group name.
message : str
The content of the message.
Example Usage:
--------------
client.insert_message('messages', sender='CALLSIGN1', receiver_or_group='CALLSIGN2', message='This is a message.')
client.insert_message('groups', sender='CALLSIGN1', receiver_or_group='GroupName', message='This is a group message.')
client.insert_message('urgent', sender='CALLSIGN1', receiver_or_group='UrgentGroupName', message='This is an urgent message.')
"""
if not self.db_conn: if not self.db_conn:
self.logger.error("Database connection is not available.") self.logger.error("Database connection is not available.")
return return
try: try:
with self.db_conn: with self.db_conn:
self.db_conn.execute(f''' self.db_conn.execute('''
INSERT INTO {table} (sender, { 'receiver' if table == 'messages' else 'groupname' }, message) INSERT INTO messages (sender, receiver, message)
VALUES (?, ?, ?) VALUES (?, ?, ?)
''', (sender, receiver_or_group, message)) ''', (sender, receiver, message))
except sqlite3.Error as e: except sqlite3.Error as e:
self.logger.error(f"Failed to insert message into {table} table: {e}") self.logger.error(f"Failed to insert message into database: {e}")
def insert_group(self, sender, groupname, message):
if not self.db_conn:
self.logger.error("Database connection is not available.")
return
try:
with self.db_conn:
self.db_conn.execute('''
INSERT INTO groups (sender, groupname, message)
VALUES (?, ?, ?)
''', (sender, groupname, message))
except sqlite3.Error as e:
self.logger.error(f"Failed to insert group message into database: {e}")
def insert_urgent(self, sender, groupname, message):
if not self.db_conn:
self.logger.error("Database connection is not available.")
return
try:
with self.db_conn:
self.db_conn.execute('''
INSERT INTO urgent (sender, groupname, message)
VALUES (?, ?, ?)
''', (sender, groupname, message))
except sqlite3.Error as e:
self.logger.error(f"Failed to insert urgent message into database: {e}")
def process(self, message): def process(self, message):
typ = message.get('type', '') typ = message.get('type', '')
@ -160,13 +161,13 @@ class JS8CallClient:
self.logger.info(f"Received JS8Call message: {sender} to {receiver} - {msg}") self.logger.info(f"Received JS8Call message: {sender} to {receiver} - {msg}")
if receiver in self.js8urgent: if receiver in self.js8urgent:
self.insert_urgent('urgent', sender, receiver, msg) self.insert_urgent(sender, receiver, msg)
notification_message = f"💥 URGENT JS8Call Message Received 💥\nFrom: {sender}\nCheck BBS for message" notification_message = f"💥 URGENT JS8Call Message Received 💥\nFrom: {sender}\nCheck BBS for message"
send_message(notification_message, BROADCAST_NUM, self.interface) send_message(notification_message, BROADCAST_NUM, self.interface)
elif receiver in self.js8groups: elif receiver in self.js8groups:
self.insert_message('groups', sender, receiver, msg) self.insert_group(sender, receiver, msg)
elif self.store_messages: elif self.store_messages:
self.insert_message('messages', sender, receiver, msg) self.insert_message(sender, receiver, msg)
else: else:
pass pass

View file

@ -56,8 +56,6 @@ board_action_handlers = {
def process_message(sender_id, message, interface, is_sync_message=False): def process_message(sender_id, message, interface, is_sync_message=False):
state = get_user_state(sender_id) state = get_user_state(sender_id)
message_lower = message.lower().strip() message_lower = message.lower().strip()
message_strip = message.strip()
bbs_nodes = interface.bbs_nodes bbs_nodes = interface.bbs_nodes
# Handle repeated characters for single character commands using a prefix # Handle repeated characters for single character commands using a prefix
@ -91,15 +89,15 @@ def process_message(sender_id, message, interface, is_sync_message=False):
add_channel(channel_name, channel_url) add_channel(channel_name, channel_url)
else: else:
if message_lower.startswith("sm,,"): if message_lower.startswith("sm,,"):
handle_send_mail_command(sender_id, message_strip, interface, bbs_nodes) handle_send_mail_command(sender_id, message_lower, interface, bbs_nodes)
elif message_lower.startswith("cm"): elif message_lower.startswith("cm"):
handle_check_mail_command(sender_id, interface) handle_check_mail_command(sender_id, interface)
elif message_lower.startswith("pb,,"): elif message_lower.startswith("pb,,"):
handle_post_bulletin_command(sender_id, message_strip, interface, bbs_nodes) handle_post_bulletin_command(sender_id, message_lower, interface, bbs_nodes)
elif message_lower.startswith("cb,,"): elif message_lower.startswith("cb,,"):
handle_check_bulletin_command(sender_id, message_strip, interface) handle_check_bulletin_command(sender_id, message_lower, interface)
elif message_lower.startswith("chp,,"): elif message_lower.startswith("chp,,"):
handle_post_channel_command(sender_id, message_strip, interface) handle_post_channel_command(sender_id, message_lower, interface)
elif message_lower.startswith("chl"): elif message_lower.startswith("chl"):
handle_list_channels_command(sender_id, interface) handle_list_channels_command(sender_id, interface)
else: else: