PtokaX forum

Archive => Archived 4.0 boards => Help with Lua 4 scripts => Topic started by: Snooze on 27 July, 2004, 04:03:32

Title: [Help] Triggerbot
Post by: Snooze on 27 July, 2004, 04:03:32
I'm trying to make a trigger bot where users can add their own triggers ..

This is what I've done so far.

BotName = "Honey"
BotPrefix = "+"

Trigger1 = "addtrigger"
Trigger2 = "viewtriggers"
Trigger3 = "deltrigger"

FilePath = "Triggers/"
assert(dofile(FilePath.."Triggers.lua"), "Trigger.lua not found or error in script")

function Main()
frmHub:RegBot(BotName)
end

function DataArrival(user,data)
if strsub(data, 1, 1) == "<" then
local data=strsub(data,1,strlen(data)-1)
s,e,cmd = strfind(data,"%b<>%s+(%S+)")
if cmd == BotPrefix..Trigger1 then
addTrigger(user, data)
return 1
elseif cmd == BotPrefix..Trigger2 then
viewTrigger(user,data)
return 1
elseif cmd == BotPrefix..Trigger3 then
delTrigger(user,data)
return 1
elseif tTriggers[cmd] ~= nil then
TriggerReply(user,data)
end
end
end

function addTrigger(user,data)
if not user.bOperator then
user:SendData(Bot, "You are not allowed to add triggers.")
return 1
end
GetArg(data)
if arg == nil then
user:SendPM(Bot, "You need to enter a trigger and a reply. Type "..BotPrefix.."triggerhelp to see howto add a new trigger.")
return 1
else
local _,_,sTrigger, sReply = strfind( arg, "(%S+)%s+(.+)" )
tTriggers[sTrigger] = {sReply}
SaveTrigger()
SendToAll(BotName, "Done.\r\n\r\nTrigger: '"..sTrigger.."'\r\nReply: '"..sReply.."'\r\n\r\nSuccessfully added.")
end
end

function delTrigger(user,data)
if not user.bOperator then
user:SendPM(Bot, "You are not allowed to delete triggers.")
return 1
end
GetArg(data)
if arg == nil then
user:SendPM(Bot, "You need to tell me what trigger to delete.")
return 1
else
if tTriggers[arg] == nil then
user:SendPM(Bot, "I can't find any trigger called '"..arg.."'. Are you sure you spelled it right ?")
return 1
else
tTriggers[arg] = nil
SaveTrigger()
user:SendPM(Bot, "The trigger '"..arg.."' has been removed.")
end
end
end

function TriggerReply(user,data)
GetArg(data)
if arg == nil then
user:SendData(BotName, "You need to enter a username.")
return 1
end
local _,_,msg1,msg2 = strfind(tTriggers[cmd][1], "(.*)%s+#user#%s+(.*)")
if msg1 == nil then
msg1 = ""
end
if msg2 == nil then
msg2 = ""
end
SendToAll("*** "..BotName.." "..msg1.." "..arg.." "..msg2)
end




function SaveTrigger()
local sline = "------------------------------------------------------------------"
local handle = openfile(FilePath.."Triggers.lua","w")
write(handle,sline.."\r\n--\t*** Triggers ***\t--\r\n"..sline.."\r\n\r\n")
Serialize(tTriggers,"tTriggers",handle)
closefile(handle)
end

function Serialize(tTable,sTableName,hFile,sTab)
sTab = sTab or "";
write(hFile,sTab..sTableName.." = {\n");
for key,value in tTable do
local sKey = (type(key) == "string") and format("[%q]",key) or format("[%d]",key);
if(type(value) == "table") then
Serialize(value,sKey,hFile,sTab.."\t");
else
local sValue = (type(value) == "string") and format("%q",value) or tostring(value);
write(hFile,sTab.."\t"..sKey.." = "..sValue);
end
write(hFile,",\n");
end
write(hFile,sTab.."}");
end

function GetArg(data)
   s,e,cmd,arg = strfind( data, "%b<>%s+(%S+)%s+(.+)" )
   return arg
end

I need to find a better way to resolve the #user# from the string .. any suggestions/ideas would be great.

A new trigger is added like this:
Ex:
+addtrigger makes #user# write better code as this shit sux.

The reply would be:

*** Honey makes Snooze write better code as this shit sux.


Thanks,

Snooze
Title:
Post by: Snooze on 27 July, 2004, 04:50:00
Using gsub is the answer, right ? :)
Title:
Post by: Snooze on 27 July, 2004, 04:58:51
And txt files instead of tables ...
Title:
Post by: Troubadour on 27 July, 2004, 12:32:20
so true
Title:
Post by: Snooze on 27 July, 2004, 21:33:10
Thanks, You've been a great help


Snooze
Title:
Post by: Troubadour on 27 July, 2004, 23:15:32
yw m8.
Keep it up, your doing great so far.
Title:
Post by: Snooze on 28 July, 2004, 10:07:19
I find myself in lag of time atm, so I'm turning this into a REQUEST.

Should anyone have the time to create this script, please do so :)


Thanks,

Snooze