mirror of
https://github.com/SpudGunMan/meshing-around.git
synced 2026-03-28 17:32:36 +01:00
157 lines
5.2 KiB
Python
157 lines
5.2 KiB
Python
# helper functions for various BBS messaging tasks
|
|
# K7MHI Kelly Keeton 2024
|
|
|
|
import pickle # pip install pickle
|
|
from modules.settings import *
|
|
|
|
trap_list_bbs = ("bbslist", "bbspost", "bbsread", "bbsdelete", "bbshelp")
|
|
|
|
# global message list, later we will use a pickle on disk
|
|
bbs_messages = []
|
|
bbs_dm = []
|
|
|
|
def load_bbsdb():
|
|
global bbs_messages
|
|
# load the bbs messages from the database file
|
|
try:
|
|
with open('bbsdb.pkl', 'rb') as f:
|
|
bbs_messages = pickle.load(f)
|
|
except:
|
|
bbs_messages = [[1, "Welcome to meshBBS", "Welcome to the BBS, please post a message!",0]]
|
|
print ("\nSystem: Creating new bbsdb.pkl")
|
|
with open('bbsdb.pkl', 'wb') as f:
|
|
pickle.dump(bbs_messages, f)
|
|
|
|
def save_bbsdb():
|
|
global bbs_messages
|
|
# save the bbs messages to the database file
|
|
print ("System: Saving bbsdb.pkl\n")
|
|
with open('bbsdb.pkl', 'wb') as f:
|
|
pickle.dump(bbs_messages, f)
|
|
|
|
def bbs_help():
|
|
# help message
|
|
return "BBS Commands:\n'bbslist'\n'bbspost $subject #message'\n'bbsread #'\n'bbsdelete #'\n'cmd'"
|
|
|
|
def bbs_list_messages():
|
|
#print (f"System: raw bbs_messages: {bbs_messages}")
|
|
# return a string with new line for each message subject in the list bbs_messages
|
|
message_list = ""
|
|
for message in bbs_messages:
|
|
# message[0] is the messageID, message[1] is the subject
|
|
message_list += "Msg #" + str(message[0]) + " " + message[1] + "\n"
|
|
|
|
# last newline removed
|
|
message_list = message_list[:-1]
|
|
return message_list
|
|
|
|
def bbs_delete_message(messageID = 0, fromNode = 0):
|
|
#if messageID out of range ignore
|
|
if (messageID - 1) >= len(bbs_messages):
|
|
return "Message not found."
|
|
|
|
# delete a message from the bbsdb
|
|
if messageID > 0:
|
|
# if same user wrote message they can delete it
|
|
if fromNode == bbs_messages[messageID - 1][3] or str(fromNode) in bbs_admin_list:
|
|
bbs_messages.pop(messageID - 1)
|
|
# reset the messageID
|
|
for i in range(len(bbs_messages)):
|
|
bbs_messages[i][0] = i + 1
|
|
|
|
# save the bbsdb
|
|
save_bbsdb()
|
|
|
|
return "Msg #" + str(messageID) + " deleted."
|
|
else:
|
|
print (f"!!System: node {fromNode}, tried to delete a message: {bbs_messages[messageID - 1]} and was dropped.")
|
|
return "You are not authorized to delete this message."
|
|
else:
|
|
return "Please specify a message number to delete."
|
|
|
|
def bbs_post_message(subject, message, fromNode):
|
|
# post a message to the bbsdb and assign a messageID
|
|
messageID = len(bbs_messages) + 1
|
|
|
|
# Check the BAN list for naughty nodes and silently drop the message
|
|
if str(fromNode) in bbs_ban_list:
|
|
print (f"!!System: Naughty node {fromNode}, tried to post a message: {subject}, {message} and was dropped.")
|
|
return "Message posted. ID is: " + str(messageID)
|
|
|
|
# append the message to the list
|
|
bbs_messages.append([messageID, subject, message, fromNode])
|
|
print (f"System: NEW Message Posted, subject: {subject}, message: {message} from {fromNode}")
|
|
|
|
# save the bbsdb
|
|
save_bbsdb()
|
|
|
|
return "Message posted. ID is: " + str(messageID)
|
|
|
|
def bbs_read_message(messageID = 0):
|
|
#if messageID out of range ignore
|
|
if (messageID - 1) >= len(bbs_messages):
|
|
return "Message not found."
|
|
if messageID > 0:
|
|
message = bbs_messages[messageID - 1]
|
|
return f"Msg #{message[0]}\nMsg Body: {message[2]}"
|
|
else:
|
|
return "Please specify a message number to read."
|
|
|
|
def save_bbsdm():
|
|
global bbs_dm
|
|
# save the bbs messages to the database file
|
|
print ("System: Saving Updated BBS Direct Messages bbsdm.pkl")
|
|
with open('bbsdm.pkl', 'wb') as f:
|
|
pickle.dump(bbs_dm, f)
|
|
|
|
def load_bbsdm():
|
|
global bbs_dm
|
|
# load the bbs messages from the database file
|
|
try:
|
|
with open('bbsdm.pkl', 'rb') as f:
|
|
bbs_dm = pickle.load(f)
|
|
except:
|
|
bbs_dm = [[1234567890, "Message", 1234567890]]
|
|
print ("\nSystem: Creating new bbsdm.pkl")
|
|
with open('bbsdm.pkl', 'wb') as f:
|
|
pickle.dump(bbs_dm, f)
|
|
|
|
def bbs_post_dm(toNode, message, fromNode):
|
|
global bbs_dm
|
|
# Check the BAN list for naughty nodes and silently drop the message
|
|
if str(fromNode) in bbs_ban_list:
|
|
print (f"!!System: Naughty node {fromNode}, tried to post a message: {message} and was dropped.")
|
|
return "DM Posted for node " + str(toNode)
|
|
|
|
# append the message to the list
|
|
bbs_dm.append([int(toNode), message, int(fromNode)])
|
|
|
|
# save the bbsdb
|
|
save_bbsdm()
|
|
return "BBS DM Posted for node " + str(toNode)
|
|
|
|
def bbs_check_dm(toNode):
|
|
global bbs_dm
|
|
# Check for any messages for toNode
|
|
for msg in bbs_dm:
|
|
if msg[0] == toNode:
|
|
return msg
|
|
return False
|
|
|
|
def bbs_delete_dm(toNode, message):
|
|
global bbs_dm
|
|
# delete a message from the bbsdm
|
|
for msg in bbs_dm:
|
|
if msg[0] == toNode:
|
|
# check if the message matches
|
|
if msg[1] == message:
|
|
bbs_dm.remove(msg)
|
|
# save the bbsdb
|
|
save_bbsdm()
|
|
return "System: cleared mail for" + str(toNode)
|
|
return "System: No DM found for node " + str(toNode)
|
|
|
|
#initialize the bbsdb's
|
|
load_bbsdb()
|
|
load_bbsdm()
|