<?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/forum/3" />

	<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>2026-04-15T14:39:49-04:00</updated>

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

		<entry>
		<author><name><![CDATA[ComputerTech]]></name></author>
		<updated>2026-04-15T14:39:49-04:00</updated>

		<published>2026-04-15T14:39:49-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113465#p113465</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113465#p113465"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: CT-Weather]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113465#p113465"><![CDATA[
Heya all, been a while. Here's v0.0.4 of CT-Weather.tcl. I haven't coded in Tcl in a while so if there's any bugs, that's my excuse.  <img class="smilies" src="https://forum.eggheads.org/images/smilies/icon_lol.gif" width="15" height="15" alt=":lol:" title="Laughing"> <div class="codebox"><p>Code: </p><pre><code>################################## CTweather#### Version: v0.0.4# Author : ComputerTech# GitHub : https://GitHub.com/computertech312## DESCRIPTION:#   Provides current weather and 4-day forecasts for any city, region, or US#   zip code.  Users can register their location once so they never have to#   type it again.  Registered locations are geocoded on save (Nominatim) and#   stored as lat/lon so live !w/!f lookups skip the geocoding step entirely.## REQUIREMENTS:#   - Eggdrop 1.8+ with Tcl 8.5+#   - Tcl TLS extension  (libtls / tcl-tls)  for HTTPS support#   - Tcllib              (tcllib package)    for the json package## SETUP:#   1. Edit the "Configuration" section below:#        weather_api_key   - Your Pirate Weather API key#                            Get one free at: https://pirateweather.net#        weather_data_file - Path (relative to eggdrop's working dir) where#                            registered nick -&gt; location data is persisted##   2. Copy this file into your eggdrop scripts directory, e.g.:#        cp ct-weather.tcl /path/to/eggdrop/scripts/##   3. Add the following line to your eggdrop config (eggdrop.conf):#        source scripts/ct-weather.tcl##   4. Rehash or restart your bot:#        .rehash## COMMANDS (all triggered with ! prefix in any public channel):##   !w [location]#       Show current weather for &lt;location&gt; (city name or US zip code).#       If no location is given, uses your registered location.#       Example:  !w New York#                 !w 90210#                 !w                (uses registered location)##   !f [location]#       Show a 4-day forecast for &lt;location&gt;.#       Falls back to registered location if none is provided.#       Example:  !f London, UK##   !register_location &lt;location&gt;#       Geocode &lt;location&gt; and save it as your default.  The resolved name#       and coordinates are confirmed back to you in chat.#       Example:  !register_location Austin, TX##   !change_location &lt;location&gt;#       Update your registered location.  You must already have one saved.#       Example:  !change_location 10001##   !unregister_location#       Remove your registered location.##   !change_trigger &lt;w|f&gt; &lt;newtrigger&gt;#       (Bot owners only) Change the trigger for !w or !f at runtime.#       Changes take effect immediately without a rehash.#       Example:  !change_trigger w !weather#                 !change_trigger f !forecast## DATA FILE FORMAT (ct-weather.dat):#   One Tcl list per line:  nick lat lon {Display Name}#   Example:#     colby 30.2672 -97.7431 {Austin, United States}## NOTES:#   - Temperature is always shown as C and F, e.g. 19.8°C (67.7°F).#   - Temperature is IRC-colour coded: blue (&lt;10C), yellow (&lt;20C),#     orange (&lt;30C), red (30C+).#   - Geocoding uses the free Nominatim API (openstreetmap.org).#     Please respect their usage policy (max 1 req/sec, valid User-Agent).## CONFIGURATION VARIABLES:#   weather_api_key   - Pirate Weather API key#   weather_data_file - Path to nick-&gt;location storage file#   weather_flag      - Eggdrop flag required to use commands#                       "-|-" = everyone  |  "o|o" = ops only  etc.################################################################################namespace eval CTweather {    ## Triggers    variable trig_w "!w"    variable trig_f "!f"    # --- Configuration ---    variable weather_api_key   "YOUR-API-KEY-HERE"    variable weather_data_file "scripts/ct-weather.dat"    # Eggdrop channel flag required to use bot commands ("-|-" = everyone)    variable weather_flag      "-|-"    # In-memory nick -&gt; location storage    variable weather_locations    array set weather_locations {}    package require http    package require tls    package require json    # Register HTTPS handler (catch guards against double-registration on rehash)    catch {::tls::init -ssl2 0 -ssl3 0 -tls1 0 -tls1.2 1}    catch {http::register https 443 [list ::tls::socket]}    # --- Binds ---    bind pub $weather_flag !register_location   [namespace current]::pub:weather_register    bind pub $weather_flag !change_location     [namespace current]::pub:weather_change    bind pub $weather_flag !unregister_location [namespace current]::pub:weather_unregister    bind pub $weather_flag $trig_w              [namespace current]::pub:weather_current    bind pub $weather_flag $trig_f              [namespace current]::pub:weather_forecast    # !change_trigger is open to all so the proc can give a proper error to non-owners    bind pub -|- !change_trigger                [namespace current]::pub:weather_change_trigger    # --- File I/O ---    proc weather_load {} {        variable weather_locations        variable weather_data_file        catch {            set fp [open $weather_data_file r]            while {[gets $fp line] &gt;= 0} {                # Each line is a Tcl list: nick lat lon display_name                if {[llength $line] == 4} {                    set nick [lindex $line 0]                    set weather_locations($nick) [lrange $line 1 3]                }            }            close $fp        }    }    proc weather_save {} {        variable weather_locations        variable weather_data_file        if {[catch {            set fp [open $weather_data_file w]            foreach nick [array names weather_locations] {                lassign $weather_locations($nick) lat lon name                puts $fp [list $nick $lat $lon $name]            }            close $fp        } err]} {            putlog "ct-weather.tcl: Failed to save locations: $err"        }    }    # --- Helpers ---    proc weather_sanitize {text} {        regsub -all {[^\x20-\x7E]} $text {} text        regsub -all {\s+} [string trim $text] { } text        return $text    }    proc weather_geocode {query} {        if {[regexp {^\d{5}$} $query]} {            set query "${query}, US"        }        set url "https://nominatim.openstreetmap.org/search?[http::formatQuery q $query format json limit 1 addressdetails 1]"        set tok ""        if {[catch {            set tok [http::geturl $url \                -headers {User-Agent Eggdrop-PirateWeatherBot/1.0} \                -timeout 10000]            set body [http::data $tok]            http::cleanup $tok            set tok ""        } err]} {            if {$tok ne ""} { catch {http::cleanup $tok} }            putlog "ct-weather geocode HTTP error: $err"            return {}        }        if {[catch {set results [json::json2dict $body]} err]} {            putlog "ct-weather geocode JSON error: $err"            return {}        }        if {![llength $results]} { return {} }        set r [lindex $results 0]        set lat  [dict get $r lat]        set lon  [dict get $r lon]        set full [dict get $r display_name]        set parts [split $full ","]        if {[llength $parts] &gt; 2} {            set name "[string trim [lindex $parts 0]], [string trim [lindex $parts end]]"        } else {            set name $full        }        return [list $lat $lon $name]    }    proc weather_fetch {url} {        set tok ""        if {[catch {            set tok [http::geturl $url -timeout 10000]            set body [http::data $tok]            http::cleanup $tok            set tok ""        } err]} {            if {$tok ne ""} { catch {http::cleanup $tok} }            error "HTTP error: $err"        }        if {[catch {set data [json::json2dict $body]} err]} {            error "JSON parse error: $err"        }        return $data    }    proc weather_color_temp {temp_c} {        set temp_f [expr {$temp_c * 9.0 / 5.0 + 32.0}]        if     {$temp_c &lt; 10} { set col 12        } elseif {$temp_c &lt; 20} { set col 08        } elseif {$temp_c &lt; 30} { set col 07        } else                  { set col 04 }        return "\003${col}[format %.1f $temp_c]\u00b0C ([format %.1f $temp_f]\u00b0F)\003"    }    proc weather_wind_dir {deg} {        if {$deg eq {} || $deg eq "null"} { return "?" }        set dirs {N NE E SE S SW W NW}        return [lindex $dirs [expr {round($deg / 45.0) % 8}]]    }    proc weather_get {d key {default {}}} {        if {[dict exists $d $key]} { return [dict get $d $key] }        return $default    }    # --- Commands ---    proc pub:weather_register {nick uhost hand chan text} {        variable weather_locations        set query [weather_sanitize $text]        if {$query eq {}} {            puthelp "PRIVMSG $chan :Usage: !register_location &lt;location or zip&gt;"            return        }        set geo [weather_geocode $query]        if {![llength $geo]} {            puthelp "PRIVMSG $chan :Could not find location for: $query"            return        }        lassign $geo lat lon name        set weather_locations($nick) [list $lat $lon $name]        weather_save        puthelp "PRIVMSG $chan :Location for $nick registered as: $name ($lat, $lon)"    }    proc pub:weather_change {nick uhost hand chan text} {        variable weather_locations        if {![info exists weather_locations($nick)]} {            puthelp "PRIVMSG $chan :You do not have a registered location. Use !register_location &lt;location&gt; to register one."            return        }        set query [weather_sanitize $text]        if {$query eq {}} {            puthelp "PRIVMSG $chan :Usage: !change_location &lt;new location or zip&gt;"            return        }        set geo [weather_geocode $query]        if {![llength $geo]} {            puthelp "PRIVMSG $chan :Could not find location for: $query"            return        }        lassign $geo lat lon name        set weather_locations($nick) [list $lat $lon $name]        weather_save        puthelp "PRIVMSG $chan :Your location has been updated to: $name ($lat, $lon)"    }    proc pub:weather_unregister {nick uhost hand chan text} {        variable weather_locations        if {[info exists weather_locations($nick)]} {            unset weather_locations($nick)            weather_save            puthelp "PRIVMSG $chan :Your registered location has been removed."        } else {            puthelp "PRIVMSG $chan :You do not have a registered location."        }    }    proc pub:weather_current {nick uhost hand chan text} {        variable weather_locations        variable weather_api_key        set query [weather_sanitize $text]        if {$query eq {}} {            if {[info exists weather_locations($nick)]} {                lassign $weather_locations($nick) lat lon name            } else {                puthelp "PRIVMSG $chan :Usage: !w &lt;location or zip&gt; or register your location with !register_location &lt;location&gt;"                return            }        } else {            set geo [weather_geocode $query]            if {![llength $geo]} {                puthelp "PRIVMSG $chan :Could not find coordinates for: $query"                return            }            lassign $geo lat lon name        }        set url "https://api.pirateweather.net/forecast/${weather_api_key}/${lat},${lon}?units=si&amp;exclude=minutely,hourly,alerts"        if {[catch {set data [weather_fetch $url]} err]} {            puthelp "PRIVMSG $chan :Error retrieving weather data: $err"            return        }        if {![dict exists $data currently]} {            puthelp "PRIVMSG $chan :Error from Pirate Weather: [weather_get $data message Unknown]"            return        }        set c [dict get $data currently]        set conditions [weather_get $c summary "N/A"]        set temp_c     [expr {double([weather_get $c temperature 0])}]        set pressure   [weather_get $c pressure 0]        set humidity   [expr {int([weather_get $c humidity 0] * 100)}]        set clouds     [expr {int([weather_get $c cloudCover 0] * 100)}]        set wind_ms    [expr {double([weather_get $c windSpeed 0])}]        set wind_deg   [weather_get $c windBearing {}]        set rain       [weather_get $c precipIntensity 0]        set wind_kmh   [expr {$wind_ms * 3.6}]        set wind_mph   [expr {$wind_ms * 2.23694}]        set wind_str   "[format %.1f $wind_kmh] km/h / [format %.1f $wind_mph] mph"        puthelp "PRIVMSG $chan :\002Location:\002 $name | \002Conditions:\002 $conditions | \002Temperature:\002 [weather_color_temp $temp_c] | \002Pressure:\002 $pressure hPa | \002Humidity:\002 ${humidity}% | \002Precip:\002 $rain mm/h | \002Wind:\002 $wind_str from [weather_wind_dir $wind_deg] | \002Cloud cover:\002 ${clouds}%"    }    proc pub:weather_forecast {nick uhost hand chan text} {        variable weather_locations        variable weather_api_key        set query [weather_sanitize $text]        if {$query eq {}} {            if {[info exists weather_locations($nick)]} {                lassign $weather_locations($nick) lat lon name            } else {                puthelp "PRIVMSG $chan :Usage: !f &lt;location or zip&gt; or register your location with !register_location &lt;location&gt;"                return            }        } else {            set geo [weather_geocode $query]            if {![llength $geo]} {                puthelp "PRIVMSG $chan :Could not find coordinates for: $query"                return            }            lassign $geo lat lon name        }        set url "https://api.pirateweather.net/forecast/${weather_api_key}/${lat},${lon}?units=si&amp;exclude=currently,minutely,hourly,alerts"        if {[catch {set data [weather_fetch $url]} err]} {            puthelp "PRIVMSG $chan :Error retrieving forecast data: $err"            return        }        if {![dict exists $data daily] || ![dict exists [dict get $data daily] data]} {            puthelp "PRIVMSG $chan :Error from Pirate Weather: [weather_get $data message Unknown]"            return        }        set days [lrange [dict get [dict get $data daily] data] 0 3]        set parts {}        foreach day $days {            set weekday   [clock format [dict get $day time] -format "%A"]            set condition [string trimright [weather_get $day summary "N/A"] "."]            set max_t     [expr {double([weather_get $day temperatureHigh 0])}]            set min_t     [expr {double([weather_get $day temperatureLow  0])}]            lappend parts "$weekday $condition [weather_color_temp $max_t] [weather_color_temp $min_t]"        }        puthelp "PRIVMSG $chan :\002Location:\002 $name :: [join $parts { :: }]"    }    proc pub:weather_change_trigger {nick uhost hand chan text} {        variable trig_w        variable trig_f        variable weather_flag        # Only bot owners (flag n) may use this command        if {![matchattr $hand n]} {            puthelp "PRIVMSG $chan :Sorry $nick, only bot owners can change triggers."            return        }        set args [split [weather_sanitize $text]]        if {[llength $args] != 2} {            puthelp "PRIVMSG $chan :Usage: !change_trigger &lt;w|f&gt; &lt;newtrigger&gt;  (e.g. !change_trigger w !weather)"            return        }        set which [string tolower [lindex $args 0]]        set new   [lindex $args 1]        # Trigger must start with ! and contain only safe characters        if {![regexp {^![A-Za-z0-9_-]+$} $new]} {            puthelp "PRIVMSG $chan :Invalid trigger. Must start with ! and contain only letters, numbers, _ or -."            return        }        switch -- $which {            w {                if {$new eq $trig_w} {                    puthelp "PRIVMSG $chan :Weather trigger is already set to: $trig_w"                    return                }                bind pub $weather_flag $new ::CTweather::pub:weather_current                unbind pub $weather_flag $trig_w ::CTweather::pub:weather_current                set trig_w $new                puthelp "PRIVMSG $chan :Weather trigger changed to: $new"            }            f {                if {$new eq $trig_f} {                    puthelp "PRIVMSG $chan :Forecast trigger is already set to: $trig_f"                    return                }                bind pub $weather_flag $new ::CTweather::pub:weather_forecast                unbind pub $weather_flag $trig_f ::CTweather::pub:weather_forecast                set trig_f $new                puthelp "PRIVMSG $chan :Forecast trigger changed to: $new"            }            default {                puthelp "PRIVMSG $chan :Unknown trigger type '$which'. Use w (weather) or f (forecast)."            }        }    }    # --- Init ---    weather_load    putlog "ct-weather.tcl loaded."}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12849">ComputerTech</a> — Wed Apr 15, 2026 2:39 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Carlin0]]></name></author>
		<updated>2026-04-07T08:27:52-04:00</updated>

		<published>2026-04-07T08:27:52-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113464#p113464</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113464#p113464"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Issues with fortune.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113464#p113464"><![CDATA[
Every now and then the issue comes up again, and I have to kill and restart the bot<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12778">Carlin0</a> — Tue Apr 07, 2026 8:27 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2026-04-06T09:06:42-04:00</updated>

		<published>2026-04-06T09:06:42-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113463#p113463</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113463#p113463"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Blacklist script by Sir_fz]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113463#p113463"><![CDATA[
ok thanks<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Mon Apr 06, 2026 9:06 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[CrazyCat]]></name></author>
		<updated>2026-04-06T08:52:08-04:00</updated>

		<published>2026-04-06T08:52:08-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113461#p113461</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113461#p113461"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Blacklist script by Sir_fz]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113461#p113461"><![CDATA[
I juste gave you some examples of bad usage of [lindex] and other list stuff applyed on strings.<br>Try to correct everything.<br><br>And peharps you can change some things, like using <a href="https://docs.eggheads.org/using/tcl-commands.html#maskhost-nick-user-host-masktype" class="postlink">maskhost</a> to create the ban mask rather than the blbtype proc...<br>The script is old, you'd probably redo it<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=691">CrazyCat</a> — Mon Apr 06, 2026 8:52 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2026-04-06T08:34:13-04:00</updated>

		<published>2026-04-06T08:34:13-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113460#p113460</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113460#p113460"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Blacklist script by Sir_fz]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113460#p113460"><![CDATA[
thanks CrazyCat, after i apllied the changes i get this complaint:<br><br><blockquote class="uncited"><div>(+Amigo)  : !rembl \[ALme\]ria*!*@*</div></blockquote>getting this complaint:<br><blockquote class="uncited"><div> \[ALme\]ria*!*@* was not found in the blacklist. </div></blockquote>while the ban is in the banlist::<br> <blockquote class="uncited"><div><br>(+Amigo)  : !listbl<br>[1] - Mask: {ALJHHGHG_KHJ}*!*@* - Requester: ctcp - Bantime: 0 <br>[2] - Mask: \[AL\]me?ria}*!*@* - Requester: ctcp - Bantime: 0 <br>[3] - Mask: ALme?ria*!*@* - Requester: ctcp - Bantime: 0 <br>[4] - Mask: ALme*ria*!*@* - Requester: ctcp - Bantime: 0 <br>[5] - Mask: \[ALme\]ria*!*@* - Requester: ctcp - Bantime: 0 <br>[*] - End of list. <br></div></blockquote><br>also  when using :<br><blockquote class="uncited"><div><br> !rembl [ALme]ria*!*@*</div></blockquote>i get this error again:<br><blockquote class="uncited"><div>Tcl error [bl:pub]: list element in braces followed by "*!*@*" instead of space</div></blockquote><blockquote class="uncited"><div><br>14:43:34 &lt;Amigo&gt; .set errorInfo<br>14:43:34 &lt;Hawk&gt; Currently: list element in braces followed by "*!*@*" instead of space<br>14:43:34 &lt;Hawk&gt; Currently:     while executing<br>14:43:34 &lt;Hawk&gt; Currently: "lindex $b 0"<br>14:43:34 &lt;Hawk&gt; Currently:     (procedure "bl:do:rem" line 14)<br>14:43:34 &lt;Hawk&gt; Currently:     invoked from within<br>14:43:34 &lt;Hawk&gt; Currently: "bl:do:rem [join [lrange [split $arg] 1 end]]"<br>14:43:34 &lt;Hawk&gt; Currently:     (procedure "bl:pub" line 31)<br>14:43:34 &lt;Hawk&gt; Currently:     invoked from within<br>14:43:34 &lt;Hawk&gt; Currently: "bl:pub $_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5"</div></blockquote>current code:<br><div class="codebox"><p>Code: </p><pre><code>##############################################################################                                                                           ## Coded by: Opposing (Fz_Egg@yahoo.com)                                     ## Version : 1.4                                                             ## Released: November 29, 2010                                               ## Source  : http://Sir-Fz.blogspot.com/                                     ###                                                                          ## Description: A blacklist script that stores the banned masks in a db file ##              and bans everyone who matches the blacklisted masks on join  ##              or when the bot gets op.                                     ##                                                                           ## Available Commands:                                                       ## - DCC: .addbl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt; [reason] [bantime] : Adds ban.         ##        .rembl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt;                    : Deletes ban.      ##        .listbl                                        : Lists bans.       ## - PUB: addbl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt; [reason] [bantime]  : Adds ban          ##        rembl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt;                     : Deletes ban.      ##        listbl                                         : Lists bans.       ##                                                                           ## USE (DCC) .chanset #channel +blacklist to enable blacklist on a channel.  ##                                                                           ## Credits:                                                                  ##         Thanks to strikelite and user (if I recall correctly) from the    ##         egghelp.org forum for helping me with this script (back in 2003). ##         Also used user's (egghelp.org forum) maskhost proc.               ##                                                                           ## History:                                                                  ##         - 1.4: Fixed a bug when using the bansame option where nicknames  ##           with special characters (\, [, ]) were not properly banned.     ##         - 1.3: Added Flooding out protection, where the bot will start    ##           using the slowest queue in case a number of blacklisted users   ##           join in a certain period of seconds which can be defined by the ##           user. + fixed a bug with brackets.                              ##         - 1.2: Fixed a few bugs and made the script create the blacklist  ##           file if it doesn't exist.                                       ##         - 1.1: added the black list chan flag, and other features into    ##           patterns of handling the blacklist.                             ##         - 1.0: First release.                                             ##                                                                           ## Report bugs/suggestions to Fz_Egg@yahoo.com                               ##                                                                           ## Copyright © 2005 Opposing (aka Sir_Fz)                                    ##                                                                           ## This program is free software; you can redistribute it and/or modify      ## it under the terms of the GNU General Public License as published by      ## the Free Software Foundation; either version 2 of the License, or         ## (at your option) any later version.                                       ##                                                                           ## This program is distributed in the hope that it will be useful,           ## but WITHOUT ANY WARRANTY; without even the implied warranty of            ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             ## GNU General Public License for more details.                              ##                                                                           ## You should have received a copy of the GNU General Public License         ## along with this program; if not, write to the Free Software               ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA ##                                                                           ############################################################################################################## Configurations start here: ## __________________________ ### Blacklist File:#set blackl(file) "scripts/blacklist.txt"set blackl(file) "test-scripts-6/blacklist.txt"## Blacklist "Excess Flood" protection. Set here how many blacklisted users are allowed## to join in how many seconds before using the slow queue in order for the bot not to## flood out with reason "Excess Flood."set blackl(punish) 4:2## Do you want the bot to also check for blacklisted users on op ? (0: no / 1: yes)set blackl(checkop) 1## Do you want to ban the same ban from the blacklist file## or do you want it to be spcific ? (0: specific / 1: same ban as the file) ### example:## Suppose that *!lamest@* is banned.# .. joins lamer!lamest@lamer.org# .. bot sets mode +b *!lamest@*# .. lamer kicked by bot "Blacklisted user."## This happens if this option is set to 1.## but if you set it to 0, then you can choose what bantype you want to ban.set blackl(bansame) 1## if blackl(bansame) is set to 0:## What ban type do you want to ban ?# 0: *!user@full.host.tld # 1: *!*user@full.host.tld # 2: *!*@full.host.tld # 3: *!*user@*.host.tld # 4: *!*@*.host.tld # 5: nick!user@full.host.tld # 6: nick!*user@full.host.tld # 7: nick!*@full.host.tld # 8: nick!*user@*.host.tld # 9: nick!*@*.host.tldset blackl(btype) 2## Set default ban reason if not specified.## NOTE: use %requester to use the nick of the one who set the ban.set blackl(kmsg) "Banned: Requested by %requester"## set default ban time (in minutes) if no bantime specified. (0 means no ban time)set blackl(btime) 0## Do you want the ban to be removed from the file after ban time expires ? (0: no / 1: yes)## if set to 0, the bot will only remove the ban from the channel but not from the file.set blackl(rbabt) 0## Set here the trigger for public commands.## example: set blackl(trig) "!"## now using !listbl on main will show the blacklist.set blackl(trig) "!"## Set flags that are allowed to use these commands.## &lt;global flags&gt;|&lt;channel flags&gt;set blackl(flags) n|-# Configurations end here. ##################################################################################################### Code starts here, please do not edit anything unless you know TCL: ## __________________________________________________________________ #bind nick - * bl:banbind join - * bl:banbind dcc $blackl(flags) addbl bl:addbind dcc $blackl(flags) rembl bl:rembind dcc $blackl(flags) listbl bl:listbind pubm $blackl(flags) * bl:pubbind mode - "* +o" bl:copsetudef flag blacklistif {[file exists $blackl(file)]} {  set BLNicks [split [read [set inf [open $blackl(file)]]] "\n"][close $inf]} { set BLNicks [list]}foreach {blackl(lim) blackl(secs)} [split $blackl(punish) :] {break}proc bl:ban {nick uhost hand chan {nn ""}} { global BLNicks blackl blflood if {![botisop $chan] || ![channel get $chan blacklist]} {return 0} if {![info exists blflood([set chan [string tolower $chan]])]} { set blflood($chan) 0 } if {$nn != ""} { set nick $nn } foreach blnick $BLNicks {  if {[string match -nocase [set ban [lindex [split $blnick] 0]] $nick!$uhost]} {   set ban [string map {\\\\ \\ \\\[ \[ \\\] \]} $ban]    if {[blfollow $blackl(secs) blflood($chan)] &lt; $blackl(lim)} {    putquick "KICK $chan $nick :[string map [list %requester [lindex [split $blnick] 1]] [join [lrange [split $blnick] 2 end-1]]]"  if {$blackl(bansame)} {    set ban [string map {\\\\ \\ \\\[ \[ \\\] \]} $ban]   putquick "MODE $chan -o+b $nick $ban"     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $ban]     }    } {     putquick "MODE $chan -o+b $nick [set aban [blbtype $nick!$uhost $blackl(btype)]]"     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $aban]     }    }   } {    puthelp "KICK $chan $nick :[string map [list %requester [lindex [split $blnick] 1]] [join [lrange [split $blnick] 2 end-1]]]"  if {$blackl(bansame)} {   set ban [string map {\\\\ \\ \\\[ \[ \\\] \]} $ban]   pushmode $chan -o $nick   pushmode $chan +b $ban     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $ban]     }    } {     pushmode $chan -o $nick     pushmode $chan +b [set aban [blbtype $nick!$uhost $blackl(btype)]]     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $aban]     }    }   }   putlog "\[\002BlackList\002\]: Banned \002$nick\002!\002$uhost\002 matching [string map {! \002!\002 @ \002@\002} \002$ban\002] on \002$chan\002"   break  } }}proc bl:add {hand idx arg} { if {$arg == ""} { putlog "SYNTAX: \003.addbl &lt;nick!user@host&gt; \[reason\] \[btime\]\003"; return 0 } if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 0]]]} {  putlog "SYNTAX: \003.addbl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002 \[reason\] \[bantime\]\003"  return 0 } if {[bl:do:add $hand $arg]} {  foreach chan [channels] {   if {![channel get $chan blacklist]} { continue }   foreach ubchecked [chanlist $chan] {    bl:ban $ubchecked [getchanhost $ubchecked $chan] [nick2hand $ubchecked] $chan   }  }  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] has been \002added\002 to the blacklist." } {  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] already \002exists\002 in the blacklist." }}proc bl:do:add {hand arg} { global blackl BLNicks set added 0 if {[llength [lrange [split $arg] 1 end]] == 1} {  if {[string is integer [lindex [split $arg] end]]} {   set kreason "$blackl(kmsg)"   set btime "[lindex [split $arg] end]"  } else {   set kreason "[lrange [split $arg] 1 end]"   set btime "$blackl(btime)"  } } elseif {[llength [lrange [split $arg] 1 end]] &gt; 1} {  if {[string is integer [lindex [split $arg] end]]} {   set kreason "[join [lrange [split $arg] 1 end-1]]"   set btime "[lindex [split $arg] end]"  } else {   set kreason "[join [lrange [split $arg] 1 end]]"   set btime "$blackl(btime)"  } } else {  set kreason "$blackl(kmsg)"  set btime "$blackl(btime)" } if {![file exists $blackl(file)]} {   set temp [open $blackl(file) w]  close $temp } set blnick "[string map {\\ \\\\ \[ \\\[ \] \\\]} [lindex [split $arg] 0]]" if {![we:can:find:ban $blnick add]} {  puts [set fs [open $blackl(file) a]] "$blnick $hand $kreason $btime"  close $fs  set BLNicks [split [read [set inf [open $blackl(file)]]] "\n"][close $inf]  set added 1 } set added}proc bl:rem {hand idx arg} { if {$arg == ""} { putlog "SYNTAX: \003.rembl &lt;nick!user@host&gt;\003"; return 0 } if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 0]]]} {   putlog "SYNTAX: \003.rembl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002\003"  return 0 } if {[bl:do:rem $arg]} {  foreach chan [channels] {   if {![channel get $chan blacklist]} { continue }   foreach ban [chanbans $chan] {    if {[string match -nocase $blnick [set sban [lindex $ban 0]]]} {     pushmode $chan -b $sban    }   }  }  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002deleted\002 from the blacklist." } {  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002not\002 found in the blacklist." }}proc bl:do:rem arg { global blackl BLNicks set remmed 0 set blnick [lindex [split $arg] 0] if {![file exists $blackl(file)]} {   set temp [open $blackl(file) w]  close $temp } if {[we:can:find:ban $blnick rem]} {  set z ""  set a [open $blackl(file) r]  while {![eof $a]} {   set b [gets $a]  if {[string equal -nocase [string index $b 0] $blnick]}  # if {![string equal -nocase [lindex $b 0] $blnick]} { lappend z ${b} }  }  close $a  set n [open $blackl(file) w]  foreach k $z {   if {$k != ""} { puts $n $k }  }  close $n  set BLNicks [split [read [set inf [open $blackl(file)]]] "\n"][close $inf]  set remmed 1 } set remmed}proc bl:list {hand idx arg} { global BLNicks if {[string equal "{} {}" $BLNicks] || [string equal "" $BLNicks]} {  putlog "There are \002no\002 bans in the blacklist." } {  set c 1  foreach blnick $BLNicks {   if {$blnick != ""} {    putlog "\[\002$c\002\] - \002Mask\002: [lindex [split $blnick] 0] - \002Requester\002: [lindex [split $blnick] 1] - \002Bantime\002: [lindex [split $blnick] end]"    incr c   } {    putlog "\[\002*\002\] - End of list."   }  } }}proc bl:pub {nick uhost hand chan arg} { global blackl BLNicks if {![string equal $blackl(trig) [string index $arg 0]]} {return 0}  switch -- [string range $arg 1 end] {  "addbl" {   if {[join [lrange [split $arg] 1 end]] == ""} { puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)addbl &lt;nick!user@host&gt; \[reason\] \[btime\]\003"; return 0 }   if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 1]]]} {    puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)addbl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002 \[reason\] \[bantime\]\003"    return 0   }   if {[bl:do:add $hand [join [lrange [split $arg] 1 end]]]} {    if {[channel get $chan blacklist]} {     foreach ubchecked [chanlist $chan] {      bl:ban $ubchecked [getchanhost $ubchecked $chan] [nick2hand $ubchecked] $chan     }    }     pushmode2 $chan +b $blnick    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] has been \002added\002 to the blacklist."   } {    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] already \002exists\002 in the blacklist."   }  }  "rembl" {   #  putchan $chan "[join [lrange [split $arg] 1 end]]"   if {[join [lrange [split $arg] 1 end]] == ""} { puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)rembl &lt;nick!user@host&gt;\003"; return 0 }   if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 1]]]} {     puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)rembl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002\003"    return 0   }   if {[bl:do:rem [join [lrange [split $arg] 1 end]]]} {     if {[channel get $chan blacklist]} {     foreach ban [chanbans $chan] {      if {[string match -nocase $blnick [set sban [lindex $ban 0]]]} {       pushmode $chan -b $sban      }     }    }    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002deleted\002 from the blacklist."   } {    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002not\002 found in the blacklist."   }  }  "listbl" {   if {[string equal "{} {}" $BLNicks] || [string equal "" $BLNicks]} {    puthelp "NOTICE $nick :There are \002no\002 bans in the blacklist."   } {    set c 1    foreach blnick $BLNicks {     if {$blnick != ""} {      puthelp "NOTICE $nick :\[\002$c\002\] - \002Mask\002: [lindex [split $blnick] 0] - \002Requester\002: [lindex [split $blnick] 1] - \002Bantime\002: [lindex [split $blnick] end]"      incr c     } {      puthelp "NOTICE $nick :\[\002*\002\] - End of list."     }    }   }  } }}proc bl:cop {nick uhost hand chan mc targ} { global blackl if {[isbotnick $targ] &amp;&amp; $blackl(checkop) &amp;&amp; [channel get $chan blacklist]} {  foreach blnick [chanlist $chan] {   bl:ban $blnick [getchanhost $blnick $chan] [nick2hand $blnick] $chan  } }}proc rem:blban {chan ban} { global blackl if {$blackl(rbabt)} {  pushmode $chan -b $ban  bl:do:rem $ban } {  pushmode $chan -b $ban }}proc we:can:find:ban {blnick type} { global blackl set spfound 0 switch -- $type {  "add" {    foreach temp [split [string tolower [read [set inf [open $blackl(file)]]]] "\n"][close $inf] {    if {[string equal -nocase [lindex [split $temp] 0] $blnick]} { set spfound 1 ; break }   }  }  "rem" {   foreach temp [split [string tolower [read [set inf [open $blackl(file)]]]] "\n"][close $inf] {    if {[string equal -nocase [lindex [split $temp] 0] [string map {\\ \\\\ \[ \\\[ \] \\\]} $blnick]]} { set spfound 1 ; break }   }  } } set spfound}proc blfollow {secs blvar} { upvar $blvar fvar utimer $secs [list bldicr $blvar] incr fvar}proc bldicr blvar { upvar $blvar fvar if {$fvar &gt; 0} {  incr fvar -1 }}set blbtypeDefaultType 3proc blbtype [list name [list type $blbtypeDefaultType]] {  if {[scan $name {%[^!]!%[^@]@%s} nick user host]!=3} {   error "Usage: maskbhost &lt;nick!user@host&gt; \[type\]"  }  if [string match {[3489]} $type] {   if [string match {*[0-9]} $host] {    set host [join [lrange [split $host .] 0 2] .].*   } elseif {[string match *.*.* $host]} {    set host *.[join [lrange [split $host .] end-1 end] .]   }  }  if [string match {[1368]} $type] {   set user *[string trimleft $user ~]  } elseif {[string match {[2479]} $type]} {   set user *  }  if [string match {[01234]} $type] {   set nick *  }  set name $nick!$user@$host }#putlog "BlackList v1.4 By Opposing (a.k.a Sir_Fz) Loaded..."################################ putlog "[file normalize [info script]]"############################### </code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Mon Apr 06, 2026 8:34 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[CrazyCat]]></name></author>
		<updated>2026-04-06T07:24:28-04:00</updated>

		<published>2026-04-06T07:24:28-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113459#p113459</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113459#p113459"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Blacklist script by Sir_fz]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113459#p113459"><![CDATA[
Because you kept<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark-reasonable.min.css"> <strong>script</strong>  <strong>script</strong> <div class="codebox"><pre><code class="language-tcl">switch -- [lindex [split [lindex [split $arg $blackl(trig)] 1]] 0] {</code></pre></div> <strong>script</strong> We spoke about that in #eggdrop<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark-reasonable.min.css"> <strong>script</strong>  <strong>script</strong> <div class="codebox"><pre><code class="language-tcl">switch -- [string range $arg 1 end] {</code></pre></div> <strong>script</strong> And you treat string as lists...<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark-reasonable.min.css"> <strong>script</strong>  <strong>script</strong> <div class="codebox"><pre><code class="language-tcl">set b [gets $a]   if {![string equal -nocase [lindex $b 0] $blnick]} { lappend z ${b} }</code></pre></div> <strong>script</strong> Why don't use:<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark-reasonable.min.css"> <strong>script</strong>  <strong>script</strong> <div class="codebox"><pre><code class="language-tcl">if {[string equal -nocase [string index $b 0] $blnick]}</code></pre></div> <strong>script</strong> <p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=691">CrazyCat</a> — Mon Apr 06, 2026 7:24 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2026-04-05T18:53:30-04:00</updated>

		<published>2026-04-05T18:53:30-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113458#p113458</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113458#p113458"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Blacklist script by Sir_fz]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113458#p113458"><![CDATA[
i have a strange issue when trying to remove a ban <br><div class="codebox"><p>Code: </p><pre><code>##############################################################################                                                                           ## Coded by: Opposing (Fz_Egg@yahoo.com)                                     ## Version : 1.4                                                             ## Released: November 29, 2010                                               ## Source  : http://Sir-Fz.blogspot.com/                                     ###                                                                          ## Description: A blacklist script that stores the banned masks in a db file ##              and bans everyone who matches the blacklisted masks on join  ##              or when the bot gets op.                                     ##                                                                           ## Available Commands:                                                       ## - DCC: .addbl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt; [reason] [bantime] : Adds ban.         ##        .rembl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt;                    : Deletes ban.      ##        .listbl                                        : Lists bans.       ## - PUB: addbl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt; [reason] [bantime]  : Adds ban          ##        rembl &lt;nick&gt;!&lt;user&gt;@&lt;host&gt;                     : Deletes ban.      ##        listbl                                         : Lists bans.       ##                                                                           ## USE (DCC) .chanset #channel +blacklist to enable blacklist on a channel.  ##                                                                           ## Credits:                                                                  ##         Thanks to strikelite and user (if I recall correctly) from the    ##         egghelp.org forum for helping me with this script (back in 2003). ##         Also used user's (egghelp.org forum) maskhost proc.               ##                                                                           ## History:                                                                  ##         - 1.4: Fixed a bug when using the bansame option where nicknames  ##           with special characters (\, [, ]) were not properly banned.     ##         - 1.3: Added Flooding out protection, where the bot will start    ##           using the slowest queue in case a number of blacklisted users   ##           join in a certain period of seconds which can be defined by the ##           user. + fixed a bug with brackets.                              ##         - 1.2: Fixed a few bugs and made the script create the blacklist  ##           file if it doesn't exist.                                       ##         - 1.1: added the black list chan flag, and other features into    ##           patterns of handling the blacklist.                             ##         - 1.0: First release.                                             ##                                                                           ## Report bugs/suggestions to Fz_Egg@yahoo.com                               ##                                                                           ## Copyright © 2005 Opposing (aka Sir_Fz)                                    ##                                                                           ## This program is free software; you can redistribute it and/or modify      ## it under the terms of the GNU General Public License as published by      ## the Free Software Foundation; either version 2 of the License, or         ## (at your option) any later version.                                       ##                                                                           ## This program is distributed in the hope that it will be useful,           ## but WITHOUT ANY WARRANTY; without even the implied warranty of            ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             ## GNU General Public License for more details.                              ##                                                                           ## You should have received a copy of the GNU General Public License         ## along with this program; if not, write to the Free Software               ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA ##                                                                           ############################################################################################################## Configurations start here: ## __________________________ ### Blacklist File:#set blackl(file) "scripts/blacklist.txt"set blackl(file) "test-scripts-6/blacklist.txt"## Blacklist "Excess Flood" protection. Set here how many blacklisted users are allowed## to join in how many seconds before using the slow queue in order for the bot not to## flood out with reason "Excess Flood."set blackl(punish) 4:2## Do you want the bot to also check for blacklisted users on op ? (0: no / 1: yes)set blackl(checkop) 1## Do you want to ban the same ban from the blacklist file## or do you want it to be spcific ? (0: specific / 1: same ban as the file) ### example:## Suppose that *!lamest@* is banned.# .. joins lamer!lamest@lamer.org# .. bot sets mode +b *!lamest@*# .. lamer kicked by bot "Blacklisted user."## This happens if this option is set to 1.## but if you set it to 0, then you can choose what bantype you want to ban.set blackl(bansame) 1## if blackl(bansame) is set to 0:## What ban type do you want to ban ?# 0: *!user@full.host.tld # 1: *!*user@full.host.tld # 2: *!*@full.host.tld # 3: *!*user@*.host.tld # 4: *!*@*.host.tld # 5: nick!user@full.host.tld # 6: nick!*user@full.host.tld # 7: nick!*@full.host.tld # 8: nick!*user@*.host.tld # 9: nick!*@*.host.tldset blackl(btype) 2## Set default ban reason if not specified.## NOTE: use %requester to use the nick of the one who set the ban.set blackl(kmsg) "Banned: Requested by %requester"## set default ban time (in minutes) if no bantime specified. (0 means no ban time)set blackl(btime) 0## Do you want the ban to be removed from the file after ban time expires ? (0: no / 1: yes)## if set to 0, the bot will only remove the ban from the channel but not from the file.set blackl(rbabt) 0## Set here the trigger for public commands.## example: set blackl(trig) "!"## now using !listbl on main will show the blacklist.set blackl(trig) "!"## Set flags that are allowed to use these commands.## &lt;global flags&gt;|&lt;channel flags&gt;set blackl(flags) n|-# Configurations end here. ##################################################################################################### Code starts here, please do not edit anything unless you know TCL: ## __________________________________________________________________ #bind nick - * bl:banbind join - * bl:banbind dcc $blackl(flags) addbl bl:addbind dcc $blackl(flags) rembl bl:rembind dcc $blackl(flags) listbl bl:listbind pubm $blackl(flags) * bl:pubbind mode - "* +o" bl:copsetudef flag blacklistif {[file exists $blackl(file)]} {  set BLNicks [split [read [set inf [open $blackl(file)]]] "\n"][close $inf]} { set BLNicks [list]}foreach {blackl(lim) blackl(secs)} [split $blackl(punish) :] {break}proc bl:ban {nick uhost hand chan {nn ""}} { global BLNicks blackl blflood if {![botisop $chan] || ![channel get $chan blacklist]} {return 0} if {![info exists blflood([set chan [string tolower $chan]])]} { set blflood($chan) 0 } if {$nn != ""} { set nick $nn } foreach blnick $BLNicks {  if {[string match -nocase [set ban [lindex [split $blnick] 0]] $nick!$uhost]} {   set ban [string map {\\\\ \\ \\\[ \[ \\\] \]} $ban]    if {[blfollow $blackl(secs) blflood($chan)] &lt; $blackl(lim)} {    putquick "KICK $chan $nick :[string map [list %requester [lindex [split $blnick] 1]] [join [lrange [split $blnick] 2 end-1]]]"  if {$blackl(bansame)} {    set ban [string map {\\\\ \\ \\\[ \[ \\\] \]} $ban]   putquick "MODE $chan -o+b $nick $ban"     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $ban]     }    } {     putquick "MODE $chan -o+b $nick [set aban [blbtype $nick!$uhost $blackl(btype)]]"     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $aban]     }    }   } {    puthelp "KICK $chan $nick :[string map [list %requester [lindex [split $blnick] 1]] [join [lrange [split $blnick] 2 end-1]]]"  if {$blackl(bansame)} {   set ban [string map {\\\\ \\ \\\[ \[ \\\] \]} $ban]   pushmode $chan -o $nick   pushmode $chan +b $ban     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $ban]     }    } {     pushmode $chan -o $nick     pushmode $chan +b [set aban [blbtype $nick!$uhost $blackl(btype)]]     if {!([set btime [lindex [split $blnick] end]] &lt;= 0)} {      timer $btime [list rem:blban $chan $aban]     }    }   }   putlog "\[\002BlackList\002\]: Banned \002$nick\002!\002$uhost\002 matching [string map {! \002!\002 @ \002@\002} \002$ban\002] on \002$chan\002"   break  } }}proc bl:add {hand idx arg} { if {$arg == ""} { putlog "SYNTAX: \003.addbl &lt;nick!user@host&gt; \[reason\] \[btime\]\003"; return 0 } if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 0]]]} {  putlog "SYNTAX: \003.addbl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002 \[reason\] \[bantime\]\003"  return 0 } if {[bl:do:add $hand $arg]} {  foreach chan [channels] {   if {![channel get $chan blacklist]} { continue }   foreach ubchecked [chanlist $chan] {    bl:ban $ubchecked [getchanhost $ubchecked $chan] [nick2hand $ubchecked] $chan   }  }  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] has been \002added\002 to the blacklist." } {  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] already \002exists\002 in the blacklist." }}proc bl:do:add {hand arg} { global blackl BLNicks set added 0 if {[llength [lrange [split $arg] 1 end]] == 1} {  if {[string is integer [lindex [split $arg] end]]} {   set kreason "$blackl(kmsg)"   set btime "[lindex [split $arg] end]"  } else {   set kreason "[lrange [split $arg] 1 end]"   set btime "$blackl(btime)"  } } elseif {[llength [lrange [split $arg] 1 end]] &gt; 1} {  if {[string is integer [lindex [split $arg] end]]} {   set kreason "[join [lrange [split $arg] 1 end-1]]"   set btime "[lindex [split $arg] end]"  } else {   set kreason "[join [lrange [split $arg] 1 end]]"   set btime "$blackl(btime)"  } } else {  set kreason "$blackl(kmsg)"  set btime "$blackl(btime)" } if {![file exists $blackl(file)]} {   set temp [open $blackl(file) w]  close $temp } set blnick "[string map {\\ \\\\ \[ \\\[ \] \\\]} [lindex [split $arg] 0]]" if {![we:can:find:ban $blnick add]} {  puts [set fs [open $blackl(file) a]] "$blnick $hand $kreason $btime"  close $fs  set BLNicks [split [read [set inf [open $blackl(file)]]] "\n"][close $inf]  set added 1 } set added}proc bl:rem {hand idx arg} { if {$arg == ""} { putlog "SYNTAX: \003.rembl &lt;nick!user@host&gt;\003"; return 0 } if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 0]]]} {   putlog "SYNTAX: \003.rembl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002\003"  return 0 } if {[bl:do:rem $arg]} {  foreach chan [channels] {   if {![channel get $chan blacklist]} { continue }   foreach ban [chanbans $chan] {    if {[string match -nocase $blnick [set sban [lindex $ban 0]]]} {     pushmode $chan -b $sban    }   }  }  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002deleted\002 from the blacklist." } {  putlog "[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002not\002 found in the blacklist." }}proc bl:do:rem arg { global blackl BLNicks set remmed 0 set blnick [lindex [split $arg] 0] if {![file exists $blackl(file)]} {   set temp [open $blackl(file) w]  close $temp } if {[we:can:find:ban $blnick rem]} {  set z ""  set a [open $blackl(file) r]  while {![eof $a]} {   set b [gets $a]   if {![string equal -nocase [lindex $b 0] $blnick]} { lappend z ${b} }  }  close $a  set n [open $blackl(file) w]  foreach k $z {   if {$k != ""} { puts $n $k }  }  close $n  set BLNicks [split [read [set inf [open $blackl(file)]]] "\n"][close $inf]  set remmed 1 } set remmed}proc bl:list {hand idx arg} { global BLNicks if {[string equal "{} {}" $BLNicks] || [string equal "" $BLNicks]} {  putlog "There are \002no\002 bans in the blacklist." } {  set c 1  foreach blnick $BLNicks {   if {$blnick != ""} {    putlog "\[\002$c\002\] - \002Mask\002: [lindex [split $blnick] 0] - \002Requester\002: [lindex [split $blnick] 1] - \002Bantime\002: [lindex [split $blnick] end]"    incr c   } {    putlog "\[\002*\002\] - End of list."   }  } }}proc bl:pub {nick uhost hand chan arg} { global blackl BLNicks if {![string equal $blackl(trig) [string index $arg 0]]} {return 0} # switch -- [lindex [lindex [split $arg $blackl(trig)] 1] 0] {}    switch -- [lindex [split [lindex [split $arg $blackl(trig)] 1]] 0] {   "xaddbl" {   if {[join [lrange [split $arg] 1 end]] == ""} { puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)addbl &lt;nick!user@host&gt; \[reason\] \[btime\]\003"; return 0 }   if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 1]]]} {    puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)addbl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002 \[reason\] \[bantime\]\003"    return 0   }   if {[bl:do:add $hand [join [lrange [split $arg] 1 end]]]} {    if {[channel get $chan blacklist]} {     foreach ubchecked [chanlist $chan] {      bl:ban $ubchecked [getchanhost $ubchecked $chan] [nick2hand $ubchecked] $chan     }    }     pushmode $chan +b $blnick    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] has been \002added\002 to the blacklist."   } {    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] already \002exists\002 in the blacklist."   }  }  "xrembl" {   #  putchan $chan "[join [lrange [split $arg] 1 end]]"   if {[join [lrange [split $arg] 1 end]] == ""} { puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)rembl &lt;nick!user@host&gt;\003"; return 0 }   if {![string match -nocase *!*@* [set blnick [lindex [split $arg] 1]]]} {     puthelp "NOTICE $nick :SYNTAX: \003$blackl(trig)rembl \002&lt;nick&gt;\002!\002&lt;user&gt;\002@\002&lt;host&gt;\002\003"    return 0   }   if {[bl:do:rem [join [lrange [split $arg] 1 end]]]} {     if {[channel get $chan blacklist]} {     foreach ban [chanbans $chan] {      if {[string match -nocase $blnick [set sban [lindex $ban 0]]]} {       pushmode $chan -b $sban      }     }    }    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002deleted\002 from the blacklist."   } {    puthelp "NOTICE $nick :[string map {! \002!\002 @ \002@\002} \002$blnick\002] was \002not\002 found in the blacklist."   }  }  "xlistbl" {   if {[string equal "{} {}" $BLNicks] || [string equal "" $BLNicks]} {    puthelp "NOTICE $nick :There are \002no\002 bans in the blacklist."   } {    set c 1    foreach blnick $BLNicks {     if {$blnick != ""} {      puthelp "NOTICE $nick :\[\002$c\002\] - \002Mask\002: [lindex [split $blnick] 0] - \002Requester\002: [lindex [split $blnick] 1] - \002Bantime\002: [lindex [split $blnick] end]"      incr c     } {      puthelp "NOTICE $nick :\[\002*\002\] - End of list."     }    }   }  } }}proc bl:cop {nick uhost hand chan mc targ} { global blackl if {[isbotnick $targ] &amp;&amp; $blackl(checkop) &amp;&amp; [channel get $chan blacklist]} {  foreach blnick [chanlist $chan] {   bl:ban $blnick [getchanhost $blnick $chan] [nick2hand $blnick] $chan  } }}proc rem:blban {chan ban} { global blackl if {$blackl(rbabt)} {  pushmode $chan -b $ban  bl:do:rem $ban } {  pushmode $chan -b $ban }}proc we:can:find:ban {blnick type} { global blackl set spfound 0 switch -- $type {  "add" {    foreach temp [split [string tolower [read [set inf [open $blackl(file)]]]] "\n"][close $inf] {    if {[string equal -nocase [lindex [split $temp] 0] $blnick]} { set spfound 1 ; break }   }  }  "rem" {   foreach temp [split [string tolower [read [set inf [open $blackl(file)]]]] "\n"][close $inf] {    if {[string equal -nocase [lindex [split $temp] 0] [string map {\\ \\\\ \[ \\\[ \] \\\]} $blnick]]} { set spfound 1 ; break }   }  } } set spfound}proc blfollow {secs blvar} { upvar $blvar fvar utimer $secs [list bldicr $blvar] incr fvar}proc bldicr blvar { upvar $blvar fvar if {$fvar &gt; 0} {  incr fvar -1 }}set blbtypeDefaultType 3proc blbtype [list name [list type $blbtypeDefaultType]] {  if {[scan $name {%[^!]!%[^@]@%s} nick user host]!=3} {   error "Usage: maskbhost &lt;nick!user@host&gt; \[type\]"  }  if [string match {[3489]} $type] {   if [string match {*[0-9]} $host] {    set host [join [lrange [split $host .] 0 2] .].*   } elseif {[string match *.*.* $host]} {    set host *.[join [lrange [split $host .] end-1 end] .]   }  }  if [string match {[1368]} $type] {   set user *[string trimleft $user ~]  } elseif {[string match {[2479]} $type]} {   set user *  }  if [string match {[01234]} $type] {   set nick *  }  set name $nick!$user@$host }putlog "BlackList v1.4 By Opposing (a.k.a Sir_Fz) Loaded..."</code></pre></div>using this command :<br><blockquote class="uncited"><div> !rembl ALme*ria*!*@* testing   </div></blockquote>gettin this error :<br><blockquote class="uncited"><div>  Tcl error [bl:pub]: list element in braces followed by "*!*@*" instead of space </div></blockquote><br>output of .set  errorInfo:<br><br><blockquote class="uncited"><div><br> .set errorInfo<br> Currently: list element in braces followed by "*!*@*" instead of space<br> Currently:     while executing<br> Currently: "lindex $b 0"<br> Currently:     (procedure "bl:do:rem" line 14)<br> Currently:     invoked from within<br> Currently: "bl:do:rem [join [lrange [split $arg] 1 end]]"<br> Currently:     (procedure "bl:pub" line 31)<br> Currently:     invoked from within<br> Currently: "bl:pub $_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5"<br></div></blockquote><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Sun Apr 05, 2026 6:53 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Arnold_X-P]]></name></author>
		<updated>2025-12-20T21:41:56-04:00</updated>

		<published>2025-12-20T21:41:56-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113420#p113420</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113420#p113420"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Google Search]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113420#p113420"><![CDATA[
has TLS installed.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=8327">Arnold_X-P</a> — Sat Dec 20, 2025 9:41 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Carlin0]]></name></author>
		<updated>2025-12-01T15:23:20-04:00</updated>

		<published>2025-12-01T15:23:20-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113401#p113401</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113401#p113401"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Issues with fortune.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113401#p113401"><![CDATA[
<blockquote class="uncited"><div>Hello,<br>The (debian) host you are running on, does not have the fortune package installed<br><br>See <a href="https://wiki.debian.org/fortune" class="postlink">https://wiki.debian.org/fortune</a><br><br>Best regards,<br>nml375</div></blockquote>What are you saying?<div class="codebox"><p>Code: </p><pre><code>dpkg -l | grep fortuneii  fortune-mod                     1:1.99.1-9                           amd64        provides fortune cookies on demandii  fortunes-it                     2.16-2                               all          Data files containing Italian fortune cookiesii  fortunes-it-brianza             2.16-2                               all          Data files containing Brianza fortune cookiesii  fortunes-it-off                 1.99-4.1                             all          Data files containing Italian fortune cookies, offensive section</code></pre></div>EDIT: I simply restarted the bot and now it works...mystery<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12778">Carlin0</a> — Mon Dec 01, 2025 3:23 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[nml375]]></name></author>
		<updated>2025-12-01T14:09:40-04:00</updated>

		<published>2025-12-01T14:09:40-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113400#p113400</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113400#p113400"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Issues with fortune.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113400#p113400"><![CDATA[
Hello,<br>The (debian) host you are running on, does not have the fortune package installed<br><br>See <a href="https://wiki.debian.org/fortune" class="postlink">https://wiki.debian.org/fortune</a><br><br>Best regards,<br>nml375<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=8052">nml375</a> — Mon Dec 01, 2025 2:09 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Carlin0]]></name></author>
		<updated>2026-04-07T08:23:13-04:00</updated>

		<published>2025-12-01T09:58:13-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113399#p113399</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113399#p113399"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Issues with fortune.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113399#p113399"><![CDATA[
It works on Ubuntu 22.04 but not on Debian 13<br><br>Script<br><div class="codebox"><p>Code: </p><pre><code># Fortune Interface#   by BarkerJr &lt;http://barkerjr.net&gt;catch Fortune::uninstallnamespace eval Fortune {##### SETTING ###### Uncomments (remove the # from) the following set commands if you wish to# change the defaults.# Set this to what you wish to profex the command with ("" for none)set cmdchar "!"# [0/1] send via NOTICE (1=notice, 0=privmsg)set notice 0##### THE SCRIPT #####if {[info exists notice]} {  if {($notice != 0) &amp;&amp; ($notice != 1)} {    set notice 0    putlog "WARNING: Fortune::notice must be 0 or 1\            (setting to default of $notice)"  }} else { set notice 0 }if {![info exists cmdchar]} { set cmdchar {!} }bind pub - ${cmdchar}fortune Fortune::doitproc doit {nick uhost hand chan arg} {  variable notice  switch -- $arg {    {a} {set fortune {-a}}    {c} {set fortune {-c}}    {o} {set fortune {-o}}    default {set fortune {}}  }  regsub -all \t [split [exec {fortune} $fortune] \n] {     } fortune  if {$notice} { set way {NOTICE} } else { set way {PRIVMSG} }  foreach line $fortune { puthelp "$way $chan :$line" }  return 1}bind evnt - prerehash Fortune::uninstallproc uninstall {args} {  variable cmdchar  catch "unbind pub - ${cmdchar}fortune Fortune::doit"  global cmdchar  catch "unbind pub - ${cmdchar}fortune Fortune::doit"  unbind evnt - prerehash Fortune::uninstall  namespace delete ::Fortune}}</code></pre></div>Error<br><div class="codebox"><p>Code: </p><pre><code>[14:46:10] Tcl error [Fortune::doit]: couldn't execute "fortune": no such file or directory.set errorInfo[14:46:27] #Carlin0# set errorInfoCurrently: couldn't execute "fortune": no such file or directoryCurrently:     while executingCurrently: "exec {fortune} $fortune"Currently:     (procedure "Fortune::doit" line 9)Currently:     invoked from withinCurrently: "Fortune::doit $_pub1 $_pub2 $_pub3 $_pub4 $_pub5"</code></pre></div>Thanks in advance<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12778">Carlin0</a> — Mon Dec 01, 2025 9:58 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Carlin0]]></name></author>
		<updated>2025-10-23T08:29:28-04:00</updated>

		<published>2025-10-23T08:29:28-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113386#p113386</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113386#p113386"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Error in BlackIP.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113386#p113386"><![CDATA[
<blockquote class="uncited"><div>Look like ip-api.io now asks for an API key, and the error message is not in json so the json procedures return bad values.<br><br>You should probably ask BLaCkShaDoW to update his script</div></blockquote>Ok thank you...<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12778">Carlin0</a> — Thu Oct 23, 2025 8:29 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[CrazyCat]]></name></author>
		<updated>2025-10-23T08:26:10-04:00</updated>

		<published>2025-10-23T08:26:10-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113385#p113385</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113385#p113385"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Error in BlackIP.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113385#p113385"><![CDATA[
Look like ip-api.io now asks for an API key, and the error message is not in json so the json procedures return bad values.<br><br>You should probably ask BLaCkShaDoW to update his script<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=691">CrazyCat</a> — Thu Oct 23, 2025 8:26 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Carlin0]]></name></author>
		<updated>2025-10-23T08:12:16-04:00</updated>

		<published>2025-10-23T08:12:16-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113384#p113384</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113384#p113384"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Error in BlackIP.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113384#p113384"><![CDATA[
<blockquote class="uncited"><div><strong class="text-strong">.set errorInfo</strong> with a capital I</div></blockquote>Sorry...<br><div class="codebox"><p>Code: </p><pre><code>[14:07:55] Tcl error [black:ip:check]: unexpected token ":" at position 1; expecting VALUE.set errorInfo[14:08:14] #Carlin0# set errorInfoCurrently: unexpected token ":" at position 1; expecting VALUECurrently:     while executingCurrently: "unexpected $tokenCursor $token "VALUE""Currently:     ("default" arm line 6)Currently:     invoked from withinCurrently: "switch -exact -- $leadingChar {Currently:             "\{" {Currently:                 return [parseObject $tokens $nrTokens tokenCursor]Currently:             }Currently:             "\[" {..."Currently:     (procedure "parseValue" line 12)Currently:     invoked from withinCurrently: "parseValue $tokens $nrTokens tokenCursor"Currently:     (procedure "::json::json2dict" line 10)Currently:     invoked from withinCurrently: "::json::json2dict $data"Currently:     (procedure "blackip:json" line 3)Currently:     invoked from withinCurrently: "blackip:json "suspicious_factors" $data_secured"Currently:     (procedure "check:ip" line 82)Currently:     invoked from withinCurrently: "check:ip $ip $chan 2 [list 0 $nick 3]"Currently:     (procedure "black:ip:check" line 41)Currently:     invoked from withinCurrently: "black:ip:check $_pub1 $_pub2 $_pub3 $_pub4 $_pub5"</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12778">Carlin0</a> — Thu Oct 23, 2025 8:12 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[CrazyCat]]></name></author>
		<updated>2025-10-23T08:04:24-04:00</updated>

		<published>2025-10-23T08:04:24-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113383#p113383</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113383#p113383"/>
		<title type="html"><![CDATA[Script Support &amp; Releases • Re: Error in BlackIP.tcl]]></title>

					<category term="Script Support &amp; Releases" scheme="https://forum.eggheads.org/viewforum.php?f=3" label="Script Support &amp; Releases"/>
		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113383#p113383"><![CDATA[
<strong class="text-strong">.set errorInfo</strong> with a capital I<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=691">CrazyCat</a> — Thu Oct 23, 2025 8:04 am</p><hr />
]]></content>
	</entry>
	</feed>
