Guestbook
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

Guestbook

Started by bastya_elvtars, 28 February, 2005, 02:55:48

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

bastya_elvtars

OK, i am faster than I thought... anyway, this is very test script, use at own risk. After optimization and debugging i will release a stable.

-- guestbook by bastya_elvtars (the rock n' roll doctor) ---> bastyaelvtars@gmail.com
--------------------------------
-- v2.0prebeta >>>>>>>> use with caution, bugs can occur
--------------------------------
--------------- THIS IS LUA5 VERSION NOW
-- thx Hawk and nErBoS for helping me out in my first lua5 script
-------------------------------------------------------------------------------------------------------------------------------------

-- no flush function, delete a dat file instead (gonna add if needed ^^)
-- multiple entries can be deleted by adding multiple nubers separated by spaces (meaning !delguestbook 1 43 555 756612346239)
-- but u can separate them with any non-number char if u like it better
-- commands can be added in PM or in main, bot responds according 2 them

--=========== IMPORTANT ================

-- DO make a folder called dats in the scripts folder!!! Otherwise it won't work!




---------------------- CONFIG PART


Bot="NoteBook"


-- i made only 3 of this add/show/delete shit.
-- if you need more, notify me
-- The help text can only be changed by experts,altho you might translate it - see a lua documentation
-- levels are always the following, determining who CAN use the command:
        -- 5:only superops
        -- 4 ops & above
        -- 3 vips & above
        -- 2 registered users & above
        -- 1 anyone
        -- 0 disabled
---=========== #1


-- What it is called?


gbname="guestbook" -- the name of this function (call it what you want)


-- name of the textfile that contains entries - if it does not exist, the script will create one.
gbfile="dats/guestbook.dat"


-- this shows the guestbook or wtf
levgbcmd1=1
gbcmd1="!showguestbook"
-- adds new entry to guestbook or wtf
levgbcmd2=1
gbcmd2="!addguestbook" -- deletes an entry by ID
levgbcmd3=5
gbcmd3="!delguestbook" 





--========== #2


-- What it is called?


nname="news bulletin" -- the name of this function (call it what you want)


-- name of the textfile that contains entries - if it does not exist, the script will create one.
nfile="dats/news.dat"


-- this shows the news bulletin or wtf
levncmd1=1
ncmd1="!shownews"


-- adds new entry to news bulletin or wtf
levncmd2=1
ncmd2="!addnews" 

-- deletes an entry by ID
levncmd3=5
ncmd3="!delnews" 





--========== #3


-- What it is called?


rname="request board" -- the name of this function (call it what you want)


-- name of the textfile that contains entries - if it does not exist, the script will create one.
rfile="dats/requests.dat"


-- this shows the requests or wtf
levrcmd1=1
rcmd1="!showrequests"


-- adds new entry to requests or wtf
levrcmd2=1
rcmd2="!addrequest" 

-- deletes an entry by ID
levrcmd3=5
rcmd3="!delrequest" 



-------------------- END OF CONFIG


function parseenv(user,env,bot)
	if env=="PM" then
		return "$To: "..user.sName.." From: "..bot.." $<"..bot.."> "
	elseif env=="MAIN" then
		return "<"..bot.."> "
	end
end


function ChatArrival(user,data)
	local returndata=0
	data=string.sub(data,1,string.len(data)-1)
	local _,_,cmd = string.find(data,"%b<>%s+(%S+)")
	if cmd then
		returndata=parsecmds(user,data,string.lower(cmd),"MAIN")
	end
end

function ToArrival(user,data)
	local returndata=0
	data=string.sub(data,1,string.len(data)-1)
	-- is this meant for our bot?
	local _,_,whoTo = string.find(data,"$To:%s+(%S+)")
	if (whoTo == Bot) then
		local _,_,cmd = string.find(data,"$To:%s+%S+%s+From:%s+%S+%s+$%b<>%s+(%S+)")
		returndata=parsecmds(user,data,string.lower(cmd),"PM")
	end return returndata
end 

function parsecmds(user,data,cmd,env)
	local returndata=0
	if cmd==gbcmd1 then
		showshit(user,entries,gbname,gbfile,levgbcmd1,env) returndata=1 -- (user,container,wtf,file)
	elseif cmd==gbcmd2 then
		addshit(user,data,entries,gbfile,levgbcmd2,env) returndata=1 -- (user,data,container,file)
	elseif cmd==gbcmd3 then
		delshit(user,data,entries,gbfile,gbname,levgbcmd3,env) returndata=1 -- delshit(user,data,container,file,wtf)
	-- news stuff
	elseif cmd==ncmd1 then
		showshit(user,entries,nname,nfile,levncmd1,env) returndata=1 -- (user,container,wtf,file)
	elseif cmd==ncmd2 then
		addshit(user,data,entries,nfile,levncmd2,env) returndata=1 -- (user,data,container,file)
	elseif cmd==ncmd3 then
		delshit(user,data,entries,nfile,nname,levncmd3,env) returndata=1 -- delshit(user,data,container,file,wtf)
	-- requests stuff
	elseif cmd==rcmd1 then
	showshit(user,entries,rname,rfile,levrcmd1,env) returndata=1 -- (user,container,wtf,file)
	elseif cmd==rcmd2 then
	addshit(user,data,entries,rfile,levrcmd2,env) returndata=1 -- (user,data,container,file)
	elseif cmd==rcmd3 then
	delshit(user,data,entries,rfile,rname,levrcmd3,env) returndata=1 -- delshit(user,data,container,file,wtf)
	end return returndata
end


function addshit(user,data,container,file,cmdlevel,env)
	if cmdlevel~=0 then
		if CheckUserLevel(user) >= cmdlevel then
			local container=loadshit(file)
			number=number+1
			local _,_,entry=string.find(data,"%b<>%s+%S+%s+(.*)")
			if entry then
				container[number]=os.date("%c").."|"..user.sName.."|"..entry
				saveshit(container,file)
				user:SendData(parseenv(user,env,Bot).."Your entry has been successfully added.")
			else
				user:SendData(parseenv(user,env,Bot).."Please add an entry, too.")
			end
			container={}
		else
			user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |")
		end
	else
		user:SendData(parseenv(user,env,Bot).."That command is disabled.")
	end
end


function loadshit(file)
	local shit={}
	number=0
	local f,e = io.open(file,"r")
	if f then
		while 1 do
			local line = f:read("*l")
			if line ==  nil then
				break
			else 
				number = number +1
				shit[number]=line
			end
		end
		f:close(f)
	end
	return shit
end


function saveshit(container,file)
	local handle = io.open(file,"w+")
		for i=1,number do
			if container[i] then
				handle:write(container[i].."\n")
			end
		end
	handle:flush()
        handle:close()
end
	
 function showshit(user,container,wtf,file,cmdlevel,env)
	if cmdlevel~=0 then
		if CheckUserLevel(user) >= cmdlevel then
			local container=loadshit(file)
			local msg="\r\nHere you go, the "..wtf..":\r\n\r\n"
				if number>0 then
					for i=1,number do
						s,e,who,when,entry=string.find(container[i], "(.+)|(.+)|(.+)")
						msg=msg..i..".\t"..who.." - "..when.." ---> "..entry.."\r\n"
					end
				else
					msg=msg.."No entries in "..wtf.."."
				end
			user:SendPM(Bot,msg)
		else
			user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |")
		end
	else
		user:SendData(parseenv(user,env,Bot).."That command is disabled.")
	end
end


function delshit(user,data,container,file,wtf,cmdlevel,env)
	if cmdlevel~=0 then
		if CheckUserLevel(user) >= cmdlevel then
			local container=loadshit(file)
			local _,_,args=string.find(data,"%b<>%s+%S+%s+(.+)")
			if args then
				string.gsub(args,"(%d+)",function (what)
									what = tonumber(what)
									if what then 
										if container[what] then
											user:SendData(parseenv(user,env,Bot).."Entry #"..what.." is deleted from the "..wtf..".|")
											container[what]=nil
											saveshit(container,file)
										else
											user:SendData(parseenv(user,env,Bot).."Entry #"..what.." wasn't found in the "..wtf..".|")
										end
									else
											user:SendData(parseenv(user,env,Bot).. "I need the ID number to delete an entry.|")
									end
								end)
			else
				user:SendData(parseenv(user,env,Bot).. "I need at least one ID number to work! ;).|")
			end
		else
			user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |")
		end
	else
		user:SendData(parseenv(user,env,Bot).."That command is disabled.")
	end
	container=nil
end


function CheckUserLevel(user)
	if user.iProfile==0 then
		return 5
	elseif user.iProfile==1 then
		return 4
	elseif user.iProfile==3 then
		return 2
	elseif user.iProfile==2 then
		return 3
	else 
		return 1
	end
end


function Main()
	frmHub:RegBot(Bot)
end
Everything could have been anything else and it would have just as much meaning.

Skynet

great script works fine is there any way of stopping the cmd going to main chat :>eg:

[TN]Skynet> !showrequests

Copyright SkynetSystems 2000-2005 @Phoenix Network

TiMeTrAVelleR

What do i need to change  to get rit of commands showing in main

Greetzz TT

jiten

QuoteOriginally posted by T?M??r?V?ll?R
What do i need to change  to get rit of commands showing in main

Greetzz TT

Just add the red line to ChatArrival like this:

function ChatArrival(user,data)
	local returndata=0
	data=string.sub(data,1,string.len(data)-1)
	local _,_,cmd = string.find(data,"%b<>%s+(%S+)")
	if cmd then
		returndata=parsecmds(user,data,string.lower(cmd),"MAIN")
		[COLOR=red]return 1[/COLOR] 
	end
end


Cheers.

bastya_elvtars

Oooooooooooops, seems I have forgotten. Anyway, will release an updated version soon. Cheers!
Everything could have been anything else and it would have just as much meaning.

TiMeTrAVelleR

Got this  now
Syntax ...tings\Roger.CP436745-A\Bureaublad\-=(TrAnCe)=- Hub\scripts\guestbook.lua:141: `=' expected near `end'

Greetzz   TT

bastya_elvtars

OMG this needs an urgent fix... l8r.
Everything could have been anything else and it would have just as much meaning.

Syphrone-NL

I posted the script with the error in the wrong directory so heres my error again:

Syntax D:\ptokax\ptokax\scripts\guestbook.lua:243: attempt to concatenate global `entry' (a nil value)

I got this from 2 days ago and i didnt changed anything
Owner of 2 public hubs in Palace Network ---> www.palace-network.nl

bastya_elvtars

Sorry to say, but in the next 2 weeks I will not be able to do any scripting, I will be lucky if I can do my other tasks. Sorry guys.
Everything could have been anything else and it would have just as much meaning.

Skippy84

-- guestbook by bastya_elvtars (the rock n' roll doctor) ---> [EMAIL]bastyaelvtars@gmail.com[/EMAIL]
--------------------------------
-- v2.1prebeta >>>>>>>> use with caution, bugs can occur
--------------------------------
--------------- THIS IS LUA5 VERSION NOW
-- thx Hawk and nErBoS for helping me out in my first lua5 script
-------------------------------------------------------------------------------------------------------------------------------------

-- no flush function, delete a dat file instead (gonna add if needed ^^)
-- multiple entries can be deleted by adding multiple nubers separated by spaces (meaning !delguestbook 1 43 555 756612346239)
-- but u can separate them with any non-number char if u like it better
-- commands can be added in PM or in main, bot responds according 2 them

-----------------------------------------------------------------------
-- little change by Skippy: script creates Directory Dats alone

---------------------- CONFIG PART


Bot="NoteBook"


-- i made only 3 of this add/show/delete shit.
-- if you need more, notify me
-- The help text can only be changed by experts,altho you might translate it - see a lua documentation
-- levels are always the following, determining who CAN use the command:
-- 5:only superops
-- 4 ops & above
-- 3 vips & above
-- 2 registered users & above
-- 1 anyone
-- 0 disabled
---=========== #1


-- What it is called?


gbname="guestbook" -- the name of this function (call it what you want)


-- name of the textfile that contains entries - if it does not exist, the script will create one.

path = "dats" -- set path to the  directory thats created
gbfile="dats/guestbook.dat"


levgbcmd1=1
gbcmd1="!showguestbook" -- this shows the guestbook or wtf
levgbcmd2=1
gbcmd2="!addguestbook" -- adds new entry to guestbook or wtf
levgbcmd3=5
gbcmd3="!delguestbook" -- deletes an entry by ID





--========== #2


-- What it is called?


nname="news bulletin" -- the name of this function (call it what you want)


-- name of the textfile that contains entries - if it does not exist, the script will create one.
nfile="dats/news.dat"


-- this shows the news bulletin or wtf
levncmd1=1
ncmd1="!shownews"


-- adds new entry to news bulletin or wtf
levncmd2=1
ncmd2="!addnews"

-- deletes an entry by ID
levncmd3=5
ncmd3="!delnews"





--========== #3


-- What it is called?


rname="request board" -- the name of this function (call it what you want)


-- name of the textfile that contains entries - if it does not exist, the script will create one.
rfile="dats/requests.dat"


-- this shows the requests or wtf
levrcmd1=1
rcmd1="!showrequests"


-- adds new entry to requests or wtf
levrcmd2=1
rcmd2="!addrequest"

-- deletes an entry by ID
levrcmd3=5
rcmd3="!delrequest"



-------------------- END OF CONFIG


os.execute("mkdir ".."\""..string.gsub(path, "/", "\\").."\"")




function parseenv(user,env,bot)
if env=="PM" then
return "$To: "..user.sName.." From: "..bot.." $<"..bot.."> "
elseif env=="MAIN" then
return "<"..bot.."> "
end
end


function ChatArrival(user,data)
local returndata=0
data=string.sub(data,1,string.len(data)-1)
local _,_,cmd = string.find(data,"%b<>%s+(%S+)")
if cmd then
returndata=parsecmds(user,data,string.lower(cmd),"MAIN")
end
end

function ToArrival(user,data)
local returndata=0
data=string.sub(data,1,string.len(data)-1)
-- is this meant for our bot?
local _,_,whoTo = string.find(data,"$To:%s+(%S+)")
if (whoTo == Bot) then
local _,_,cmd = string.find(data,"$To:%s+%S+%s+From:%s+%S+%s+$%b<>%s+(%S+)")
returndata=parsecmds(user,data,string.lower(cmd),"PM")
end return returndata
end

function parsecmds(user,data,cmd,env)
local returndata=0
if cmd==gbcmd1 then
showshit(user,entries,gbname,gbfile,levgbcmd1,env) returndata=1 -- (user,container,wtf,file)
elseif cmd==gbcmd2 then
addshit(user,data,entries,gbfile,levgbcmd2,env) returndata=1 -- (user,data,container,file)
elseif cmd==gbcmd3 then
delshit(user,data,entries,gbfile,gbname,levgbcmd3,env) returndata=1 -- delshit(user,data,container,file,wtf)
-- news stuff
elseif cmd==ncmd1 then
showshit(user,entries,nname,nfile,levncmd1,env) returndata=1 -- (user,container,wtf,file)
elseif cmd==ncmd2 then
addshit(user,data,entries,nfile,levncmd2,env) returndata=1 -- (user,data,container,file)
elseif cmd==ncmd3 then
delshit(user,data,entries,nfile,nname,levncmd3,env) returndata=1 -- delshit(user,data,container,file,wtf)
-- requests stuff
elseif cmd==rcmd1 then
showshit(user,entries,rname,rfile,levrcmd1,env) returndata=1 -- (user,container,wtf,file)
elseif cmd==rcmd2 then
addshit(user,data,entries,rfile,levrcmd2,env) returndata=1 -- (user,data,container,file)
elseif cmd==rcmd3 then
delshit(user,data,entries,rfile,rname,levrcmd3,env) returndata=1 -- delshit(user,data,container,file,wtf)
end return returndata
end


function addshit(user,data,container,file,cmdlevel,env)
if cmdlevel~=0 then
if CheckUserLevel(user) >= cmdlevel then
local container=loadshit(file)
number=number+1
local _,_,entry=string.find(data,"%b<>%s+%S+%s+(.*)")
if entry then
container[number]=os.date("%c").."|"..user.sName.."|"..entry
saveshit(container,file)
user:SendData(parseenv(user,env,Bot).."Your entry has been successfully added.")
else
user:SendData(parseenv(user,env,Bot).."Please add an entry, too.")
end
container={}
else
user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |")
end
else
user:SendData(parseenv(user,env,Bot).."That command is disabled.")
end
end


function loadshit(file)
local shit={}
number=0
local f,e = io.open(file,"r")
if f then
while 1 do
local line = f:read("*l")
if line == nil then
break
else
number = number +1
shit[number]=line
end
end
f:close(f)
end
return shit
end


function saveshit(container,file)
local handle = io.open(file,"w+")
for i=1,number do
if container[i] then
handle:write(container[i].."\n")
end
end
handle:flush()
handle:close()
end

function showshit(user,container,wtf,file,cmdlevel,env)
if cmdlevel~=0 then
if CheckUserLevel(user) >= cmdlevel then
local container=loadshit(file)
local msg="\r\nHere you go, the "..wtf..":\r\n\r\n"
if number>0 then
for i=1,number do
s,e,who,when,entry=string.find(container[i], "(.+)|(.+)|(.+)")
msg=msg..i..".\t"..who.." - "..when.." ---> "..entry.."\r\n"
end
else
msg=msg.."No entries in "..wtf.."."
end
user:SendPM(Bot,msg)
else
user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |")
end
else
user:SendData(parseenv(user,env,Bot).."That command is disabled.")
end
end


function delshit(user,data,container,file,wtf,cmdlevel,env)
if cmdlevel~=0 then
if CheckUserLevel(user) >= cmdlevel then
local container=loadshit(file)
local _,_,args=string.find(data,"%b<>%s+%S+%s+(.+)")
if args then
string.gsub(args,"(%d+)",function (what)
what = tonumber(what)
if what then
if container[what] then
user:SendData(parseenv(user,env,Bot).."Entry #"..what.." is deleted from the "..wtf..".|")
container[what]=nil
saveshit(container,file)
else
user:SendData(parseenv(user,env,Bot).."Entry #"..what.." wasn't found in the "..wtf..".|")
end
else
user:SendData(parseenv(user,env,Bot).. "I need the ID number to delete an entry.|")
end
end)
else
user:SendData(parseenv(user,env,Bot).. "I need at least one ID number to work! ;).|")
end
else
user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |")
end
else
user:SendData(parseenv(user,env,Bot).."That command is disabled.")
end
container=nil
end


function CheckUserLevel(user)
if user.iProfile==0 then
return 5
elseif user.iProfile==1 then
return 4
elseif user.iProfile==3 then
return 2
elseif user.iProfile==2 then
return 3
else
return 1
end
end


function Main()
frmHub:RegBot(Bot)
end

Skippy84

@  Syphrone-NL   please can you post youre line 243
i hope i can help you





for german speaking people:
the german Version you find  today 15:00
at skippy.dyndns.ws\forum\index.php

Syphrone-NL

Oke i worked it out my script is now working
You cant post whole storys in it only 1 line that was my problem.

My second problem:
I can see !showguestbook and !addguestbook in mainchat. So i saw that you need to add a line in the script i did that but now my whole mainchat is blocked LOL  :D

NOT FUNNY

Can somebody help i dont want to block my whole mainchat only the !showguestbook and !addguestbook
Owner of 2 public hubs in Palace Network ---> www.palace-network.nl

jiten

QuoteOriginally posted by Syphrone-NL
Oke i worked it out my script is now working
You cant post whole storys in it only 1 line that was my problem.

My second problem:
I can see !showguestbook and !addguestbook in mainchat. So i saw that you need to add a line in the script i did that but now my whole mainchat is blocked LOL  :D

NOT FUNNY

Can somebody help i dont want to block my whole mainchat only the !showguestbook and !addguestbook

Howdy... Well, post your modded script so that we can help you.

Best regards,

jiten

bastya_elvtars

Inside

function ChatArrival(user,data)

replace

returndata=parsecmds(user,data,string.lower(cmd),"MAIN")

to

return parsecmds(user,data,string.lower(cmd),"MAIN")

.

:)
Everything could have been anything else and it would have just as much meaning.

???ZzC???

#14
Thanks bastya.

Nice script. And its running ok.

Greetz

Edit://

Still one command that shows in main.

!showguestbook

Eventhough there are some entries in guestbook it won't show.
???Zzi?`? ????nC?? part of

?-=[K?igh?Visio?.::.?e?WorX]=-?

???ZzC???

Script is working ok now.

Made mistake.

Thanks

 :D
???Zzi?`? ????nC?? part of

?-=[K?igh?Visio?.::.?e?WorX]=-?

Syphrone-NL

I got its working great this is what i changed:

function ChatArrival(user,data)
	local returndata=0
	data=string.sub(data,1,string.len(data)-1)
	local _,_,cmd = string.find(data,"%b<>%s+(%S+)")
	if cmd then
		return parsecmds(user,data,string.lower(cmd),"MAIN") 
	end
end
Owner of 2 public hubs in Palace Network ---> www.palace-network.nl

remaster-it

Nice ..  works  well  .. thx

a small request  ..  

if a new message is posted / added  to News...  guestbook   or   request  files   ..  
can we have the option for notifying ops by sending a message to the ops room  
( including  which  dat file has been added 2 ) ..

remaster-it

#18
If you have the moderator and netfounder  profiles in your hub  u need to change the following ..

function CheckUserLevel(user)
   if user.iProfile==0 then
      return 5
   elseif user.iProfile==1 then
      return 4
   elseif user.iProfile==3 then
      return 2
   elseif user.iProfile==2 then
      return 3
   else
      return 1
   end
end


---------------    to the following


function CheckUserLevel(user)
   if user.iProfile==0 then
      return 5
   elseif user.iProfile==1 then
      return 4
   elseif user.iProfile==3 then
      return 2
   elseif user.iProfile==2 then
      return 3
   elseif user.iProfile==4 then
      return 4
   elseif user.iProfile==5 then
      return 5
   else
      return 1
   end
end

I have also added the following to the zrightclicker.lua

NEWS AND GUEST BOOK

sMenu = "RC"
wMenu = "NEWS AND GUEST BOOK"


and  

customCMDs = function(user) --// You can put your custome commands here
   user:SendData("$UserCommand 1 3 "..wMenu.."\\REQUESTS\\ADD A REQUEST$<%[mynick]> !addrequest %[line:Type request]||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\REQUESTS\\READ REQUEST$<%[mynick]> !showrequests||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\REQUESTS\\DELETE A REQUEST ENTRY$<%[mynick]> !delrequest %[line:ENTER NUMBER TO DELETE]||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\NEWS\\ADD NEWS BULLETIN$<%[mynick]> !addnews %[line:Type NEWS MESSAGE]||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\NEWS\\READ NEWS$<%[mynick]> !shownews||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\NEWS\\DELETE A NEWS ENTRY$<%[mynick]> !delnews %[line:ENTER NUMBER TO DELETE]||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\GUEST BOOK\\ADD A MESSAGE TO THE GUEST BOOK$<%[mynick]> !addguestbook %[line:Type MESSAGE]||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\GUEST BOOK\\READ GUEST BOOK$<%[mynick]> !showguestbook||")
   user:SendData("$UserCommand 1 3 "..wMenu.."\\GUEST BOOK\\DELETE A GUEST BOOK ENTRY$<%[mynick]> !delguestbook %[line:ENTER NUMBER TO DELETE]||")

SMF spam blocked by CleanTalk