Add Chanban/chanban.tcl
This commit is contained in:
@@ -0,0 +1,526 @@
|
||||
# ------------------
|
||||
# Channel Management
|
||||
# ------------------
|
||||
namespace eval cmgmt {
|
||||
# -------------
|
||||
# Configuration
|
||||
# -------------
|
||||
# trigger to be used
|
||||
variable trigger "!"
|
||||
|
||||
# Ban reason
|
||||
variable banReason "User has been banned from the channel."
|
||||
|
||||
# Temporary ban reason
|
||||
variable tBanReason "User has been temporarily banned from the channel."
|
||||
|
||||
# Kick reason
|
||||
variable kickReason "Your behaviour is not conducive to the desired environment."
|
||||
|
||||
# Revenge kick
|
||||
variable revengeKick "Very funny... NOT"
|
||||
|
||||
# Temporary ban duration, in minutes
|
||||
variable tBanDuration "30"
|
||||
|
||||
# Set the banmask to use in banning the user
|
||||
# Available types are:
|
||||
# 0 *!user@host
|
||||
# 1 *!*user@host
|
||||
# 2 *!*@host
|
||||
# 3 *!*user@*.host
|
||||
# 4 *!*@*.host
|
||||
# 5 nick!user@host
|
||||
# 6 nick!*user@host
|
||||
# 7 nick!*@host
|
||||
# 8 nick!*user@*.host
|
||||
# 9 nick!*@*.host
|
||||
variable banMask "2"
|
||||
|
||||
# -----
|
||||
# Binds
|
||||
# -----
|
||||
### Public
|
||||
bind pub * ${::cmgmt::trigger}ban ::cmgmt::ban_pub
|
||||
bind pub * ${::cmgmt::trigger}tban ::cmgmt::tban_pub
|
||||
bind pub * ${::cmgmt::trigger}kick ::cmgmt::kick_pub
|
||||
bind pub * ${::cmgmt::trigger}unban ::cmgmt::unban_pub
|
||||
bind pub * ${::cmgmt::trigger}banlist ::cmgmt::banlist_pub
|
||||
bind pub * ${::cmgmt::trigger}opcmds ::cmgmt::opcmds_pub
|
||||
|
||||
### Private
|
||||
bind msg * ban ::cmgmt::ban_msg
|
||||
bind msg * tban ::cmgmt::tban_msg
|
||||
bind msg * kick ::cmgmt::kick_msg
|
||||
bind msg * unban ::cmgmt::unban_msg
|
||||
bind msg * banlist ::cmgmt::banlist_msg
|
||||
bind msg * opcmds ::cmgmt::opcmds_msg
|
||||
# --------------------
|
||||
# End of configuration
|
||||
# --------------------
|
||||
|
||||
# ----------
|
||||
# DON'T TOUCH ANYTHING BELOW UNLESS YOU KNOW WHAT YOU ARE DOING
|
||||
#
|
||||
# If you touch the code below and then complain the script "suddenly stopped working" I'll touch you at night.
|
||||
# ----------
|
||||
|
||||
# ------------
|
||||
# Public procs
|
||||
# ------------
|
||||
### Ban
|
||||
proc ban_pub {nick uhost hand chan text} {
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "NOTICE $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set target [lindex [split $text] 0]
|
||||
|
||||
if {$target eq ""} {
|
||||
putserv "PRIVMSG $chan :ERROR! Syntax ${::cmgmt::trigger}ban <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![onchan $target $chan]} {
|
||||
putserv "PRIVMSG $chan :ERROR! $target is not on ${chan}."
|
||||
return 0
|
||||
}
|
||||
|
||||
if {$target eq $::botnick} {
|
||||
putkick $chan $nick $::cmgmt::revengeKick
|
||||
return 0
|
||||
}
|
||||
|
||||
set bhost [string trim [getchanhost $target $chan] ~]
|
||||
|
||||
if {[matchstr "uid*" $bhost] || [matchstr "sid*" $bhost]} {
|
||||
set banmask *!*$bhost
|
||||
} else {
|
||||
set banmask [maskhost ${target}![getchanhost $target $chan] $::cmgmt::banMask]
|
||||
}
|
||||
|
||||
newchanban $chan $banmask $nick $::cmgmt::banReason 0
|
||||
pushmode $chan +b $banmask
|
||||
putkick $chan $target $::cmgmt::banReason
|
||||
putserv "PRIVMSG $chan :$banmask added to ${chan}'s ban list."
|
||||
return 0
|
||||
}
|
||||
|
||||
### Tban
|
||||
proc tban_pub {nick uhost hand chan text} {
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "NOTICE $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set target [lindex [split $text] 0]
|
||||
|
||||
if {$target eq ""} {
|
||||
putserv "PRIVMSG $chan :ERROR! Syntax ${::cmgmt::trigger}tban <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![onchan $target $chan]} {
|
||||
putserv "PRIVMSG $chan :ERROR! $target is not on ${chan}."
|
||||
return 0
|
||||
}
|
||||
|
||||
if {$target eq $::botnick} {
|
||||
putkick $chan $nick $::cmgmt::revengeKick
|
||||
return 0
|
||||
}
|
||||
|
||||
set bhost [string trim [getchanhost $target $chan] ~]
|
||||
|
||||
if {[matchstr "uid*" $bhost] || [matchstr "sid*" $bhost]} {
|
||||
set banmask *!*$bhost
|
||||
} else {
|
||||
set banmask [maskhost ${target}![getchanhost $target $chan] $::cmgmt::banMask]
|
||||
}
|
||||
|
||||
newchanban $chan $banmask $nick $::cmgmt::tBanReason $::cmgmt::tBanDuration
|
||||
pushmode $chan +b $banmask
|
||||
putkick $chan $target $::cmgmt::tBanReason
|
||||
putserv "PRIVMSG $chan :$banmask temporarily added to ${chan}'s ban list."
|
||||
return 0
|
||||
}
|
||||
|
||||
### Kick
|
||||
proc kick_pub {nick uhost hand chan text} {
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "NOTICE $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set target [lindex [split $text] 0]
|
||||
|
||||
if {$target eq ""} {
|
||||
putserv "PRIVMSG $chan :ERROR! Syntax ${::cmgmt::trigger}kick <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![onchan $target $chan]} {
|
||||
putserv "PRIVMSG $chan :ERROR! $target is not on ${chan}."
|
||||
return 0
|
||||
}
|
||||
|
||||
if {$target eq $::botnick} {
|
||||
putkick $chan $nick $::cmgmt::revengeKick
|
||||
return 0
|
||||
}
|
||||
|
||||
putkick $chan $target $::cmgmt::kickReason
|
||||
return 0
|
||||
}
|
||||
|
||||
### Unban
|
||||
proc unban_pub {nick uhost hand chan text} {
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "NOTICE $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set banmask [lindex [split $text] 0]
|
||||
|
||||
if {$banmask eq ""} {
|
||||
putserv "PRIVMSG $chan :ERROR! Syntax: ${::cmgmt::trigger}unban <mask>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![isban $banmask $chan]} {
|
||||
putserv "PRIVMSG $chan :ERROR! $banmask doesn't exist on ${chan}'s ban list"
|
||||
return 0
|
||||
}
|
||||
|
||||
killchanban $chan $banmask
|
||||
pushmode $chan -b $banmask
|
||||
putserv "PRIVMSG $chan :$banmask removed from ${chan}'s ban list."
|
||||
return 0
|
||||
}
|
||||
|
||||
### Banlist
|
||||
proc banlist_pub {nick uhost hand chan text} {
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "NOTICE $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set cbans [banlist $chan]
|
||||
if {$cbans eq ""} {
|
||||
putserv "PRIVMSG $chan :ERROR! ${chan}'s ban list is empty."
|
||||
return 0
|
||||
}
|
||||
|
||||
set filename [string trim "$chan" #]_banlist.txt
|
||||
set bancount [llength $cbans]
|
||||
|
||||
set blist [open $filename "w"]
|
||||
set i 1
|
||||
puts $blist "-= Start of ${chan}'s ban list. $bancount bans displayed."
|
||||
puts $blist ""
|
||||
|
||||
foreach botban $cbans {
|
||||
set banmask [lindex $botban 0]
|
||||
set tstamp [lindex $botban 3]
|
||||
set date [clock format $tstamp -format "%d/%m/%Y - %H:%M:%S"]
|
||||
set creator [lindex $botban end]
|
||||
puts $blist "\[${i}\] Banmask: $banmask :: Added by: $creator :: Date: $date"
|
||||
puts $blist ""
|
||||
incr i
|
||||
}
|
||||
|
||||
puts $blist "-= End of ${chan}'s ban list. =-"
|
||||
puts $blist ""
|
||||
puts $blist "*** To remove a ban, type: ${::cmgmt::trigger}unban <banmask>"
|
||||
close $blist
|
||||
|
||||
if {[catch {
|
||||
set result [exec cat $filename | curl -s -F file=@- http://hotpaste.0bin.xyz/]
|
||||
} err]} {
|
||||
putserv "PRIVMSG $chan :ERROR! Failed to upload ban list: \($err\)."
|
||||
file delete $filename
|
||||
return 0
|
||||
}
|
||||
|
||||
putserv "PRIVMSG $chan :Ban list for $chan can be checked here: $result"
|
||||
file delete $filename
|
||||
return 0
|
||||
}
|
||||
|
||||
### OPcmds
|
||||
proc opcmds_pub {nick uhost hand chan text} {
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "NOTICE $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
putserv "PRIVMSG $chan :Available commands ${::cmgmt::trigger}ban, ${::cmgmt::trigger}tban, ${::cmgmt::trigger}kick, ${::cmgmt::trigger}unban, ${::cmgmt::trigger}banlist"
|
||||
return 0
|
||||
}
|
||||
|
||||
# -------------
|
||||
# Private procs
|
||||
# -------------
|
||||
### Ban
|
||||
proc ban_msg {nick uhost hand text} {
|
||||
set chan [lindex [split $text] 0]
|
||||
|
||||
if {![matchstr "#*" $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax: ban <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![validchan $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! I'm not on ${chan}!"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set target [lindex [split $text] 1]
|
||||
|
||||
if {$target eq ""} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax ban <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![onchan $target $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! $target is not on ${chan}."
|
||||
return 0
|
||||
}
|
||||
|
||||
if {$target eq $::botnick} {
|
||||
putkick $chan $nick $::cmgmt::revengeKick
|
||||
return 0
|
||||
}
|
||||
|
||||
set bhost [string trim [getchanhost $target $chan] ~]
|
||||
|
||||
if {[matchstr "uid*" $bhost] || [matchstr "sid*" $bhost]} {
|
||||
set banmask *!*$bhost
|
||||
} else {
|
||||
set banmask [maskhost ${target}![getchanhost $target $chan] $::cmgmt::banMask]
|
||||
}
|
||||
|
||||
newchanban $chan $banmask $nick $::cmgmt::banReason 0
|
||||
pushmode $chan +b $banmask
|
||||
putkick $chan $target $::cmgmt::banReason
|
||||
putserv "PRIVMSG $nick :$banmask added to ${chan}'s ban list."
|
||||
return 0
|
||||
}
|
||||
|
||||
### Tban
|
||||
proc tban_msg {nick uhost hand text} {
|
||||
set chan [lindex [split $text] 0]
|
||||
|
||||
if {![matchstr "#*" $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax: tban <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![validchan $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! I'm not on ${chan}!"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set target [lindex [split $text] 1]
|
||||
|
||||
if {$target eq ""} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax tban <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![onchan $target $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! $target is not on ${chan}."
|
||||
return 0
|
||||
}
|
||||
|
||||
if {$target eq $::botnick} {
|
||||
putkick $chan $nick $::cmgmt::revengeKick
|
||||
return 0
|
||||
}
|
||||
|
||||
set bhost [string trim [getchanhost $target $chan] ~]
|
||||
|
||||
if {[matchstr "uid*" $bhost] || [matchstr "sid*" $bhost]} {
|
||||
set banmask *!*$bhost
|
||||
} else {
|
||||
set banmask [maskhost ${target}![getchanhost $target $chan] $::cmgmt::banMask]
|
||||
}
|
||||
|
||||
newchanban $chan $banmask $nick $::cmgmt::tBanReason $::cmgmt::tBanDuration
|
||||
pushmode $chan +b $banmask
|
||||
putkick $chan $target $::cmgmt::tBanReason
|
||||
putserv "PRIVMSG $nick :$banmask temporarily added to ${chan}'s ban list."
|
||||
return 0
|
||||
}
|
||||
|
||||
### Kick
|
||||
proc kick_msg {nick uhost hand text} {
|
||||
set chan [lindex [split $text] 0]
|
||||
|
||||
if {![matchstr "#*" $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax: tban <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![validchan $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! I'm not on ${chan}!"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set target [lindex [split $text] 1]
|
||||
|
||||
if {$target eq ""} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax kick <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![onchan $target $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! $target is not on ${chan}."
|
||||
return 0
|
||||
}
|
||||
|
||||
if {$target eq $::botnick} {
|
||||
putkick $chan $nick $::cmgmt::revengeKick
|
||||
return 0
|
||||
}
|
||||
putkick $chan $target $::cmgmt::tBanReason
|
||||
return 0
|
||||
}
|
||||
|
||||
### Unban
|
||||
proc unban_msg {nick uhost hand text} {
|
||||
set chan [lindex [split $text] 0]
|
||||
|
||||
if {![matchstr "#*" $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax: unban <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![validchan $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! I'm not on ${chan}!"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set banmask [lindex [split $text] 1]
|
||||
|
||||
if {$banmask eq ""} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax: unban <#chan> <mask>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![isban $banmask $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! $banmask doesn't exist on ${chan}'s ban list"
|
||||
return 0
|
||||
}
|
||||
|
||||
killchanban $chan $banmask
|
||||
pushmode $chan -b $banmask
|
||||
putserv "PRIVMSG $nick :$banmask removed from ${chan}'s ban list."
|
||||
return 0
|
||||
}
|
||||
|
||||
### Banlist
|
||||
proc banlist_msg {nick uhost hand chan text} {
|
||||
set chan [lindex [split $text] 0]
|
||||
|
||||
if {![matchstr "#*" $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax: unban <#chan> <nick>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![validchan $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! I'm not on ${chan}!"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
set cbans [banlist $chan]
|
||||
if {$cbans eq ""} {
|
||||
putserv "PRIVMSG $nick :ERROR! ${chan}'s ban list is empty."
|
||||
return 0
|
||||
}
|
||||
|
||||
set filename [string trim "$chan" #]_banlist.txt
|
||||
set bancount [llength $cbans]
|
||||
|
||||
set blist [open $filename "w"]
|
||||
set i 1
|
||||
puts $blist "-= Start of ${chan}'s ban list. $bancount bans displayed."
|
||||
puts $blist ""
|
||||
|
||||
foreach botban $cbans {
|
||||
set banmask [lindex $botban 0]
|
||||
set tstamp [lindex $botban 3]
|
||||
set date [clock format $tstamp -format "%d/%m/%Y - %H:%M:%S"]
|
||||
set creator [lindex $botban end]
|
||||
puts $blist "\[${i}\] Banmask: $banmask :: Added by: $creator :: Date: $date"
|
||||
puts $blist ""
|
||||
incr i
|
||||
}
|
||||
|
||||
puts $blist "-= End of ${chan}'s ban list. =-"
|
||||
puts $blist ""
|
||||
puts $blist "*** To remove a ban, type: /msg $::botnick unban <banmask>"
|
||||
close $blist
|
||||
|
||||
if {[catch {
|
||||
set result [exec cat $filename | curl -s -F file=@- http://hotpaste.0bin.xyz/]
|
||||
} err]} {
|
||||
putserv "PRIVMSG $nick :ERROR! Failed to upload ban list: \($err\)."
|
||||
file delete $filename
|
||||
return 0
|
||||
}
|
||||
|
||||
putserv "PRIVMSG $nick :Ban list for $chan can be checked here: $result"
|
||||
file delete $filename
|
||||
return 0
|
||||
}
|
||||
|
||||
### Opcmds
|
||||
proc opcmds_msg {nick uhost hand text} {
|
||||
set chan [lindex [split $text] 0]
|
||||
|
||||
if {![matchstr "#*" $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! Syntax: opcmds <#chan>"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![validchan $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! I'm not on ${chan}!"
|
||||
return 0
|
||||
}
|
||||
|
||||
if {![matchattr $hand o|o $chan]} {
|
||||
putserv "PRIVMSG $nick :ERROR! You don't have access, ${nick}."
|
||||
return 0
|
||||
}
|
||||
|
||||
putserv "PRIVMSG $nick :Available commands ban, tban, kick, unban, banlist"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user