-- texter v4.5 by plop -- thx 2 chilla for the faster routine for opening the files -- shows text files from a folder named text. -- doesn't mather what prefix it used. -- if the file excist it shows (unless it's locked for the users level). -- 4.4 tiny bug fix on not releasing the file after loading. -- 4.5 fixed bug needing a script restart 2 activate changed level settings Bot = "something" FDFolder = "text" msg = "\r\n\r\n" msg = msg.." file viewing commands.\r\n------------------------------------------------------------------------------------------------------------------------------------------------------------------------\r\n" msg = msg.." +lock \t\t- locks the file to the given level numbers\r\n" msg = msg.." +free \t\t\t\t- free's the file again so every level can see them\r\n" msg = msg.." +where \t\t\t- changes the location the text file shows. where can be main/pm/allmain/allpm.\r\n" msg = msg.." +show \t\t\t\t- shows which levels can see the file\r\n\r\n" msg = msg.." file entry commands.\r\n------------------------------------------------------------------------------------------------------------------------------------------------------------------------\r\n" msg = msg.." +addentry \t\t- shows the file to the given level numbers on entry\r\n" msg = msg.." +delentry \t\t\t- stops the given file from being shown on entry\r\n" msg = msg.." +whereentry \t\t- changes the location the text file is shown on entry. where can be main/pm.\r\n" msg = msg.." +showentry \t\t\t- shows which levels get to see the file on entry\r\n\r\n" msg = msg.." file timer commands.\r\n------------------------------------------------------------------------------------------------------------------------------------------------------------------------\r\n" msg = msg.." +addtimer \t- adds the given filename to the timer. where can be allmain/allpm.\r\n" msg = msg.." +deltimer \t\t\t- removes the given file from the timer\r\n" msg = msg.." +showtimer \t\t\t- shows which on which interval the file is shown by the timer\r\n\r\n" msg = msg.." basic help commands.\r\n------------------------------------------------------------------------------------------------------------------------------------------------------------------------\r\n" msg = msg.." +showall\t\t\t\t\t- shows all the files which have settings\r\n" msg = msg.." +list\t\t\t\t\t- shows all avail files\r\n" msg = msg.." +help\t\t\t\t\t- this help menu\r\n|" function Main() frmHub:RegBot(Bot) if readfrom(FDFolder.."/textlevels.lua") then dofile(FDFolder.."/textlevels.lua") readfrom() else text = {} text._error={ ["file"]="file doesn't excist|", ["nonum"]="pls tell me which level numbers!.|", ["nofile"]="which file?.|", ["noargs"]="pls tell me where!. main/pm/allmain/allpm.|", ["noargs2"]="pls tell me where!. allmain/allpm.|", ["notimer"]="pls tell me which interval (in minutes).|" } text._default="pm" text._levels = {} text._where = {} text._entry = {} text._entrywhere = {} text._timer = {} text._interval = {} text._intervalb = {} text._entrywheres = { ["main"] = "main", ["pm"] = "pm" } text._wheres = { ["main"] = "main", ["allmain"] = "allmain", ["pm"] = "pm", ["allpm"] = "allpm" } text._timerwheres = { ["main"]="main", ["pm"]="pm" } save() end text._interval = nil text._interval = {} for a,b in text._intervalb do text._interval[a]=b end SetTimer(60*1000) StartTimer() text._timercounter = 0 -- text._interval = text._intervalb end Commands = { ["lock"] = function(user, data) s,e,file,args = strfind(data, "%$%b<>%s*%S+%s*(%S*)%s*(.*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif args == "" then user:SendPM(Bot, text._error["nonum"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._levels[file] then text._levels[file]=nil end text._levels[file]={} gsub(strlower(args), "(%S+)", function(number) text._levels[(file)][tonumber(number)]=tonumber(number) end) user:SendPM(Bot, "the file: "..file..".txt can now only be viewed by the levels "..args.."|") save() else user:SendPM(Bot, text._error["file"]) end end, ["free"] = function(user, data) s,e,file = strfind(data, "%$%b<>%s*%S+%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._levels[file] then text._levels[file]=nil user:SendPM(Bot, "the file: "..file..".txt is now unlocked!") save() else user:SendPM(Bot, "the file "..file..".txt wasn't locked!|") end else user:SendPM(Bot, text._error["file"]) end end, ["show"] = function(user, data) s,e,file = strfind(data, "%$%b<>%s*%S+%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._levels[file] then local tmp = "the file: "..file..".txt can be viewed by the levels:" for a,b in text._levels[file] do tmp = tmp.." "..a end tmp = tmp.." in "..(text._where[file] or text._default) user:SendPM(Bot, tmp.."|") else user:SendPM(Bot, "the file "..file..".txt isn't locked!|") end else user:SendPM(Bot, text._error["file"]) end end, ["where"] = function(user, data) s,e,file,args = strfind(data, "%$%b<>%s*%S+%s*(%S*)%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif args == "" then user:SendPM(Bot, text._error["noargs"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._wheres[args] then text._where[file]=args user:SendPM(Bot, "the file "..file.." will now show in "..args.."|") save() else user:SendPM(Bot, "wrong syntax!|") end else user:SendPM(Bot, text._error["file"]) end end, ["addentry"] = function(user, data) s,e,file,args = strfind(data, "%$%b<>%s*%S+%s*(%S*)%s*([%d%s]*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif args == "" then user:SendPM(Bot, text._error["nonum"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._entry[file] then text._entry[file] = nil end text._entry[file]={} gsub(strlower(args), "(%S+)", function(number) text._entry[(file)][tonumber(number)]=tonumber(number) end) user:SendPM(Bot, "the file: "..file..".txt whill now be shown to the levels "..args.." when they enter the hub|") save() else user:SendPM(Bot, text._error["file"]) end end, ["delentry"] = function(user, data) s,e,file = strfind(data, "%$%b<>%s*%S+%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._entry[file] then text._entry[file]=nil if text._entrywhere[file] then text._entrywhere[file]=nil end user:SendPM(Bot, "the file: "..file..".txt won't be shown on entry anymore!") save() else user:SendPM(Bot, "the file "..file..".txt wasn't shown on entry!|") end else user:SendPM(Bot, text._error["file"]) end end, ["whereentry"] = function(user, data) s,e,file,args = strfind(data, "%$%b<>%s*%S+%s*(%S*)%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif args == "" then user:SendPM(Bot, text._error["noargs"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._entrywheres[args] then text._entrywhere[file]=args user:SendPM(Bot, "the file "..file.." will now show in "..args.." on entry|") save() else user:SendPM(Bot, text._error["noargs2"]) end else user:SendPM(Bot, text._error["file"]) end end, ["showentry"] = function(user,data) s,e,file = strfind(data, "%$%b<>%s*%S+%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._levels[file] then local tmp = "the file: "..file..".txt is shown to the levels:" for a,b in text._entry[file] do tmp = tmp.." "..a end tmp = tmp.." in "..(text._entrywhere[file] or text._default) user:SendPM(Bot, tmp.."|") else user:SendPM(Bot, "the file "..file..".txt isn't shown!|") end else user:SendPM(Bot, text._error["file"]) end end, ["addtimer"] = function(user, data) s,e,file,args,args2 = strfind(data, "%$%b<>%s*%S+%s*(%S*)%s*(%d*)%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif args == "" then user:SendPM(Bot, text._error["notimer"] ) elseif args2 == "" then user:SendPM(Bot, text._error["noargs2"] ) elseif text._timerwheres[args2] == nil then user:SendPM(Bot, "use "..text._error["noargs2"] ) elseif readfrom(FDFolder.."/"..file..".txt") then -- cleaning old settings text._intervalb[file] = nil text._interval[file] = nil text._timer[file] = nil -- adding the new settings args = tonumber(args) text._interval[file] = args + text._timercounter text._intervalb[file] = args text._timer[file] = args2 user:SendPM(Bot, "the file: "..file..".txt whill now be shown every: "..args.." minutes in "..args2.."|") save() else user:SendPM(Bot, text._error["file"]) end end, ["deltimer"] = function(user, data) s,e,file = strfind(data, "%$%b<>%s*%S+%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._interval[file] then text._intervalb[file] = nil text._interval[file] = nil text._timer[file] = nil user:SendPM(Bot, "the file: "..file..".txt is removed from the timer!") save() else user:SendPM(Bot, "the file "..file..".txt wasn't in the timer!|") end else user:SendPM(Bot, text._error["file"]) end end, ["showtimer"] = function(user,data) s,e,file = strfind(data, "%$%b<>%s*%S+%s*(%S*)") if file == "" then user:SendPM(Bot, text._error["nofile"] ) elseif readfrom(FDFolder.."/"..file..".txt") then if text._timer[file] then local tmp = "the file: "..file..".txt is shown every:"..text._interval[file].." minutes in "..text._timer[file].."|" user:SendPM(Bot, tmp.."|") else user:SendPM(Bot, "the file "..file..".txt isn't in the timer!|") end else user:SendPM(Bot, text._error["file"]) end end, ["showall"] = function(user,data) tmp = "" local e=0 for a,b in text._levels do if e==0 then tmp = " on command\r\n file\t\tlevels\t\twhere\r\n------------------------------------------------------------------------------------\r\n" e=1 end tmp = tmp.." "..a.."\t\t" for c,d in text._levels[a] do tmp = tmp.." "..c end tmp = tmp.."\t\t"..(text._where[a] or text._default).."\r\n" end if e == 1 then tmp = tmp.."------------------------------------------------------------------------------------\r\n\r\n" end e=0 for a,b in text._entry do if e==0 then tmp = tmp.." on entry\r\n file\t\tlevels\t\twhere\r\n------------------------------------------------------------------------------------\r\n" e=1 end tmp = tmp.." "..a.."\t\t" for c,d in text._entry[a] do tmp = tmp.." "..c end tmp = tmp.."\t\t"..(text._entrywhere[a] or text._default).."\r\n" end if e == 1 then tmp = tmp.."------------------------------------------------------------------------------------\r\n\r\n" end e=0 for a,b in text._timer do if e==0 then tmp = tmp.." on timer\r\n file\t\ttime (minutes)\twhere\r\n------------------------------------------------------------------------------------\r\n" e=1 end tmp = tmp.." "..a.."\t\t".." "..text._interval[a].."\t\t"..(text._timer[a] or text._default).."\r\n" end if e == 0 then user:SendPM(Bot, "\r\n\r\n"..tmp.."|") else user:SendPM(Bot, "\r\n\r\n"..tmp.."------------------------------------------------------------------------------------\r\n\r\n|") end end, ["help"] = function(user, data) user:SendPM(Bot, msg.."|") end, ["list"] = function(user, data) execute("dir "..FDFolder.." > "..FDFolder.."/dirlist.lst") readfrom(FDFolder.."/dirlist.lst") local tmp = "\r\n\r\n all available files:\r\n------------------------------------------------------\r\n" while 1 do local kicks = read() if kicks == nil then break end local s,e,name = strfind(kicks, "%s(%S+)%.txt$") if name then tmp = tmp.." "..name.."\r\n" end end readfrom() remove(FDFolder.."/dirlist.lst") user:SendPM(Bot, tmp.."|") end } function DataArrival(user, data) if( strsub(data, 1, 1) == "<" ) then data=strsub(data,1,strlen(data)-1) s,e,cmd = strfind(data,"%b<>%s+%S(%w+)") if readfrom(FDFolder.."/"..cmd..".txt") then if text._levels[cmd] then if text._levels[cmd][user.iProfile] then showtext(user, cmd, text._levels[cmd][user.iProfile]) end return 1 else showtext(user, cmd, text._default) return 1 end end elseif(strsub(data, 1, 4) == "$To:") then s,e,whoTo = strfind(data,"$To:%s+(%S+)") if whoTo == Bot then data=strsub(data,1,strlen(data)-1) s,e,cmd = strfind(data,"$To:%s+%S+%s+From:%s+%S+%s+$%b<>%s+%S(%w+)") if Commands[cmd] and user.iProfile == 0 then return call(Commands[cmd], {user,data}) elseif readfrom(FDFolder.."/"..cmd..".txt") then if text._levels[cmd] then if text._levels[cmd][user.iProfile] then showtext(user, cmd, text._where[cmd]) end readfrom() return 1 else showtext(user, cmd, text._default) readfrom() return 1 end end end end end function save() writeto(FDFolder.."/textlevels.lua") write("\n--config file for texter 4.3, better not edit this by hand if you don't know what your doing\n\ntext={\n") local t = 0 for a,b in text do if type(text[a]) ~= "number" then if t==0 then write(" "..a.."=") t=1 else write(",\n "..a.."=") end if type(b) == "string" then write("\""..b.."\"") else t2 = 0 t3 = 0 write("{") for c,d in text[a] do if type(d) ~= "table" then if tonumber(d) then tmp = d else tmp = "\""..d.."\"" end if t2 == 0 then write("\n [\""..c.."\"]="..tmp) t2 = 1 else write(",\n [\""..c.."\"]="..tmp) end else if t3==0 then t3 = 1 else write(",") end t4 = 0 for e,f in text[a][c] do if t4 == 0 then write("\n [\""..c.."\"]={") write("\n ["..e.."]="..f) t4 = 1 else write(",\n ["..e.."]="..f) end end write("\n }") end end write("\n }") end end end write("\n}\n\n--plopyrights reserved") writeto() end function showtext(user, file, where) local handle = openfile(FDFolder.."/"..file..".txt", "r") local contents = gsub(read(handle, "*a"),strchar(10), "\r\n") closefile (handle) if where == "main" then user:SendData(Bot, "\r\n"..contents.."\r\n|") elseif where == "allmain" then SendToAll(Bot, "\r\n"..contents.."\r\n|") elseif where == "allpm" then SendPmToAll(Bot, "\r\n"..contents.."\r\n|") else user:SendPM(Bot, "\r\n"..contents.."\r\n|") end end function NewUserConnected(user) for a,b in text._entry do if text._entry[a][user.iProfile] then showtext(user, a, (text._entrywhere[a] or text._default)) end end end function OpConnected(user) for a,b in text._entry do if text._entry[a][user.iProfile] then showtext(user, a, (text._entrywhere[a] or text._default)) end end end function OnTimer() text._timercounter = text._timercounter +1 for a,b in text._timer do if text._interval[a] == text._timercounter then text._interval[a] = text._interval[a] +text._timercounter showtext(Bot, a, text._timer[a]) end end end