Pyscii-BBS/functions.py
J4YC33 6577e6b051 2 More Milestones
I have added the feature for the BBS to be able to accept user messages and display all messages.

Still to be done: asc pages for messages and implementation of that.

Yes, I do know that I'm still including my test data in the json files. I do not care.
2025-07-19 21:02:32 -06:00

120 lines
4.7 KiB
Python

import configparser
import json
import sys
import comms
import menus
import auth
import datetime
config = configparser.ConfigParser()
config.read(sys.argv[1])
userDb = config.get("Auth","userDb")
msgDB = config.get("Main","msgDb")
date_format_string = "%Y-%m-%d HH:MM:SS"
def printProfile(conn, userId, node, lastMenu):
comms.sendString(conn, "\u001B[2JProfile:\r\n")
with open(userDb) as userdb:
users = json.loads(userdb.read())
for user in users['users']:
if user['id'] == userId:
name = "Name: " + user["name"]
description = "Description: " + user['description']
profile = name + "\r\n" + description + "\r\n"
comms.sendString(conn, profile)
comms.sendString(conn, "Press Enter to go back to the Menu... ")
comms.getChar(conn)
menus.printMenu(conn, lastMenu, node, userId)
def editProfile(conn, userID, node, lastMenu):
comms.sendString(conn, "\u001B[2JProfile:\r\n")
with open(userDb) as userdb:
users = json.loads(userdb.read())
for user in users['users']:
if user['id'] == userID:
name = "Name: " + user["name"]
description = "Description: " + user['description']
profile = name + "\r\n" + description + "\r\n"
comms.sendString(conn, profile)
comms.sendString(conn, "What would you like to edit?\r\n")
comms.sendString(conn, "D: Description\tP:Password\r\n? ")
response = comms.getString(conn,2)
if response.strip('\x00') == "D":
description = auth.setProfile(conn)
user['description'] = description
with open(userDb,'w') as output:
json.dump(users, output, indent=4)
if response.strip('\x00') == "P":
password = auth.setPassword(conn, user['salt'])
user['password'] = password
with open(userDb,'w') as output:
json.dump(users, output, indent=4)
menus.printMenu(conn, lastMenu, node, userID)
def pubMessages(conn, userID, node, lastMenu):
comms.sendString(conn, "\u001B[2JMessages:\r\n")
with open(msgDB) as msgdb:
messages = json.loads(msgdb.read())
for message in messages['messages']:
msgListElement = str(message['id']) + "\t|\t" + message['date'] + "\t|\t" + message['author'] + "\t|\t" + message['subject'] + "\t\t\t"
comms.sendString(conn,msgListElement+"\r\n")
comms.sendString(conn, "\r\nSend the M and the message number (eg. M0) number to read a message.\r\nPress C to Write a Message \r\nSend B to go back to the Menu: ")
response = comms.getString(conn,3)
if response.strip('\x00') == "B":
menus.printMenu(conn, lastMenu, node, userID)
elif response.strip('\x00')[0] == "M":
printMessage(conn, int(response.strip('\x00').replace('M','')))
elif response.strip('\x00') == "C":
writeMessage(conn, userID)
pubMessages(conn, userID, node, lastMenu)
def printMessage(conn, messageNum):
comms.sendString(conn, "\u001B[2JMessage:\r\n")
with open(msgDB) as msgdb:
messages = json.loads(msgdb.read())
for message in messages['messages']:
if message['id'] == int(messageNum):
comms.sendString(conn, "\r\nDate Published: " + message['date'])
comms.sendString(conn, "\r\nSubject: " + message['subject'])
comms.sendString(conn, "\r\nAuthor: " + message['author'])
comms.sendString(conn, "\r\nMessage: " + message['body'])
comms.sendString(conn, "\r\nPress any key to go back... ")
comms.getString(conn,2)
return
def writeMessage(conn, userid):
comms.sendString(conn, "\u001B[2JCompose Message:\r\n")
with open(userDb) as userdb:
users = json.load(userdb)
for user in users['users']:
if user['id'] == userid:
username = user['name']
with open(msgDB) as msgdb:
messages = json.load(msgdb)
message = {}
message["id"] = messages['messages'][-1]["id"] + 1
message['date'] = datetime.datetime.now().strftime(date_format_string)
comms.sendString(conn,"Subject: ")
message['subject'] = comms.getString(conn, 150)
message['author'] = username
comms.sendString(conn,"Message Body: ")
message['body'] = comms.getString(conn, 1500)
messages['messages'].append(message)
with open(msgDB,'w') as output:
json.dump(messages, output, indent=4)
comms.sendString(conn, "Message Published!\r\nPress any key to go back... ")
comms.getChar(conn)