PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TCL / Eggdrop Whois-Abfrage mit folgender Aktion


Sidney007
12.03.2005, 19:12
Hallo,

werde einfach mal mein Problem schildern. :)

Ich habe auf einer IRCD das Modul os_notinchanlist installiert.

Kurze Erklärung: Dieses Modul bewirkt, das User, die sich in keinem Channel aufhalten in einen Channel Namens #idle geleitet werden.

Nun zu meinem Problem:

Ich hab nun einen Eggdrop geschaltet, der in 5 minütigen Abständen den folgenden Befehl ausführt: /os notinchanlist

Nun joinen die Leutz den Channel #idle

Was ich jetzt gern möchte, ist das die Leutz den Channel auch wieder parten, wenn sie einen 2. Channel gejoint haben.

Mir ist bewußt, das ich das mit einer whois Abfrage oder ähnlichem gestalten müsste, but ATM bin ich damit bissel überfordert und hoffe hier auf Hilfe. :)

Was ich brauche ist also ein TCL-Script, was alle 5 Minuten in dem Channel #idle nach Usern scannt, die sich in zwei oder mehreren Channels aufhalten und diese dann aus dem Channel #idle mit /sapart entfernt. :mauer:
Außerdem sollte dieses Script keine OP's saparten...damit ich in dem Channel drin bleiben und alles überwachen kann. :eek:

Ich hoffe nur, das das irgendwie machbar ist. ^^

Lieben Gruß,

Sid


ChaosKrieger
12.03.2005, 19:25
hi,

machbar ist das schon...

chanlist #idle # gibt dir ide user zurück aus idle

isop chan user #op oder nicht?

timer 5 [list proc var....] #5 min timer

whois user , den rückgabe wert checken (musst mal inner raw liste nach "whois" schaun "bind raw ...")

By Chaos

Sidney007
12.03.2005, 19:44
Raw whois gibts...

Aber damit zeigt er die Channels an...nicht die Anzahl.

Man muß glaub nicht über die Anzahl gehen...oder?
Geht auch nach Name *denk* mhhh

ChaosKrieger
12.03.2005, 19:57
ämm.. wieso musst du nach "zahl" gehen?

ist doch egal.. hauptsache weist ob "idle" der einzigste ist oder nicht...

aber ein problem gibt es trotzdem:

ist der channel +S oder +p wird er beim whois NICHT angezeigt

By Chaos

Sidney007
12.03.2005, 20:00
mhhh....der bot wäre ircop....der sollte das angezeigt bekommen normalerweise

ChaosKrieger
12.03.2005, 20:06
da kann ich leider nicht helfen, bin kein ircop

also da hab ich keine ahnung.. aber werde mich mal umhören :D

Sidney007
12.03.2005, 20:10
das wäre echt superlieb :D
dank dir schon mal ^^

ChaosKrieger
12.03.2005, 20:22
hi, also habe gerade mit ein paar ircops admins etc geredet..

/whois <user> gibt ALLE channels aus..egal welche mods sie haben .. aber NUR als ircop

ne möglichkeit die "anzahl" zu sehen gibts nicht, d.h du musst bei # spliten und selbst zählen

aber das wird ja kein grosses problem sein ;)

By Chaos

Sidney007
12.03.2005, 20:58
naja...als mrc würd ich es möglicherweise hinbekommen....aber meine tcl kenntnisse beschränken sich nur auf das notwendigste *schäm*

Alamar
16.03.2005, 08:05
hi!

Mal eine kleine Frage zwischendurch,
weil das erzeugt ja traffic en masse wenn du alle 5min. alle user
in einem chan "whoissed", wieso wenn du ja sowieso ircop bist
baust du das nicht in den ircd ein, dass der prüft ob der user schon
in #idle ist? Theoretisch wird ja sowieso eine Überprüfung gemacht in wievielen chans der user ist(wegen chanlimit) und da kannst du ja auch etwas
auf die art einbauen:
if($chans.$user > 1) {
if($chan.user.list[0] == "\#idle") {
do what ever you want
}
}

irgendwie so :)
Nur eine kleine idee, was den Lösungsweg des Problems angeht, weil das
imho effizienter ist.

alternativ dazu, speicher den whois reply mit den channeln als string und mach ein:
split "$string" #

vielleicht musst du # oder so escapen dafür reichen meine tcl kenntnisse nicht :)

Sidney007
16.03.2005, 14:53
Habs jetzt so gemacht...hab lang genug für gebraucht ^^


timer 5 check:chan

proc check:chan { } {
if {[botonchan #idle]} {
foreach user [chanlist #idle] {
if {![isop $user #idle] && ![isbotnick $user]} {
putserv "WHOIS $user"
}
}
}
timer 5 check:chan
}

bind raw - 319 check:whois

proc check:whois {from key arg} {
if {[string match "*? #?* #?*" $arg] || [[llength $arg] >= 4] && [onchan [lindex $arg 1] #idle]} {
putserv "SAPART #idle [lindex $arg 1]"
}
return 1
}

Hätt man wie gesagt besser machen können, glaub ich...aber wie gesagt:

Mein TCL beschränkt sich aufs wesentliche :(

Alamar
17.03.2005, 07:53
schön isses zwar nicht und meins gefile mir besser, aber wenn du es selbst gemacht hast und es geht ist das ja schonmal was :)