# ========================================================
# Névnap 1.0.4 (2025-es önálló verzió, Czo eredetije alapján)
# Szerzői jog: 2025, YnM Szerkesztette: Markus ([email protected]) Minden jog fenntartva.
# Parancs: !nevnap vagy !nevnap 6.5 vagy !nevnap Bella
# ========================================================
namespace eval ::nevnap {
# Initialize all variables in the namespace
variable honaphosz {0 31 28 31 30 31 30 31 31 30 31 30 31}
variable honapok {"" "I." "II." "III." "IV." "V." "VI." "VII." "VIII." "IX." "X." "XI." "XII."}
variable morning_timer
variable evening_timer
# Névnap-adatbázis
variable honap
array set honap {
1 {"," ",Fruzsina," ",Abel," ",Genoveva,Benjamin," ",Leona,Titusz," ",Simon," ",Boldizsar," ",Ramona,Attila," ",Gyongyver," ",Marcell," ",Melania," ",Agota," ",Erno," ",Veronika," ",Bodog," ",Lorant,Lorand," ",Gusztav," ",Antonia,Antal," ",Piroska," ",Sara,Mario," ",Fabian,Sebestyen," ",Agnes," ",Vince,Arthur," ",Zelma,Rajmund," ",Timot," ",Pal," ",Vanda,Paula," ",Angelika," ",Karola,Karoly," ",Adel," ",Martina,Gerda," ",Marcella,"}
2 {"," ",Ignac," ",Karolina,Aida," ",Balazs," ",Csenge,Rahel," ",Agota,Ingrid," ",Dorottya,Dora," ",Todor,Romeo," ",Aranka," ",Abigel,Alex," ",Elvira," ",Marietta,Bertold," ",Livia,Lidia," ",Ella,Linda," ",Balint,Valentin," ",Georgina,Kolos," ",Julianna,Lilla," ",Donat," ",Bernadett," ",Zsuzsanna," ",Aladar,Almos," ",Eleonora," ",Gerzson," ",Alfred," ",Matyas," ",Geza," ",Edina," ",Akos,Bator," ",Elemer," ",Elemer,"}
3 {"," ",Albin," ",Lujza," ",Kornelia," ",Kazmer," ",Adorjan,Adrian," ",Leonora,Inez," ",Tamas," ",Zoltan," ",Franciska,Fanni," ",Ildiko," ",Szilard," ",Gergely," ",Krisztian,Ajtony," ",Matild," ",Kristof," ",Henrietta," ",Gertrud,Patrik," ",Sandor,Ede," ",Jozsef,Bank," ",Klaudia," ",Benedek," ",Beata,Izolda," ",Emoke," ",Karina,Gabor," ",Iren,Irisz," ",Emanuel," ",Hajnalka," ",Johanna,Gedeon," ",Auguszta," ",Zalan," ",Arpad,"}
4 {"," ",Hugo," ",Aron," ",Buda,Richard," ",Izidor," ",Vince," ",Biborka,Vince," ",Herman," ",Denes," ",Erhard," ",Zsolt," ",Leo,Szaniszlo," ",Gyula," ",Ida," ",Tibor," ",Anasztazia,Tas," ",Csongor," ",Rudolf," ",Andrea,Ilma," ",Emma," ",Tivadar," ",Konrad," ",Csilla,Noemi," ",Bela," ",Gyorgy," ",Mark," ",Ervin," ",Zita," ",Valeria," ",Peter," ",Kitti,Katalin,"}
5 {"," ",Fulop,Jakab," ",Zsigmond," ",Timea,Irma," ",Monika,Florian," ",Gyorgyi," ",Ivett,Frida," ",Gizella," ",Mihaly," ",Gergely," ",Palma,Armin," ",Ferenc," ",Pongrac," ",Imola,Szervac," ",Bonifac," ",Szonja,Zsofia," ",Mozes,Botond," ",Paszkal," ",Alexandra,Erik," ",Ivo,Milan," ",Felicia,Bernat," ",Konstantin," ",Julia,Rita," ",Dezso," ",Eliza,Eszter," ",Orban," ",Evelin,Fulop," ",Hella," ",Emil,Csanad," ",Magdolna," ",Janka,Zsanett," ",Angela,Petronella,"}
6 {"," ",Tunde," ",Anita,Karmen," ",Klotild," ",Bulcsu," ",Fatime," ",Cintia,Norbert," ",Robert," ",Medard," ",Felix," ",Margit,Greta," ",Barnabas," ",Villo," ",Anett,Antal," ",Vazul," ",Jolan,Vid," ",Jusztin," ",Laura,Alida," ",Arnold,Levente," ",Gyarfas," ",Rafael," ",Leila,Alajos," ",Paulina," ",Zoltan," ",Ivan," ",Vilmos," ",Janos,Pal," ",Laszlo," ",Iren,Levente," ",Peter,Pal," ",Pal,"}
7 {"," ",Annamaria,Tihamer," ",Otto," ",Kornelia,Soma," ",Ulrik," ",Emese,Sarolta," ",Csaba," ",Apollonia," ",Ellak," ",Lukrecia," ",Amalia," ",Lili,Nora," ",Izabella,Dalma," ",Jeno," ",Stella,Ors," ",Henrik,Roland," ",Valter," ",Endre,Elek," ",Frigyes," ",Emilia," ",Illes," ",Daniella,Daniel," ",Magdolna," ",Lenke," ",Kinga,Kincso," ",Kristof,Jakab," ",Aniko,Anna," ",Liliana,Olga," ",Szabolcs," ",Flora,Marta," ",Judit,Xenia," ",Oszkar,"}
8 {"," ",Boglarka," ",Lehel," ",Hermina," ",Dominika,Domonkos," ",Krisztina," ",Bettina,Berta," ",Ibolya," ",Laszlo," ",Emod," ",Lorinc," ",Zsuzsanna,Tiborc," ",Klara," ",Ipoly," ",Marcell," ",Maria," ",Abraham," ",Jacint," ",Ilona," ",Huba," ",allami unnep," ",Hajna,Samuel," ",Mirjam,Menyhert," ",Bence," ",Bertalan," ",Patricia,Lajos," ",Izso," ",Gaspar," ",Agoston," ",Beatrix,Erna," ",Rozsa," ",Erika,Bella,"}
9 {"," ",Egyed,Egon," ",Rebeka,Dorina," ",Hilda," ",Rozalia," ",Viktor,Lõrinc," ",Zakarias," ",Regina," ",Adrienn,Maria," ",Adam," ",Nikolett,Hunor," ",Teodora," ",Maria," ",Kornel," ",Roxana,Szerena," ",Melitta,Enikõ," ",Edit," ",Zsofia," ",Diana," ",Vilhelmina," ",Friderika," ",Mirella,Mate," ",Moric," ",Tekla," ",Mercedesz,Gellert," ",Eufrozina,Kende," ",Jusztina," ",Adalbert," ",Vencel," ",Mihaly," ",Jeromos,"}
10 {"," ",Malvin," ",Petra," ",Helga," ",Ferenc," ",Aurel," ",Renata,Bruno," ",Amalia," ",Koppany," ",Denes," ",Gedeon," ",Brigitta," ",Miksa," ",Kalman,Ede," ",Helen," ",Terez," ",Gal," ",Hedvig," ",Lukacs," ",Nandor," ",Vendel," ",Orsolya," ",Elod," ",Gyongyi," ",Salamon," ",Bianka,Blanka," ",Domotor," ",Szabina," ",Szimonetta,Simon," ",Narcisz," ",Alfonz," ",Farkas,"}
11 {"," ",Marianna," ",Achilles," ",Gyozo," ",Karoly," ",Imre," ",Lenard," ",Rezso," ",Zsombor," ",Tivadar," ",Reka," ",Marton," ",Jonas,Renato," ",Szilvia," ",Aliz," ",Albert,Lipot," ",Odon," ",Hortenzia,Gergo," ",Jeno," ",Erzsebet," ",Jolan," ",Oliver," ",Cecilia," ",Klementina,Kelemen," ",Emma," ",Katalin," ",Virag," ",Virgil," ",Stefania," ",Taksony," ",Andras,Andor,"}
12 {"," ",Elza," ",Melinda,Vivien," ",Olivia,Ferenc," ",Barbara,Borbala," ",Vilma," ",Miklos," ",Ambrus," ",Maria," ",Natalia," ",Judit," ",Arpad," ",Gabriella," ",Luca,Otilia," ",Szilarda," ",Valer," ",Aletta,Etelka," ",Olimpia,Lazar," ",Auguszta," ",Viola," ",Teofil," ",Tamas," ",Zeno," ",Viktoria," ",Adam,Eva," ",Eugenia," ",Istvan," ",Janos," ",Kamilla," ",Tamara,Tamas," ",David," ",Szilveszter,"}
}
variable nevnapver "1.0.4"
variable nevnapvers "1.0.4"
variable announcement_channels "#Magyar" ;# Itt megy az automatikus értesítés
variable activation_channel "#YnM" ;# Csak ide küldi az aktiválási üzenetet
# Load timer on script start
proc init {} {
variable announcement_channels
variable activation_channel
variable nevnapvers
::nevnap::schedule_announcements
putlog "Névnap TCL betöltve — verzió $nevnapvers"
# Send activation message ONLY to activation channel
putserv "PRIVMSG $activation_channel :Névnap figyelő aktiválva. Automatikus értesítések 7:00 és 20:00-kor."
}
# Schedule the daily announcements
proc schedule_announcements {} {
# Cancel any existing timers
catch {killutimer $::nevnap::morning_timer}
catch {killutimer $::nevnap::evening_timer}
# Calculate next 7:00 and 20:00
set now [clock seconds]
set today [clock format $now -format "%Y-%m-%d"]
set morning_time [clock scan "$today 07:00:00"]
set evening_time [clock scan "$today 20:00:00"]
# If time already passed today, schedule for tomorrow
if {$morning_time < $now} {
set morning_time [clock add $morning_time 1 day]
}
if {$evening_time < $now} {
set evening_time [clock add $evening_time 1 day]
}
# Schedule timers
variable morning_timer [utimer [expr {$morning_time - $now}] [list ::nevnap::morning_announcement]]
variable evening_timer [utimer [expr {$evening_time - $now}] [list ::nevnap::evening_announcement]]
# Reschedule for next day after each execution
utimer [expr {86400 - ($now - [clock scan "$today 00:00:00"])}] [list ::nevnap::schedule_announcements]
}
# Morning announcement (7:00)
proc morning_announcement {} {
variable announcement_channels
# Get current date
set maihonap [clock format [clock seconds] -format %m]
regsub {^0} $maihonap "" maihonap
set mainap [clock format [clock seconds] -format %e]
set maiev [clock format [clock seconds] -format %Y]
set mainevnap [string trim [lindex $::nevnap::honap($maihonap) $mainap] ","]
foreach chan $announcement_channels {
putserv "PRIVMSG $chan :\002⏰ Ma $mainevnap névnapja van! Boldog névnapot! 🎉 🎈\002"
}
}
# Evening announcement (20:00)
proc evening_announcement {} {
variable announcement_channels
# Get current date
set maihonap [clock format [clock seconds] -format %m]
regsub {^0} $maihonap "" maihonap
set mainap [clock format [clock seconds] -format %e]
set maiev [clock format [clock seconds] -format %Y]
# Calculate tomorrow's date
set honaphossz [lindex $::nevnap::honaphosz $maihonap]
if {($maihonap == 2) && ($maiev % 4 == 0) && ($maiev % 100 != 0 || $maiev % 400 == 0)} {
set honaphossz 29
}
set holnapinap [expr {$mainap + 1}]
set holnapihonap $maihonap
set holnapiev $maiev
if {$holnapinap > $honaphossz} {
set holnapinap 1
incr holnapihonap
if {$holnapihonap > 12} {
set holnapihonap 1
incr holnapiev
}
}
set mainevnap [string trim [lindex $::nevnap::honap($maihonap) $mainap] ","]
set holnapnevnap [string trim [lindex $::nevnap::honap($holnapihonap) $holnapinap] ","]
foreach chan $announcement_channels {
putserv "PRIVMSG $chan :\002🌙 Esti névnap összefoglaló 🌙\002 Ma ($maiev.$maihonap.$mainap): \002$mainevnap\002, névnapja volt. Holnap: \002$holnapnevnap\002 névnapja lesz"
}
}
# Initialize on script load
init
}
# PUB és MSG parancsok
bind pub - "!nevnap" ::nevnap::pub_nevnap
bind msg - "!nevnap" ::nevnap::msg_nevnap
proc ::nevnap::pub_nevnap {nick uhost hand chan arg} {
::nevnap::nevnap_valasz $nick $chan $arg
return 0
}
proc ::nevnap::msg_nevnap {nick uhost hand arg} {
::nevnap::nevnap_valasz $nick $nick $arg
return 0
}
proc ::nevnap::nevnap_valasz {kitol kinek arg} {
variable honap
variable honaphosz
variable honapok
# Get current date
set maihonap [clock format [clock seconds] -format %m]
regsub {^0} $maihonap "" maihonap
set mainap [clock format [clock seconds] -format %e]
set maiev [clock format [clock seconds] -format %Y]
# Calculate tomorrow's date
set honaphossz [lindex $honaphosz $maihonap]
if {($maihonap == 2) && ($maiev % 4 == 0) && ($maiev % 100 != 0 || $maiev % 400 == 0)} {
set honaphossz 29
}
set holnapinap [expr {$mainap + 1}]
set holnapihonap $maihonap
set holnapiev $maiev
if {$holnapinap > $honaphossz} {
set holnapinap 1
incr holnapihonap
if {$holnapihonap > 12} {
set holnapihonap 1
incr holnapiev
}
}
# No argument - show today and tomorrow
if {$arg eq ""} {
set mainevnap [string trim [lindex $honap($maihonap) $mainap] ","]
set holnapnevnap [string trim [lindex $honap($holnapihonap) $holnapinap] ","]
putserv "PRIVMSG $kinek :Névnap: Ma ($maiev.$maihonap.$mainap): \002$mainevnap\002, holnap: \002$holnapnevnap\002"
return
}
# Date format (MM.DD)
if {[regexp {^(\d{1,2})\.(\d{1,2})$} $arg -> honapocska napocska]} {
if {$honapocska < 1 || $honapocska > 12} {
putserv "PRIVMSG $kinek :Névnap: Hibás hónap (1-12)!"
return
}
set maxnap [lindex $honaphosz $honapocska]
if {$honapocska == 2 && $maiev % 4 == 0 && ($maiev % 100 != 0 || $maiev % 400 == 0)} {
set maxnap 29
}
if {$napocska < 1 || $napocska > $maxnap} {
putserv "PRIVMSG $kinek :Névnap: Hibás nap (1-$maxnap) a $honapocska. hónapban!"
return
}
set nevnapocska [string trim [lindex $honap($honapocska) $napocska] ","]
putserv "PRIVMSG $kinek :névnap: $honapocska.$napocska: \002$nevnapocska\002"
return
}
# Name search
set mikorvan ""
set nevkeres [string tolower [string trim $arg]]
for {set x 1} {$x <= 12} {incr x} {
for {set y 1} {$y <= [lindex $honaphosz $x]} {incr y} {
set napnevek [string tolower [lindex $honap($x) $y]]
if {[regexp [subst -nocommands -nobackslashes {,($nevkeres)(,|$)}] ",$napnevek,"]} {
append mikorvan "[lindex $honapok $x]$y. "
}
}
}
if {$mikorvan ne ""} {
putserv "PRIVMSG $kinek :Névnap: Mikor van $arg nap: $mikorvan"
} else {
putserv "PRIVMSG $kinek :Névnap: Ilyen nevű névnap nincs."
}
}