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
Using gsub is the answer, right ? :)
And txt files instead of tables ...
so true
Thanks, You've been a great help
Snooze
yw m8.
Keep it up, your doing great so far.
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