Birthday Bot
 

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

Birthday Bot

Started by Psycho_Chihuahua, 20 August, 2004, 21:35:04

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Psycho_Chihuahua

Does anyone have somekind of birthday bot that sends out a message (txt/Ascii Pic or we) in Main, say every 2 hours telling who's birthday it is?

This Idea came up in a PN session and i think this would be quit fun.
PtokaxWiki ?PtokaX Mirror + latest Libs

01100001011011000111001101101111001000000110101101101110011011110111011101101110001000000110000101110011001000000101010001101111011010110110111101101100011011110111001101101000

Herodes

#1
yeah I had that Idea too awhile back .. I just needed some motivation  ;)
--- BirthdayMan v 1  --- request by Psycho_Chihuahua
--- by Herodes 21/8/2004 
--- --- --- --- --- --- --- --- --- --- --- --- 
--- You need a file named like the ' birthlog ' variable (see below...) in your scripts folder ...
--- --- --- --- --- --- --- --- --- --- --- --- 

sec = 1000			----- do not edit this
minutes = 1000*60	----- do not edit this
hours = 1000*(60^2)	----- do not edit this
TxtSend = nil   		----- do not edit this


bBot = "Surprise"
timecheck = 12*hours	--- how much time before checking for birthdays ...
tProfiles = {  ---- profile rights to commands ... 1 can use listcmd and addcmd, 2 can also use delcmd ...	
			["0"] = 2,  	--- Masters  (  ["profile_number"] = value (0/1/2) 
			["1"] = 2,  	--- Operators
			["2"] = 1, 	--- VIPs
			["3"] = 1, 	--- Regs
			["-1"] = 0, 	--- Unregs
			}
addcmd = "!mybirthday"	--- usage : !mybirthday dd/mm/yyyy      dd = the number date ,   mm = the number month ,    yyyy = the number year ....  Sets your birthday!!!!
delcmd = "!delbirthday"	--- usage : !delbirthday      		 is needed ... deletes 's birthday from the list ...
listcmd = "!birthdays"		--- usage : !birthdays 					Lists the birthdays stored ...
birthdayfile = "cake.txt"	--- The file that will be displayed on Birthday ...
oldestyear = 1900		--- This is so that situations like   !mybirthday 0/0/0000  are avoided ... lol
allowedage = 6			--- This is so that situations like   !mybirthday  are avoided ...  in years ...
birthlog = "birthdays.tbl"	--- The file where we'll be storing the birthdays ...  <<< has to be in your scripts folder ... 
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 
----------------------------- S c r i p t - S t a r t s -----------------------------
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 
tBirthdays = {}

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

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

end

function OnTimer()
	CheckBirthdays()
end

function CheckBirthdays()
for i, v in tBirthdays do
	if tBirthdays[i][2] == tonumber(date("%m")) then
		if tBirthdays[i][1] == tonumber(date("%d")) then
			if GetItemByName(i) then
				happy = GetItemByName(i)
				DoHappyBirthday(happy)
			end
		end
	end
end
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 DataArrival(user, data)
if tProfiles[""..user.iProfile..""] ~= 0 then
	if strsub(data, 1,1) == "<" then
		data = strsub(data, 1, strlen(data)-1)
		local s,e,cmd,args = strfind(data, "%b<>%s+(%S+)%s*(.*)")
		if cmd == addcmd and tProfiles[""..user.iProfile..""] >= 1 then
			if args ~= nil then 
				s,e,day,month,year = strfind(args, "(%d+)/(%d+)/(%d+)")
				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(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[user.sName] then
									month = tBirthdays[user.sName][2]
									user:SendData(bBot, "I have your birthday already ... they are on "..tBirthdays[user.sName][1].." of "..tCalendar[month][2])
									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[user.sName] = {}
									tBirthdays[user.sName][1] = day
									tBirthdays[user.sName][2] = month
									tBirthdays[user.sName][3] = year
									SaveFile(tBirthdays , "tBirthdays", birthlog)
									user:SendData(bBot, "Your birthday are on the "..tBirthdays[user.sName][1].." of "..tCalendar[month][2])
									user:SendData(bBot, "I didnt know you were "..( tonumber(date("%Y"))-tBirthdays[user.sName][3] )..". I'll keep that in mind ;)")
								end
							end
						else user:SendData(bBot, "Come ON! you cant be less than "..allowedage.." years old !!!  LIAR >:(")
						end
					else user:SendData(bBot, "Come ON! you 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
			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 msg = "\r\n\t\tThe Birthday List of the users of this hub\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"
			end
			user:SendData(bBot , msg)
			return 1
		end
	end
end
end

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

function HappyBirthday(nick)
	if TxtSend == nil then
		SendToAll(ReadTextFile(birthdayfile))
		TxtSend = 1
	end
	SendToAll( bBot , " I think Mr"..nick.sName.." has his birthday today ... he should be turning "..( tonumber(date("%Y"))-tBirthdays[user.sName][3] ).." today ;D")
end
--- // --- Table Serialization		( part 1/3 )	? creating input ?		--- Thanks Ninghtlitch for providing this to me

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 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


--- // --- Table Serialization		( part 2/3 ) 	? Loading from file ?

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


--- // --- Table Serialization		( part 3/3 ) 	? Saving to file ?

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

Try this .. I haven't tested thoroughly ...

Psycho_Chihuahua

Works fine sofar Herodes :) thnx a lot m8
PtokaxWiki ?PtokaX Mirror + latest Libs

01100001011011000111001101101111001000000110101101101110011011110111011101101110001000000110000101110011001000000101010001101111011010110110111101101100011011110111001101101000

bolamix

Hey that's a very nice script, I'll try it out :) Thx Herodes, glad u got motivated :D
Sharing is of the essence!

Live music >> Aiwadirock! live music hub
PtokaX knowledge >> The PtokaX Wiki

Psycho_Chihuahua

Herodes, another update crossed my mind...

If your still motivated  :D  could u adapt it so that Admin's can insert Users Birthdays as well?
as in !userbirthday dd/mm/yyyy or something like that.
PtokaxWiki ?PtokaX Mirror + latest Libs

01100001011011000111001101101111001000000110101101101110011011110111011101101110001000000110000101110011001000000101010001101111011010110110111101101100011011110111001101101000

Herodes

glad it works and thx for your good words ...

I'll see if I can get that request ...
First thought would be that I built on the !birthdays cmd ....
like so ...

!birthdays --- gives list of nicks ...
!birthdays --- adds birthday of ...

Flux

Herodes  You make me proud as a new script writer who has only been with this forum from March this year. I have never really got down to it and learned LUa Scripting, but you are definately an insperation to us all with your ideas put to scripting and showing us your great scripts that have come to ur mind and given motivation from opther great members here.

Keep up the good work & I hope you come out with more great ideas for scripts and I hope the insperation continues on this forum as you have become a good script writer like our other great script writers here....
? Official HoD Website - http://www.houseofdance.net
? Official HoD Hub Community -  hodhub.dyndns.org:2007

Millsy

#7
hi Herodes
i made some small changes i hope you dont mind.

--- BirthdayMan v 1  --- request by Psycho_Chihuahua
--- by Herodes 21/8/2004 
--- --- --- --- --- --- --- --- --- --- --- --- 
--- You need a file named like the ' birthlog ' variable (see below...) in your scripts folder ...
--- --- --- --- --- --- --- --- --- --- --- --- 
--- Update
--- by Millsy 21/8/2004 
	--- Added profiles for Moderator and NetFounder (To work with robocop)
	--- Made the birthday list look better
	--- Now shows the birthday list in pm
	--- Changed a few messages and some small mistakes

--- 22/8/2004 
	--- 2 Small fixes
	--- Made the birthday list look even better ;)

	--- Added request from T?M??r?V?ll?R
	--- To sends a message to all when a user adds his/her birthday

--- 23/8/2004 
	--- Changed some more messages
--- --- --- --- --- --- --- --- --- --- --- --- 

sec = 1000		----- do not edit this
minutes = 1000*60		----- do not edit this
hours = 1000*(60^2)	----- do not edit this
TxtSend = nil   		----- do not edit this


bBot = "Birthday-Bot"
timecheck = 12*hours	--- how much time before checking for birthdays ...
tProfiles = {  ---- profile rights to commands ... 1 can use listcmd and addcmd, 2 can also use delcmd ...	
			["0"] = 2,  	--- Masters  (  ["profile_number"] = value (0/1/2) 
			["1"] = 1,  	--- Operators
			["2"] = 1, 	--- VIPs
			["3"] = 1, 	--- Regs
			["4"] = 1, 	--- Moderator	---- Remove this line if you dont use robocop
			["5"] = 2, 	--- NetFounder	---- Remove this line if you dont use robocop
			["-1"] = 1, --- Unregs
			}
addcmd = "!mybirthday"	--- usage : !mybirthday dd/mm/yyyy	dd = the number date ,   mm = the number month ,    yyyy = the number year ....  Sets your birthday!!!!
delcmd = "!delbirthday"	--- usage : !delbirthday      	 is needed ... deletes 's birthday from the list ...
listcmd = "!birthdays"	--- usage : !birthdays 		Lists the birthdays stored ...
birthdayfile = "cake.txt"	--- The file that will be displayed on Birthday ...
oldestyear = 1900		--- This is so that situations like  	 !mybirthday 0/0/0000  are avoided ... lol
allowedage = 6		--- This is so that situations like  	 !mybirthday  are avoided ...  in years ...
birthlog = "birthdays.tbl"	--- The file where we'll be storing the birthdays ...  <<< has to be in your scripts folder ... 
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 
----------------------------- S c r i p t - S t a r t s -----------------------------
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 
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] = { 30, "October", }, 
	[11] = { 30, "November", }, 
	[12] = { 31, "December", }, 
	}
function Main()
frmHub:RegBot(bBot);
LoadFile(birthlog)
tCalendar[2][1] = FixFebruary(tonumber(date("%Y")))

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

end

function OnTimer()
	CheckBirthdays()
end

function CheckBirthdays()
for i, v in tBirthdays do
	if tBirthdays[i][2] == tonumber(date("%m")) then
		if tBirthdays[i][1] == tonumber(date("%d")) then
			if GetItemByName(i) then
				happy = GetItemByName(i)
				DoHappyBirthday(happy)
			end
		end
	end
end
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 DataArrival(user, data)
if tProfiles[""..user.iProfile..""] ~= 0 then
	if strsub(data, 1,1) == "<" then
		data = strsub(data, 1, strlen(data)-1)
		local s,e,cmd,args = strfind(data, "%b<>%s+(%S+)%s*(.*)")
		if cmd == addcmd and tProfiles[""..user.iProfile..""] >= 1 then
			if args ~= nil then 
				s,e,day,month,year = strfind(args, "(%d+)/(%d+)/(%d+)")
				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(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[user.sName] then
									month = tBirthdays[user.sName][2]
									user:SendData(bBot, "I have your birthday already "..tBirthdays[user.sName][1].." of "..tCalendar[month][2])
									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 this is not correct, then please talk one of our Operators")
								else
									tBirthdays[user.sName] = {}
									tBirthdays[user.sName][1] = day
									tBirthdays[user.sName][2] = month
									tBirthdays[user.sName][3] = year
									SaveFile(tBirthdays , "tBirthdays", birthlog)
									user:SendData(bBot, "Your birthday is on the "..tBirthdays[user.sName][1].." of "..tCalendar[month][2])
									user:SendData(bBot, "I didnt know you were "..( tonumber(date("%Y"))-tBirthdays[user.sName][3] )..". I'll keep that in mind ;)")
									SendToAll(bBot," "..nick.sName.." has just added his/her birthday to the list.")		------ Message to all / can be removed.
								end
							end
						else user:SendData(bBot, "Come ON! you cant be less than "..allowedage.." years old !!!  LIAR :(")
						end
					else user:SendData(bBot, "Come ON! you cant be more than "..(year-oldestyear).." years old !!!  LIAR :(")
					end
				else user:SendData(bBot, "The date you provided was not valid ... ( syntax example : 12/03/1984 )")
				end
			else user:SendData(bBot , "Please enter your birthday after the command ...")
			end
			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 have deleted "..args.." bithday from the list")
					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 msg = "\r\n\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\t\t\t        The Birthday List\r\n\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\t\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..".     "..i.."     -     "..tBirthdays[i][1].."/"..tBirthdays[i][2].."/"..tBirthdays[i][3].."     -     ( "..status.." )\r\n\t\t"
			end
			user:SendPM(bBot , msg)
			return 1
		end
	end
end
end

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

function HappyBirthday(nick)
	if TxtSend == nil then
		SendToAll(ReadTextFile(birthdayfile))
		TxtSend = 1
	end
	SendToAll( bBot , "Happy Birthday "..nick.sName.." who is turning "..( tonumber(date("%Y"))-tBirthdays[user.sName][3] ).." today. ;)")	--- Massage to users
end
--- // --- Table Serialization		( part 1/3 )	? creating input ?		--- Thanks Ninghtlitch for providing this to me

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 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


--- // --- Table Serialization		( part 2/3 ) 	? Loading from file ?

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


--- // --- Table Serialization		( part 3/3 ) 	? Saving to file ?

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
MoviePirates.no-ip.com    -   Part Of The BBI Network

Herodes

thanks for the support Flux ;)

milsy there is no prob whatsoever to do what ever you want with this keep it up ..

TiMeTrAVelleR

Running lates script posted here     a user  tryed  to add his birthday 31/03/1975      31   dident worked   30  dit   maby  you can look into that


btw   great script  nice done

TiMe  :D

TiMeTrAVelleR

Btw   would  me nice  if it showed in main  to all  that a users  added  his birthday    ;)

Herodes

#11
Change this part of the script
end
							if day < daylimit and day > 1 then
								if tBirthdays[user.sName] then
									month = tBirthdays[user.sName][2]
To this
end
							if day <= daylimit and day >= 1 then
								if tBirthdays[user.sName] then
									month = tBirthdays[user.sName][2]

Then it should work ... the script in my post is edited now ...

And [*note*] this bug applied if you tried to birthday a date like 23/1/2000 or 23/12/2000 ... in other words January and February ppl wouldnt be able to do that ...

TiMeTrAVelleR

#12
Dit That    
] The date you provided was not valid ... ( syntax example : 12/03/1984 ) After entering  01/27/1965

one more thing  check  days in months  should  be this
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", },
only  feb  is abit trikky   now this year it is  29 days  lol

TiMe

Troubadour

QuoteOriginally posted by T?M??r?V?ll?R
Dit That    
] The date you provided was not valid ... ( syntax example : 12/03/1984 ) After entering  01/27/1965

one more thing  check  days in months  should  be this
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] = { 30, "October", },
   [11] = { 30, "November", },
   [12] = { 31, "December", },

only  feb  is abit trikky   now this year it is  29 days  lol

TiMe

shouldn't the date be like 27/01/1965 to work?
Regards,

Troubadour

** Guardian Forum **

hubaddy:   nederfun.no-ip.com

Millsy

#14
i have fixed my version for both mistakes

Later,
Millsy
MoviePirates.no-ip.com    -   Part Of The BBI Network

TiMeTrAVelleR

youre right  troubador stupit me dident see that  user had it wrong way around

 ;(

Millsy

small update again with the Request from T?M??r?V?ll?R

QuoteBtw would me nice if it showed in main to all that a users added his birthday ;)

Later,
Millsy
MoviePirates.no-ip.com    -   Part Of The BBI Network

TiMeTrAVelleR

Thanks   Millsy    :D

[PT]CableGuy

Indeed a very usefull script !!! I'm sure , all users will love it.
One request , if i may:

-Can any message be delivered when the user enters the hub , say Happy Birthday , if it's the "b day" ???

Thanks again for this script !!!

Millsy

QuoteCan any message be delivered when the user enters the hub , say Happy Birthday , if it's the "b day" ???

Nice idea i know it can be done but i dont know how im still a bit of a noob to this. so this 1 is up to Herodes or one of the others

Later,
Millsy
MoviePirates.no-ip.com    -   Part Of The BBI Network

Herodes

#20
Hi update ..
--- BirthdayMan v 2
--- by Herodes 21/8/2004 
--- --- --- --- --- --- --- --- --- --- --- --- 
--- You need a file named like the ' birthlog ' variable (see below...) in your scripts folder ...
-- v2
--- Fixed shamefull bug of days in Months (thx TimeTraveler)
--- Added more profile numbers to work with
--- Added !addbirth ( ' addbirthcmd ' variable )
--- added !bornon ( ' findcmd ' variable )
--- possible to add birthday of someone else now too
--- added random messages on birthday
--- displays main notification on new birthday entry
-- Last Update 24/8/2004
--- --- --- --- --- --- --- --- --- --- --- --- 

sec = 1000			----- do not edit this
minutes = 1000*60	----- do not edit this
hours = 1000*(60^2)	----- do not edit this
TxtSend = nil   		----- do not edit this

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...	
			["0"] = 2,  	--- Masters  (  ["profile_number"] = value (0/1/2) 
			["1"] = 2,  	--- Operators
			["2"] = 1, 	--- VIPs
			["3"] = 1, 	--- Regs
			["4"] = 0, 	--- CustomProf1
			["5"] = 0,
			["-1"] = 0, 	--- Unregs
			}
addcmd = "!mybirthday"	--- !mybirthday dd/mm/yyyy      dd = the day ,   mm = the month ,    yyyy = the 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 

--- // --- S c r i p t - S t a r t s
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()
LoadFile(birthlog)
tCalendar[2][1] = FixFebruary(tonumber(date("%Y")))

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

end

function OnTimer()
	CheckBirthdays()
	TxtSend = nil
end

function CheckBirthdays()
for i, v in tBirthdays do
	if tBirthdays[i][2] == tonumber(date("%m")) then
		if tBirthdays[i][1] == tonumber(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) - (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 DataArrival(user, data)
if tProfiles[""..user.iProfile..""] ~= 0 then
	if strsub(data, 1,1) == "<" then
		data = strsub(data, 1, strlen(data)-1)
		local s,e,cmd,args = strfind(data, "%b<>%s+(%S+)%s*(.*)")
		if cmd == addcmd or cmd == addbircmd and tProfiles[""..user.iProfile..""] >= 1 then
			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"..strrep("^", strlen(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)
			end
		end
	end
end
end

function AddBirthDay(user, args)
	local pers = ""
	if args ~= nil then
		local s,e,name,day,month,year = strfind(args, "(%S+)%s+(%d+)/(%d+)/(%d+)")
		if name == nil then
			name = user.sName
			pers = "you"
			s,e,day,month,year = strfind(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(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(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 "..( tonumber(date("%Y"))-tBirthdays[name][3] )..". 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 "..(( tonumber(date("%Y"))-tBirthdays[name][3] )-1)..". 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 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

function DoHappyBirthday(nick)
	if TxtSend == nil then
		SendToAll(ReadTextFile(birthdayfile))
		TxtSend = 1
	end
	local age = tonumber(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(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 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 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
This one doesnt do what CableGuy requested yet ... ;)

TiMeTrAVelleR

Syntax error: `=' expected;
  last token read: `==' at line 76 in file `...ngs\Administrator\Bureaublad\Hub Robo 9\scripts\BirthdayMan v 2.lua'
   

TiMe

TiMeTrAVelleR

#22
oki  fixed  1  = to many  :))

function OnTimer()
   CheckBirthdays()
   TxtSend == nil <--   remove  1 =

TiMeTrAVelleR

When asking  for birthdays list   i get this

    ..-*'~ The Birthday List of the users of .::T?M?`?::?R?nC?: (?_?)b::S??C?::Fr??K?::. ~'*-..
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
   1. - 5/9/1966 -    :T??:[NL]Empat    ( offline )
   2. - 25/8/1986 -    TeaL    ( online )
   3. - 27/10/1975 -    :T?? uhsveti    ( offline )
   4. - 30/3/1968 -    :T?? NL)abyss    ( offline )
   5. - 26/4/1959 -    :T??:[NL]Sm?K??    ( offline )
 

whats  the part on top ?

TiMeTrAVelleR

Small thing  most users  are  1 year older  that real age  

<-=BirthdayMan=-> :T??:Wendy's birthday is on the 30 of September
[12:30:32] <-=BirthdayMan=-> I didnt know :T??:Wendy is 29. I'll keep that in mind  
[12:30:32] <-=BirthdayMan=-> :T??:.T?M??r?V?ll?R added :T??:Wendy's birthday, which is on the 30 of September
 
wendy  is now  28 year

TiMe

Btw  me and users love this script

SMF spam blocked by CleanTalk