please know this can change.
+ New Python functions for reading Message Bases:
m
sg_open, msg_seek, msg_found, msg_next, msg_prev, msg_gethdr,
msg_gett
xt, msg_close
Rather than try to document them all here I've included a "msgre
ad.mpy"
in the default installation as an example of how to use these function
s.
This example implements a very basic message reader using the user's
curr
ent message base.
! Mystic will now show "proto.xxx" or "protob.xxx" for batch-o
nly protocols
if they exist instead of generating a list of protocols. PROTO
should
contain all protocols, regardless of batch or not. PROTOB should contain
only batch-supported protocols.
! Fixed a bug where Mystic was allowing non-b
atch protocols to be selected
for a batch file transfer.
! Fixed a bug where t
he -Y and -N M CI codes were not always working for the
n
ext Yes/No promp t.
+ Changed the format of the "scan" settings data for mess
age and file bases,
this should be total transparent to everyone, except that
update.exe needs
to be ran to update the data files.
+ MUTIL has a new "PurgeU
serBas e" function will which mark users who have
not
connected t o the BBS in X days for deletion. UKILL function has been
r
emoved from MBBSUTIL. Default mutil.ini has been updated
+ MUTIL has a new "PackUserBase" function which will physically delete user
records, private messages to and from them, their lastread pointers in
message bases, their scan settings in message and file bases. This can
only be executed when there are no users online. Default mutil.ini has
been updated.
! Fixed a bug where MUTIL was not always removing the proper BS
Y files when
it timed out waiting for a node to finish.
+ New Python function
"charxy(x,y)" returns the character and attribute of
th
e user's screen a t the X/Y coordinate. Example:
ch, attr = charxy(1, 1
);
writeln("attr=" + str(attr));
writeln("char=" + ch);
+ New Python fun
ction getcfg() re turns basic configuration options in a
Pytho
n dictionary. I am not going to list out dictionaries here as I am
ad
d ing to it as people ask for it, but for with any dictionary you can
always iterate through it to see the elements until it lands on the Wiki
import mystic_bbs as bbs;
bbs.writeln("|CLElements:")
cfg = bbs.get
cfg()
for key, value in cfg.items():
bbs.write ("Key: " + key.ljust(20
));
if isinstance(value, bool):
bbs.writeln(" Value: " + (value and "True"
or "False"));
elif isinstance(value, (int, long)):
bbs.writeln(" V
alue: " + str(value))
else:
bbs.writeln("
Value: " + value)
bbs.writeln("|PA")
+ New Python fun
ction "getyn(text, default)". This presents a Yes/No prompt
and returns True if they answer yes, False if they answer no. The
second p
arameter is the default selection (True is yes, False is no):
if getyn("Is this an example? ", True):
writeln("You answered Yes!")
e
lse:
writeln("You answered No!")
+ New Python function "showfile(filename,
baud, pa use, abort, onlynew)"
This
function shows a display file and provides all options specific to
how
it is displ ayed as parameters and returns True or False depending on
if
a display file was found and shown.
The filename logic uses the same as the G
D menu command (see the Wiki
documentation for GD for more info) which means i
t has implied paths a nd
ex
tensions and random display files if desired.
The baud parameter is 0 for full speed or whatever the baud rate at which
Mystic should display the file.
The Pause parameter is a True/False value t
hat when True will attempt to
pause on a full screen.
The Abort parameter is
a True/False value that when True will allow the
fil
e to be aborte d while display using the space bar.
The OnlyNew parameter
is a True/False value that when True will only show
the file if it has been update since the user's last login to the BBS. Ex:
s
howfile("gj-glue1", 9600, False, True, False)
showfile("c:\mystic\textfiles\mytext.txt", 0, True, True, False)
+ New Python command "getprompt(number)" will return prompt (number) from
user's currently selected theme. If the prompt has been replaced with
a script or display file, Mystic will execute the script or show the
file.
! Fixed an issue where setting scanned bases with the /qwknet option wa
s
not showing anything in the QWK networking menu.
+ New Python command "stuff
key(text)". Th is function adds text into the
inpu
t buffer as if the user had typed it.
+ New Python command "sysoplog(leve
l, text)" logs a line to the node's
log us
ing level as the lo glevel. Only if the loglevel is set equal to
or g
reater t han <level> will it be shown in the log. Text is a string
of t
ext which will have a datestamp added to it automatically.
sysoplog(1, "Welcome to my Python script!")
+ New Python command "access(ac
sstring)" returns True or False if the user
passes (has access) to the supplie
d <acsstring>:
if access("s20"):
writeln("User has a security level of
20 or higher!")
else:
wri
teln("User has less than 2 0 security.")
+ New Python command "rwrite(t
ext)" wri tes text to the user with no line
endi
ng and no MCI or col or code processing.
rwrite("You will actually see
the color code here");
+ New Python command "rwriteln(text)" writes text to the
user with no MCI
or color code processing, and moves to the next line after s
ending:
rwriteln("Line one")
rwriteln("Line two")
+ New Python function "upuser
(seclevel)". Updates the current user's sec urity
profile to <seclevel>, which includes access flags, time left, daily
limits
, etc. Ex: upuser(50)
+ New Python function "wherex" returns the current X location of the cursor
+ New Python function "wherey" returns the current X location of the cursor
+ N
ew Python function "textattr" returns the current text color attribute
+ New
Python function "t extcolor(attribute)" sets the current text color
to <
attri bute> where attribute is calculated as (FG + BG) * 16 so white
on a blue background would be 15 + 1 * 16 (or 31).
+ New Python function "get
mgroup(number)" returns a dictionary of the messag e
group at record number <number>.
+ New Python function "getmgroupid(number)" re
turns a dictionary of the
message group with the ID of <number>.
+ New Python function "getfgroup(numbe
r)" returns a dictionary of the file
group at record number <number>.
+ New Py
thon function " getfgroupid(number)" returns a dictionary of the
file
grou p with the ID of <number>.
+ New Python function "getfbase(number)"
returns a dictionary of the file
base located at record number <number>
+ New
Python function "g etfbaseid(number)" returns a dictionary of the file
b
ase w ith the ID of <number>
+ MUTIL's MergeNodeList should no longer care ab
out the casing of the file
archives or the nodelists within those archives. I
n otherwords, its now
case insensitive even on case sensitive OSes.
+ Mystic B
BS now has a built in text editor which will be expanded on as
development continues. Like all of Mystic's functions this is designed to
work over any terminal connection and will be a work in progress.
+ Small rev
amp of the System configuration to add a "Networking" category
as
the Configuration column is getting cluttered and will be moreso as I
ad
d in sever al new options that are planned.
+ Configuration now allows many
of Mystic's text-based control files to be
edited within the configuration usi
ng the new text editor.
! Message and File group editors were not assigning a new Unique ID to the
group when pasting.
! Fixed a bug during graphics detection in Linux where My
stic would still
show ANSI codes until after the graphics prompt was displayed
.
|08 .|05·|13∙|15Dr|07e|08am Ma|07st|15er|13∙|05·|08.
|08 °∙|05·|13∙° |13°∙|05·|08∙°
|11 DoRE|03!|11ACiDiC|03!|11Demonic
|08[|15dreamland|09.|15darktech|09.|15org|08]
--- Mystic BBS v1.12 A36 2017/12/03 (Windows/64)
* Origin: --[!dreamland BBS dreamland.darktech.org (44:100/0)
|