@@ Make all the commands global (only God can @command/add). @@ This should be in God's @startup somewhere. It /does not work/ pasted straight in from your client. @@ @assert cand(numversion(),gte(numversion(),1008001006)); @dolist bbcreate bbdelete bbinfo bblist bbscan bbignore bbcatchup bbleave address cc reply include includes subject write undo send proof draft edit unread read skim undelete delete deleted expunge clear toss erase outbox unmail={@command/add +## ; @hook/override +##=[get(*MailBot/VA)],cmd.##} ; @dolist bbadmin bbauthor bbdesc bblock bbheader bbtimeout forward mail mgroup={@command/add/eqsplit +## ; @hook/override +##=[get(*MailBot/VA)],cmd.##} &INFO`VERSION %vb=2.2 &en`delete-bb-noforce %vc=You cannot delete messages from a bulletin board unless you use +DELETE/FORCE (or +EXPUNGE) . &fun.format-names-bb %vb=udefault(%vd/bb`author`%2,ufun(fun.format-names,%0,%1),%0,%1) &fun.format-message %vb=localize(repeat(=,78)%r[switch(ufun(fun.clearregs)%0,-1,switch(%3,*p*,Mail Message In Progress,*s*,Sent Message,Unknown Message),Mail Message [switch(%1,,,ufun(fun.format-name-noansi,%1)%b)]%0)] (Message ID #%2)[switch(setinter(%3,p n e),,,%b%b%b%b---[iter(edit(#$,p,PROOF,e,EXAMINE,n,NEW),##,,\,%b)]---)]%r[ljust(FROM:,9)][switch(%1,,ufun(fun.format-names,%4,%:),#*:*,ufun(fun.format-names,%4,%:),ufun(fun.format-names-bb,%4,%:,%1))] - [convsecs(%5)]%r[ljust(SUBJECT:,9)]%6%r[ljust(TO:,9)][wrap(ufun(fun.format-names,%7,%:),69,69,%r[space(9)])]%r[ljust(ljust(MESSAGE:,9),78,-)]%r[ulocal(fun.format-message-body,%8,%4,member(%3,e))]%r[if(strlen(%9),%r[iter(%9,ansi(n,)%r[ulocal(fun.format-message-body,rest(rest(rest(%i0,^),^),^),elements(%i0,2,^),member(%3,e))]%r,ufun(%vb/beep),%r%r)]%r)][ansi(n,repeat(=,78))]) &fun.bbcreate-sub %vb=null(setq(0,get(%vd/bb.count))[set(%vd,bb.count:[inc(%q0)])][set(%vd,bb`name`%0:%0)][set(%vd,bb`id->name`%q0:%0)][set(%vd,bb`read`%0:0)][set(%vd,bb`write`%0:0)][set(%vd,bb`notify`%0:0)][set(%vd,bb`timeout`%0:[get(%vb/config`bb_timeout`value)])][set(%vd,bb`desc`%0:%0 BB)][set(%vd,bb`id`%0:%q0)][lock(%vd/u:bb-read-%q0,bb`read`%0/1)][lock(%vd/u:bb-write-%q0,bb`write`%0/1)][lock(%vd/u:bb-notify-%q0,bb`notify`%0/1)][lock(%vd/u:bb-admin-%q0,bb`admin`%0/1)][set(%vd,bb`header`%0:[ufun(%vb/config`bb_header`value,%0)])[attrib_set(%vd/bb`author`%0)]]) &cmd.bbauthor %va=$^\+bbauthor(?\:/n(?\:o(?\:e(?\:v(?\:al?)?)?)?)?)? ([^=]*?)(?\:=(.*))?$: @nspemit/silent %#=ufun(%vb/tag)[ufun(%vb/fun.bbauthor,%1,%2)] @set %va/cmd.bbauthor=regexp &fun.bbauthor %vb=switch(0,strlen(setr(0,ufun(%vb/fun.is-bb,%0))),ufun(msg,no-such-bb,%0,),cor(orflags(%#,Wr),ufun(fun.is-bb-admin,%:,%q0)),ufun(msg,permission-denied),strlen(%1),attrib_set(%vd/bb`author`%q0)[ufun(msg,bbauthor-cleared,%q0)],attrib_set(%vd/bb`author`%q0,%1)[ufun(msg,bbauthor-set,%q0,%1)]) &en`bbauthor-cleared %vc=Author for BB '%0' cleared. &en`bbauthor-set %vc=Author for BB '%0' set to '%1'. &cmd.bbheader %va=$^\+bbheader(?\:/n(?\:o(?\:e(?\:v(?\:al?)?)?)?)?)? ([^=]*?)(?\:=(.*))?$: @nspemit/silent %#=ufun(%vb/tag)[ufun(%vb/fun.bbheader,%1,%2)] @set %va/cmd.bbheader=regexp &fun.bbheader %vb=switch(0,strlen(setr(0,ufun(%vb/fun.is-bb,%0))),ufun(msg,no-such-bb,%0),cor(orflags(%#,Wr),ufun(fun.is-bb-admin,%:,%q0)),ufun(msg,permission-denied),strlen(%1),set(%vd,bb`header`%q0:[ufun(%vb/config`bb_header`value,%q0)])[ufun(msg,bbheader-new-default,%q0)],set(%vd,bb`header`%0:%1)[ufun(msg,bbheader-new-arb,%q0,%1)]) &fun.bbignore-toggle %vb=switch(0,strlen(setr(0,ufun(fun.is-bb,%0))),ufun(msg,no-such-bb),member(get(%:/bbignore),setr(1,ufun(fun.bbname-to-num,%q0))),set(%:,bbignore:[setunion(get(%:/bbignore),%q1)])[ufun(msg,ignore-start,%q0)],switch(setr(2,setdiff(get(%:/bbignore),%q1)),,attrib_set(%:/bbignore),attrib_set(%:/bbignore,%q2))[ufun(msg,ignore-end,%q0)]) &fun.send %vb=switch(0,ufun(fun.writing-mail,%:),ufun(msg,not-writing),ufun(fun.can-mail-banned,%:),ufun(msg,banned-from-mailing),null(setq(0,sql(SELECT `id`\,`recip`\,`subject` FROM `%vpmail` WHERE `who` = '[sqlescape(%:)]' AND `sent` = '0',%b,^))[sql(UPDATE `%vpmail` SET `sent` = '1'\, `sig` = '[if(%0,,sqlescape(ufun(fun.mailsig,%:)))]'\, `date` = '[sqlescape(secs())]' WHERE `who` = '[sqlescape(%:)]' AND `sent` = '0')][sql(DELETE FROM `%vpundo` WHERE `who` = '[sqlescape(%:)]')][ulocal(fun.send-sub,%:,%#,ufun(fun.propername-enactor),nand(hidden(%:),not(%1)),sqlescape(elements(%q0,1,^)),elements(%q0,2,^),elements(%q0,3,^))])[ufun(msg,sent,elements(%q0,1,^))]) &fun.send-sub %vb=null(if(strlen(graball(%5,#*:*)),sql(INSERT INTO `%vpinbox`\(`id`\,`who`\,`status`\) VALUES[iter(graball(%5,#*:*),\('%4'\,'[sqlescape(##)]'\,'n'\),,\,)]))[if(strlen(regraballi(%5,^(?!#.*:.*).*$)),sql(INSERT INTO `%vpbbinbox`\(`id`\,`bbcode`\,`readers`\) VALUES[iter(regraballi(%5,^(?!#.*:.*).*$),\('%4'\,'##'\,'||'\),,\,)]))])[switch(setr(0,if(%3,iter(graball(%5,#*:*),'[sqlescape(##)]',,\,),edit(squish(iter(graball(%5,#*:*),if(member(lwho(##),%1),'[sqlescape(##)']),,|),|),|,\,))),,,setq(0,sql(SELECT `%vpinbox`.`who`\,`%vpinbox`.`id` FROM `%vpinbox` INNER JOIN `%vpmail` ON `%vpinbox`.`id`=`%vpmail`.`id` WHERE `%vpinbox`.`who` IN \(%q0\) ORDER BY `%vpmail`.`date`,%b,|))[iter(setinter(regeditall(%q0,(:\\S+),%b),lwho()),nspemit(##,ufun(tag)[ufun(msg,new-mail[if(andlflags(##,nospoof paranoid),-nospoof)],%1,%2,match(graball(%q0,objid(##)|*),*|%4),%6)]))])][setq(s,if(%3,1,member\(lwho\(##\)\,%1\)))][setq(0,sql(SELECT `%vpbbinbox`.`bbcode`\,`%vpbbinbox`.`id` FROM `%vpbbinbox` INNER JOIN `%vpmail` ON `%vpbbinbox`.`id`=`%vpmail`.`id` ORDER BY `%vpmail`.`date`,|,^))][iter(regraballi(%5,^(?!#.*:.*).*$),nspemit(iter(filterbool(#lambda/%qs,lwho()),if(ufun(%vb/fun.can-notify-bb,%i0,##),%i0)),ufun(tag)[ufun(msg,new-bb-posting,ufun(fun.format-names-bb,%0,%:,setr(b,ufun(fun.bbnum-to-name,##))),%qb,match(graball(%q0,##^*,|),*^%4,|),%6)]))] &cmd.bbread %va=$^\+bbread\s*(?\: (.+?)(/(.*))?)?$: @nspemit/silent %#=switch(,%1,ufun(%vb/fun.bblist-all,%:),%2,ufun(%vb/fun.skim,bb:%1),ufun(%vb/fun.read,bb:%1 [switch(%3,u,mark=new,%3)],0,ufun(%vb/tag))) @set %va/cmd.bbread=regexp &fun.delete-personal %vb=switch(0,first(setr(0,ufun(fun.range,%0,%0,%1)),|),ufun(msg,elements(%q0,2,|),elements(%q0,3,|)),if(cand(not(%2)[setq(1,iter(elements(%q0,2,|),'##',,\,))],words(sql(SELECT `status` FROM `%vpinbox` WHERE `who` = '%0' AND `status` = 'n' AND `id` IN(%q1)))),ufun(msg,delete-new)%r[u(tag)])[sql(UPDATE `%vpinbox` SET `status` = 'd' WHERE `who` = '%0' [if(%2,,AND `status` != 'n')] AND `id` IN(%q1))][setq(2,elements(ufun(fun.range,%0,%0),2,|))][ufun(msg,marked-as-del,sort(iter(sql(SELECT `id` FROM `%vpinbox` WHERE `status` = 'd' AND `who` = '%0'),member(%q2,%i0)),n))]) &fun.skim-bb-sub-sub %vb=left(<[switch(%2,n,N,d,D,%b)]>[rjust(elements(%q3,%0),4)]. [ljust(left(ufun(fun.format-names-bb,%3,%q1,%q0),17),18)] [timefmt($a $b $d $Y,%4)]%b%B-%b%b%5,78)