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

	<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>2023-03-08T11:46:04-04:00</updated>

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

		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2023-03-08T11:46:04-04:00</updated>

		<published>2023-03-08T11:46:04-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=111754#p111754</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=111754#p111754"/>
		<title type="html"><![CDATA[I`m use thommey`s arbchanmodes.tcl but I`m using inspircd-3.]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=111754#p111754"><![CDATA[
you didnt load thommey`s arbchanmodes.tcl<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Wed Mar 08, 2023 11:46 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[aslpls]]></name></author>
		<updated>2023-03-08T07:36:10-04:00</updated>

		<published>2023-03-08T07:36:10-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=111753#p111753</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=111753#p111753"/>
		<title type="html"><![CDATA[I`m use thommey`s arbchanmodes.tcl but I`m using inspircd-3.]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=111753#p111753"><![CDATA[
there's an error<div class="codebox"><p>Code: </p><pre><code>[11:35:08] Tcl error [Pub:ChanOwners-List]: invalid command name "isowner"</code></pre></div>[/code]<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12622">aslpls</a> — Wed Mar 08, 2023 7:36 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2023-03-07T14:30:39-04:00</updated>

		<published>2023-03-07T14:30:39-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=111752#p111752</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=111752#p111752"/>
		<title type="html"><![CDATA[I`m use thommey`s arbchanmodes.tcl but I`m using inspircd-3.]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=111752#p111752"><![CDATA[
to get a list of channel owners on channel you can try this:<br><div class="codebox"><p>Code: </p><pre><code>bind pub n !owners Pub:ChanOwners-Listproc  Pub:ChanOwners-List {nick host hand chan text} {   set userList [chanlist $chan]   set pos [lsearch -nocase $userList $::botnick]   set userList [lreplace $userList $pos $pos]    foreach user  $userList {   if {[isowner $user $chan]} {  lappend ChanownersList $user  }    }     if {[info exists ChanownersList]} {       set ChanownersList [lsort -unique $ChanownersList]      putnow "NOTICE $nick :\002\00305,00 \[[llength $ChanownersList]\]  \002\00312 ChanOwner(s) on channel  \002\00307 $chan  \00306 \: [join $ChanownersList] \017"    } else {      puthelp "NOTICE $nick :\00312,00 No ChanOwners on \002\00306 $chan. \002\017"   }}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Tue Mar 07, 2023 2:30 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2023-03-07T14:02:11-04:00</updated>

		<published>2023-03-07T14:02:11-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=111751#p111751</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=111751#p111751"/>
		<title type="html"><![CDATA[I`m use thommey`s arbchanmodes.tcl but I`m using inspircd-3.]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=111751#p111751"><![CDATA[
the code doesnt work for /who it works in channel like this : <br><div class="codebox"><p>Code: </p><pre><code>if {[isowner $nick $chan] || [isadmin $nick $chan] || [isop $nick $chan] || [ishalfop $nick $chan]} {  </code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Tue Mar 07, 2023 2:02 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[simo]]></name></author>
		<updated>2023-03-05T21:38:25-04:00</updated>

		<published>2023-03-05T21:38:25-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=111750#p111750</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=111750#p111750"/>
		<title type="html"><![CDATA[I`m use thommey`s arbchanmodes.tcl but I`m using inspircd-3.]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=111750#p111750"><![CDATA[
What exactly is the issue as im using the same code too on an inspircd-3 server and it works fine for me, perhaps you could provide some more information about what didn't seem to work<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12505">simo</a> — Sun Mar 05, 2023 9:38 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Valentin]]></name></author>
		<updated>2023-01-26T13:14:12-04:00</updated>

		<published>2023-01-26T13:14:12-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=111659#p111659</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=111659#p111659"/>
		<title type="html"><![CDATA[I`m use thommey`s arbchanmodes.tcl but I`m using inspircd-3.]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=111659#p111659"><![CDATA[
I`m using inspircd-3.15.0 and I thing the answer what inspircd send back is differend.<br>When I send command /who #chan, inspirct turn me back:<br>#Vidin supervisor H*~rs ~sys@darkirc/staff/supervisor :0 Valentin<br><br>So I need only ~ for correct work tcl.<br>Some one help me?<br><br>This is original tcl.<div class="codebox"><p>Code: </p><pre><code># arbchanmodes.tcl# Provides additional Eggdrop Tcl functions to check for any valid user prefix## 2010-2019 (c) Thomas "thommey" Sader## Thanks for bugreports to: SpiKe^^, EliteGod## ----------------------------------------------------------------------------# "THE BEER-WARE LICENSE" (Revision 42):# &lt;thommey@gmail.com&gt; wrote this file. As long as you retain this notice you# can do whatever you want with this stuff. If we meet some day, and you think# this stuff is worth it, you can buy me a beer in return. Thomas Sader# ----------------------------------------------------------------------------## Adds the following Tcl functions:## isowner &lt;nick&gt; [chan] - checks for prefix ~ (mode +q)# isadmin &lt;nick&gt; [chan] - checks for prefix &amp; (mode +a)################# Settings################ These are the modes that are going to be passed on to eggdrop.# The other ones NOT sent to eggdrop itself, but still passed on to scripts (mode binds).# You should not need to touch this, last updated for: Eggdrop v1.8.2# This is similar to the format of RAW 005 (RPL_ISUPPORT), meaning:# &lt;prefix/user modes&gt;,&lt;list-type modes&gt;,&lt;key-type modes&gt;,&lt;limit-type modes&gt;,&lt;flag modes&gt;set eggmodeconfig "ohv,beI,k,l,ipsmcCRMrDuNTdtnaq"################ If you touch the code below and then complain the script "suddenly stopped working" I'll touch you at night.###############package require Tcl 8.4package require eggdropproc lchange {varname old new} {upvar 1 $varname listif {![info exists list]} { return }while {[set pos [lsearch -exact $list $old]] != -1} {set list [lreplace $list $pos $pos]lappend list $new}return $list}proc lremove {varname element} {upvar 1 $varname listif {![info exists list]} { return }while {[set pos [lsearch -exact $list $element]] != -1} {set list [lreplace $list $pos $pos]}return $list}proc mcin {modechar modelist} {expr {[string first $modechar $modelist] != -1}}bind raw - 005 parse005proc parse005 {from key text} {if {[regexp {CHANMODES=(\S+)} $text -&gt; modes]} {set ::modeconfig [split $modes ,]}if {[regexp {PREFIX=\((\S+)\)} $text -&gt; umodes]} {set ::umodeconfig $umodes}return 0}proc getmodeconfig {} {if {![info exists ::umodeconfig]} {putlog "Arbchanmodes: Could not get usermodeconfig from raw 005!"set ::umodeconfig qaohv}if {![info exists ::modeconfig]} {putlog "Arbchanmodes: Could not get modeconfig from raw 005!"set ::modeconfig [split beI,kfL,lj,psmntirRcOAQKVCuzNSMTGZ ,]}concat [list $::umodeconfig] $::modeconfig}proc geteggmodeconfig {} {if {![info exists ::eggmodeconfig]} {putlog "Arbchanmodes: Eggmodeconfig not set, using default!"set ::eggmodeconfig "ohv,beI,k,l,ipsmcCRMrDuNTdtnaq"}split $::eggmodeconfig ","}proc modeparam {pre modechar modeconfig} {foreach {umodes ban key limit flag} $modeconfig { break }set pls [expr {$pre eq "+"}]if {[mcin $modechar $umodes] || [mcin $modechar $ban] || [mcin $modechar $key]} {return 1}if {[mcin $modechar $limit]} {return $pls}if {[mcin $modechar $flag]} {return 0}return -1}proc handleerr {msg} {if {[llength [info commands bgerror]]} {bgerror $msg} else {putlog $msg}}proc ircwordsplit {string} {set result ""foreach {- 1 2} [regexp -all -inline {(?::(.*$)|(\S+))} $string] { lappend result $1$2 }return $result}bind raw - MODE parsemode# "thommey!thommey@tclhelp.net MODE #thommey -v+v TCL ^|^"# "thommey!thommey@tclhelp.net MODE #thommey -v+v TCL :^|^" &lt;- InspIRCd 3 being weird.proc parsemode {from key text} {set text [ircwordsplit $text]set chan [string tolower [lindex $text 0]]if {![validchan $chan]} { return }foreach {parse eggparse} [parsemodestr [lindex $text 1] [lrange $text 2 end]] breakforeach {mode victim} $parse {set victim [string tolower $victim]if {$mode eq "+q"} { lappend ::_owners($chan) $victim }if {$mode eq "-q"} { lremove ::_owners($chan) $victim }if {$mode eq "+a"} { lappend ::_admins($chan) $victim }if {$mode eq "-a"} { lremove ::_admins($chan) $victim }}set eggstr [buildmodestr $eggparse]if {$eggstr ne ""} {# server.mod/servmsg.c:gotmode()if {[catch {*raw:MODE $from $key "$chan $eggstr"} err]} {catch {handleerr "Tcl Background Error in server.mod:gotmmode(): $err"}}# irc.mod/mode.c:gotmode()if {[catch {*raw:irc:mode $from $key "$chan $eggstr"} err]} {catch {handleerr "Tcl Background Error in irc.mod:gotmode(): $err"}}}return 1}# removes first element from the list and returns itproc pop {varname} {upvar 1 $varname listif {![info exists list]} { return "" }set elem [lindex $list 0]set list [lrange $list 1 end]return $elem}# parses a modestring "+v-v" and a list of victims {nick1 nick2} and returns a flat list in the form {modechange victim modechange victim ..}# static modelist with parameters taken from unrealircd (better do it dynamically on raw 005 ;)proc parsemodestr {modestr victims} {set result [list]set eggresult [list]set pre "+"foreach char [split $modestr ""] {if {$char eq "+" || $char eq "-"} {set pre $char} else {set useparam [modeparam $pre $char [getmodeconfig]]if {$useparam == -1} {error "Arbchanmodes: Unknown mode char '$char'!"}set egguseparam [modeparam $pre $char [geteggmodeconfig]]set param [expr {$useparam == 1 ? [pop victims] : ""}]lappend result $pre$char $param# Forward modes to eggdrop if they match IRCd config and are in the settingif {$egguseparam != -1 &amp;&amp; $egguseparam == $useparam} {lappend eggresult $pre$char $param}}}return [list $result $eggresult]}# opposite of the above, re-assemble a mode stringproc buildmodestr {parse} {set pre ""set modestr ""set params ""foreach {mode arg} $parse {if {[string index $mode 0] ne $pre} {set pre [string index $mode 0]append modestr $pre}append modestr [string index $mode 1]if {$arg ne ""} {lappend params $arg}}join [concat [list $modestr] $params]}proc isowner {nick chan} {set nick [string tolower $nick]set chan [string tolower $chan]if {![info exists ::_owners($chan)]} { return 0 }if {[lsearch -exact $::_owners($chan) $nick] == -1} { return 0 }return 1}proc isadmin {nick chan} {set nick [string tolower $nick]set chan [string tolower $chan]if {![info exists ::_admins($chan)]} { return 0 }if {[lsearch -exact $::_admins($chan) $nick] == -1} { return 0 }return 1}proc resetlists {chan} {if {[validchan $chan]} {set channels [list $chan]} else {set channels [channels]}foreach chan [channels] {set chan [string tolower $chan]unset -nocomplain ::_owners($chan)unset -nocomplain ::_admins($chan)}}bind raw - 352 parsewhoproc parsewho {f k t} {foreach {mynick chan ident host server nick flags} [split $t] breakset nick [string tolower $nick]set chan [string tolower $chan]if {![validchan $chan]} { return }if {[string first "~" $flags] != -1} { lappend ::_owners($chan) $nick }if {[string first "&amp;" $flags] != -1} { lappend ::_admins($chan) $nick }return 0}bind nick - * checktheynickbind part - * checktheyleftbind sign - * checktheyleftproc checktheynick {nick host hand chan newnick} {set chan [string tolower $chan]set nick [string tolower $nick]set newnick [string tolower $newnick]lchange ::_owners($chan) $nick $newnicklchange ::_admins($chan) $nick $newnick}proc checktheyleft {nick host hand chan reason} {set nick [string tolower $nick]set chan [string tolower $chan]lremove ::_owners($chan) $nicklremove ::_admins($chan) $nick}# Handle eggdrop leaving channelsbind part - * checkileftbind sign - * checkileftbind kick - * checkikickedbind evnt - disconnect-server resetlistsproc checkileft {nick host hand chan {msg ""}} {if {![isbotnick $nick]} { return }resetlists $chan}proc checkikicked {nick host hand chan target reason} {if {![isbotnick $target]} { return }resetlists $chan}</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12983">Valentin</a> — Thu Jan 26, 2023 1:14 pm</p><hr />
]]></content>
	</entry>
	</feed>
