Your IP : 216.73.216.224


Current Path : /home/mudbot/eggdrop-keep/scripts/
Upload File :
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"