Suche Php-Script- aktuelle User im IRC Chat

  • Themenstarter Themenstarter LX
  • Beginndatum Beginndatum
Direkt mit 'nem PHP-Script eine Verbindung ins IRC aufbauen und dort die Channeluser auslesen würde ich nicht empfehlen. Erstens ist es mühselig und zweitens läuft das meist über einen User, der dann alle X Minuten in den Channel platzt und danach wieder geht. Das würde mir ziemlich auf den Keks gehen. ;)

Praktischer ist es, wenn du einen der Channeluser, die rund um die Uhr im Channel sind, dazu verdammst, alle X Minuten die im Channel aktiven User irgendwo abzulegen. Am besten wär dafür natürlich ein Bot geeignet, der sowieso im Channel rumhängt. Folgendes Eggdrop-Script habe ich dafür bei mir im Einsatz:

Code:
# HTML2.Tcl -- a lot like ques3.tcl, but I wrote this one myself and to my
#             likings PLUS improvemnets for eggdrop1.3.4!
#
# fixed - doesn't display chan voices twice..
#
# Original Version by kn0 <keith@cs.oswego.edu>
# Edited for Eggdrop1.3.x by Prime <Unkonwn>
# Set these....
# Do this for every channel you want
set web_chans(#channelname) dateiname.db

# What directory are your web pages in? Or what directory do you want this to
# be in?
set web_dir /home/lx/whatever/

###### Do not edit anything beyond this point!!! ######

if {![info exists couter_running]} {
        timer 5 web_write
        set counter_running 1
}

proc web_write {} {
    global web_dir botnick nick web_chans
    foreach i [array names web_chans] {
        set wpage $web_dir$web_chans($i)
        set web_chan $i
        set a [open $wpage w]
        set chanlist [chanlist $web_chan]
        set chanlist "$botnick [lsort [lrange $chanlist 1 end]]"
        set oplist ""
        set hoplist ""
        set vlist ""
        set noplist ""
        set noplist2 ""
        set noplist3 ""
        set symbolop "@"
        set symbolhop "%"
        set symbolvoice "+"
        foreach i $chanlist {if [isop $i $web_chan] {lappend oplist $i$symbolop} {lappend noplist $i}}
        foreach i $noplist {
            if [ishalfop $i $web_chan] {lappend hoplist $i$symbolhop} {lappend noplist2 $i}
        }
        foreach i $noplist2 {
            if [isvoice $i $web_chan] {lappend vlist $i$symbolvoice} {lappend noplist3 $i}
        }
        foreach i "\{$oplist\} \{$hoplist\} \{$noplist3\} \{$vlist\}" {
            foreach b $i {
                if {$botnick != $b} {
                    puts $a "$b"
                }
            }
        }
        close $a
    }
    timer 5 web_write
}
bind topc - * web_topic
proc web_topic {nick uhost handle channel vars} {
    global web_topic web_chans
    if {[lsearch [array names web_chans] $channel] != "-1"} {
        set web_topic($channel) $vars
    }
}
web_write
putlog "\002HTML2\002 by \037Prime\037 - Writing: [array names web_chans] :stats files"

Damit liest der Eggdrop alle 5 Minuten die Channeluser in #channelname aus und legt sie in der Datei /home/lx/whatever/dateiname.db ab. Die Datei sieht dann so aus:

Code:
Nick1@
Nick2@
Nick3
Nick4
Nick5+

Der Status wird also mit an den Nick angehängt. Diese Datei jetzt noch mit PHP zu parsen und daraus eine Liste zu machen, sollte aber nicht mehr das Problem sein ;)
 
Wahrscheinlich willst du einen Socket IRC Bot.
Google mal danach denn dein Problem wird sein die Informationen aus dem IRC zu bekommen nicht sie darzustellen.
Imrahil
 
hmm, ich hatte da irgendwas mal gehabt, man kann bei nicht secret chanels nämlich ohen in den channel reinzukommen die userzahlen auslesen.

habs wiedergefunden:
Original von treo
hm, ok das tool ist in etwa 15 min fertig, sollte ich jetzt nicht gleich gestört werden

PHP:
##Connect Daten
$server="irc.bongster.de";
$port="6667";
$nickn="l31NGo";
$realn="xXx";
$channel = '#wmw';
##<-ENDE->

$connect = fsockopen($server, $port);
fputs($connect, "USER $nickn 0 0 :$realn\n\r");
fputs($connect, "NICK $nickn\n\r");

fputs($connect, "LIST $channel\n\r");
sleep(1);
fputs($connect, "QUIT\n\r");

ob_start();
fpassthru($connect);
$get = ob_get_contents();
ob_end_clean();

if(preg_match("/322 $nickn $channel (.*) \:/", $get, $matches))
{
	$useronline = $matches[1];
}

fclose($connect);


?>

soweit ist der bot fertig, man könnte nun noch mit ihm die zahl in eine datenbank schreiben,
einfach mit $useronline weiterarbeiten

Jedoch wird dieses script für eine häufig besuchte seite nicht die ideale lösung sein.
Vielleicht wäre es sinnvoll vllt. alle 10 oder 20 minuten es nur ausführen zu lassen und dann die daten in die datenbank zu schreiben, da wenn es bei jedem aufruf gemacht wird und das nicht mit den netops abgesprochen ist die einen ganz schnell auf die ban liste setzen.
 
Zurück
Oben