PtokaX forum

Archive => Archived 5.0 boards => Help with scripts => Topic started by: TiMeTrAVelleR on 08 March, 2005, 21:43:54

Title: Birthdayman LUA 5
Post by: TiMeTrAVelleR on 08 March, 2005, 21:43:54
[code]

--- BirthdayMan v 2.6   LUA_5.0
--- by Herodes -- Update 22/9/2004
--- --- --- --- --- ---
-- v2.5
--- When Users are connected if there is a birthday it informs
--- When a Birhtday-User connect it plays surprise and informs the Hub
-- v2.6
--- Fix from Skyhawk comment for the display age
--- --- --- --- --- ---
----- do not edit these four lines
sec = 1000
minutes = 1000*60
hours = 1000*(60^2)
TxtSend = nil
----- Edit at will
bBot = "Surprise"
timecheck = 12*hours   --- how much time before checking for birthdays ...
tProfiles = {  ---- profile rights to commands, 0 cant use the bot at all, 1 can use listcmd and addcmd, 2 can also use delcmd and addbircmd...   
         ["-1"] = 0,    --- Unregs
         ["0"] = 2,     --- Masters
         ["1"] = 2,     --- Operators
         ["2"] = 1,    --- VIPs
         ["3"] = 1,    --- Regs
         ["4"] = 1,    --- CustomProf1
         ["5"] = 2,   --- CustomProf2    
         }      --- ( carry on typing your profiles in the right format : ["profile_number"] = value (0/1/2)
addcmd = "!mybirthday"   --- !mybirthday dd/mm/yyyy      dd = day ,   mm = month ,    yyyy = year .... Sets your birthday!
delcmd = "!delbirthday"   --- !delbirthday            is needed ... deletes 's birthday from the list
listcmd = "!birthdays"      --- !birthdays             Lists the birthdays stored
addbircmd = "!addbirth"   --- !addbirth    same as addcmd
findcmd = "!bornon"       --- !bornon               Shows a nice list of the ppl you share dates with ;)
birthdayfile = "cake.txt"   --- The file that will be displayed on Birthday
oldestyear = 1900      --- !mybirthday 0/0/0000  situations are avoided ( lol )
allowedage = 6         --- !mybirthday situations are avoided (in years)
birthlog = "birthdays.tbl"   --- The file where we'll be storing the birthdays ...  << has to be in your scripts folder

--- // --- Script-Starts
tBirthdays = {}

tCalendar = {
   [1] = { 31, "January", },
   [2] = { 28, "February", },
   [3] = { 31, "March", },
   [4] = { 30, "April", },
   [5] = { 31, "May", },
   [6] = { 30, "June", },
   [7] = { 31, "July", },
   [8] = { 31, "August", },
   [9] = { 30, "September", },
   [10] = { 31, "October", },
   [11] = { 30, "November", },
   [12] = { 31, "December", },
   }
function Main()
   dofile(birthlog)
   tCalendar[2][1] = FixFebruary(tonumber(os.date("%Y")))

   local hr = tonumber(os.date("%H"))*60*60*1000
   local mins = 0
   if tonumber(os.date("%M")) == 0 then
      mins = 1
   else
      mins = tonumber(os.date("%M"))*60*1000
   end
   fixTime(hr+mins)
end

function OnTimer()
   CheckBirthdays()
   TxtSend = nil
end

function NewUserConnected(user)
   for i, v in tBirthdays do
      if tBirthdays[2] == tonumber(os.date("%m")) and tBirthdays[1] == tonumber(os.date("%d")) then
         if user.sName ~= i then
            local msg = "Its "..i.."'s birhtday today .. ;D Turning "..(tonumber(os.date("%Y"))-tBirthdays[3] ).." today,... give a wish :)"
            if GetItemByName(i) then
               user:SendData(bBot, msg)
            else user:SendData(bBot, msg.." when he comes online")
            end
         else
            user:SendData(bBot, "Hey I know !!! YOU HAVE YOUR BIRTHDAY TODAY !!! HAPPIEST OF BIRTHDAYS !!!! ")
            SendToAll(bBot, "Guys !! "..user.sName.." is here! What do we say ?? : )")
         end
      end
   end
end

OpConnected = NewUserConnected

function CheckBirthdays()
for i, v in tBirthdays do
   if tBirthdays[2] == tonumber(os.date("%m")) then
      if tBirthdays[1] == tonumber(os.date("%d")) then
         if GetItemByName(i) then
            happy = GetItemByName(i)
            DoHappyBirthday(happy)
         end
      end
   end
end
end

function FixFebruary(y)
   local value = 0
   if (tonumber(y)/4) - (math.floor(tonumber(y)/4)) == 0 then
      value = 29
   else value = 28
   end
   return value
end

function fixTime(now)
    if now < timecheck then
      now = timecheck-now
   elseif now > timecheck then
      now = now-timecheck
   else now = timecheck
   end
   SetTimer(now)
   StartTimer()
end

function ChatArrival(user, data)
if tProfiles[""..user.iProfile..""] ~= 0 then
   if string.sub(data, 1,1) == "<" then
      data = string.sub(data, 1, string.len(data)-1)
      local s,e,cmd,args = string.find(data, "%b<>%s+(%S+)%s*(.*)")
      if cmd == addcmd or cmd == addbircmd and tProfiles[""..user.iProfile..""] >= 1 then
         CheckBirthdays()
         AddBirthDay(user, args)
         return 1
      elseif cmd == delcmd and tProfiles[""..user.iProfile..""] == 2 then
         if args ~= nil then
            if tBirthdays[args] then
               if GetItemByName(args) then
                  nick = GetItemByName(args)
                  nick:SendPM(bBot, user.sName.." has deleted your birthday from my list .. ;(")
               end
               tBirthdays[args] = nil
               user:SendData(bBot, "You deleted "..args.." bithday ...")
               SaveFile(tBirthdays , "tBirthdays", birthlog)
            else user:SendData(bBot, args.." is not in my birthday list ...")
            end
         else user:SendData(bBot , "You need to give me a name ...")
         end
         return 1
      elseif cmd == listcmd and tProfiles[""..user.iProfile..""] >= 1 then
         local str = "The Birthday List of the users of "..frmHub:GetHubName()
         local msg = "\r\n    ..-*'~ "..str.." ~'*-..\r\n"..string.rep("^", string.len(str)).."\r\n\t"
         local c = 0
         local status = ""
         for i, v in tBirthdays do
            if GetItemByName(i) then status = "online" else status = "offline" end
            c = c + 1
            msg = msg..c..". - "..tBirthdays[1].."/"..tBirthdays[2].."/"..tBirthdays[3].." - \t"..i.."\t ( "..status.." )\r\n\t"
         end
         user:SendData(bBot , msg)
         return 1
      elseif cmd == findcmd then
         if tBirthdays[user.sName] then
            local msg = " These are the people that are born the same number-day as you\r\n"
               msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][1] , "day", user.sName).."\r\n"
               msg = msg.." These are the people that are born the same month as you\r\n"
               msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][2] , "month", user.sName).."\r\n"
               msg = msg.." These are the people that are born the same year as you\r\n"
               msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][3] , "year", user.sName).."\r\n"
               msg = msg.." These are the people that are born the same month and day with you \r\n"
               msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][1].."/"..tBirthdays[user.sName][2] , "monthday", user.sName).."\r\n"
               msg = msg.." These are the people that have the same birthday as yours\r\n"
               msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][1].."/"..tBirthdays[user.sName][2].." - "..tBirthdays[user.sName][3] , "all", user.sName).."\r\n"
            user:SendData(bBot, msg)
            return 1
         end
      end
   end
end
end

function AddBirthDay(user, args)
   local pers = ""
   if args ~= nil then
      local s,e,name,day,month,year = string.find(args, "(%S+)%s+(%d+)/(%d+)/(%d+)")
      if name == nil then
         name = user.sName
         pers = "you"
         s,e,day,month,year = string.find(args, "(%d+)/(%d+)/(%d+)")
      else pers = name
      end
      if month ~= nil and day ~= nil and year ~= nil and (tonumber(month) >= 1) and (tonumber(month) <= 12) then
         day = tonumber(day)
         month = tonumber(month)
         year = tonumber(year)
         if year > oldestyear then
            if year < (tonumber(os.date("%Y")) - allowedage) then
               if month == 2 then
                  daylimit = FixFebruary(year)
               else daylimit = tCalendar[month][1]
               end
               if day <= daylimit and day >= 1 then
                  if tBirthdays[name] then
                     month = tBirthdays[name][2]
                     if user.sName == name then
                        user:SendData(bBot, "I have your birthday already ... its on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
                     else user:SendData(bBot, "I have "..name.."'s birthday already ... its on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
                     end
                     local profstr = ""
                        for i,v in tProfiles do
                           if tProfiles == 2 then
                              profstr = GetProfileName(tonumber(i)).."s"
                              break
                           end
                        end
                     user:SendData(bBot, "If you dont think this is correct ... then talk to one of our "..profstr)
                  else tBirthdays[name] = {}
                     tBirthdays[name][1] = day
                     tBirthdays[name][2] = month
                     tBirthdays[name][3] = year
                     SaveFile(tBirthdays , "tBirthdays", birthlog)
                     if user.sName == name then
                        user:SendData(bBot, "Your birthday is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
                        user:SendData(bBot, "I didnt know you are "..FindCorrectAge(tBirthdays[name])..". I'll keep that in mind ;)")
                     else
                        user:SendData(bBot, name.."'s birthday is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
                        user:SendData(bBot, "I didnt know "..name.." is "..FindCorrectAge(tBirthdays[name])..". I'll keep that in mind ;)")
                     end
                     if user.sName == name then
                        SendToAll(bBot, "New birthday added by "..user.sName.." his is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
                     else SendToAll(bBot, user.sName.." added "..name.."'s birthday, which is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
                     end
                  end
               end
            else user:SendData(bBot, "Come ON! "..pers.." cant be less than "..allowedage.." years old !!!  LIAR >:(")
            end
         else user:SendData(bBot, "Come ON! "..pers.." cant be more than "..(year-oldestyear).." years old !!!  LIAR >:(")
         end
      else user:SendData(bBot, "The date you provided was not valid ... ( syntax example : 14/5/1981 )")
      end
   else user:SendData(bBot , "Please enter your birthday after the command ...")
   end
end

function FindCorrectAge(table)
   if table[2] > tonumber(os.date("%m")) then
      if table[1] >= tonumber(os.date("%d")) then
         return tonumber(os.date("%Y"))-table[3]
      else
         return (tonumber(os.date("%Y"))-table[3])-1
      end
   elseif table[2] <= tonumber(os.date("%Y")) then
      if table[1] >= tonumber(os.date("%d")) then
         return tonumber(os.date("%Y"))-table[3]
      else
         return (tonumber(os.date("%Y"))-table[3])-1
      end
   end
end

function FindSame(tTab, val , var, name)
local tTmp = {}
local msg = ""
   if var == "day" then
      for i, v in tTab do
         if val == v[1] and i ~= name then
            tTmp = v[1].."/"..v[2].." - "..v[3]
         end
      end
   elseif var == "month" then
      for i, v in tTab do
         if val == v[2] and i ~= name then
            tTmp = v[1].."/"..v[2].." - "..v[3]
         end
      end
   elseif var == "year" then
      for i, v in tTab do
         if val == v[3] and i ~= name then
            tTmp = v[1].."/"..v[2].." - "..v[3]
         end
      end
   elseif var == "monthday" then
      for i, v in tTab do
         if val == v[1].."/"..v[2] and i ~= name then
            tTmp = v[1].."/"..v[2].." - "..v[3]
         end
      end
   elseif var == "all" then
      for i, v in tTab do
         if val == v[1].."/"..v[2].." - "..v[3] and i ~= name then
            tTmp = v[1].."/"..v[2].." - "..v[3]
         end
      end
   end
   for i,v in tTmp do
      msg = msg.."\t - "..i.."\r\n"
   end
   if msg == "" then
      msg = "\t - noone\r\n"
   end
   return msg
end

function DoHappyBirthday(nick)
   if TxtSend == nil then
      SendToAll(ReadTextFile(birthdayfile))
      TxtSend = 1
   end
   local age = tonumber(os.date("%Y")) - tBirthdays[nick.sName][3]
   local tSurpises = {
         nick.sName.." is gonna have a PAAARTY, today he is turning "..age.." Happy Birthday !!!!",
         "All of you spam "..nick.sName.." with Birthday messages ;), ...turning "..age.." today !!!",
         "Who's turning "..age.." today ?? :D... The day AND the night belongs to "..nick.sName,
         "Happy Birthday to you, Happy Birthday dear "..nick.sName..", we all wish you your "..age.." will be better than your "..(age-1).." !! :)",
         " I think Mr"..nick.sName.." has his birthday today ... he should be turning "..age.." today ;D",
         };
   SendToAll( bBot , tSurpises[random(1, getn(tSurpises)) ] )
end

[code/]

the script runs   but   when  i add   birthday  and    restart scripts  it delites  it   so prob is   what  is wrong whit saving part

TiMeTrAVelleR
Title:
Post by: TiMeTrAVelleR on 08 March, 2005, 21:45:13
Part 2
[code]

--- // --- Table Serialization --- Thanks NL
function Serialize(savTable, sTableName, hFile, sTab)
   assert(savTable, "savTable equals nil");
   assert(sTableName, "sTableName equals nil");
   assert(hFile, "hFile equals nil");
   assert(type(savTable) == "table", "savTable must be a table!");
   assert(type(sTableName) == "string", "sTableName must be a string!");
   sTab = sTab or "";
   write(hFile, sTab..sTableName.." = {\n" );
   for key, value in savTable do
      local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
      if(type(value) == "table") then
         Serialize(value, sKey, hFile, sTab.."\t");
      else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
         write(hFile, sTab.."\t"..sKey.." = "..sValue);
      end
      write(hFile, ",\n");
   end
   write(hFile, sTab.."}");
end

function LoadFile(file)
   assert(readfrom(file),file.." is not found.")
   dostring(read("*all"))
   readfrom()
end

function SaveFile(table , tablename, file)
   local hFile = openfile(file, "w");
   Serialize(table, tablename, hFile);
   closefile(hFile);
end

function ReadTextFile(file)
local message = "\r\n"
readfrom(file, "r")
while 1 do
local    line = read()
   if ( line == nil ) then break
   else message = message.."\t"..line.."\r\n"
   end
end
readfrom()   
return message
end

[code/]
Title:
Post by: Jelf on 08 March, 2005, 23:48:43
Here you go....
--- BirthdayMan v 2.6 LUA_5.0 with little help by Jelf
--- by Herodes -- Update 22/9/2004
--- --- --- --- --- ---
-- v2.5
--- When Users are connected if there is a birthday it informs
--- When a Birhtday-User connect it plays surprise and informs the Hub
-- v2.6
--- Fix from Skyhawk comment for the display age
--- --- --- --- --- ---
----- do not edit these four lines

sec = 1000
minutes = 1000*60
hours = 1000*(60^2)
TxtSend = nil

----- Edit at will

bBot = "Surprise"
timecheck = 12*hours --- how much time before checking for birthdays ...
tProfiles = { ---- profile rights to commands, 0 cant use the bot at all, 1 can use listcmd and addcmd, 2 can also use delcmd and addbircmd...
["-1"] = 0, --- Unregs
["0"] = 2, --- Masters
["1"] = 2, --- Operators
["2"] = 1, --- VIPs
["3"] = 1, --- Regs
["4"] = 1, --- CustomProf1
["5"] = 2, --- CustomProf2
} --- ( carry on typing your profiles in the right format : ["profile_number"] = value (0/1/2)
addcmd = "!mybirthday" --- !mybirthday dd/mm/yyyy dd = day , mm = month , yyyy = year .... Sets your birthday!
delcmd = "!delbirthday" --- !delbirthday is needed ... deletes 's birthday from the list
listcmd = "!birthdays" --- !birthdays Lists the birthdays stored
addbircmd = "!addbirth" --- !addbirth same as addcmd
findcmd = "!bornon" --- !bornon Shows a nice list of the ppl you share dates with ;)
birthdayfile = "cake.txt" --- The file that will be displayed on Birthday
oldestyear = 1900 --- !mybirthday 0/0/0000 situations are avoided ( lol )
allowedage = 6 --- !mybirthday situations are avoided (in years)
birthlog = "birthdays.tbl" --- The file where we'll be storing the birthdays ... << has to be in your scripts folder

local f,e = io.open( birthlog, "a+" ) --//Error handle.. makes sure save file and dir exist...
f,e = io.open( birthlog, "a+" )
if f then
f:write("" )
f:close() --// file and path did not exist.. now they do.
else
birthlog = "birthdays.tbl"--//this is only if the path provided is invalid to winblows. defaults to a file in the scripts dir.
end

require(birthlog)


--- // --- Script-Starts
tBirthdays = {}

tCalendar = {
[1] = { 31, "January", },
[2] = { 28, "February", },
[3] = { 31, "March", },
[4] = { 30, "April", },
[5] = { 31, "May", },
[6] = { 30, "June", },
[7] = { 31, "July", },
[8] = { 31, "August", },
[9] = { 30, "September", },
[10] = { 31, "October", },
[11] = { 30, "November", },
[12] = { 31, "December", },
}
-------------------------
function Main()
 
dofile(birthlog)
tCalendar[2][1] = FixFebruary(tonumber(os.date("%Y")))

local hr = tonumber(os.date("%H"))*60*60*1000
local mins = 0
if tonumber(os.date("%M")) == 0 then
mins = 1
else
mins = tonumber(os.date("%M"))*60*1000
end
fixTime(hr+mins)
end
-----------------------------
function OnTimer()

CheckBirthdays()
TxtSend = nil
end
-------------------------------
function NewUserConnected(user)

for i, v in tBirthdays do
if tBirthdays[i][2] == tonumber(os.date("%m")) and tBirthdays[i][1] == tonumber(os.date("%d")) then
if user.sName ~= i then
local msg = "Its "..i.."'s birthday today .. ;D Turning "..(tonumber(os.date("%Y"))-tBirthdays[i][3] ).." today,... give a wish :)"
if GetItemByName(i) then
user:SendData(bBot, msg)
else user:SendData(bBot, msg.." when he comes online")
end
else
user:SendData(bBot, "Hey I know !!! YOU HAVE YOUR BIRTHDAY TODAY !!! HAPPIEST OF BIRTHDAYS !!!! ")
SendToAll(bBot, "Guys !! "..user.sName.." is here! What do we say ?? : )")
end
end
end
end

OpConnected = NewUserConnected
----------------------------------
function CheckBirthdays()

for i, v in tBirthdays do
if tBirthdays[i][2] == tonumber(os.date("%m")) then
if tBirthdays[i][1] == tonumber(os.date("%d")) then
if GetItemByName(i) then
happy = GetItemByName(i)
DoHappyBirthday(happy)
end
end
end
end
end
-------------------------------------
function FixFebruary(y)
 
local value = 0
if (tonumber(y)/4) - (math.floor(tonumber(y)/4)) == 0 then
value = 29
else value = 28
end
return value
end
-------------------------------
function fixTime(now)
 
if now < timecheck then
now = timecheck-now
elseif now > timecheck then
now = now-timecheck
else now = timecheck
end
SetTimer(now)
StartTimer()
end
------------------------------------
function ChatArrival(user, data)

if tProfiles[""..user.iProfile..""] ~= 0 then
if string.sub(data, 1,1) == "<" then
data = string.sub(data, 1, string.len(data)-1)
local s,e,cmd,args = string.find(data, "%b<>%s+(%S+)%s*(.*)")
if cmd == addcmd or cmd == addbircmd and tProfiles[""..user.iProfile..""] >= 1 then
CheckBirthdays()
AddBirthDay(user, args)
return 1
elseif cmd == delcmd and tProfiles[""..user.iProfile..""] == 2 then
if args ~= nil then
if tBirthdays[args] then
if GetItemByName(args) then
nick = GetItemByName(args)
nick:SendPM(bBot, user.sName.." has deleted your birthday from my list .. ;(")
end
tBirthdays[args] = nil
user:SendData(bBot, "You deleted "..args.." bithday ...")
SaveFile(birthlog, tBirthdays, "tBirthdays")
else user:SendData(bBot, args.." is not in my birthday list ...")
end
else user:SendData(bBot , "You need to give me a name ...")
end
return 1
elseif cmd == listcmd and tProfiles[""..user.iProfile..""] >= 1 then
local str = "The Birthday List of the users of "..frmHub:GetHubName()
local msg = "\r\n ..-*'~ "..str.." ~'*-..\r\n"..string.rep("^", string.len(str)).."\r\n\t"
local c = 0
local status = ""
for i, v in tBirthdays do
if GetItemByName(i) then status = "online" else status = "offline" end
c = c + 1
msg = msg..c..". - "..tBirthdays[i][1].."/"..tBirthdays[i][2].."/"..tBirthdays[i][3].." - \t"..i.."\t ( "..status.." )\r\n\t"
end
user:SendData(bBot , msg)
return 1
elseif cmd == findcmd then
if tBirthdays[user.sName] then
local msg = " These are the people that are born the same number-day as you\r\n"
msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][1] , "day", user.sName).."\r\n"
msg = msg.." These are the people that are born the same month as you\r\n"
msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][2] , "month", user.sName).."\r\n"
msg = msg.." These are the people that are born the same year as you\r\n"
msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][3] , "year", user.sName).."\r\n"
msg = msg.." These are the people that are born the same month and day with you \r\n"
msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][1].."/"..tBirthdays[user.sName][2] , "monthday", user.sName).."\r\n"
msg = msg.." These are the people that have the same birthday as yours\r\n"
msg = msg..FindSame(tBirthdays, tBirthdays[user.sName][1].."/"..tBirthdays[user.sName][2].." - "..tBirthdays[user.sName][3] , "all", user.sName).."\r\n"
user:SendData(bBot, msg)
return 1
end
end
end
end
end
--------------------------
function AddBirthDay(user, args)
 
local pers = ""
if args ~= nil then
local s,e,name,day,month,year = string.find(args, "(%S+)%s+(%d+)/(%d+)/(%d+)")
if name == nil then
name = user.sName
pers = "you"
s,e,day,month,year = string.find(args, "(%d+)/(%d+)/(%d+)")
else pers = name
end
if month ~= nil and day ~= nil and year ~= nil and (tonumber(month) >= 1) and (tonumber(month) <= 12) then
day = tonumber(day)
month = tonumber(month)
year = tonumber(year)
if year > oldestyear then
if year < (tonumber(os.date("%Y")) - allowedage) then
if month == 2 then
daylimit = FixFebruary(year)
else daylimit = tCalendar[month][1]
end
if day <= daylimit and day >= 1 then
if tBirthdays[name] then
month = tBirthdays[name][2]
if user.sName == name then
user:SendData(bBot, "I have your birthday already ... its on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
else user:SendData(bBot, "I have "..name.."'s birthday already ... its on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
end
local profstr = ""
for i,v in tProfiles do
if tProfiles[i] == 2 then
profstr = GetProfileName(tonumber(i)).."s"
break
end
end
user:SendData(bBot, "If you dont think this is correct ... then talk to one of our "..profstr)
else tBirthdays[name] = {}
tBirthdays[name][1] = day
tBirthdays[name][2] = month
tBirthdays[name][3] = year
SaveFile(birthlog, tBirthdays, "tBirthdays")
if user.sName == name then
user:SendData(bBot, "Your birthday is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
user:SendData(bBot, "I didnt know you are "..FindCorrectAge(tBirthdays[name])..". I'll keep that in mind ;)")
else
user:SendData(bBot, name.."'s birthday is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
user:SendData(bBot, "I didnt know "..name.." is "..FindCorrectAge(tBirthdays[name])..". I'll keep that in mind ;)")
end
if user.sName == name then
SendToAll(bBot, "New birthday added by "..user.sName.." his is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
else SendToAll(bBot, user.sName.." added "..name.."'s birthday, which is on the "..tBirthdays[name][1].." of "..tCalendar[month][2])
end
end
end
else user:SendData(bBot, "Come ON! "..pers.." cant be less than "..allowedage.." years old !!! LIAR >:(")
end
else user:SendData(bBot, "Come ON! "..pers.." cant be more than "..(year-oldestyear).." years old !!! LIAR >:(")
end
else user:SendData(bBot, "The date you provided was not valid ... ( syntax example : 14/5/1981 )")
end
else user:SendData(bBot , "Please enter your birthday after the command ...")
end
end
-------------------------
function FindCorrectAge(table)

if table[2] > tonumber(os.date("%m")) then
if table[1] >= tonumber(os.date("%d")) then
return tonumber(os.date("%Y"))-table[3]
else
return (tonumber(os.date("%Y"))-table[3])-1
end
elseif table[2] <= tonumber(os.date("%Y")) then
if table[1] >= tonumber(os.date("%d")) then
return tonumber(os.date("%Y"))-table[3]
else
return (tonumber(os.date("%Y"))-table[3])-1
end
end
end
-------------------------
function FindSame(tTab, val , var, name)

local tTmp = {}
local msg = ""
if var == "day" then
for i, v in tTab do
if val == v[1] and i ~= name then
tTmp[i] = v[1].."/"..v[2].." - "..v[3]
end
end
elseif var == "month" then
for i, v in tTab do
if val == v[2] and i ~= name then
tTmp[i] = v[1].."/"..v[2].." - "..v[3]
end
end
elseif var == "year" then
for i, v in tTab do
if val == v[3] and i ~= name then
tTmp[i] = v[1].."/"..v[2].." - "..v[3]
end
end
elseif var == "monthday" then
for i, v in tTab do
if val == v[1].."/"..v[2] and i ~= name then
tTmp[i] = v[1].."/"..v[2].." - "..v[3]
end
end
elseif var == "all" then
for i, v in tTab do
if val == v[1].."/"..v[2].." - "..v[3] and i ~= name then
tTmp[i] = v[1].."/"..v[2].." - "..v[3]
end
end
end
for i,v in tTmp do
msg = msg.."\t - "..i.."\r\n"
end
if msg == "" then
msg = "\t - noone\r\n"
end
return msg
end
Title:
Post by: Jelf on 08 March, 2005, 23:49:42
Part 2
--------------------------
function DoHappyBirthday(nick)
 
if TxtSend == nil then
SendToAll(ReadTextFile(birthdayfile))
TxtSend = 1
end
local age = tonumber(os.date("%Y")) - tBirthdays[nick.sName][3]
local tSurpises = {
nick.sName.." is gonna have a PAAARTY, today he is turning "..age.." Happy Birthday !!!!",
"All of you spam "..nick.sName.." with Birthday messages ;), ...turning "..age.." today !!!",
"Who's turning "..age.." today ?? :D... The day AND the night belongs to "..nick.sName,
"Happy Birthday to you, Happy Birthday dear "..nick.sName..", we all wish you your "..age.." will be better than your "..(age-1).." !! :)",
" I think Mr"..nick.sName.." has his birthday today ... he should be turning "..age.." today ;D",
};
SendToAll( bBot , tSurpises[random(1, getn(tSurpises)) ] )
end
------------------------------
--- // --- Table Serialization --- Thanks NL

function Serialize(tTable, sTableName, sTab)

        assert(tTable, "tTable equals nil");
        assert(sTableName, "sTableName equals nil");

        assert(type(tTable) == "table", "tTable must be a table!");
        assert(type(sTableName) == "string", "sTableName must be a string!");

        sTab = sTab or "";
        sTmp = ""

        sTmp = sTmp..sTab..sTableName.." = {\n"

        for key, value in tTable do
                local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);

                if(type(value) == "table") then
                        sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
                else
                        local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
                        sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
                end

                sTmp = sTmp..",\n"
        end

        sTmp = sTmp..sTab.."}"
        return sTmp
end
---------------------------
function LoadFile(file)
local handle = io.open(file,"r")
if (handle ~= nil) then
loadstring(handle:read("*all"))
handle:flush()
handle:close()
end
end
----------------------------
function SaveFile(file , table , tablename)
local handle = io.open(file,"w+")
handle:write(Serialize(table, tablename))
handle:flush()
handle:close()
end
--------------------------
function ReadTextFile(file)
local message = "\r\n"
local handle = io.open(file, "r")
while 1 do
local line = handle:read()
if ( line == nil ) then break
else message = message.."\t"..line.."\r\n"
end
end
handle:close()
return message
end
Title:
Post by: TiMeTrAVelleR on 09 March, 2005, 04:59:03
Thank  you    wil   try it as soon as i am home from work  

:))
Title:
Post by: Jorgo on 10 March, 2005, 00:09:04
Just curious.. why do you use 2.6 and not 3.5?
Sigh... I could have marked another script as done  :P
Title: Re: Birthdayman LUA 5
Post by: Yahoo on 26 November, 2007, 13:31:14
can any make this script for LUA 5.1

and one more change if possible i.e
when a user type the command !birthdays it must display only those users having birthdays on tht day
for eg
if the date is 15th november and a user type the command !birthdays the users must see birthdays of users on 15th nov only
Title: Re: Birthdayman LUA 5
Post by: bastya_elvtars on 26 November, 2007, 23:15:02
Please file a request in the appropriate section with linking to this topic. Thanks.
Title: Re: Birthdayman LUA 5
Post by: rEALx on 27 November, 2007, 12:56:41

Birthday Man v.4.07 is compatible with Lua 5.1

already available @ http://board.ptokax.ath.cx/index.php?topic=5863.msg59035#msg59035 (http://board.ptokax.ath.cx/index.php?topic=5863.msg59035#msg59035)

rEALx

Title: Re: Birthdayman LUA 5
Post by: Yahoo on 27 November, 2007, 13:08:20
ty