Seite 1 von 1

IRC Channel User auslesen

Verfasst: 05.06.2004 12:18
von m0bby
Hallo,

ich würde gerne meine PHP-Chat gegen einen IRC(-Java) Chat ersetzen.
Das Problem dabei: Wie kann ich weiterhin auf meiner Homepage anzeigen, WER gerade im Chat ist?

Ich habe jetzt zwei Tage lang das Web nach einer Lösung durchsucht und nichts gefunden :-?
Das heiß, fast nichts. Ich bin auf viele interessante PHP und Perl Lösungen zum Aufbau von IRC-Bots etc. gestoßen. Besonders smartIRC von Mirco "MEEBEY" Bauer <http://www.meebey.net> finde ich erwähnenswert.
Aber eigentlich ist das alles doch für meinen Zweck etwas viele overload. Oder nicht?

Was ich suche funktioniert etwa so:

MySQL-Tabelle:

Code: Alles auswählen

#
# Tabellenstruktur für Tabelle `channelnicks`
#

CREATE TABLE `channelnicks` (
  `id` mediumint(8) NOT NULL auto_increment,
  `nicks` varchar(255) NOT NULL default '',
  `timestamp` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
index.php:

Code: Alles auswählen

$sql = 'SELECT * FROM channelnicks WHERE id = 1';
$db->sql_query($sql);
$channelinfo = $db->sql_fetchrow($result);
if ($channelinfo['timestamp'] < time() - 120)
{
    /*
    Hier nun connect zum IRC-Server
    Holen der Userliste mittels "/NAMES #channelname"
    Ablegen der Nicknames in $channelinfo['nicks']
    Disconnect vom IRC-Server
    */
    $sql = "UPDATE channelnicks SET nicks = '".$channelinfo['nicks']."', timestamp = '".time()."' WHERE id = 1";
    $db->sql_query($sql);
} 
Gibbet denn für diese, sicherlich von vielen Webseiten- und Foren-Betreibern gewünschte, Funktion (noch) keine Lösung???

Gruß
mObbY

Verfasst: 05.06.2004 14:09
von k-5
hm ..

so schwer is das ned .. einfach mal bisschen über socket connections im php manual durchlesen .. http://de.php.net/manual/de/ref.sockets.php

_aber_ wieso man soetwas nicht tun sollte ..

denk mal drüber nach wenn jeder soetwas macht .. oder sagen wir mal 10000 leute .. dann sind das unter umständen 10000 sinnlose connections alle 2 minuten ..
noch dazu kommt das dir ein /names #channel unter normalen umständen nicht reicht .. du brauchst also vorher noch nen join ..
was bedeutet das unter umständen alle 2 minuten jemand in den betreffenden channel joined und wieder parted .. solltest du nicht channel owner sein is der bot nach nem tag gebanned ..

auch wird dein provider das in der regel recht schnell merken -> kick ..


wenn du das wirklich machen willst/musst .. dann besorg dir nen richtigen bot .. eggdrop .. dafür gibts meines wissen massenhaft scripts die es ermöglichen ne userliste des channels anzuzeigen .. (gabs jedenfalls vor 3-4 jahren mal) .. bin da nimmer auf dem laufenden ..

mit allen anderen sachen machst du das irc kaput ..

Verfasst: 05.06.2004 14:52
von m0bby
Danke für deine Antwort.
Aber so drastisch wie du, sehe ich das nicht.
Mein Forum hat z.Z. ca. 60 User, davon ca. 30 aktive. Die Portalseite wurde im letzten Monat 3140 Mal aufgerufen. Das macht im Schnitt ca. 100 Mal am Tag bzw. 4 Mal pro Stunde. Sprich, rein rechnerisch würde alle 15 Minuten einmal das Skript beim IRC-Server connecten und die Namen der User im #channel abfragen.
Wenn sich meine Zugriffszahlen in Zukunft mal drastisch erhöhen sollten, dann sähe es vielleicht anderes aus, aber im Moment, kann ich deiner Argumentation nicht zustimmen.

Warum meinest du, das eine /names #channel nict reicht?
Ich muss doch blos wissen, wieviele User im #channel sind und wie deren Nicknames lauten. Dies wird doch AFAIK alles bei einem einfachen /names #channel ausgegeben, oder nicht?

Was das dauernde join-part angeht, gebe ich dir voll und ganz recht. Das würde mit sicherheit den Unmut der Serverbetreiber und Channeluser nach sich ziehen.

Noch mal: Ich rede hier von einem relativ kleinen Forum mit einem Chat, der so gut wie immer leer ist. Nur gibt es halt Leute, die gerne vorher wissen wollen, wer im Chat ist, BEVOR sie den Raum betreten - aus welchen Gründen auch immer.

Ok, dann werde ich mir wohl mal in einer freien Minute das Thema socket connections zu Gemüte führen. Ich hatte gedacht/gehofft, dass schon jemand diesen Codeschnippsel fertig hat, denn bei meiner Suche nach einer solchen Lösung bin ich dutzendfach auf andere gestoßen, die genau das gleiche suchen...

schönen Gruß
mObbY

Verfasst: 05.06.2004 15:18
von QCO

Verfasst: 05.06.2004 16:25
von k-5
mach mal ein /names #channel .. wenn du nicht im channel bist ..

du siehst auserhalb des channels nur leute die nicht invisible sind .. nedmal 10% ..

natürlich isses ned so dragisch wenn es nur einer macht .. aber wie gesagt wenns jeder macht is des was anderes .. 80-90% des irc traffics sind durch bots und solche scripte ..
argh .. ich will jetzt keine "scriptkiddies sind böse"- diskussion führen ..

aber ..
denk bitte drüber nach obs ned andere möglichkeiten gibt .. vielleicht findet sich auch jemand der dir nen eggy leiht .. n channel ohne bot is auf dauer eh nix .. oder du bist daueronline ..
und schreibst n mirc script .. könnt ich dir sogar bei helfen .. usw .. einfach weng kreativ sein ..

Verfasst: 05.06.2004 16:28
von m0bby
Hallo,
smartIRC kenne ich schon (s.o.). Ich finde aber das es "etwas" übertrieben ist, eine ganze API einzubinden "nur" um eine Namensliste zu bekommen... Und extra einen Bot laufen zu lassen wie z.B. Eggdrop lohnt sich bei meinem, meist leerem, Chat auch nicht.

Gruß
mObbY

Verfasst: 05.06.2004 18:52
von k-5
m0bby hat geschrieben: Ich finde aber das es "etwas" übertrieben ist, eine ganze API einzubinden "nur" um eine Namensliste zu bekommen
*g* .. aber die ganzen connects sind ned übertrieben .. nehm die api .. schmeiß raus was du ned brauchst .. wenns dir wirklich zu wuchtig ist .. fertig .. (oder anderesrum .. such dir raus was du brauchst) ..

solche "mini" skriptchen veröffentlich nunmal kaum jemand ..