<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://forum.eggheads.org/app.php/feed/topic/20951" />

	<title>egghelp/eggheads community</title>
	<subtitle>Discussion of eggdrop bots, shell accounts and tcl scripts.</subtitle>
	<link href="https://forum.eggheads.org/index.php" />
	<updated>2021-07-29T20:30:55-04:00</updated>

	<author><name><![CDATA[egghelp/eggheads community]]></name></author>
	<id>https://forum.eggheads.org/app.php/feed/topic/20951</id>

		<entry>
		<author><name><![CDATA[Gulio]]></name></author>
		<updated>2021-07-29T20:30:55-04:00</updated>

		<published>2021-07-29T20:30:55-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=110146#p110146</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=110146#p110146"/>
		<title type="html"><![CDATA[Hello]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=110146#p110146"><![CDATA[
Spike^^ thx for the new option u added is work great and not errors<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12887">Gulio</a> — Thu Jul 29, 2021 8:30 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[SpiKe^^]]></name></author>
		<updated>2021-07-29T18:54:15-04:00</updated>

		<published>2021-07-29T18:54:15-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=110145#p110145</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=110145#p110145"/>
		<title type="html"><![CDATA[Re: Hello]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=110145#p110145"><![CDATA[
<blockquote class="uncited"><div>is possible to add and 1 options here in this script save host<br><br>set chtarget "#Test"<br><br>set chadmin "#Opers"<br><br>from channel #opers to use those triger command for main chan #Test same command how is for main channel so the staf can kick and ban and from #opers and this command to be used only from staf who stay in chan #opers<br><br><br>will be very usefull and helpfull , thx in advance<br></div></blockquote>Please see the finished release version of this script at <a href="http://forum.egghelp.org/viewtopic.php?p=110144" class="postlink">http://forum.egghelp.org/viewtopic.php?p=110144</a><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7749">SpiKe^^</a> — Thu Jul 29, 2021 6:54 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Gulio]]></name></author>
		<updated>2021-07-05T16:15:31-04:00</updated>

		<published>2021-07-05T16:15:31-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=110045#p110045</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=110045#p110045"/>
		<title type="html"><![CDATA[Hello]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=110045#p110045"><![CDATA[
Spike^^ now i tested the Kick and KB from CS and from my script Mirc and is work saves the kick , this is great , thx a lot again .<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12887">Gulio</a> — Mon Jul 05, 2021 4:15 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[SpiKe^^]]></name></author>
		<updated>2021-07-05T16:03:01-04:00</updated>

		<published>2021-07-05T16:03:01-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=110044#p110044</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=110044#p110044"/>
		<title type="html"><![CDATA[Store host of nicks that quit IRC for a short period]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=110044#p110044"><![CDATA[
Gulio : This version should now save nick/host/handle info from every kick, from this script and all other sources...<br><div class="codebox"><p>Code: </p><pre><code># pkb.tcl version 1.3 by SpiKe^^ (5July2021)# max number of bans/devoice to stack in one mode command (1 or more) #set pkb(maxban) 6# max number of kicks to stack in one kick command (1 or more) #set pkb(maxkick) 3# set default ban/mute times (in minutes) ##   0 = this script doesn't remove bans/mutes #set pkb(kb_bantime) 60set pkb(b_bantime)  5set pkb(m_mutetime) 60# set mask type for bans and mutes ## https://docs.eggheads.org/mainDocs/tcl-commands.html#maskhost-nick-user-host-masktype #set pkb(ban_masktype)  2set pkb(mute_masktype) 4set pkb(mute_maskpre) "~q:"# protected hosts ## set only username bans on these domains (ex. *!uid123457@*) #set pkb(phosts) "*.irccloud.com *.mibbit.com *.kiwiirc.com *.8C39393E.IP"##############bind pub -|- !k pub:kickbind pub -|- .k pub:kickproc pub:kick {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx k  }bind pub -|- !b pub:banbind pub -|- .b pub:banproc pub:ban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx b  }bind pub -|- !m pub:mutebanbind pub -|- .m pub:mutebanproc pub:muteban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx m  }bind pub -|- !ub pub:unbanbind pub -|- .ub pub:unbanproc pub:unban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx ub  }bind pub -|- !um pub:unmutebind pub -|- .um pub:unmuteproc pub:unmute {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx um  }bind pub -|- !kb pub:kickbanbind pub -|- .kb pub:kickbanproc pub:kickban {nk uh hn ch tx {do kb} } {  global pkb storehosts  if {$uh ne "Timer"} {    if {![isop $nk $ch] &amp;&amp; ![ishalfop $nk $ch] &amp;&amp; ![matchattr $hn o|o $ch]} {      return 0    }  }  if {[string match u* $do]} {    set plus "-"    set nickls [split [string trim $tx]]  } else {    set plus "+"    set reason [join [lrange [split $tx "."] 1 end] "."]    if {$reason eq ""} { set reason "Please change your behaviour thank you." }    set nickls [split [string trim [lindex [split $tx "."] 0]]]  }  set seconds 0  if {[string is digit [lindex $nickls end]]} {    if {[string match {[bm]} $do] || ($do eq "kb")} {      set seconds [expr {[lindex $nickls end] * 60}]    }    set nickls [lrange $nickls 0 end-1]  } elseif {$do eq "m"} {  set seconds [expr {$pkb(m_mutetime) * 60}]  } elseif {$do eq "b"} {  set seconds [expr {$pkb(b_bantime) * 60}]  } elseif {$do eq "kb"} { set seconds [expr {$pkb(kb_bantime) * 60}]  }  set masktype $pkb(ban_masktype)  if {[string match *m $do]} {  set masktype $pkb(mute_masktype)  }  foreach nick $nickls {    if {$nick eq ""} { continue }    if {[string match u* $do] &amp;&amp; [string match *!*@* $nick]} {      set bmask $nick      if {($do eq "um") &amp;&amp; ![string match $pkb(mute_maskpre)* $bmask]} {        set bmask $pkb(mute_maskpre)$bmask      }      if {[ischanban $bmask $ch]} {  lappend bmasks $bmask      } elseif {$uh ne "Timer"} {        putserv "NOTICE $nk :$bmask is not a current ban on $ch"      }      continue    }    set aname [string tolower "$nick@$ch"]    if {[onchan $nick $ch]} {      set hand [nick2hand $nick]      if {![string match u* $do]} {        if {[isop $nick $ch] || [ishalfop $nick $ch]} { continue }        if {[matchattr $hand o|o $ch]} { continue }      }      set chost [getchanhost $nick $ch]      if {[string match {*[bm]} $do]} {        set bmask [mask:host $nick $chost $masktype $do]        if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {          putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"          continue        }        lappend bmasks $bmask        if {($do ne "kb") &amp;&amp; ![string match u* $do] &amp;&amp; [isvoice $nick $ch]} {          lappend dvnicks $nick        }      }      if {[string match k* $do]} {  lappend knicks $nick  }    } elseif {[info exists storehosts($aname)] &amp;&amp; ($do ne "k")} {      if {![string match u* $do]} {        if {[matchattr [lindex $storehosts($aname) 2] o|o $ch]} { continue }      }      set chost [lindex $storehosts($aname) 0]      set bmask [mask:host $nick $chost $masktype $do]      if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {        putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"        continue      }      lappend bmasks $bmask    } else {  putserv "NOTICE $nk :$nick is not on channel $ch"  }  }  if {[info exists dvnicks]} {    while {[set len [llength $dvnicks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "v" $pkb(maxban)]        set nicks [join [lrange $dvnicks 0 [expr {$pkb(maxban) - 1}]]]        set dvnicks [lrange $dvnicks $pkb(maxban) end]      } else {        set mode [string repeat "v" $len]        set nicks [join $dvnicks]        set dvnicks ""      }      putquick "MODE $ch -$mode $nicks"    }  }  if {[info exists bmasks]} {    if {$seconds &gt; 0} {      utimer $seconds [list pub:kickban $nk Timer $hn $ch [join $bmasks] ub]    }    while {[set len [llength $bmasks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "b" $pkb(maxban)]        set masks [join [lrange $bmasks 0 [expr {$pkb(maxban) - 1}]]]        set bmasks [lrange $bmasks $pkb(maxban) end]      } else {        set mode [string repeat "b" $len]        set masks [join $bmasks]        set bmasks ""      }      putquick "MODE $ch $plus$mode $masks"    }  }  if {[info exists knicks]} {    while {[set len [llength $knicks]] &gt; 0} {      if {$len &gt; $pkb(maxkick)} {        set nicks [join [lrange $knicks 0 [expr {$pkb(maxkick) - 1}]] ","]        set knicks [lrange $knicks $pkb(maxkick) end]      } else {        set nicks [join $knicks ","]        set knicks ""      }      putserv "KICK $ch $nicks :$reason"    }  }}#### protected hosts codeset pkb(phosts) [split [string trim $pkb(phosts)]]proc mask:host {nick chost masktype do} {  set bmask [maskhost "$nick!$chost" $masktype]  foreach phost $::pkb(phosts) {    if {[string match -nocase $phost $chost]} {      set bmask "*![lindex [split $chost @] 0]@*"      break    }  }  if {[string match *m $do]} { set bmask $::pkb(mute_maskpre)$bmask }  return $bmask}#### stored nicks &amp; uhosts codebind part - * store:hostsbind sign - * store:hostsproc store:hosts {nk uh hn ch msg} {  set aname [string tolower $nk@$ch]  set ::storehosts($aname) [list $uh [expr {[unixtime]+900}] $hn]}bind kick - * store:kickproc store:kick {nk uh hn ch target reason} {  set uhost [getchanhost $target $ch]  set hand [finduser $target!$uhost]  store:hosts $target $uhost $hand $ch pkb.tcl}bind time - * expire:hostsproc expire:hosts {mn hr da mo yr} {  global storehosts  set ut [unixtime]  foreach {aname avalue} [array get storehosts] {    if {$ut &gt;= [lindex $avalue 1]} { unset storehosts($aname) }  }}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7749">SpiKe^^</a> — Mon Jul 05, 2021 4:03 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Gulio]]></name></author>
		<updated>2021-07-04T17:20:32-04:00</updated>

		<published>2021-07-04T17:20:32-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=110043#p110043</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=110043#p110043"/>
		<title type="html"><![CDATA[hi]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=110043#p110043"><![CDATA[
I have another request for store info on kicks from other scripts or cs<br>like bind store kicks if is possible to be add , thx in advance<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12887">Gulio</a> — Sun Jul 04, 2021 5:20 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Gulio]]></name></author>
		<updated>2021-06-20T19:54:14-04:00</updated>

		<published>2021-06-20T19:54:14-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=110008#p110008</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=110008#p110008"/>
		<title type="html"><![CDATA[Hello]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=110008#p110008"><![CDATA[
is possible to add and 1 options here in this script save host<br><br>set chtarget "#Test"<br><br>set chadmin "#Opers"<br><br>from channel #opers to use those triger command for main chan #Test same command how is for main channel so the staf can kick and ban and from #opers and this command to be used only from staf who stay in chan #opers<br><br><br><br>will be very usefull and helpfull , thx in advance<br><div class="codebox"><p>Code: </p><pre><code>set pkb(chtarget) "#Test2"set pkb(chadmin) "#Test3"# max number of bans/devoice to stack in one mode command (1 or more) #set pkb(maxban) 6# max number of kicks to stack in one kick command (1 or more) #set pkb(maxkick) 3# set default ban/mute times (in minutes) ##   0 = this script doesn't remove bans/mutes #set pkb(kb_bantime) 60set pkb(b_bantime)  5set pkb(m_mutetime) 60# set mask type for bans and mutes ## https://docs.eggheads.org/mainDocs/tcl-commands.html#maskhost-nick-user-host-masktype #set pkb(ban_masktype)  2set pkb(mute_masktype) 4set pkb(mute_maskpre) "~q:"# protected hosts ## set only username bans on these domains (ex. *!uid123457@*) #set pkb(phosts) "*.irccloud.com *.mibbit.com *.kiwiirc.com *.8C39393E.IP"##############bind pub -|- !k pub:kickbind pub -|- .k pub:kickproc pub:kick {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx k  }bind pub -|- !b pub:banbind pub -|- .b pub:banproc pub:ban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx b  }bind pub -|- !m pub:mutebanbind pub -|- .m pub:mutebanproc pub:muteban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx m  }bind pub -|- !ub pub:unbanbind pub -|- .ub pub:unbanproc pub:unban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx ub  }bind pub -|- !um pub:unmutebind pub -|- .um pub:unmuteproc pub:unmute {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx um  }bind pub -|- !kb pub:kickbanbind pub -|- .kb pub:kickbanproc pub:kickban {nk uh hn ch tx {do kb} } {global pkb storehostsset ch [string tolower $ch]if {$ch eq $pkb(chtarget) || $ch eq $pkb(chadmin) } {if {![onchan $nk $pkb(chadmin)]} { return }}foreach user $tx {if {![onchan $user $pkb(chtarget)]} {putserv "NOTICE $nk $user is not on channel $pkb(chtarget)"} elseif {[isop $user $pkb(chtarget)]} {putserv "notice $nk :$user is op in $pkb(chtarget) "} else {if {[onchan $user $pkb(chadmin)]} {putserv "NOTICE $nk $user is on channel $pkb(chadmin) dont ban him/her"}}}if {$uh ne "Timer"} {if {![isop $nk $ch] &amp;&amp; ![ishalfop $nk $ch] &amp;&amp; ![matchattr $hn o|o $ch]} {return 0}}if {[string match u* $do]} {set plus "-"set nickls [split [string trim $tx]]} else {set plus "+"set reason [join [lrange [split $tx "."] 1 end] "."]if {$reason eq ""} { set reason "Please change your behaviour thank you." }set nickls [split [string trim [lindex [split $tx "."] 0]]]}set seconds 0if {[string is digit [lindex $nickls end]]} {if {[string match {[bm]} $do] || ($do eq "kb")} {set seconds [expr {[lindex $nickls end] * 60}]}set nickls [lrange $nickls 0 end-1]} elseif {$do eq "m"} {  set seconds [expr {$pkb(m_mutetime) * 60}]} elseif {$do eq "b"} {  set seconds [expr {$pkb(b_bantime) * 60}]} elseif {$do eq "kb"} { set seconds [expr {$pkb(kb_bantime) * 60}]  }set masktype $pkb(ban_masktype)if {[string match *m $do]} {  set masktype $pkb(mute_masktype)  }foreach nick $nickls {if {$nick eq ""} { continue }if {[string match u* $do] &amp;&amp; [string match *!*@* $nick]} {set bmask $nickif {($do eq "um") &amp;&amp; ![string match $pkb(mute_maskpre)* $bmask]} {set bmask $pkb(mute_maskpre)$bmask}if {[ischanban $bmask $ch]} {  lappend bmasks $bmask} elseif {$uh ne "Timer"} {putserv "NOTICE $nk :$bmask is not a current ban on $ch"}continue}set aname [string tolower "$nick@$ch"]if {[onchan $nick $ch]} {set hand [nick2hand $nick]if {![string match u* $do]} {if {[isop $nick $ch] || [ishalfop $nick $ch]} { continue }if {[matchattr $hand o|o $ch]} { continue }}set chost [getchanhost $nick $ch]if {[string match {*[bm]} $do]} {set bmask [mask:host $nick $chost $masktype $do]if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"continue}lappend bmasks $bmaskif {($do ne "kb") &amp;&amp; ![string match u* $do] &amp;&amp; [isvoice $nick $ch]} {lappend dvnicks $nick}}if {[string match k* $do]} {  lappend knicks $nickstore:hosts $nick $chost $hand $ch pkb.tcl}} elseif {[info exists storehosts($aname)] &amp;&amp; ($do ne "k")} {if {![string match u* $do]} {if {[matchattr [lindex $storehosts($aname) 2] o|o $ch]} { continue }}set chost [lindex $storehosts($aname) 0]set bmask [mask:host $nick $chost $masktype $do]if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"continue}lappend bmasks $bmask} else {  putserv "NOTICE $nk :$nick is not on channel $ch"  }}if {[info exists dvnicks]} {while {[set len [llength $dvnicks]] &gt; 0} {if {$len &gt; $pkb(maxban)} {set mode [string repeat "v" $pkb(maxban)]set nicks [join [lrange $dvnicks 0 [expr {$pkb(maxban) - 1}]]]set dvnicks [lrange $dvnicks $pkb(maxban) end]} else {set mode [string repeat "v" $len]set nicks [join $dvnicks]set dvnicks ""}putquick "MODE $ch -$mode $nicks"}}if {[info exists bmasks]} {if {$seconds &gt; 0} {utimer $seconds [list pub:kickban $nk Timer $hn $ch [join $bmasks] ub]}while {[set len [llength $bmasks]] &gt; 0} {if {$len &gt; $pkb(maxban)} {set mode [string repeat "b" $pkb(maxban)]set masks [join [lrange $bmasks 0 [expr {$pkb(maxban) - 1}]]]set bmasks [lrange $bmasks $pkb(maxban) end]} else {set mode [string repeat "b" $len]set masks [join $bmasks]set bmasks ""}putquick "MODE $ch $plus$mode $masks"}}if {[info exists knicks]} {while {[set len [llength $knicks]] &gt; 0} {if {$len &gt; $pkb(maxkick)} {set nicks [join [lrange $knicks 0 [expr {$pkb(maxkick) - 1}]] ","]set knicks [lrange $knicks $pkb(maxkick) end]} else {set nicks [join $knicks ","]set knicks ""}putserv "KICK $ch $nicks :$reason"}}}#### protected hosts codeset pkb(phosts) [split [string trim $pkb(phosts)]]proc mask:host {nick chost masktype do} {set bmask [maskhost "$nick!$chost" $masktype]foreach phost $::pkb(phosts) {if {[string match -nocase $phost $chost]} {set bmask "*![lindex [split $chost @] 0]@*"break}}if {[string match *m $do]} { set bmask $::pkb(mute_maskpre)$bmask }return $bmask}#### stored nicks &amp; uhosts codebind part - * store:hostsbind sign - * store:hostsproc store:hosts {nk uh hn ch msg} {set aname [string tolower $nk@$ch]set ::storehosts($aname) [list $uh [expr {[unixtime]+900}] $hn]}bind time - * expire:hostsproc expire:hosts {mn hr da mo yr} {global storehostsset ut [unixtime]foreach {aname avalue} [array get storehosts] {if {$ut &gt;= [lindex $avalue 1]} { unset storehosts($aname) }}}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12887">Gulio</a> — Sun Jun 20, 2021 7:54 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Gulio]]></name></author>
		<updated>2021-04-24T11:59:04-04:00</updated>

		<published>2021-04-24T11:59:04-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109785#p109785</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109785#p109785"/>
		<title type="html"><![CDATA[Hello]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109785#p109785"><![CDATA[
Spike^^ congratulation  excellent work <br><br>i tested all option ban mute kick kb and is work great as i wanted it<br><br>thx a lot<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12887">Gulio</a> — Sat Apr 24, 2021 11:59 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[SpiKe^^]]></name></author>
		<updated>2021-04-25T19:38:17-04:00</updated>

		<published>2021-04-24T10:59:45-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109783#p109783</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109783#p109783"/>
		<title type="html"><![CDATA[Store host of nicks that quit IRC for a short period]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109783#p109783"><![CDATA[
Try this version with the protected hosts deal...<br><div class="codebox"><p>Code: </p><pre><code># max number of bans/devoice to stack in one mode command (1 or more) #set pkb(maxban) 6# max number of kicks to stack in one kick command (1 or more) #set pkb(maxkick) 3# set default ban/mute times (in minutes) ##   0 = this script doesn't remove bans/mutes #set pkb(kb_bantime) 60set pkb(b_bantime)  5set pkb(m_mutetime) 60# set mask type for bans and mutes ## https://docs.eggheads.org/mainDocs/tcl-commands.html#maskhost-nick-user-host-masktype #set pkb(ban_masktype)  2set pkb(mute_masktype) 4set pkb(mute_maskpre) "~q:"# protected hosts ## set only username bans on these domains (ex. *!uid123457@*) #set pkb(phosts) "*.irccloud.com *.mibbit.com *.kiwiirc.com *.8C39393E.IP"##############bind pub -|- !k pub:kickbind pub -|- .k pub:kickproc pub:kick {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx k  }bind pub -|- !b pub:banbind pub -|- .b pub:banproc pub:ban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx b  }bind pub -|- !m pub:mutebanbind pub -|- .m pub:mutebanproc pub:muteban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx m  }bind pub -|- !ub pub:unbanbind pub -|- .ub pub:unbanproc pub:unban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx ub  }bind pub -|- !um pub:unmutebind pub -|- .um pub:unmuteproc pub:unmute {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx um  }bind pub -|- !kb pub:kickbanbind pub -|- .kb pub:kickbanproc pub:kickban {nk uh hn ch tx {do kb} } {  global pkb storehosts  if {$uh ne "Timer"} {    if {![isop $nk $ch] &amp;&amp; ![ishalfop $nk $ch] &amp;&amp; ![matchattr $hn o|o $ch]} {      return 0    }  }  if {[string match u* $do]} {    set plus "-"    set nickls [split [string trim $tx]]  } else {    set plus "+"    set reason [join [lrange [split $tx "."] 1 end] "."]    if {$reason eq ""} { set reason "Please change your behaviour thank you." }    set nickls [split [string trim [lindex [split $tx "."] 0]]]  }  set seconds 0  if {[string is digit [lindex $nickls end]]} {    if {[string match {[bm]} $do] || ($do eq "kb")} {      set seconds [expr {[lindex $nickls end] * 60}]    }    set nickls [lrange $nickls 0 end-1]  } elseif {$do eq "m"} {  set seconds [expr {$pkb(m_mutetime) * 60}]  } elseif {$do eq "b"} {  set seconds [expr {$pkb(b_bantime) * 60}]  } elseif {$do eq "kb"} { set seconds [expr {$pkb(kb_bantime) * 60}]  }  set masktype $pkb(ban_masktype)  if {[string match *m $do]} {  set masktype $pkb(mute_masktype)  }  foreach nick $nickls {    if {$nick eq ""} { continue }    if {[string match u* $do] &amp;&amp; [string match *!*@* $nick]} {      set bmask $nick      if {($do eq "um") &amp;&amp; ![string match $pkb(mute_maskpre)* $bmask]} {        set bmask $pkb(mute_maskpre)$bmask      }      if {[ischanban $bmask $ch]} {  lappend bmasks $bmask      } elseif {$uh ne "Timer"} {        putserv "NOTICE $nk :$bmask is not a current ban on $ch"      }      continue    }    set aname [string tolower "$nick@$ch"]    if {[onchan $nick $ch]} {      set hand [nick2hand $nick]      if {![string match u* $do]} {        if {[isop $nick $ch] || [ishalfop $nick $ch]} { continue }        if {[matchattr $hand o|o $ch]} { continue }      }      set chost [getchanhost $nick $ch]      if {[string match {*[bm]} $do]} {        set bmask [mask:host $nick $chost $masktype $do]        if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {          putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"          continue        }        lappend bmasks $bmask        if {($do ne "kb") &amp;&amp; ![string match u* $do] &amp;&amp; [isvoice $nick $ch]} {          lappend dvnicks $nick        }      }      if {[string match k* $do]} {  lappend knicks $nick        store:hosts $nick $chost $hand $ch pkb.tcl      }    } elseif {[info exists storehosts($aname)] &amp;&amp; ($do ne "k")} {      if {![string match u* $do]} {        if {[matchattr [lindex $storehosts($aname) 2] o|o $ch]} { continue }      }      set chost [lindex $storehosts($aname) 0]      set bmask [mask:host $nick $chost $masktype $do]      if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {        putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"        continue      }      lappend bmasks $bmask    } else {  putserv "NOTICE $nk :$nick is not on channel $ch"  }  }  if {[info exists dvnicks]} {    while {[set len [llength $dvnicks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "v" $pkb(maxban)]        set nicks [join [lrange $dvnicks 0 [expr {$pkb(maxban) - 1}]]]        set dvnicks [lrange $dvnicks $pkb(maxban) end]      } else {        set mode [string repeat "v" $len]        set nicks [join $dvnicks]        set dvnicks ""      }      putquick "MODE $ch -$mode $nicks"    }  }  if {[info exists bmasks]} {    if {$seconds &gt; 0} {      utimer $seconds [list pub:kickban $nk Timer $hn $ch [join $bmasks] ub]    }    while {[set len [llength $bmasks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "b" $pkb(maxban)]        set masks [join [lrange $bmasks 0 [expr {$pkb(maxban) - 1}]]]        set bmasks [lrange $bmasks $pkb(maxban) end]      } else {        set mode [string repeat "b" $len]        set masks [join $bmasks]        set bmasks ""      }      putquick "MODE $ch $plus$mode $masks"    }  }  if {[info exists knicks]} {    while {[set len [llength $knicks]] &gt; 0} {      if {$len &gt; $pkb(maxkick)} {        set nicks [join [lrange $knicks 0 [expr {$pkb(maxkick) - 1}]] ","]        set knicks [lrange $knicks $pkb(maxkick) end]      } else {        set nicks [join $knicks ","]        set knicks ""      }      putserv "KICK $ch $nicks :$reason"    }  }}#### protected hosts codeset pkb(phosts) [split [string trim $pkb(phosts)]]proc mask:host {nick chost masktype do} {  set bmask [maskhost "$nick!$chost" $masktype]  foreach phost $::pkb(phosts) {    if {[string match -nocase $phost $chost]} {      set bmask "*![lindex [split $chost @] 0]@*"      break    }  }  if {[string match *m $do]} { set bmask $::pkb(mute_maskpre)$bmask }  return $bmask}#### stored nicks &amp; uhosts codebind part - * store:hostsbind sign - * store:hostsproc store:hosts {nk uh hn ch msg} {  set aname [string tolower $nk@$ch]  set ::storehosts($aname) [list $uh [expr {[unixtime]+900}] $hn]}bind time - * expire:hostsproc expire:hosts {mn hr da mo yr} {  global storehosts  set ut [unixtime]  foreach {aname avalue} [array get storehosts] {    if {$ut &gt;= [lindex $avalue 1]} { unset storehosts($aname) }  }}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7749">SpiKe^^</a> — Sat Apr 24, 2021 10:59 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Gulio]]></name></author>
		<updated>2021-04-23T13:59:01-04:00</updated>

		<published>2021-04-23T13:59:01-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109773#p109773</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109773#p109773"/>
		<title type="html"><![CDATA[hello]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109773#p109773"><![CDATA[
Spike^^ now is work good excellent great work thx<br><br>if u have time to set 1 more option <br><br>when is find hostmask *.irccloud.com || *.mibbit.com <br><br>to set ban on ident of cloud *!uid123457@* and for mibbit *!ba1r34d@*<br><br>this to be added on proc ban and mute<br><br><br>thx again in advance<br><div class="codebox"><p>Code: </p><pre><code>* Joins: John (uid479754@Test-DA54ABD8.irccloud.com)[20:45:31] &lt;@Nick&gt; .b Cathe Mary John 1[20:45:32] * BOT sets mode: +bbb *!*@48D59C09.BFD0590A.37B03A79.IP *!*@96C6E1DE.ABD124CC.73152542.IP *!*@Test-DA54ABD8.irccloud.comto set ban this way for ircloud iden+bbb *!*@48D59C09.BFD0590A.37B03A79.IP *!*@96C6E1DE.ABD124CC.73152542.IP *!uid479754@*</code></pre></div>this code to be same for ban and mute proc<br><div class="codebox"><p>Code: </p><pre><code>if {[set chost [getchanhost $user $chan]] ne ""} {switch -glob -- $chost {{*.irccloud.com} - {*.mibbit.com} - {*.kiwiirc.com} - {*.8C39393E.IP} {set mask *![lindex [split $chost @] 0]@*}{default} {set mask [maskhost "$user!$chost" 2]}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12887">Gulio</a> — Fri Apr 23, 2021 1:59 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[SpiKe^^]]></name></author>
		<updated>2021-04-23T10:45:04-04:00</updated>

		<published>2021-04-23T10:45:04-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109772#p109772</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109772#p109772"/>
		<title type="html"><![CDATA[Store host of nicks that quit IRC for a short period]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109772#p109772"><![CDATA[
Gulio : Please test this out some.<br><div class="codebox"><p>Code: </p><pre><code># max number of bans/devoice to stack in one mode command (1 or more) #set pkb(maxban) 6# max number of kicks to stack in one kick command (1 or more) #set pkb(maxkick) 3# set default ban/mute times (in minutes) ##   0 = this script doesn't remove bans/mutes #set pkb(kb_bantime) 60set pkb(b_bantime)  5set pkb(m_mutetime) 60# set mask type for bans and mutes ## https://docs.eggheads.org/mainDocs/tcl-commands.html#maskhost-nick-user-host-masktype #set pkb(ban_masktype)  1set pkb(mute_masktype) 1set pkb(mute_maskpre) "~q:"##############bind pub -|- !k pub:kickbind pub -|- .k pub:kickproc pub:kick {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx k  }bind pub -|- !b pub:banbind pub -|- .b pub:banproc pub:ban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx b  }bind pub -|- !m pub:mutebanbind pub -|- .m pub:mutebanproc pub:muteban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx m  }bind pub -|- !ub pub:unbanbind pub -|- .ub pub:unbanproc pub:unban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx ub  }bind pub -|- !um pub:unmutebind pub -|- .um pub:unmuteproc pub:unmute {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx um  }bind pub -|- !kb pub:kickbanbind pub -|- .kb pub:kickbanproc pub:kickban {nk uh hn ch tx {do kb} } {  global pkb storehosts  if {$uh ne "Timer"} {    if {![isop $nk $ch] &amp;&amp; ![ishalfop $nk $ch] &amp;&amp; ![matchattr $hn o|o $ch]} {      return 0    }  }  if {[string match u* $do]} {    set plus "-"    set nickls [split [string trim $tx]]  } else {    set plus "+"    set reason [join [lrange [split $tx "."] 1 end] "."]    if {$reason eq ""} { set reason "Please change your behaviour thank you." }    set nickls [split [string trim [lindex [split $tx "."] 0]]]  }  set seconds 0  if {[string is digit [lindex $nickls end]]} {    if {[string match {[bm]} $do] || ($do eq "kb")} {      set seconds [expr {[lindex $nickls end] * 60}]    }    set nickls [lrange $nickls 0 end-1]  } elseif {$do eq "m"} {  set seconds [expr {$pkb(m_mutetime) * 60}]  } elseif {$do eq "b"} {  set seconds [expr {$pkb(b_bantime) * 60}]  } elseif {$do eq "kb"} {  set seconds [expr {$pkb(kb_bantime) * 60}]  }  set masktype $pkb(ban_masktype)  if {[string match *m $do]} {  set masktype $pkb(mute_masktype)  }  foreach nick $nickls {    if {$nick eq ""} { continue }    if {[string match u* $do] &amp;&amp; [string match *!*@* $nick]} {      set bmask $nick      if {($do eq "um") &amp;&amp; ![string match $pkb(mute_maskpre)* $bmask]} {        set bmask $pkb(mute_maskpre)$bmask      }      if {[ischanban $bmask $ch]} {  lappend bmasks $bmask      } elseif {$uh ne "Timer"} {        putserv "NOTICE $nk :$bmask is not a current ban on $ch"      }      continue    }    set aname [string tolower "$nick@$ch"]    if {[onchan $nick $ch]} {      if {![string match u* $do]} {        if {[isop $nick $ch] || [ishalfop $nick $ch]} { continue }        if {[matchattr [nick2hand $nick] o|o $ch]} { continue }      }      if {[string match {*[bm]} $do]} {        set chost [getchanhost $nick $ch]        set bmask [maskhost "$nick!$chost" $masktype]        if {[string match *m $do]} {  set bmask $pkb(mute_maskpre)$bmask  }        if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {          putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"          continue        }        lappend bmasks $bmask        if {($do ne "kb") &amp;&amp; ![string match u* $do] &amp;&amp; [isvoice $nick $ch]} {          lappend dvnicks $nick        }      }      if {[string match k* $do]} {  lappend knicks $nick  }    } elseif {[info exists storehosts($aname)] &amp;&amp; ($do ne "k")} {      if {![string match u* $do]} {        if {[matchattr [lindex $storehosts($aname) 2] o|o $ch]} { continue }      }      set chost [lindex $storehosts($aname) 0]      set bmask [maskhost "$nick!$chost" $masktype]      if {[string match *m $do]} {  set bmask $pkb(mute_maskpre)$bmask  }      if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {        putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"        continue      }      lappend bmasks $bmask    } else {  putserv "NOTICE $nk :$nick is not on channel $ch"  }  }  if {[info exists dvnicks]} {    while {[set len [llength $dvnicks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "v" $pkb(maxban)]        set nicks [join [lrange $dvnicks 0 [expr {$pkb(maxban) - 1}]]]        set dvnicks [lrange $dvnicks $pkb(maxban) end]      } else {        set mode [string repeat "v" $len]        set nicks [join $dvnicks]        set dvnicks ""      }      putquick "MODE $ch -$mode $nicks"    }  }  if {[info exists bmasks]} {    if {$seconds &gt; 0} {      utimer $seconds [list pub:kickban $nk Timer $hn $ch [join $bmasks] ub]    }    while {[set len [llength $bmasks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "b" $pkb(maxban)]        set masks [join [lrange $bmasks 0 [expr {$pkb(maxban) - 1}]]]        set bmasks [lrange $bmasks $pkb(maxban) end]      } else {        set mode [string repeat "b" $len]        set masks [join $bmasks]        set bmasks ""      }      putquick "MODE $ch $plus$mode $masks"    }  }  if {[info exists knicks]} {    while {[set len [llength $knicks]] &gt; 0} {      if {$len &gt; $pkb(maxkick)} {        set nicks [join [lrange $knicks 0 [expr {$pkb(maxkick) - 1}]] ","]        set knicks [lrange $knicks $pkb(maxkick) end]      } else {        set nicks [join $knicks ","]        set knicks ""      }      putserv "KICK $ch $nicks :$reason"    }  }}####bind part - * store:hostsbind sign - * store:hostsproc store:hosts {nk uh hn ch msg} {  set aname [string tolower $nk@$ch]  set ::storehosts($aname) [list $uh [expr {[unixtime]+600}] $hn]}bind time - * expire:hostsproc expire:hosts {mn hr da mo yr} {  global storehosts  set ut [unixtime]  foreach {aname avalue} [array get storehosts] {    if {$ut &gt;= [lindex $avalue 1]} { unset storehosts($aname) }  }}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7749">SpiKe^^</a> — Fri Apr 23, 2021 10:45 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Gulio]]></name></author>
		<updated>2021-04-22T13:02:45-04:00</updated>

		<published>2021-04-22T13:02:45-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109765#p109765</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109765#p109765"/>
		<title type="html"><![CDATA[Hello]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109765#p109765"><![CDATA[
is possible to set ban time for ban 5 min (300) <br>!b nick<br><br>and for kb and mute 1 hour (3600) and to be unban<br>!kb nick<br>!m nick<br><br>and to be the both trigger with !m !b !kb and with .m .b .kb<br><br>and !b /.b nick 10 ( to be set ban for 10 min , when default is 5 same and for kb and mute )<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12887">Gulio</a> — Thu Apr 22, 2021 1:02 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2021-04-16T10:59:44-04:00</updated>

		<published>2021-04-16T10:59:44-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109749#p109749</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109749#p109749"/>
		<title type="html"><![CDATA[Store host of nicks that quit IRC for a short period]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109749#p109749"><![CDATA[
tested again and it works as expected excellent thanks SpiKe^^<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Fri Apr 16, 2021 10:59 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2021-04-15T12:09:56-04:00</updated>

		<published>2021-04-15T12:09:56-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109741#p109741</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109741#p109741"/>
		<title type="html"><![CDATA[Store host of nicks that quit IRC for a short period]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109741#p109741"><![CDATA[
Dasbrain the problem with that is if different ppl use the same name u end up with many IPS wich makes it hard to determine  wich one to use when using /whowas<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Thu Apr 15, 2021 12:09 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[DasBrain]]></name></author>
		<updated>2021-04-15T11:44:44-04:00</updated>

		<published>2021-04-15T11:44:44-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109739#p109739</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109739#p109739"/>
		<title type="html"><![CDATA[Store host of nicks that quit IRC for a short period]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109739#p109739"><![CDATA[
By the way, there is also /whowas nick. <img class="smilies" src="https://forum.eggheads.org/images/smilies/icon_biggrin.gif" width="15" height="15" alt=":D" title="Very Happy"><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12909">DasBrain</a> — Thu Apr 15, 2021 11:44 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[SpiKe^^]]></name></author>
		<updated>2021-04-16T16:53:34-04:00</updated>

		<published>2021-04-15T11:03:36-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=109738#p109738</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=109738#p109738"/>
		<title type="html"><![CDATA[New commands !ub and !um]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=109738#p109738"><![CDATA[
See if these new commands are what you had in mind.<br>Extended the time to save hosts to 5 minutes.<br><div class="codebox"><p>Code: </p><pre><code># max number of bans/devoice to stack in one mode command (1 or more) #set pkb(maxban) 6# max number of kicks to stack in one kick command (1 or more) #set pkb(maxkick) 3##############bind pub -|- !k pub:kickproc pub:kick {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx k  }bind pub -|- !b pub:banproc pub:ban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx b  }bind pub -|- !m pub:mutebanproc pub:muteban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx m  }####bind pub -|- !ub pub:unbanproc pub:unban {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx ub  }bind pub -|- !um pub:unmuteproc pub:unmute {nk uh hn ch tx} {  pub:kickban $nk $uh $hn $ch $tx um  }####bind pub -|- !kb pub:kickbanproc pub:kickban {nk uh hn ch tx {do kb} } {  global pkb storehosts  if {![isop $nk $ch] &amp;&amp; ![ishalfop $nk $ch] &amp;&amp; ![matchattr $hn o|o $ch]} {    return 0  }  if {[string match u* $do]} {    set plus "-"    set nickls [split [string trim $tx]]  } else {    set plus "+"    set reason [join [lrange [split $tx "."] 1 end] "."]    if {$reason eq ""} { set reason "Please change your behaviour thank you." }    set nickls [split [string trim [lindex [split $tx "."] 0]]]  }  foreach nick $nickls {    if {[string match u* $do] &amp;&amp; [string match *!*@* $nick]} {      set bmask $nick      if {[string match um $do] &amp;&amp; ![string match ~q:* $bmask]} {        set bmask ~q:$bmask      }      if {[ischanban $bmask $ch]} {  lappend bmasks $bmask      } else { putserv "NOTICE $nk :$bmask is not a current ban on $ch" }      continue    }    set aname [string tolower "$nick@$ch"]    if {[onchan $nick $ch]} {      if {![string match u* $do]} {        if {[isop $nick $ch] || [ishalfop $nick $ch]} { continue }        if {[matchattr [nick2hand $nick] o|o $ch]} { continue }      }      if {[string match {*[bm]} $do]} {        set chost [getchanhost $nick $ch]        set bmask [maskhost "$nick!$chost" 2]        if {[string match *m $do]} {  set bmask ~q:$bmask  }        if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {          putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"          continue        }        lappend bmasks $bmask        if {($do ne "kb") &amp;&amp; ![string match u* $do] &amp;&amp; [isvoice $nick $ch]} {          lappend dvnicks $nick        }      }      if {[string match k* $do]} {  lappend knicks $nick  }    } elseif {[info exists storehosts($aname)] &amp;&amp; ($do ne "k")} {      if {![string match u* $do]} {        if {[matchattr [lindex $storehosts($aname) 2] o|o $ch]} { continue }      }      set chost [lindex $storehosts($aname) 0]      set bmask [maskhost "$nick!$chost" 2]      if {[string match *m $do]} {  set bmask ~q:$bmask  }      if {[string match u* $do] &amp;&amp; ![ischanban $bmask $ch]} {        putserv "NOTICE $nk :$bmask \[$nick\] is not a current ban on $ch"        continue      }      lappend bmasks $bmask    } else {  putserv "NOTICE $nk :$nick is not on channel $ch"  }  }  if {[info exists dvnicks]} {    while {[set len [llength $dvnicks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "v" $pkb(maxban)]        set nicks [join [lrange $dvnicks 0 [expr {$pkb(maxban) - 1}]]]        set dvnicks [lrange $dvnicks $pkb(maxban) end]      } else {        set mode [string repeat "v" $len]        set nicks [join $dvnicks]        set dvnicks ""      }      putquick "MODE $ch -$mode $nicks"    }  }  if {[info exists bmasks]} {    while {[set len [llength $bmasks]] &gt; 0} {      if {$len &gt; $pkb(maxban)} {        set mode [string repeat "b" $pkb(maxban)]        set masks [join [lrange $bmasks 0 [expr {$pkb(maxban) - 1}]]]        set bmasks [lrange $bmasks $pkb(maxban) end]      } else {        set mode [string repeat "b" $len]        set masks [join $bmasks]        set bmasks ""      }      putquick "MODE $ch $plus$mode $masks"    }  }  if {[info exists knicks]} {    while {[set len [llength $knicks]] &gt; 0} {      if {$len &gt; $pkb(maxkick)} {        set nicks [join [lrange $knicks 0 [expr {$pkb(maxkick) - 1}]] ","]        set knicks [lrange $knicks $pkb(maxkick) end]      } else {        set nicks [join $knicks ","]        set knicks ""      }      putserv "KICK $ch $nicks :$reason"    }  }}####bind part - * store:hostsbind sign - * store:hostsproc store:hosts {nk uh hn ch msg} {  set aname [string tolower $nk@$ch]  set ::storehosts($aname) [list $uh [expr {[unixtime]+300}] $hn]}bind time - * expire:hostsproc expire:hosts {mn hr da mo yr} {  global storehosts  set ut [unixtime]  foreach {aname avalue} [array get storehosts] {    if {$ut &gt;= [lindex $avalue 1]} { unset storehosts($aname) }  }}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7749">SpiKe^^</a> — Thu Apr 15, 2021 11:03 am</p><hr />
]]></content>
	</entry>
	</feed>
