This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Need to improve script a bit

Help for those learning Tcl or writing their own scripts.
Post Reply
G
Gordon
Voice
Posts: 35
Joined: Wed Apr 04, 2007 11:45 am

Need to improve script a bit

Post by Gordon »

Code: Select all

##########################
######### README #########
##########################

# This script is written by Sm0ke0ut.
# For shoutcast servers only!
# 
# Available Commands:
# !np !song 		= Current Song
# !dj	!title		= Stream Title/Current DJ
# !server			= Server Status
# !status			= Current Status of Stream (users/kbps)
# !record			= Listeners Peak
# !listen			= Get playlist
# !genre			= Shows Genre
# !website !site !url	= Shows url/site
# !icq			= ICQ Number
# !aim			= AIM Address
# !request <text>		= Request Song
#
# indeed, there's also `Stream IRC`, but that's pretty useless because you're already at IRC...
#
# irc.fayntic.com #fatalerrorgroup

##########################
######## Settings ########
##########################

# Stream URL (e.g. http://domain.tld:port OR http://IP:port)
set url "http://xx.xx.xx.xx:xxxx"

# Playlist URL (Leave empty for default stream playlist)
set playlist ""

# Public/User Channel
set streamch "#Radio"

# Private/DJ Channel
set djch "#Radio-mods"

##########################
###### DO NOT EDIT #######
##########################

package require http

bind pub -|- !song get_shoutcast_song 
bind pub -|- !np get_shoutcast_song 
proc get_shoutcast_song {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {<font class=default>Current Song: </font></td><td><font class=default><b>([^<]+)</b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002Prave hraje\002: $title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !title get_shoutcast_title
bind pub -|- !dj get_shoutcast_title
proc get_shoutcast_title {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {<font class=default>Stream Title: </font></td><td><font class=default><b>([^<]+)</b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002DJ\002: $title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !site get_shoutcast_site
bind pub -|- !url get_shoutcast_site
bind pub -|- !website get_shoutcast_site
proc get_shoutcast_site {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {>http://([^<]+)</a></b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002Website\002: http://$title"
	} elseif {[regexp {>www.([^<]+)</a></b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002Website\002: http://www.$title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !server get_shoutcast_server
proc get_shoutcast_server {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {<font class=default>Server Status: </font></td><td><font class=default><b>([^<]+)</b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002Server\002: $title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't contact the server, please check the configuration and/or streaming server"
	}
   }
}

bind pub -|- !genre get_shoutcast_genre 
proc get_shoutcast_genre {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {<font class=default>Stream Genre: </font></td><td><font class=default><b>([^<]+)</b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002Genre\002: $title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !status get_shoutcast_status
proc get_shoutcast_status {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {B>([^<]+) of} $data x title]} {
		regexp { of ([^<]+) listeners} $data x title2
		regexp {listeners ([^<]+)} $data x title3
		regexp {Stream is up at ([^<]+) with} $data x title4
		puthelp "PRIVMSG $chan :\002Status\002: $title of $title2 $title3 at $title4"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !record get_shoutcast_peak
proc get_shoutcast_peak {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {<font class=default>Listener Peak: </font></td><td><font class=default><b>([^<]+)</b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002Record\002: $title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !listen get_shoutcast_listen
proc get_shoutcast_listen {nick uhost hand chan arg} {
   global url streamch playlist
   set streamch [string tolower $streamch]
   if {[string tolower $chan] == "$streamch"} {
	if {$playlist == ""} {
		puthelp "PRIVMSG $chan :\002Stream/Listen\002: $url/listen.pls"
	} else { 
		puthelp "PRIVMSG $chan :\002Stream/Listen\002: $playlist"
	}
   }
}

bind pub -|- !icq get_shoutcast_icq 
proc get_shoutcast_icq {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {<font class=default>Stream ICQ: </font></td><td><font class=default><b>([^<]+)</b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002ICQ\002: $title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !aim get_shoutcast_aim 
proc get_shoutcast_aim {nick uhost hand chan arg} {
   global url streamch
   set streamch [string tolower $streamch]
   ::http::config -useragent "Mozilla/5.0; Shoutinfo"
   if {[string tolower $chan] == "$streamch"} { 
   	set http_req [::http::geturl $url -timeout 2000]
	if {[::http::status $http_req] != "ok"} {
		puthelp "PRIVMSG $chan :Stream is unavailable";
	}
	set data [::http::data $http_req]
	::http::cleanup $http_req
	if {[regexp {<font class=default>Stream AIM: </font></td><td><font class=default><b>([^<]+)</b>} $data x title]} {
		puthelp "PRIVMSG $chan :\002AIM\002: $title"
	} else {
		puthelp "PRIVMSG $chan :Couldn't receive any information, checking server status..."
		get_shoutcast_server $nick $uhost $hand $chan $arg
	}
   }
}

bind pub -|- !req get_shoutcast_request
proc get_shoutcast_request {nick uhost hand chan arg} {
   global streamch djch
   set streamch [string tolower $streamch]
   if {[string tolower $chan] == "$streamch"} {
	puthelp "PRIVMSG $djch :\002\Request\002: $arg  - Requested by: \002$nick\002"
	puthelp "NOTICE $nick :\002$arg\002 is succesfully requested"
   }
}
i use this shoutcast script and i want commands to be available in every channel (or selected) the bot is in. Now its only responding in chan #Radio.

I tried something like: set streamch "#Radio #Chan2 #Chan3" or set streamch "#Radio,#Chan2,#Chan3" but it didnt work.
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

You'll have to replace the part below in each of your procs with something else...

Code: Select all

   set streamch [string tolower $streamch]
   if {[string tolower $chan] == "$streamch"} {
What you should replace it with would depend on the behaviour you'd like. Personally, I'd suggest creating a user-defined channel flag. Others may prefer different approaches.
A rough example on how to use custom channel flags is shown below.

Code: Select all

setudef flag shoutcast

proc someproc ....
 if {[channel get $chan shoutcast]} {
...
NML_375
Post Reply