| Current Path : /home/mudbot/eggdrop-keep/scripts/ |
| Current File : //home/mudbot/eggdrop-keep/scripts/usergreet.tcl |
######################################################
# usergreet.tcl v1.1 by stylus740 <stylus740@gmx.de> #
######################################################
###################
# History:
# 1.0 Erstes Release
# 1.1 Channel Aktivierung ebenfalls auf partyline Steuerung umgestellt
# Diverse kleine Bugfixes
# 1.2 Auch Nicknamen mit [ und ] ber�cksichtigt
###################
##
# Begr��ungen an bestimmte User durch den Bot.
##
# In welchen Channels soll das Script aktiv sein?
# Die Definition erfolgt nicht im script, sondern durch Setzen von +usergreet im Bot
# In der partyline eingeben:
#
# .chanset #channel +usergreet
# Zur Aktivierung der userdefined flags
setudef flag usergreet
# Definition des Datenfiles f�r Nicks und Gru�meldungen
set ug_ni(datafile) "ugreet.dat"
###################################################################
# M�gliche Befehle in der Partyline: #
# #
# .chanset #chan +ugreet Aktivierung in Channel #chan #
# .chanset #chan -ugreet Deaktivierung in Channel #chan #
# .greethelp Hilfen zur Bedienung #
# .+greetuser User und Text hinzuf�gen #
# .-greetuser User und Text l�schen #
# .listgreetuser Eintr�ge anzeigen #
###################################################################
### Ab hier nur editieren, wenn man genau wei�, was man tut. Beginn des Codes ###
set ug_ni(version) v1.2 ;# Variable f�r Version setzten
bind join - * ug:nick ;# Prozedur f�r join einbinden
bind nick - * ug:nickn ;# Prozedur f�r nick einbinden
bind dcc o|o +greetuser add_gusers ;# User hinzuf�gen
bind dcc o|o -greetuser del_gusers ;# User hinzuf�gen
bind dcc o|o listgreetuser list_gusers ;# User anzeigen
bind dcc o|o greethelp help_gusers ;# Hilfe anzeigen
proc help_gusers {handle idx args} {
putlog "usergreet erlaubt es, bestimmten Nicks individuelle Begr��ungsmeldungen zuzuweisen, die diesen Nicks angezeigt werden, wenn sie einen Channel joinen oder ihren Nick �ndern."
putlog "Die Steuerung von usergreet erfolgt ausschlie�lich �ber die partyline mit den folgenden Befehlen:"
putlog " "
putlog "+ greetuser <nick> <greet> Nick mit Gru�meldung hinzuf�gen oder �ndern"
putlog "- greetuser <nick> Den angegebenen Nick l�schen"
putlog "listgreetuser S�mtliche Gru�-Eintr�ge anzeigen"
putlog "greethelp Diese Hilfemeldung anzeigen"
}
proc init_gusers {} {
global ug_nick ug_ni ;# Datenstrukturen public definieren
if {[file exists $ug_ni(datafile)]} { ;# Falls File vorhanden
putlog "Laden Userdaten aus $ug_ni(datafile)" ;# Lademeldung
set in [open $ug_ni(datafile) r] ;# Datenfile im read modus �ffnen
while {![eof $in]} { ;# solange kein EOF
set vline [gets $in] ;# Zeile holen
if {[eof $in]} {break} ;# Falls EOF, Ende von while
set snick [lindex $vline 0] ;# Nick extrahieren
set sgreet [lrange $vline 1 end] ;# Gru� extrahieren
regsub -all -- {\{} $sgreet {} sgreet ;# die vom Eggdrop erzeugte '{' entfernen
regsub -all -- {\}} $sgreet {} sgreet ;# die vom Eggdrop erzeugte '}' entfernen
set ug_nick($snick) $sgreet ;# Array Datenfeld belegen
} ;# End while
close $in ;# Datei schlie�en
} ;# End If (dataexist)
} ;# End Procedure
init_gusers
proc add_gusers {handle idx args} {
global ug_nick ug_ni ;# Datenstrukturen public definieren
set acmd [lindex $args 0] ;# Befehlszeile extrahieren
set unick [lindex $acmd 0] ;# erstes Argument ist Nick
set ugreet [lrange $acmd 1 end] ;# Der gesamte Rest ist der Gru�
regsub -all -- {\{} $ugreet {} ugreet ;# die vom Eggdrop erzeugte '{' entfernen
regsub -all -- {\}} $ugreet {} ugreet ;# die vom Eggdrop erzeugte '}' entfernen
set ug_nick($unick) $ugreet ;# Array Datenfeld (neu) belegen
set cf 0 ;# Change Flag auf 0 setzen
foreach search [string tolower [array names ug_nick]] { ;# Liste der Nicks durchlaufen
if {[string match $search [string tolower $unick]]} {set cf 1} ;# wenn nick schon vorhanden, Flag auf 1
} ;# End Foreach
if {$cf == 0} { ;# ein neuer User
set output "$unick $ugreet" ;# Zeile f�r Ausgabe montieren
set out [open $ug_ni(datafile) a] ;# Datenfile im appendmodus �ffnen
puts $out $output ;# Zeile schreiben
close $out ;# Datei schlie�en
putlog "Neuer User f�r usergreet $ug_ni(version) gespeichert in $ug_ni(datafile)"
} else { ;# ein vorhandener User
set out [open $ug_ni(datafile) w] ;# Datenfile im w modus �ffnen (�berschreiben)
foreach search [array names ug_nick] { ;# alle nicks des arrays
if {$search != 0} { ;# wenn keine leere Zeile
set snick $search ;# Nick extrahieren
set sgreet $ug_nick($search) ;# Gru� extrahieren
set output "$snick $sgreet" ;# Output montieren
puts $out $output ;# Zeile schreiben
} ;# End if (search)
} ;# End Foreach
close $out ;# Datei schlie�en
putlog "Gru� f�r User $unick in $ug_ni(datafile) ge�ndert"
} ;# End if (cf)
} ;# End Procedure
proc list_gusers {handle idx args} {
global ug_nick ug_ni ;# Datenstrukturen public definieren
if {[info exists ug_nick]} { ;# Falls Felder definiert sind
putlog "Eingetragene Nick f�r usergreet:" ;# �berschrift anzeigen
foreach search [array names ug_nick] { ;# F�r jeden Eintrag
if {$search != 0} { ;# wenn kein leerer Eintrag
set snick $search ;# Nick extrahieren
set sgreet $ug_nick($search) ;# Gru� extrahieren
putlog "Nick: $snick Gru�: $sgreet" ;# Zeile anzeigen
} ;# End if (search)
} ;# End foreach
} else { ;# Falls keine Struktur vorhanden
putlog "Keine Daten gespeichert" ;# Fehler anzeigen
} ;# End if
} ;# End Procedure
proc del_gusers {handle idx args} {
global ug_nick ug_ni ;# Datenstrukturen public definieren
set acmd [lindex $args 0] ;# Befehlszeile extrahieren
set unick [lindex $acmd 0] ;# erstes Argument ist Nick
if {([info exists ug_nick($unick)])} { ;# wenn der Eintrag existiert
unset ug_nick($unick) ;# Array Datenfeld freigeben
set out [open $ug_ni(datafile) w] ;# Datenfile im w modus �ffnen (�berschreiben)
foreach search [array names ug_nick] { ;# durchlaufen der Daten arrays
if {$search != 0} { ;# wenn keine leere Zeile
set snick $search ;# Nick extrahieren
set sgreet $ug_nick($search) ;# Gru� extrahieren
set output "$snick $sgreet" ;# Output montieren
puts $out $output ;# Zeile schreiben
} ;# End if (search)
} ;# End Foreach
close $out ;# Datei schlie�en
putlog "User $unick aus $ug_ni(datafile) gel�scht" ;# L�schmeldung
} else { ;# Falls nick nicht vorhanden
putlog "User $unick ist nicht gespeichert!" ;# Infomeldung
} ;# End if (info)
} ;# End Procedure
proc ug:nick {nick uhost hand chan} {
global ug_nick ug_ni ;# oben definierte Arrays global setzen
if {![ug:active $chan]} { return 0 } ;# falscher channel: nix machen
# Schleifenbeginn: Liste der Nicks durchlaufen. "search" = aktueller Nick
foreach search [array names ug_nick] {
if {([string tolower $search] == [string tolower $nick])} {
putserv "PRIVMSG $chan :$ug_nick($search)"
} ;# end if string match
} ;# end foreach search
} ;# end procedure
proc ug:nickn {nick uhost hand chan newnick} {
global ug_nick ug_ni ;# oben definierte Arrays global setzen
set nick $newnick ;# nick = newnick
if {![ug:active $chan]} { return 0 } ;# falscher channel: nix machen
# Schleifenbeginn: Liste der definierten Begriffe durchlaufen. "search" = aktueller Nick
foreach search [array names ug_nick] {
if {([string tolower $search] == [string tolower $nick])} {
putserv "PRIVMSG $chan :$ug_nick($search)"
} ;# end if string match
} ;# end foreach search
} ;# end procedure
proc ug:active {chan} {
foreach setting [channel info $chan] { ;# "channel info" ist ein TCL Befehl!
if {[regexp -- {^[\+-]} $setting]} {
if {$setting == "+usergreet"} { return 1 }
}
}
return 0
}
putlog "Usergreet $ug_ni(version) von stylus740 (Stand: 10.3.04) geladen"
putlog "Eingabe von \.greethelp zeigt Bedienungshinweise an"