Code: Select all
putserv "kick $chan $who :$why kick by $nick"
Code: Select all
putserv {kick $chan $who :$why kick by $nick}
nothing it dosen't work this is the error message is "not on the channel"incith wrote:Try {} instead of "", e.g...becomes..Code: Select all
putserv "kick $chan $who :$why kick by $nick"
If that doesn't work I guess some escaping will have to be done on the nick.Code: Select all
putserv {kick $chan $who :$why kick by $nick}
Code: Select all
set who [lindex $arg 0]
set why [lrange $arg 1 end]
Code: Select all
set who [lindex [split $arg] 0]
set why [lrange [split $arg] 1 end]
putkick <channel> <nick,nick,...> [reason]
Description: sends kicks to the server and tries to put as many nicks
into one kick command as possible.
Returns: nothing
Module: irc
Code: Select all
# set here the space delimited string of channel(s) that the script is active in
set vVoiceChans "#eggTCL"
# set here the notice to send to users that are voiced in the above preconfigured channel(s)
set vVoiceMessage "welcome to voice control script - you can use !ban, !kick, !unban, !topic, !mode on/off"
bind mode - *+v* pVoiceNotice
bind pub - !kick pVoiceKick
bind pub - !ban pVoiceBan
bind pub - !unban pVoiceUnban
bind pub - !mode pVoiceMode
bind pub - !topic pVoiceTopic
set vVoiceVersion "v1.0"
proc pVoiceNotice {nick uhost hand chan mc target} {
global vVoiceChans vVoiceMessage
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
putserv "NOTICE $target :$vVoiceMessage"
}
return 0
}
proc pVoiceKick {nick uhost hand chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] >= 2} {
set target [lindex $txt 0]
set reason [join [lrange $txt 1 end]]
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[onchan $target $chan]} {
if {![validuser [nick2hand $target $chan]]} {
if {[botisop $chan]} {
putserv "KICK $chan $target :$reason (requested by $nick)"
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"}
} else {putserv "NOTICE $nick :-error- $target is not on $chan"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to kick users via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !kick <nick> <reason>"}
}
return 0
}
proc pVoiceBan {nick uhost hand chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] >= 2} {
set target [lindex $txt 0]
set reason [join [lrange $txt 1 end]]
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[onchan $target $chan]} {
if {![validuser [nick2hand $target $chan]]} {
if {[botisop $chan]} {
scan [getchanhost $target $chan] {%[^@]@%s} user host
putserv "MODE $chan -o+b $target $host"
putserv "KICK $chan $target :$reason (requested by $nick)"
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"}
} else {putserv "NOTICE $nick :-error- $target is not on $chan"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to ban users via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !ban <nick> <reason>"}
}
return 0
}
proc pVoiceUnban {nick uhost handle chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] == 1} {
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[botisop $chan]} {
putserv "MODE $chan -b [join $txt]"
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to unban hosts via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !unban <host>"}
}
return 0
}
proc pVoiceMode {nick uhost handle chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] == 1} {
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[botisop $chan]} {
switch -- [string tolower [join $txt]] {
on {putserv "MODE $chan +mi"}
off {putserv "MODE $chan -mi"}
default {putserv "NOTICE $nick :-error- single text argument can only be on or off"}
}
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set modes via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !mode <on||off>"}
}
return 0
}
proc pVoiceTopic {nick uhost handle chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] >= 1} {
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[botisop $chan]} {
putserv "TOPIC $chan :[join $text] (requested by $nick)"
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set a topic via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !topic <topic>"}
}
return 0
}
# eof
thank you for your help but this scritp doesn't work with command: for exemplearfer wrote:You fail to convert properly between lists and strings in several places, which, as per Papillon's post, gives rise to the errors you have already encountered.
The following URL serves as a good tutorial on the subject
http://www.peterre.info/characters.html
I have taken the trouble to correct the script and to rewrite into a more elegant code structure. I have tested the script on Eggdrop 1.6.19 compiled with Tcl8.4 and seems to work fine including with nicks that contain special characters (heh, I must have had nothing to do for a while there).
[/url]Code: Select all
# set here the space delimited string of channel(s) that the script is active in set vVoiceChans "#eggTCL" # set here the notice to send to users that are voiced in the above preconfigured channel(s) set vVoiceMessage "welcome to voice control script - you can use !ban, !kick, !unban, !topic, !mode on/off" bind mode - *+v* pVoiceNotice bind pub - !kick pVoiceKick bind pub - !ban pVoiceBan bind pub - !unban pVoiceUnban bind pub - !mode pVoiceMode bind pub - !topic pVoiceTopic set vVoiceVersion "v1.0" proc pVoiceNotice {nick uhost hand chan mc target} { global vVoiceChans vVoiceMessage if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { putserv "NOTICE $target :$vVoiceMessage" } return 0 } proc pVoiceKick {nick uhost hand chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] >= 2} { set target [lindex $txt 0] set reason [join [lrange $txt 1 end]] if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[onchan $target $chan]} { if {![validuser [nick2hand $target $chan]]} { if {[botisop $chan]} { putserv "KICK $chan $target :$reason (requested by $nick)" } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"} } else {putserv "NOTICE $nick :-error- $target is not on $chan"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to kick users via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !kick <nick> <reason>"} } return 0 } proc pVoiceBan {nick uhost hand chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] >= 2} { set target [lindex $txt 0] set reason [join [lrange $txt 1 end]] if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[onchan $target $chan]} { if {![validuser [nick2hand $target $chan]]} { if {[botisop $chan]} { scan [getchanhost $target $chan] {%[^@]@%s} user host putserv "MODE $chan -o+b $target $host" putserv "KICK $chan $target :$reason (requested by $nick)" } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"} } else {putserv "NOTICE $nick :-error- $target is not on $chan"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to ban users via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !ban <nick> <reason>"} } return 0 } proc pVoiceUnban {nick uhost handle chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] == 1} { if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[botisop $chan]} { putserv "MODE $chan -b [join $txt]" } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to unban hosts via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !unban <host>"} } return 0 } proc pVoiceMode {nick uhost handle chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] == 1} { if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[botisop $chan]} { switch -- [string tolower [join $txt]] { on {putserv "MODE $chan +mi"} off {putserv "MODE $chan -mi"} default {putserv "NOTICE $nick :-error- single text argument can only be on or off"} } } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set modes via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !mode <on||off>"} } return 0 } proc pVoiceTopic {nick uhost handle chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] >= 1} { if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[botisop $chan]} { putserv "TOPIC $chan :[join $text] (requested by $nick)" } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set a topic via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !topic <topic>"} } return 0 } # eof
Code: Select all
# set here the space delimited string of channel(s) that the script is active in
set vVoiceChans "#eggTCL"
# set here the notice to send to users that are voiced in the above preconfigured channel(s)
set vVoiceMessage "welcome to voice control script - you can use !ban, !kick, !unban, !topic, !mode, !voice"
bind mode - *+v* pVoiceNotice
bind pub - !kick pVoiceKick
bind pub - !ban pVoiceBan
bind pub - !unban pVoiceUnban
bind pub - !mode pVoiceMode
bind pub - !topic pVoiceTopic
bind pub - !voice pVoiceVoice
set vVoiceVersion v2.0
proc pVoiceNotice {nick uhost hand chan mc target} {
global vVoiceChans vVoiceMessage
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
putserv "NOTICE $target :$vVoiceMessage"
}
return 0
}
proc pVoiceKick {nick uhost hand chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
switch -- [llength $txt] {
0 {
putserv "NOTICE $nick :-error- correct syntax is !kick <nick> ?reason?"
return 0
}
1 {set target [lindex $txt 0]}
default {
set target [lindex $txt 0]
set reason [join [lrange $txt 1 end]]
}
}
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[onchan $target $chan]} {
if {![validuser [nick2hand $target $chan]]} {
if {[botisop $chan]} {
if {[info exists reason]} {
putserv "KICK $chan $target :$reason *- requested by $nick -*)"
} else {putserv "KICK $chan $target :*- requested by $nick -*"}
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"}
} else {putserv "NOTICE $nick :-error- $target is not on $chan"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to kick users via this script"}
}
return 0
}
proc pVoiceBan {nick uhost hand chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
switch -- [llength $txt] {
0 {
putserv "NOTICE $nick :-error- correct syntax is !ban <nick> ?reason?"
return 0
}
1 {
set target [lindex $txt 0]
}
default {
set target [lindex $txt 0]
set reason [join [lrange $txt 1 end]]
}
}
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[onchan $target $chan]} {
if {![validuser [nick2hand $target $chan]]} {
if {[botisop $chan]} {
scan [getchanhost $target $chan] {%[^@]@%s} user host
putserv "MODE $chan -o+b $target $host"
if {[info exists reason]} {
putserv "KICK $chan $target :$reason *- requested by $nick -*"
} else {putserv "KICK $chan $target :*- requested by $nick -*"}
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"}
} else {putserv "NOTICE $nick :-error- $target is not on $chan"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to ban users via this script"}
}
return 0
}
proc pVoiceUnban {nick uhost handle chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] == 1} {
set host [lindex $txt 0]
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[botisop $chan]} {
putserv "MODE $chan -b $host"
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to unban hosts via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !unban <host>"}
}
return 0
}
proc pVoiceMode {nick uhost handle chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] == 1} {
set mode [lindex $txt 0]
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[botisop $chan]} {
switch -- [string tolower $mode] {
on {putserv "MODE $chan +mi"}
off {putserv "MODE $chan -mi"}
default {putserv "NOTICE $nick :-error- single text argument can only be on or off"}
}
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set modes via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !mode <on||off>"}
}
return 0
}
proc pVoiceTopic {nick uhost handle chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] >= 1} {
set topic [join [lrange $txt 0 end]]
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[botisop $chan]} {
putserv "TOPIC $chan :$topic *- requested by $nick -*"
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set a topic via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !topic <topic>"}
}
return 0
}
proc pVoiceVoice {nick uhost handle chan text} {
global vVoiceChans
if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} {
set txt [split [string trim $text]]
if {[llength $txt] == 1} {
set target [lindex $txt 0]
if {([isvoice $nick $chan]) || ([isop $nick $chan])} {
if {[onchan $target $chan]} {
if {[botisop $chan]} {
switch -- [isvoice $target $chan] {
0 {putserv "MODE $chan +v $target"}
1 {putserv "MODE $chan -v $target"}
}
} else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"}
} else {putserv "NOTICE $nick :-error- $target is not on $chan"}
} else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to voice/devoice users via this script"}
} else {putserv "NOTICE $nick :-error- correct syntax is !voice <nick>"}
}
return 0
}
# eof
thanks for having solved my problem, I thank you so much. I found an error with the !voice when repeating the same command on the nick voice running the opposite then I set out as follows:arfer wrote:There wasn't any voice/devoice command in your original post and neither was it clear from the coding style if you wished to permit kick/ban without a reason.
Nonetheless, here is a revised script which will do what you ask. The !voice <target> command is a toggle. If the taget is already voiced they will be devoiced, conversely if they are not already voiced they will be voiced.
I'm beginning to think this is never ending.
[/code]Code: Select all
# set here the space delimited string of channel(s) that the script is active in set vVoiceChans "#eggTCL" # set here the notice to send to users that are voiced in the above preconfigured channel(s) set vVoiceMessage "welcome to voice control script - you can use !ban, !kick, !unban, !topic, !mode, !voice" bind mode - *+v* pVoiceNotice bind pub - !kick pVoiceKick bind pub - !ban pVoiceBan bind pub - !unban pVoiceUnban bind pub - !mode pVoiceMode bind pub - !topic pVoiceTopic bind pub - !voice pVoiceVoice set vVoiceVersion v2.0 proc pVoiceNotice {nick uhost hand chan mc target} { global vVoiceChans vVoiceMessage if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { putserv "NOTICE $target :$vVoiceMessage" } return 0 } proc pVoiceKick {nick uhost hand chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] switch -- [llength $txt] { 0 { putserv "NOTICE $nick :-error- correct syntax is !kick <nick> ?reason?" return 0 } 1 {set target [lindex $txt 0]} default { set target [lindex $txt 0] set reason [join [lrange $txt 1 end]] } } if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[onchan $target $chan]} { if {![validuser [nick2hand $target $chan]]} { if {[botisop $chan]} { if {[info exists reason]} { putserv "KICK $chan $target :$reason *- requested by $nick -*)" } else {putserv "KICK $chan $target :*- requested by $nick -*"} } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"} } else {putserv "NOTICE $nick :-error- $target is not on $chan"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to kick users via this script"} } return 0 } proc pVoiceBan {nick uhost hand chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] switch -- [llength $txt] { 0 { putserv "NOTICE $nick :-error- correct syntax is !ban <nick> ?reason?" return 0 } 1 { set target [lindex $txt 0] } default { set target [lindex $txt 0] set reason [join [lrange $txt 1 end]] } } if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[onchan $target $chan]} { if {![validuser [nick2hand $target $chan]]} { if {[botisop $chan]} { scan [getchanhost $target $chan] {%[^@]@%s} user host putserv "MODE $chan -o+b $target $host" if {[info exists reason]} { putserv "KICK $chan $target :$reason *- requested by $nick -*" } else {putserv "KICK $chan $target :*- requested by $nick -*"} } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- $target has a valid bot user record for $chan"} } else {putserv "NOTICE $nick :-error- $target is not on $chan"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to ban users via this script"} } return 0 } proc pVoiceUnban {nick uhost handle chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] == 1} { set host [lindex $txt 0] if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[botisop $chan]} { putserv "MODE $chan -b $host" } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to unban hosts via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !unban <host>"} } return 0 } proc pVoiceMode {nick uhost handle chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] == 1} { set mode [lindex $txt 0] if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[botisop $chan]} { switch -- [string tolower $mode] { on {putserv "MODE $chan +mi"} off {putserv "MODE $chan -mi"} default {putserv "NOTICE $nick :-error- single text argument can only be on or off"} } } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set modes via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !mode <on||off>"} } return 0 } proc pVoiceTopic {nick uhost handle chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] >= 1} { set topic [join [lrange $txt 0 end]] if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[botisop $chan]} { putserv "TOPIC $chan :$topic *- requested by $nick -*" } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to set a topic via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !topic <topic>"} } return 0 } proc pVoiceVoice {nick uhost handle chan text} { global vVoiceChans if {[lsearch -exact [split [string tolower $vVoiceChans]] [string tolower $chan]] != -1} { set txt [split [string trim $text]] if {[llength $txt] == 1} { set target [lindex $txt 0] if {([isvoice $nick $chan]) || ([isop $nick $chan])} { if {[onchan $target $chan]} { if {[botisop $chan]} { switch -- [isvoice $target $chan] { 0 {putserv "MODE $chan +v $target"} 1 {putserv "MODE $chan -v $target"} } } else {putserv "NOTICE $nick :-error- I need to be op'd in $chan to do that"} } else {putserv "NOTICE $nick :-error- $target is not on $chan"} } else {putserv "NOTICE $nick :-error- you need to be at least a channel voice in $chan to voice/devoice users via this script"} } else {putserv "NOTICE $nick :-error- correct syntax is !voice <nick>"} } return 0 } # eof
Code: Select all
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # #
# avl (autovoicelist) - Script v1.0 by stylus740 #
# # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
###############################################################################
# History: #
# 1.0 Erstes Release #
###############################################################################
##
# verwaltet eine Liste von Nicks, die im Channel autovoice erhalten
##
# In welchen Channels soll das Script aktiv sein?
# Die Definition erfolgt durch Setzen von +avl in der Partyline im Bot
#
# .chanset #channel +avl
# Definition des Datenfiles für berechtigte User
set avl_ni(datafile) "scripts/avl.dat"
###############################################################################
# Mögliche Befehle in der Partyline: #
# #
# .chanset #chan +avl Aktivierung des scripts in Channel #chan #
# .chanset #chan -avl Deaktivierung des scripts in Channel #chan #
# .avlhelp Hilfen zur Bedienung #
# .addvoice nick User zur Liste hinzufügen #
# .delvoice nick User von Liste löschen #
# .listvoice Einträge anzeigen #
###############################################################################
### Ab hier nur editieren, wenn man genau weiß, was man tut. Beginn des Codes ###
setudef flag avl ;# Zur Aktivierung der userdefined flags
set avl_ni(version) v1.0 ;# Variable für Version setzten
bind dcc n|n addvoice add_users ;# User hinzufügen
bind dcc n|n delvoice del_users ;# User hinzufügen
bind dcc n|n listvoice list_users ;# User anzeigen
bind dcc n|n avlhelp help_users ;# Hilfe anzeigen
bind msg n|n addvoice m_add_users ;# User hinzufügen
bind msg n|n delvoice m_del_users ;# User hinzufügen
bind msg n|n listvoice m_list_users ;# User anzeigen
bind msg n|n avlhelp m_help_users ;# Hilfe anzeigen
bind join - * join:avl_check
bind nick - * nick:avl_check
proc help_users {handle idx args} {
putlog "avl ermöglicht es Usern, die von einer berechtigten Person in einer Liste gespeichert sind"
putlog "auto-voice durch den Bot erteilen zu lassen. (Nützlich in Support Channels, wo oft User nicht"
putlog "registriert sind."
putlog "Die Steuerung von avl erfolgt über die Partyline mit den folgenden Befehlen:"
putlog " "
putlog ".addvoice <nick> <chan> Nick mit Channel hinzufügen oder ändern"
putlog ".delvoice <nick> <chan> Den angegebenen Nick löschen"
putlog ".listvoice Sämtliche berechtigten User-Einträge anzeigen"
putlog ".avlhelp Diese Hilfemeldung anzeigen"
}
proc m_help_users {nick host hand args} {
puthelp "PRIVMSG $nick :avl ermöglicht es Usern, die von einer berechtigten Person in einer Liste gespeichert sind"
puthelp "PRIVMSG $nick :auto-voice durch den Bot erteilen zu lassen. (Nützlich in Support Channels, wo oft User nicht"
puthelp "PRIVMSG $nick :registriert sind."
puthelp "PRIVMSG $nick :Die Steuerung von avl erfolgt über ein Query mit dem Bot mit den folgenden Befehlen:"
puthelp "PRIVMSG $nick : "
puthelp "PRIVMSG $nick :/msg <bot> addvoice <nick> <chan> Nick mit Channel hinzufügen oder ändern"
puthelp "PRIVMSG $nick :/msg <bot> delvoice <nick> <chan> Den angegebenen Nick löschen"
puthelp "PRIVMSG $nick :/msg <bot> listvoice Sämtliche berechtigten User-Einträge anzeigen"
puthelp "PRIVMSG $nick :/msg <bot> avlhelp Diese Hilfemeldung anzeigen"
}
proc init_users {} {
global avl_nick avl_ni ;# Datenstrukturen public definieren
if {[file exists $avl_ni(datafile)]} { ;# Falls File vorhanden
putlog "Laden Userdaten aus $avl_ni(datafile)" ;# Lademeldung
set in [open $avl_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 inick [lindex $vline 0] ;# Nick extrahieren
set ichan [lrange $vline 1 end] ;# Channel extrahieren
set ientry "$inick&$ichan" ;# Kombination Nick&Chan bauen
set avl_nick($ientry) $ientry ;# Array Datenfeld belegen
} ;# End while
close $in ;# Datei schließen
} ;# End If (dataexist)
} ;# End Procedure
init_users
proc list_users {handle idx args} {
global avl_nick avl_ni ;# Datenstrukturen public definieren
if {[info exists avl_nick]} { ;# Falls Felder definiert sind
putlog "Eingetragene Nick für avl:" ;# Überschrift anzeigen
foreach search [array names avl_nick] { ;# Für jeden Eintrag
if {$search != 0} { ;# wenn kein leerer Eintrag
set acmd [split $search "&"] ;# Eintrag bei "&" aufsplitten
set inick [lindex $acmd 0] ;# erstes Argument ist Nick
set inick [form $inick] ;# Nick formatieren
set ichan [lrange $acmd 1 end] ;# Der gesamte Rest ist der Channel
set ichan [form $ichan] ;# Chan formatieren
putlog "$inick $ichan" ;# Zeile anzeigen
} ;# End if (search)
} ;# End foreach
} else { ;# Falls keine Struktur vorhanden
putlog "Keine Daten gespeichert" ;# Fehler anzeigen
} ;# End if
} ;# End Procedure
proc add_users {handle idx args} {
global avl_nick avl_ni ;# Datenstrukturen public definieren
set acmd [lindex $args 0] ;# Befehlszeile extrahieren
set inick [lindex $acmd 0] ;# erstes Argument ist Nick
set inick [form $inick] ;# Nick formatieren
set ichan [lrange $acmd 1 end] ;# Der gesamte Rest ist der Channel
set ichan [form $ichan] ;# Chan formatieren
set ientry "$inick&$ichan" ;# Kombination Nick&Chan bauen
set avl_nick($ientry) $ientry ;# Array Datenfeld (neu) belegen
writefile ;# Datei schreiben
putlog "User $inick mit Chan $ichan in $avl_ni(datafile) hinzugefügt"
if {[onchan $inick $ichan]} {
pushmode $ichan +v $inick ;# direkt +v setzen
}
} ;# End Procedure
proc del_users {handle idx args} {
global avl_nick avl_ni ;# Datenstrukturen public definieren
set acmd [lindex $args 0] ;# Befehlszeile extrahieren
set inick [lindex $acmd 0] ;# erstes Argument ist Nick
set inick [form $inick] ;# Nick formatieren
set ichan [lrange $acmd 1 end] ;# Der gesamte Rest ist der Channel
set ichan [form $ichan] ;# Chan formatieren
set ientry "$inick&$ichan" ;# Eintrag nick&chan montieren
if {([info exists avl_nick($ientry)])} { ;# wenn der Eintrag existiert
unset avl_nick($ientry) ;# Array Datenfeld freigeben
writefile
putlog "Eintrag $ientry aus $avl_ni(datafile) gelöscht" ;# Löschmeldung
} else { ;# Falls Nick nicht vorhanden
putlog "Eintrag $ientry ist nicht gespeichert!" ;# Infomeldung
} ;# End if (info)
if {[onchan $inick $ichan]} {
pushmode $ichan -v $inick ;# direkt -v setzen
}
} ;# End Procedure
proc m_list_users {nick host hand args} {
global avl_nick avl_ni ;# Datenstrukturen public definieren
if {[info exists avl_nick]} { ;# Falls Felder definiert sind
puthelp "PRIVMSG $nick :Eingetragene Nick für avl:" ;# Überschrift anzeigen
foreach search [array names avl_nick] { ;# Für jeden Eintrag
if {$search != 0} { ;# wenn kein leerer Eintrag
set acmd [split $search "&"] ;# Eintrag bei "&" aufsplitten
set inick [lindex $acmd 0] ;# erstes Argument ist Nick
set inick [form $inick] ;# Nick formatieren
set ichan [lrange $acmd 1 end] ;# Der gesamte Rest ist der Channel
set ichan [form $ichan] ;# Chan formatieren
puthelp "PRIVMSG $nick :$inick $ichan" ;# Zeile anzeigen
} ;# End if (search)
} ;# End foreach
} else { ;# Falls keine Struktur vorhanden
puthelp "PRIVMSG $nick :Keine Daten gespeichert" ;# Fehler anzeigen
} ;# End if
} ;# End Procedure
proc m_add_users {nick host hand args} {
global avl_nick avl_ni ;# Datenstrukturen public definieren
set acmd [lindex $args 0] ;# Befehlszeile extrahieren
set inick [lindex $acmd 0] ;# erstes Argument ist Nick
set inick [form $inick] ;# Nick formatieren
set ichan [lrange $acmd 1 end] ;# Der gesamte Rest ist der Channel
set ichan [form $ichan] ;# Chan formatieren
set ientry "$inick&$ichan" ;# Kombination Nick&Chan bauen
set avl_nick($ientry) $ientry ;# Array Datenfeld (neu) belegen
writefile ;# Datei schreiben
puthelp "PRIVMSG $nick :User $inick mit Chan $ichan in $avl_ni(datafile) hinzugefügt"
if {[onchan $inick $ichan]} {
pushmode $ichan +v $inick ;# direkt +v setzen
}
} ;# End Procedure
proc m_del_users {nick host hand args} {
global avl_nick avl_ni ;# Datenstrukturen public definieren
set acmd [lindex $args 0] ;# Befehlszeile extrahieren
set inick [lindex $acmd 0] ;# erstes Argument ist Nick
set inick [form $inick] ;# Nick formatieren
set ichan [lrange $acmd 1 end] ;# Der gesamte Rest ist der Channel
set ichan [form $ichan] ;# Chan formatieren
set ientry "$inick&$ichan" ;# Eintrag nick&chan montieren
if {([info exists avl_nick($ientry)])} { ;# wenn der Eintrag existiert
unset avl_nick($ientry) ;# Array Datenfeld freigeben
writefile
puthelp "PRIVMSG $nick :Eintrag $ientry aus $avl_ni(datafile) gelöscht" ;# Löschmeldung
} else { ;# Falls Nick nicht vorhanden
puthelp "PRIVMSG $nick :Eintrag $ientry ist nicht gespeichert!" ;# Infomeldung
} ;# End if (info)
if {[onchan $inick $ichan]} {
pushmode $ichan +v $inick ;# direkt -v setzen
}
} ;# End Procedure
### Bei einem Join wird dann Voice gegeben, wenn der Nick im Datenfile steht
proc join:avl_check {nick uhost handle chan} {
global botnick avl_nick
if {![avl:active $chan]} { return 0 } ;# falscher Channel: nix machen
set chan [string tolower $chan] ;# Channel in Kleinschreibung
if ([isop $botnick $chan]) { ;# Wenn Bot im Channel Op hat
foreach search [array names avl_nick] { ;# Liste aller Einträge durchlaufen
if {$search != 0} { ;# wenn kein leerer Eintrag
set ientry [string tolower $avl_nick($search)] ;# Eintrag (nick&#chan) extrahieren
set parts [split $ientry "&"]
set inick [lindex $parts 0] ;# Nick extrahieren
set ichan [lindex $parts 1] ;# Chan extrahieren
if {($nick == $inick) && ($chan == $ichan)} {
pushmode $chan +v $nick ;# +v setzen
}
} ;# end if search
} ;# end for eache
} else { ;# bot hat gar kein op
putlog "Habe kein op op und hole es mir neu" ;# Meldung "kein op"
putserv "chanserv op $chan $botnick"
} ;# end if (botisop)
} ;# end procedure
proc nick:avl_check {nick uhost handle chan newnick} {
global botnick avl_nick
if {![avl:active $chan]} { return 0 } ;# falscher Channel: nix machen
set chan [string tolower $chan] ;# Channel in Kleinschreibung
if ([isop $botnick $chan]) { ;# Wenn Bot im Channel Op hat
foreach search [array names avl_nick] { ;# Liste aller Einträge durchlaufen
if {$search != 0} { ;# wenn kein leerer Eintrag
set ientry [string tolower $avl_nick($search)] ;# Eintrag (nick&#chan) extrahieren
set parts [split $ientry "&"]
set inick [lindex $parts 0] ;# Nick extrahieren
set ichan [lindex $parts 1] ;# Chan extrahieren
if {($nick == $inick) && ($chan == $ichan)} {
pushmode $chan +v $newnick ;# +v setzen
}
} ;# end if search
} ;# end foreach
} else { ;# bot hat gar kein op
putlog "Habe kein op op und hole es mir neu" ;# Meldung "kein op"
putserv "chanserv op $chan $botnick"
} ;# end if (botisop)
} ;# end procedure
proc form {formtext} { ;# Formatierung String
set t [string trimleft $formtext] ;# führende Leerzeichen entfernen
set t [string trimright $t] ;# folgende Leerzeichen entfernen
return $t ;# formatierten String zurückliefern
}
proc writefile {} {
global avl_nick avl_ni
set out [open $avl_ni(datafile) w] ;# Datenfile im w modus öffnen (überschreiben)
foreach search [array names avl_nick] { ;# durchlaufen der Daten arrays
if {$search != 0} { ;# wenn keine leere Zeile
set parts [split $search "&"] ;# Eintrag bei "&" aufsplitten
set inick [lindex $parts 0] ;# Nick extrahieren
set ichan [lindex $parts 1] ;# Channel extrahieren
set output "$inick $ichan" ;# Output montieren
puts $out $output ;# Zeile schreiben
} ;# End if (search)
} ;# End Foreach
close $out ;# Datei schließen
} ;# End procedure
proc avl:active {chan} {
foreach setting [channel info $chan] { ;# "channel info" ist ein TCL Befehl!
if {[regexp -- {^[\+-]} $setting]} {
if {$setting == "+avl"} { return 1 }
}
}
return 0
}
putlog "avl (autovoicelist) von stylus740 geladen. (Stand 12.02.05)"
putlog "Eingabe von \.avlhelp bzw. \/msg $botnick avlhelp zeigt Bedienungshinweise an"
Code: Select all
Code: Select all
Code: Select all
tnx for your helparfer wrote:As I already explained, !voice <target> is a toggle command
If <target> is already voiced, then the command will devoice <target>
If <target> is not already voiced, then the command will voice <target>
Toggle in this context means something that is figuratively switched on/off. Hence, it is not a fault. It is intentional.