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.

ClanAvail

Help for those learning Tcl or writing their own scripts.
Post Reply
l
lenooxx
Voice
Posts: 27
Joined: Tue Mar 24, 2009 10:56 am
Location: Hungarian
Contact:

ClanAvail

Post by lenooxx »

hey

i added ClanAvail scipt for my eggdrop
and i get this error message always

Tcl error [clanavail_showwar]: can't read "users": no such variable
Tcl error [clanavail_navail]: can't read "users": no such variable

:(

here is the script

Code: Select all

##############
## COMMANDS ##
##########################################################
## PUB ## !avail (Can be changed)                       ##
######### Sets you as available for the next war.       ##
######### --------------------------------------------- ##
######### !navail (Can be changed)                      ##
######### Sets you as not available for the next war.   ##
######### --------------------------------------------- ##
######### !maybe (Can be changed)                       ##
######### Sets you as maybe available for the next war. ##
######### --------------------------------------------  ##
######### !wardetails [details]                         ##
######### Shows the details for the next war.           ##
######### Availability is also shown, than cleared. If  ##
######### details are given, the war details will be    ##
######### set to the specified information.             ##
##########################################################
## MSG ## /msg <bot> auth <password>                    ##
######### Authorizes you to use commands.               ##
######### --------------------------------------------- ##
######### /msg <bot> deauth                             ##
######### De-authorizes you from using commands.        ##
##########################################################
## DCC ## .chanset <channel> +clantopic                 ##
######### Makes the bot set the topic of the specified  ##
######### channel to the details of the next war when   ##
######### information changes.                          ##
##########################################################

##########################################################
## Just load the script, edit the settings, and rehash. ##
##########################################################

#################################################
# Set the flag required to use the script here. #
#################################################

set clanavail_setting(flag) "o|o"

#################################################################
# Set the command for setting yourself as maybe available here. #
#################################################################

set clanavail_setting(maybe) "!maybe"

###########################################################
# Set the command for setting yourself as available here. #
###########################################################

set clanavail_setting(avail) "!avail"

###############################################################
# Set the command for setting yourself as not available here. #
###############################################################

set clanavail_setting(navail) "!navail"

####################################################################
# When adding to the topic, should the war details be added to the #
# end of the topic or the beginning? (0 for beginning, 1 for end)  #
####################################################################

set clanavail_setting(end) 1

###################################
# Set the database filename here. #
###################################

set clanavail_setting(database) "./scripts/clanavail.db"

###################################################################
# Enable bold in topic and !wardetails? (Makes it easier to read) #
###################################################################

set clanavail_setting(bold) 1

####################
# Code begins here #
####################

if {$numversion < 1060800} { putlog "\002CLANAVAIL:\002 \002WARNING:\002 This script is intended to run on eggdrop 1.6.8 or later." }
if {[info tclversion] < 8.2} { putlog "\002CLANAVAIL:\002 \002WARNING:\002 This script is intended to run on Tcl Version 8.2 or later." }

bind pub $clanavail_setting(flag) !wardetails clanavail_showwar
bind pub $clanavail_setting(flag) $clanavail_setting(maybe) clanavail_maybe
bind pub $clanavail_setting(flag) $clanavail_setting(avail) clanavail_avail
bind pub $clanavail_setting(flag) $clanavail_setting(navail) clanavail_navail
bind msg - auth clanavail_auth
bind msg - deauth clanavail_deauth
bind part - * clanavail_deauth_part
bind sign - * clanavail_deauth_sign
bind splt - * clanavail_deauth_splt
setudef flag clantopic

proc clanavail_auth {nick uhost hand text} {
	if {![validuser $hand]} { putserv "NOTICE $nick :You are not a bot user." ; return }
	if {[string compare [lindex [set text [split $text]] 0] ""] == 0} { putserv "NOTICE $nick :Usage: /msg $::botnick auth <password>" ; return }
	if {![passwdok $hand [lindex $text 0]]} { putserv "NOTICE $nick :Invalid password." ; return }
	if {[matchattr $hand +Q]} { putserv "NOTICE $nick :You are already authorized." ; return }
	chattr $hand +Q
	putserv "NOTICE $nick :You are now authorized."
}
proc clanavail_deauth {nick uhost hand text} {
	if {![validuser $hand]} { putserv "NOTICE $nick :You are not a bot user." ; return }
	if {![matchattr $hand +Q]} { putserv "NOTICE $nick :You are not authorized." ; return }
	chattr $hand -Q
	putserv "NOTICE $nick :You are no longer authorized."
}
proc clanavail_deauth_sign {nick uhost hand chan text} {
	if {[validuser $hand] && [matchattr $hand +Q]} { chattr $hand -Q }
}
proc clanavail_deauth_part {nick uhost hand chan text} {
	if {![onchan $nick] && [validuser $hand] && [matchattr $hand +Q]} { chattr $hand -Q }
}
proc clanavail_deauth_splt {nick uhost hand chan} {
	if {[validuser $hand] && [matchattr $hand +Q]} { chattr $hand -Q }
}
proc clanavail_readarray {array file} {
	upvar $array ours
	if {[catch {open $file r} fd]} { return }
	if {[array exists ours]} { unset ours }
	foreach line [split [read $fd] \n] {
		if {[string range $line 0 2] != "%!%" || [scan [string range $line 3 end] "%\[^!!!\]!!!%s" name data] <= 0} { continue }
		if {![info exists data]} { set data "" }
		set ours($name) $data
	}
	close $fd
}
proc clanavail_savearray {array file} {
	upvar $array ours
	if {![array exists ours] || [catch {open $file w} fd]} { return }
	foreach entry [array names ours] { puts $fd "%!%$entry!!!$ours($entry)" }
	close $fd
}
if {![array exists clanavail_users] && [file exists $clanavail_setting(database)]} { clanavail_readarray clanavail_users $clanavail_setting(database) }
proc clanavail_showwar {nick uhost hand chan text} {
	if {![matchattr $hand +Q]} { putserv "NOTICE $nick :You are not authorized. Please type \"/msg $::botnick auth <password>\" to authorize yourself." ; return }
	if {$text == ""} {
		if {![info exists ::clanavail_users(/warinfo)]} { set ::clanavail_users(/warinfo) "None" }
		foreach {a b} [list users [clanavail_getavail] avail [lindex $users 0] navail [lindex $users 1] maybe [lindex $users 2]] { set $a $b }
		putserv "PRIVMSG $chan :[clanavail_bold "Next War: $::clanavail_users(/warinfo) Available: $avail Not Available: $navail Maybe Available: $maybe."]"
		catch { unset ::clanavail_users(/warinfo) }
		return
	}
	set ::clanavail_users(/warinfo) $text
	clanavail_do_topic
	putserv "NOTICE $nick :[clanavail_bold "Next War: $::clanavail_users(/warinfo)"]"
}
proc clanavail_avail {nick uhost hand chan text} {
	global clanavail_users
	if {![matchattr $hand +Q]} { putserv "NOTICE $nick :You are not authorized. Please type \"/msg $::botnick auth <password>\" to authorize yourself." ; return }
	if {[info exists clanavail_users($nick)] && [string match avail $clanavail_users($nick)]} { putserv "NOTICE $nick :You are already marked as available." ; return }
	set clanavail_users($nick) avail
	clanavail_savearray clanavail_users $::clanavail_setting(database)
	clanavail_do_topic
	putserv "NOTICE $nick :You are now marked as available."
}
proc clanavail_navail {nick uhost hand chan text} {
	global clanavail_users
	if {![matchattr $hand +Q]} { putserv "NOTICE $nick :You are not authorized. Please type \"/msg $::botnick auth <password>\" to authorize yourself." ; return }
	if {[info exists clanavail_users($nick)] && [string match navail $clanavail_users($nick)]} { putserv "NOTICE $nick :You are already marked as not available." ; return }
	set clanavail_users($nick) navail
	clanavail_savearray clanavail_users $::clanavail_setting(database)
	clanavail_do_topic
	putserv "NOTICE $nick :You are now marked as not available."
}
proc clanavail_maybe {nick uhost hand chan text} {
	global clanavail_users
	if {![matchattr $hand +Q]} { putserv "NOTICE $nick :You are not authorized. Please type \"/msg $::botnick auth <password>\" to authorize yourself." ; return }
	if {[info exists clanavail_users($nick)] && [string match maybe $clanavail_users($nick)]} { putserv "NOTICE $nick :You are already marked as maybe available." ; return }
	set clanavail_users($nick) maybe
	clanavail_savearray clanavail_users $::clanavail_setting(database)
	clanavail_do_topic
	putserv "NOTICE $nick :You are now marked as maybe available."
}
proc clanavail_do_topic {} {
	global clanavail_users
	foreach {a b} [list users [clanavail_getavail] avail [lindex $users 0] navail [lindex $users 1] maybe [lindex $users 2]] { set $a $b }
	if {![info exists clanavail_users(/warinfo)]} {	set clanavail_users(/warinfo) "None" }
	foreach c [channels] {
		if {![botisop $chan] || [lsearch -exact [channel info $chan] +chantopic] == -1} { continue }
		if {!$::clanavail_setting(end)} {
			if {[string match "*Next War:*Available:*Not Available:*Maybe Available:*. |*" [topic $chan]]} { set topic [string range [topic $chan] [expr [string first ". |" [topic $chan]] + 4] end] } { set topic [topic $chan] }
			set topic "[clanavail_bold "Next War: $clanavail_users(/warinfo) Available: $avail Not Available: $navail Maybe Available: $maybe."] | $topic"
		} {
			if {[string match "*| *Next War:*Available:*Not Available:*Maybe Available:*" [topic $chan]]} {
				if {$::clanavail_setting(bold)} { set topic [string range [topic $chan] 0 [expr [string first "| \002Next War:" [topic $chan]] - 2]] } { set topic [string range [topic $chan] 0 [expr [string first "| Next War:" [topic $chan]] - 2]] }
			} {
				set topic [topic $chan]
			}
			set topic "$topic | [clanavail_bold "Next War: $clanavail_users(/warinfo) Available: $avail Not Available: $navail Maybe Available: $maybe."]"
		}
		if {[string compare [topic $chan] $topic] != 0} { putserv "TOPIC $chan :$topic" }
	}
}
proc clanavail_bold {text} {
	if {$::clanavail_setting(bold)} {
		regsub -all -- " Not Available: "   $text " \002Not Available:\002 "   text
		regsub -all -- " Maybe Available: " $text " \002Maybe Available:\002 " text
		regsub -all -- " Available: "       $text " \002Available:\002 "       text
		regsub -all -- "Next War: "         $text "\002Next War:\002 "         text
	}
	return $text
}
proc clanavail_getavail {} {
	global clanavail_users
	foreach a [array names clanavail_users] {
		if {[string match $a /warinfo]} { continue }
		switch -- $clanavail_users($a) {
			"avail" { lappend avail $a, }
			"navail" { lappend navail $a, }
			"maybe" { lappend maybe $a, }
		}
	}
	foreach v {avail navail maybe} {
		if {![info exists $v]} { set $v None }
	}
	regsub -all -- "," [lindex $avail end]  "" end
	regsub -all -- "," [lindex $navail end] "" end2
	regsub -all -- "," [lindex $maybe end]  "" end3
	return "[list [lreplace $avail end end $end] [lreplace $navail end end $end2] [lreplace $maybe end end $end3]]"
}
putlog "\002CLANAVAIL:\002 ClanAvail.tcl Version 1.4 by Wcc is loaded."

Moderator: I took the liberty of adding the proper tags for code blocks. Makes the code a lot easier to read.
/NML_375
Post Reply