<?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/21708" />

	<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>2025-12-07T11:05:06-04:00</updated>

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

		<entry>
		<author><name><![CDATA[pektek]]></name></author>
		<updated>2025-12-07T11:05:06-04:00</updated>

		<published>2025-12-07T11:05:06-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113415#p113415</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113415#p113415"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113415#p113415"><![CDATA[
I don’t really know much about DALnet. This bot is based on Unreal 3.2. If you switch to Unreal, you can easily use what I shared with you. There are no errors; I carefully tested everything before sharing it. Thanks a lot for your interest, Simo. If you ever have any questions about an Unreal 3.2 Eggdrop, feel free to ask; I can test it for you and share a clean, trouble-free version anytime         <img class="smilies" src="https://forum.eggheads.org/images/smilies/icon_cool.gif" width="15" height="15" alt="8)" title="Cool"><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=13010">pektek</a> — Sun Dec 07, 2025 11:05 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2025-12-07T11:00:49-04:00</updated>

		<published>2025-12-07T11:00:49-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113414#p113414</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113414#p113414"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113414#p113414"><![CDATA[
thanks for your reply pektek but it seems all 3 methods you posted dont meet the criteria ive mentioned in my first post and also i dont need anything unrealircd related as this is used on dalnet, but i apreciate your attempt to contribute to a solution, this is much apreciated as always ofcourse.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Sun Dec 07, 2025 11:00 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[pektek]]></name></author>
		<updated>2025-12-06T12:22:57-04:00</updated>

		<published>2025-12-06T12:22:57-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113413#p113413</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113413#p113413"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113413#p113413"><![CDATA[
# NOTE:<br># Your Eggdrop bot MUST be inside the channels you want to monitor.<br># Otherwise the scanner will NOT work.<br># Tested and working. — Pektek<br># Please respect the time and effort put into this.<br><br>#  Just run it, sit down, and watch, Simo<br><br><div class="codebox"><p>Code: </p><pre><code>namespace eval checkbadchan {    # JOIN trigger    bind join - * checkbadchan::checkbadchan:scan    # Main scan procedure    proc checkbadchan:scan {nick uhost hand chan} {        # Skip bot, op, halfop        if {[isbotnick $nick] || [matchattr $hand of|of $chan]} {            return 0        }        # Convert channel name to lowercase        set lc [string tolower $chan]        # Blacklisted channel keywords        set regex {.*(sex|sexy|sexchat|seks|porno|porn|pornstar|gay|gey|[censored]|fck|fuk|dick|diq|cum|cumm|horny|bdsm|slut|whore|tits|milf).*}        # If match found        if {[regexp -nocase $regex $lc]} {            putlog "BADCHAN → $nick joined $chan (MATCH)"            # Create ban mask            set hostmask "*!*@[lindex [split $uhost @] 1]"            # Add ban if not already banned            if {![ischanban $hostmask $chan]} {                pushmode $chan +b $hostmask            }            # Send private message            putserv "PRIVMSG $nick :Warning: Blacklisted channel detected -&gt; $chan"            # Kick user            putserv "KICK $chan $nick :BLACKLISTED CHANNEL"            return 0        }        return 0    }}putlog "Loaded by Pektek"</code></pre></div>I’m giving you three versions, both tested and working. I spent hours on this for you, Simo.<br>Respectfully, Pektek.   <br><br>NOTE: What this TCL does (short &amp; clear):<br>     !add #channel → Adds the channel to the blacklist, saves it to .badchan and channels.conf.<br>Bot automatically JOINs the channel using OS RAW JOIN.<br><br>When the bot joins the channel, it takes +o, and after 2 seconds it scans everyone inside.<br><br>If the bot is in the channel, anyone who joins is banned + kicked after 5 seconds.<br><br>Even if the user is OP / founder / admin, they still get ban + kick.<br><br>Bot stays in the channel for 2 minutes, then sends PART and leaves.<br><br>After a bot restart, .badchan is loaded and the bot rejoins all blacklisted channels and continues working automatically. <br>Please move the bot you want to operate to an authorized channel and add it to the channel using !add #channel.<br><br>                                            Just run it, sit down, and watch, Simo   <img class="smilies" src="https://forum.eggheads.org/images/smilies/icon_cool.gif" width="15" height="15" alt="8)" title="Cool"> <br><div class="codebox"><p>Code: </p><pre><code>namespace eval badchan {    variable list {}    variable file ".badchan"    ###################################################    # LOAD CHANNEL LIST (ON RESTART)    ###################################################    proc load_list {} {        variable list        variable file        if {[file exists $file]} {            set fp [open $file r]            set data [split [read $fp] "\n"]            close $fp            foreach chan $data {                if {$chan ne ""} {                    lappend list $chan                }            }            putlog "BADCHAN → Loaded [llength $list] channels from file."        } else {            putlog "BADCHAN → .badchan file not found, creating new list."        }    }    ###################################################    # SAVE CHANNEL LIST TO FILE    ###################################################    proc save_list {} {        variable list        variable file        set fp [open $file w]        foreach chan $list { puts $fp $chan }        close $fp        putlog "BADCHAN -&gt; Channel list saved to file."    }    ###################################################    # APPEND CHANNEL TO channels.conf    ###################################################    proc save_conf {chan} {        set fp [open "channels.conf" a]        puts $fp "channel add $chan {\n    auto-join 1\n}"        close $fp        putlog "BADCHAN -&gt; $chan added to channels.conf."    }    ###################################################    # COMMAND: !add #channel    ###################################################    bind pub n|n !add ::badchan::cmd_add    proc cmd_add {nick uhost hand chan args} {        variable list        set target [string tolower [lindex $args 0]]        if {$target eq "" || [string index $target 0] ne "#"} {            putserv "PRIVMSG $chan :Usage: !add #channel"            return        }        if {[lsearch -exact $list $target] != -1} {            putserv "PRIVMSG $chan :$target is already in the blacklist."            return        }        # Add to internal list + save        lappend list $target        save_list        save_conf $target        putserv "PRIVMSG $chan :$target has been added to the BADCHAN blacklist."        putlog "BADCHAN → Added $target to blacklist."        # Register channel in Eggdrop        channel add $target        channel set $target +auto-join        channel set $target -inactive        # RAW JOIN through OS (guaranteed join)        utimer 2 "putserv \"PRIVMSG OS :RAW :$::botnick JOIN $target\""        putlog "BADCHAN → RAW JOIN sent for $target."    }    ###################################################    # SCAN CHANNEL (If bot joins late)    ###################################################    proc scan_channel {chan} {        set users [chanlist $chan]        foreach u $users {            if {![string equal -nocase $u $::botnick]} {                set host [getchanhost $u $chan]                ::badchan::punish $chan $u $host            }        }        putlog "BADCHAN → Completed scan for $chan (all users punished)."    }    ###################################################    # JOIN EVENT HANDLER    ###################################################    bind join - * ::badchan::on_join    proc on_join {nick uhost hand chan} {        variable list        set chan [string tolower $chan]        # If channel not in blacklist → do nothing        if {[lsearch -exact $list $chan] == -1} return        # BOT JOINS        if {[string equal -nocase $nick $::botnick]} {            # Bot gets OP            utimer 1 "putserv \"MODE $chan +o $::botnick\""            putlog "BADCHAN -&gt; Bot joined $chan and received +o."            # Scan the channel (punish all users)            utimer 2 [list ::badchan::scan_channel $chan]            # Leave after 2 minutes            utimer 120 "putserv \"PART $chan :Leaving…\""            return        }        # USER JOINS → punish after 5 seconds        utimer 5 [list ::badchan::punish $chan $nick $uhost]    }    ###################################################    # PUNISHMENT SYSTEM (BAN + KICK)    ###################################################    proc punish {chan nick uhost} {        putlog "BADCHAN → Punishing $nick in $chan."        # Ensure bot has OP        if {![isop $::botnick $chan]} {            putserv "MODE $chan +o $::botnick"            after 300        }        # Create ban mask        set hostpart [lindex [split $uhost @] 1]        set mask "*!*@$hostpart"        # Ban + kick user        putserv "MODE $chan +b $mask"        putserv "KICK $chan $nick :Blacklisted channel."        putlog "BADCHAN → $nick was banned and kicked from $chan."    }    ###################################################    # AUTO-JOIN BLACKLISTED CHANNELS AFTER RESTART    ###################################################    bind evnt - init-server ::badchan::startup    proc startup {type} {        variable list        ::badchan::load_list        foreach chan $list {            channel add $chan            channel set $chan +auto-join            channel set $chan -inactive            # RAW JOIN through OS            utimer 3 "putserv \"PRIVMSG OS :RAW :$::botnick JOIN $chan\""            putlog "BADCHAN → RAW JOIN sent for $chan after restart."        }    }}putlog "Loaded Badchan by pektek"                       </code></pre></div>Please respect the time and effort put into this.  <img class="smilies" src="https://forum.eggheads.org/images/smilies/icon_cool.gif" width="15" height="15" alt="8)" title="Cool"><br><br>If you want to prevent anyone from joining channels except their autojoin channels, the easiest way is to add the following code inside unrealircd.conf:<br> After adding this, save the file and run /rehash on the server, or execute ./unreal rehash in telnet.<br><br>From now on, no user will be able to join any channel manually.<br>This is the third version of this method.<br><div class="codebox"><p>Code: </p><pre><code>deny channel {channel "#*";reason "Opening channels on the server is FORBIDDEN!";warn on;};allow channel {    channel "#Connection";};allow channel {    channel "#DJ";};allow channel {    channel "#DJChat";};allow channel {    channel "#Help";};allow channel {    channel "#WordGame";};allow channel {    channel "#Number";};</code></pre></div>When you set the channel names as autojoin, no one will be allowed to join any channels other than the ones you specify.<br>No user will be able to randomly join any channels; they will be blocked.<br>These are only examples — the important point is that the channel names you define for autojoin must be the same as the channel names you write here.<br>This added command is valid and tested for the Unreal 3.2.x series. It has not been tested on other versions.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=13010">pektek</a> — Sat Dec 06, 2025 12:22 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2025-12-06T05:26:00-04:00</updated>

		<published>2025-12-06T05:26:00-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113412#p113412</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113412#p113412"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113412#p113412"><![CDATA[
Ive tried this version and it returns lot of errors, but this code seems generated by AI, did you write this code?<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Sat Dec 06, 2025 5:26 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[pektek]]></name></author>
		<updated>2025-12-02T11:56:32-04:00</updated>

		<published>2025-12-02T11:56:32-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113403#p113403</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113403#p113403"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113403#p113403"><![CDATA[
try this ;<br><br>If there is a mistake, just tell me, my friend.<br><div class="codebox"><p>Code: </p><pre><code>namespace eval checkbadchan {    bind join - * [namespace current]::Djoin:badChnz:Checker    setudef flag chckbadchan    if {[string match "*BadChan:Scan*" [utimers]] == 0} {        utimer 5 [namespace current]::BadChan:Scan    }    proc Djoin:badChnz:Checker {nick uhost hand chan} {        if {![channel get $chan chckbadchan]} { return 0 }        if {[isbotnick $nick] || [matchattr $hand of|of $chan]} { return 0 }        after 2000 [list [namespace current]::Delay-join:badChnz:Chk $nick $uhost $chan]    }    proc Delay-join:badChnz:Chk {nick uhost chan} {        if {![channel get $chan chckbadchan]} { return 0 }        if {[isbotnick $nick] || [isop $nick $chan] || [ishalfop $nick $chan] || [matchattr [nick2hand $nick] of|of $chan]} { return 0 }        if {![info exists ::badchanwhois]} { set ::badchanwhois [list] }        if {[lsearch -exact $::badchanwhois "[string tolower $nick] $chan"] == -1} {            lappend ::badchanwhois [string tolower $nick] $chan        }    }    proc BadChan:Scan {} {        set badwhoisonchan [list]        if {[string match "*BadChan:Scan*" [utimers]] == 0} {            utimer 5 [namespace current]::BadChan:Scan        }        if {![info exists ::badchanwhois]} { return 0 }        foreach {nick chan} $::badchanwhois {            if {[onchan $nick $chan]} {                lappend badwhoisonchan [string tolower $nick]            }        }        if {[llength $badwhoisonchan]} {            [namespace current]::Stck:WHoiZ $chan $badwhoisonchan        }    }    proc Stck:WHoiZ {chan userList {max 20}} {        set ::chanxer $chan        set userList [lsort -unique $userList]        set count [llength $userList]        set counter 0        while {$count &gt; 0} {            if ($count &gt; $max) {                set users [join [lrange $userList 0 [expr {$max - 1}]] ","]                set userList [lreplace $userList 0 [expr {$max - 1}]]                incr count -$max            } else {                set users [join $userList ","]                set count 0            }            incr counter 1            after [expr {$counter * 5000}] [list putserv "Whois :$users"]        }        bind raw - 319 [namespace current]::Check_BChanz    }    proc Check_BChanz {from key arg} {        set args [join $arg]        set nick [lindex $arg 1]        # Hata engellemek için default host        set chost ""        # Kullanıcı kanalda ise host’u al        if {[onchan $nick $::chanxer]} {            set chost [getchanhost $nick $::chanxer]        }        # Host yine boşsa işlem yapma — hata engelliyoruz        if {$chost eq ""} {            return 0        }        set badchans [list]        # ------------------ KARA LİSTE REGEX ------------------        if {[regexp -nocase {            slut|bdsm|s[0o]d[0o]m|daughter|wh[0o]r[3e]|subm[i1]ss[1i]v[3e]|            s[3e]ks|s[3e]cs|tits|pr[3e]gn[4a]t[1i]|pregnant|rape|r[0o]l[3e]pl[a4]y|            ambition|g[a4]y|[sf][4u]ck|inc[3e]st|s[3e]x|th[i1]rsty|c[4u]m|            t[3e][3e]nw[a4]nk[i1]n|(s|f)uck|p(orn|0rn|enis)|h[0o]rny|            h[0o]m[0o]se(x|ks)        } $args]} {            lappend badchans $args        }        # -------------------------------------------------------        if {[llength $badchans]} {            putlog "Bad Channel Detected → $nick | [join $badchans]"            # IRCCloud mask fix            if {[string match -nocase "*@*irccloud*" $chost]} {                set ident [string trimleft [lindex [split $chost @] 0] "~"]                set xbmaskx [string map {sid id uid id} $ident]                set bmask *!*[string tolower $xbmaskx]@*            } else {                set bmask "*!*@[lindex [split $chost @] 1]"            }            if {![ischanban $bmask $::chanxer]} {                pushmode $::chanxer +b $bmask            }            if {[onchan $nick $::chanxer]} {                putserv "privmsg $nick :\00312$nick\00301 Yasaklı / Blacklisted Kanal Tespit Edildi → \00304[join $badchans]\003"                putserv "kick $::chanxer $nick :\00304« BAD / BLACKLISTED SPAM CHANNEL »\017"            }        }        return 0    }}putlog "Loaded → [file normalize [info script]]"   </code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=13010">pektek</a> — Tue Dec 02, 2025 11:56 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2025-11-30T14:02:38-04:00</updated>

		<published>2025-11-30T14:02:38-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113397#p113397</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113397#p113397"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113397#p113397"><![CDATA[
also the  timer doesnt get cleared <br><blockquote class="uncited"><div>after#858 = {putserv {Whois :alard,circosta,consuela,dragone,fanya,ioab,nakasuji,pavlov,sisson,tremayne}} timer</div></blockquote><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Sun Nov 30, 2025 2:02 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2025-11-30T13:25:00-04:00</updated>

		<published>2025-11-30T13:25:00-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113396#p113396</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113396#p113396"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113396#p113396"><![CDATA[
thanks for your reply <br><br>Ive tested it and got this error :<br><blockquote class="uncited"><div>Tcl error [::checkbadchan::Check_BChanz]: can't read "chost": no such variable</div></blockquote><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Sun Nov 30, 2025 1:25 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[pektek]]></name></author>
		<updated>2025-11-30T09:21:57-04:00</updated>

		<published>2025-11-30T09:21:57-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113392#p113392</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113392#p113392"/>
		<title type="html"><![CDATA[Re: check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113392#p113392"><![CDATA[
corrected version<br><div class="codebox"><p>Code: </p><pre><code>namespace eval checkbadchan {    bind join - * [namespace current]::Djoin:badChnz:Checker    setudef flag chckbadchan    if {[string match "*BadChan:Scan*" [utimers]] == 0} {        utimer 5 [namespace current]::BadChan:Scan    }    proc Djoin:badChnz:Checker {nick uhost hand chan} {        if {![channel get $chan chckbadchan]} { return 0 }        if {[isbotnick $nick] || [matchattr $hand of|of $chan]} { return 0 }        after 2000 [list [namespace current]::Delay-join:badChnz:Chk $nick $uhost $chan]    }    proc Delay-join:badChnz:Chk {nick uhost chan} {        if {![channel get $chan chckbadchan]} { return 0 }        if {[isbotnick $nick] || [isop $nick $chan] || [ishalfop $nick $chan] || [matchattr [nick2hand $nick] of|of $chan]} { return 0 }                if {![info exists ::badchanwhois]} { set ::badchanwhois [list] }        if {[lsearch -exact $::badchanwhois "[string tolower $nick] $chan"] == -1} {            lappend ::badchanwhois [string tolower $nick] $chan        }    }    proc BadChan:Scan {} {        set badwhoisonchan [list]        if {[string match "*BadChan:Scan*" [utimers]] == 0} {            utimer 5 [namespace current]::BadChan:Scan        }        if {![info exists ::badchanwhois]} { return 0 }        foreach {nick chan} $::badchanwhois {            if {[onchan $nick $chan]} {                lappend badwhoisonchan [string tolower $nick]            }        }        if {[info exists badwhoisonchan]} {            [namespace current]::Stck:WHoiZ $chan $badwhoisonchan        }    }    proc Stck:WHoiZ {chan userList {max 20}} {        set ::chanxer $chan        set userList [lsort -unique $userList]        set count [llength $userList]        set counter 0        while {$count &gt; 0} {            if {$count &gt; $max} {                set users [join [lrange $userList 0 [expr {$max - 1}]] ","]                set userList [lreplace $userList 0 [expr {$max - 1}]]                incr count -$max            } else {                set users [join $userList ","]                set count 0            }            incr counter 1            after [expr {$counter * 5000}] [list putserv "Whois :$users"]        }        bind raw - 319 [namespace current]::Check_BChanz    }    proc Check_BChanz {from key arg} {        set args [join $arg]        set nick [lindex $arg 1]        if {[onchan $nick $::chanxer]} {            set chost [getchanhost $nick $::chanxer]        }        set chans [lrange $args 2 end]        set badchans [list]        # ------------------- BANLANACAK KELIME/KANAL REGEX -------------------        if {[regexp -nocase {            slut|bdsm|s[0o]d[0o]m|daughter|wh[0o]r[3e]|subm[i1]ss[1i]v[3e]|            s[3e]ks|s[3e]cs|tits|pr[3e]gn[4a]t[1i]|pregnant|rape|r[0o]l[3e]pl[a4]y|            ambition|g[a4]y|[sf][4u]ck|inc[3e]st|s[3e]x|th[i1]rsty|c[4u]m|            t[3e][3e]nw[a4]nk[i1]n|(s|f)uck|p(orn|0rn|enis)|h[0o]rny|            h[0o]m[0o]se(x|ks)        } $args]} {            lappend badchans $args        }        # ----------------------------------------------------------------------        if {[llength $badchans]} {            putlog "⚠ Bad Channel Detected → $nick | [join $badchans]"            # IRCCloud kullanıcı maskesi            if {[string match -nocase "*@*irccloud*" $chost]} {                set ident [string trimleft [lindex [split $chost @] 0] "~"]                set xbmaskx [string map {sid id uid id} $ident]                set bmask *!*[string tolower $xbmaskx]@*            } else {                set bmask "*!*@[lindex [split $chost "@"] 1]"            }            if {![ischanban $bmask $::chanxer]} {                pushmode $::chanxer +b $bmask            }            if {[onchan $nick $::chanxer]} {                putserv "privmsg $nick :\00312$nick\00301 Yasaklı/Blacklisted Kanal Tespit Edildi → \00304[join $badchans]\003"                putserv "kick $::chanxer $nick :\00304« BAD / BLACKLISTED SPAM CHANNEL »\017"            }        }        return 0    }}putlog "Loaded → [file normalize [info script]]"</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=13010">pektek</a> — Sun Nov 30, 2025 9:21 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2025-12-07T11:01:55-04:00</updated>

		<published>2025-10-05T11:39:27-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=113368#p113368</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=113368#p113368"/>
		<title type="html"><![CDATA[check blacklisted channels after 5 minutes after joining channel]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=113368#p113368"><![CDATA[
greetings ,<br><br>the idea is to store each nick on join in a list after a check for not being admin ops halfops and such than to add in a list to send to a proc to do whois (in stacks of 20) on all the stored nicks after like 5 minutes to check for blacklisted channels and clear all checked nicks from the stored list im not sure i'm on the right track with this code :<br><div class="codebox"><p>Code: </p><pre><code>namespace eval checkbadchan {bind join - * [namespace current]::Djoin:badChnz:Checker setudef flag chckbadchan if {[string match "*BadChan:Scan*" [utimers]] == 0} {    utimer 5 [namespace current]::BadChan:Scan  }proc Djoin:badChnz:Checker {nick uhost hand chan} {  global chkbchan      if {![channel get $chan chckbadchan]} { return 0 }    if {[isbotnick $nick] || [matchattr $hand of|of $chan]} { return 0 }     after [expr {2*1000*1}] [list [namespace current]::Delay-join:badChnz:Chk $nick $uhost $chan] } proc Delay-join:badChnz:Chk  {nick uhost chan} {  global chkbchan     set ::badchanwhois [list]    if {![channel get $chan chckbadchan]} { return 0 }    if {[isbotnick $nick] || [isop $nick $chan] || [ishalfop $nick $chan] || [matchattr [nick2hand $nick] of|of $chan]} { return 0 }        if {[lsearch -exact $::badchanwhois "[string tolower $nick] $chan"] == -1} { lappend ::badchanwhois [string tolower $nick] $chan  }} proc BadChan:Scan { } {    set badwhoisonchan [list] if {[string match "*BadChan:Scan*" [utimers]] == 0} {    utimer 5 [namespace current]::BadChan:Scan  }    if {![info exists ::badchanwhois]} { return 0 }      foreach {nick chan} $::badchanwhois {    if {[onchan $nick $chan] } { lappend badwhoisonchan [string tolower $nick]   }      }     if {[info exists badwhoisonchan]} {  [namespace current]::Stck:WHoiZ $chan $badwhoisonchan  }}proc Stck:WHoiZ {chan userList {max 20}} {       set ::chanxer $chan         set userList [lsort -unique $userList]set count [llength $userList]     set counter 0while {$count &gt; 0} {if {$count &gt; $max} {set users [join [lrange $userList 0 [expr {$max - 1}]] ","]set userList [lreplace $userList 0 [expr {$max -1}]]incr count -$max} else {set users [join $userList ","]set count 0}               incr counter 1               after [expr {$counter*5000}] [list  putserv "Whois :$users"] }               bind raw - 319 [namespace current]::Check_BChanz} proc Check_BChanz {from key arg} {global listbadchansset chans [list]set args [join $arg]set nick [lindex $arg 1]if {[onchan $nick $::chanxer]} { set chost [getchanhost $nick $::chanxer] }set badchans [list]set chans [lrange $args 2 e]foreach tok $chans {set tok [string trimleft $tok ":@%+"]         if {[regexp -nocase {slut|bdsm|s[0o]d[0o]m|daughter|wh[0o]r[3e]|subm[i1]ss[1i]v[3e]|s[3e]ks|s[3e]cs|tits|pr[3e]gn[4a]t[1i]|pregnant|Rape|r[0o]l[3e]pl[a4]y|ambition|s[3e]ks|g[a4]y|[sf][4u]ck|inc[3e]st|s[3e]x|th[i1]rsty|c[4u]m|t[3e][3e]nw[a4]nk[i1]n|h[0o]m[0o|se(x|ks)|(s|f)uck|p(orn|0rn|enis)|h[0o]rny} $tok]} {  lappend badchans $tok}}    if {[llength $badchans]} {              putlog "Bad Channel Detected For $nick - [join $badchans]"    if {[string match -nocase "*@*irccloud*" $chost]} {                     set ident [string trimleft [lindex [split $chost @] 0] "~"]                    set xbmaskx [string map {sid id uid id} $ident]                    set bmask  *!*[string tolower $xbmaskx ]@*        } else { set bmask "*!*@[lindex [split $chost "@"] 1]" }              if {![ischanban $bmask $::chanxer]} { pushmode $::chanxer +b $bmask }            if {[onchan $nick $::chanxer]} {               putserv "privmsg $nick :\00312,00 $nick \00301 You Are In An Unallowed Channel\(S\)\: \00306 \037[join $badchans]\037 \00301 Part It/Them And Rejoin \00310 \037$::chanxer\037 \00301 Later After Your Ban Has Expired \017"               putserv "kick $::chanxer $nick :\002\00312,00 «-BAD/BlackListed &amp; OR Spam CHANNEL DETECTED-» \017" }}return 0}}    putlog "[file normalize [info script]]"</code></pre></div>ive tested it a few times and it doesnt seem to get all the nicks to boot out if they  are in a blacklisted channel. <br><br><br>Thanks in advance.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Sun Oct 05, 2025 11:39 am</p><hr />
]]></content>
	</entry>
	</feed>
