#########################################################################
#									#
# WM06 Live Ticker							#
# VERSION: 0.8 Build 2006						#
#									#
# DIESES SCRIPT BITTE NICHT ÄNDERN !!!					#
# SCRIPT TEILE BITTE NICHT WEITER VERARBEITEN FÜR EIGENE SCRIPTE !!!	#
#									#
#									#
#									#
# Dieses WM06 Live Ticker Script benutzt den HTML			#
# basierten Ticker von rp-online.de um überhaupt einen			#
# Live Ticker im IRC möglich zu machen.					#
#									#
#									#
# Um eine Liste der möglichen Befehle des Scripts zu erhalten:		#
#									#
# /msg <botnick> wm hilfe						#
#									#
#									#
# Bitte bei der Konfiguration in dieser Datei auf die			#
# Kommentare achten!							#
#									#
#									#
#									#
# Wichtiges:								#
#									#
# Nach dem starten oder rehashen des Eggdrops wird der			#
# Ticker automatisch ausgeschaltet. Somit wird verhindert,		#
# das der Eggdrop ständig die Webseite abfragt, obwohl kein		#
# WM Spiel stattfindet.							#
#									#
#									#
#									#
# Falls ein Bug auftaucht, bitte eine Mail mit				#
# genauer Beschreibung an mich senden.					#
#									#
# Bei Kritik und Vorschlägen einfach Kontakt				#
# mit mir aufnehmen.							#
#									#
#									#
# Copyright © 2006 CMF2000						#
#									#
#									#
# Kontakt:								#
#									#
# Web: http://www.hoax-irc.net						#
#									#
# Mail: CMF2000@hoax-irc.net						#
#									#
# IRC: irc.hoax-irc.net #platinum					#
#									#
#########################################################################

############## Konfiguration ##############

## Beispiel: Für einen Channel: set wmchannels "#wm06"
## Beispiel: Für mehrere Channels: set wmchannels "#wm06,#channel2,#channel3"
## Wichtig: Bei mehreren Channels nicht das Komma zwischen den einzelnen Channels vergessen!

set wmchannels "#wm06"

## Hier wird in Sekunden eingestellt, in welchen Zeitabständen der Ticker arbeiten soll.
## Die Zeit sollte nicht zu gering gewählt werden, weil jedesmal die rp-online Webseite abgerufen wird.
## Also auch am besten den Ticker ausschalten, wenn kein WM Spiel stattfindet.
## Sinnvoll ist hier ein Wert zwischen 60 und 120 Sekunden.

set wmtime "120"

## Diese Variable schaltet den Header (WM06 Live Ticker: Mannschaft1 - Mannschaft2 Spielstand) aus.
## Normalerweise erscheint dieser Header bei jeder Aktualisierung des Tickers.

set wmheaderoff "0"

## Wenn diese Variable auf "1" gesetzt wird, erfolgt nur bei einem Tor, eine Header Ausgabe in den Channel.
## Achtung: Die ganz normale Ticker Text Ausgabe erfolgt nicht.

set wmonlygoal "0"

## Hier kann die Ticker Text Umkehrung ein- und ausgeschaltet werden.

set wmtxtreverse "1"

############## AB HIER NICHTS ÄNDERN ##############

bind msg - wm wm:msg

set wmversion "0.8 Build 2006"
set wmfile "wm06ticker.tmp"

set wmticker "0"
file delete $wmfile

proc wm:msg { nick uhost hand txt } {
   global wmticker wmversion wmfile botnick
   if { $txt == "hilfe" } {
        putserv "NOTICE $nick :Befehle (Botmaster):"
        putserv "NOTICE $nick :Ticker einschalten => /msg $botnick wm an"
        putserv "NOTICE $nick :Ticker ausschalten => /msg $botnick wm aus"
    	putserv "NOTICE $nick :--"
  	putserv "NOTICE $nick :Befehle (Public):"
  	putserv "NOTICE $nick :Ticker Hilfe (diese hier) => /msg $botnick wm hilfe"
  	putserv "NOTICE $nick :Ticker Version => /msg $botnick wm version"
   	putserv "NOTICE $nick :Ticker Status => /msg $botnick wm status"
   }
   if { [matchattr [finduser *!$uhost] m] } {
   	if { $txt == "an" } {
   	     if { $wmticker == "0" } {
   	     	  set wmticker "1"
   	     	  putserv "NOTICE $nick :WM06 Live Ticker wird eingeschaltet."
   	     	  utimer 5 wm:ticker:start
   	     } else {
   	     	  putserv "NOTICE $nick :WM06 Live Ticker ist bereits eingeschaltet."
   	     }
   	}
   	if { $txt == "aus" } {
   	     if { $wmticker == "1" } {
   	     	  set wmticker "0"
   	     	  file delete $wmfile
   	     	  putserv "NOTICE $nick :WM06 Live Ticker wird ausgeschaltet."
   	     } else {
   	     	  putserv "NOTICE $nick :WM06 Live Ticker ist bereits ausgeschaltet."
   	     }
   	}
   }
   if { $txt == "version" } {
   	putserv "NOTICE $nick :WM06 Live Ticker $wmversion (http://www.hoax-irc.net)"
   }
   if { $txt == "status" } {
   	if { $wmticker == "1" } {
   	     putserv "NOTICE $nick :WM06 Live Ticker ist eingeschaltet."
   	} else {
   	     putserv "NOTICE $nick :WM06 Live Ticker ist ausgeschaltet."
   	}
   }
}

proc wm:ticker:start { } {
   global wmtime
   if { [wm:ticker] == "ok" } {
   	utimer $wmtime wm:ticker:start
   }
}

proc wm:ticker { } {
   global wmticker wmversion wmfile wmtext wmchannels wmheaderoff wmonlygoal
   if { $wmticker == "1" } {
   if [catch { socket ticker.rp-online.de 80 } sock] {
      	putlog "WM06 Live Ticker $wmversion - Keine Verbindung zum Server."
      	set wmticker "0"
      	file delete $wmfile
      	return 0
   }
   set wmgame "0"
   set wmresult "0"
   set wmcontent "0"
   set wmfirsttime "0"
   set loop "0"
   if { [file exists $wmfile] } {
   	if { [file size $wmfile] > "5" } {
   	     set wmdat [open $wmfile]
   	     set wmlastline [gets $wmdat]
   	     set wmlastminute [string range $wmlastline 0 [expr [string first "|" $wmlastline] -1]]
   	     set wmlastline [string range $wmlastline [expr [string first "|" $wmlastline] +1] end]
   	     close $wmdat
   	} else {
   	     set wmlastline "0"
   	     set wmlastminute "0"
   	}
   } else {
   	set wmlastline "0"
   	set wmlastminute "0"
   	set wmfirsttime "1"
   }
   set wmdat [open $wmfile w]
   puts $sock "GET http://ticker.rp-online.de/wm2006/rpo/index.html HTTP/1.0"
   puts $sock "User-Agent: WM06 Live Ticker $wmversion (Eggdrop/IRC)"
   puts $sock ""
   flush $sock
   while { [eof $sock] != 1 } {
   	   set text "[gets $sock]"
	   regsub -all "<*/*b>" $text "" text
   	if { [string match "      <div id=\"links\" class=\"hell\">" $text] == "1" } {
   	     close $wmdat
   	     close $sock
   	     wm:ticker:text:output
   	     return ok
   	}
   	if { $wmgame == "1" } {
   	     if { $loop > "0" } {
   	     	  set text [string range $text [expr [string first ">" $text] +1] [expr [string last "<" $text] -1]]
   	     	  if { $wmteam1 == "0" } {
   	     	       set wmteam1 $text
   	     	  } else {
   	     	       set wmteam2 $text
   	     	  }
   	     	  set loop [expr $loop -1]
   	     } else {
   	     	  set wmgame "0"
   	     }
   	}
   	if { $wmresult == "1" } {
	     if { $loop > "0" } {
	   	  set text [string range $text [expr [string first ">" $text] +1] [expr [string last "<" $text] -1]]
	   	  if { $wmscore1 == "-1" } {
	   	       set wmscore1 $text
	   	  } else {
	   	       set wmscore2 $text
	   	  }
	   	  set loop [expr $loop -1]
	     } else {
	   	  set wmresult "0"
	     }
   	}
   	if { $wmcontent == "1" } {
   	     if { [string match "*<div class=\"minute\">*" $text] == "1" } {
   	     	  set text [string range $text [expr [string first "minute\">" $text] +8] [expr [string last "<" $text] -1]]
   	     	  if { $text == "&nbsp;" } {
   	     	       set wmminute "0"
   	     	       set wmminute_ "0"
   	     	  } else {
   	     	       set wmminute $text
   	     	       set wmminute_ [string range $text 0 [expr [string first "." $text] -1]]
   	     	  }
   	     }
   	     if { [string match "<div class=\"text\">*" $text] == "1" } {
   	     	  set text [string range $text 18 [expr [string last "<" $text] -1]]
   	          if { $wmfirstline == "1" } {
   	               puts $wmdat $wmminute_|$text
   	               set wmfirstline "0"
   	          }
   	          if { $wmonlygoal == "0" || $wmheaderoff != "0" } {
   	               set wmwrite "1"
   	          }
   	          if { $wmonlygoal == "0" && $wmheaderoff == "0" } {
   	               set wmhead "1"
   	          }
   	     }
   	     if { $text == $wmlastline || $wmminute_ < $wmlastminute } {
   	     	  close $wmdat
   	     	  close $sock
   	     	  wm:ticker:text:output
   	     	  return ok
   	     }
   	     if { ([string match "<div class=\"event ball\">&nbsp;</div>" $text] == "1" && $wmonlygoal != "0") || $wmfirsttime == "1" } {
   	     	  set wmhead "1"
   	     }
   	     if { $wmhead == "1" } {
   	     	  putserv "PRIVMSG $wmchannels :1,14WM06 4Live 8Ticker1: $wmteam1 - $wmteam2 $wmscore1:$wmscore2"
   	     	  set wmhead "0"
   	     }
   	     if { $text == "</div>" } {
   	     	  set wmwrite "0"
   	     }
   	     if { $wmwrite == "1" } {
   	     	  if { $wmminute == "0" } {
   	     	       set wmtext($wmtxtcount) $text
   	     	  } else {
   	               set wmtext($wmtxtcount) "$wmminute $text"
   	          }
   	          incr wmtxtcount
   	     	  if { $wmlastline == "0" } {
   	               close $wmdat
	               close $sock
	               wm:ticker:text:output
   	     	       return ok
   	     	  }
   	     }
   	}
   	if { [string match "          <tr class=\"begegnung\">" $text] == "1" } {
   	     set wmgame "1"
   	     set wmteam1 "0"
   	     set loop "3"
   	}
   	if { [string match "          <tr class=\"ergebnis\">" $text] == "1" } {
	     set wmresult "1"
	     set wmscore1 "-1"
	     set loop "3"
   	}
   	if { [string match "      <div id=\"ticker\">" $text] == "1" } {
	     set wmcontent "1"
	     set wmfirstline "1"
	     set wmhead "0"
	     set wmwrite "0"
	     set wmminute_ "0"
	     set wmtxtcount "1"
   	}
   }
   }
}

proc wm:ticker:text:output { } {
   global wmtext wmchannels wmtxtreverse
   if { [array exists wmtext] } {
   	if { $wmtxtreverse == "0" } {
   	     set i "1"
   	     while { $i <= [array size wmtext] } {
   	     	     putserv "PRIVMSG $wmchannels :$wmtext($i)"
   	     	     incr i
   	     }
   	} else {
   	     set i [array size wmtext]
   	     while { $i >= "1" } {
	             putserv "PRIVMSG $wmchannels :$wmtext($i)"
	             set i [expr $i -1]
   	     }
   	}
   	unset wmtext
   }
}

putlog "WM06 Live Ticker $wmversion wird geladen..."
