AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Useranzahl per Indy ermitteln

Offene Frage von "Linguini"
Ein Thema von Linguini · begonnen am 2. Jun 2009 · letzter Beitrag vom 4. Jun 2009
Antwort Antwort
Linguini

Registriert seit: 19. Mai 2009
95 Beiträge
 
#1

Useranzahl per Indy ermitteln

  Alt 2. Jun 2009, 11:20
Hallo,

ich möchte gerne wie hier beschrieben, mit der Indy IRC Komponente die User in einem IRC Channel auflisten lassen.

Delphi-Quellcode:
var
i: integer;
//begin
for i:=0 to AUsers.Count-1 do //führe sooft aus wie User im Channel sind
ListBox1.Items.Add(AUsers.Items[i].Nick); //Adde diese zu ListBox
//end
Anscheinend gibt es in Indy 10 die Bezeichnung "AUsers" nicht mehr...

Dafür hab ich aber die Methode ListChannelNicknames gefunden...
Nur wenn ich es so probiere:

IndyIRC.ListChannelNicknames(Channel.Text,Userlist );

Bleibt Userlist leer(Userlist muss ein String sein)

Wie löße ich das Problem?

Und noch eine Frage

Die Methode "GetChannelTopic" macht "Probleme".
Wie verwende ich sie?
String:= GetChannelTopic(Channel) funktioniert nicht...


Danke
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: Useranzahl per Indy ermitteln

  Alt 2. Jun 2009, 12:20
Hi,

Zitat von Linguini:
Dafür hab ich aber die Methode ListChannelNicknames gefunden...
Nur wenn ich es so probiere:

IndyIRC.ListChannelNicknames(Channel.Text,Userlist );

Bleibt Userlist leer(Userlist muss ein String sein)

...

Wie löße ich das Problem?

Und noch eine Frage

Die Methode "GetChannelTopic" macht "Probleme".
Wie verwende ich sie?
String:= GetChannelTopic(Channel) funktioniert nicht...
Du verwendest die Komponente falsch. Du mußt dem IdIRC auch die Ereignisse zuweisen, z.B. OnNicknamesListReceived oder OnServerUsersListReceived (<- dort gibt es das gesuchte AUsers übrigens).

Dann fragst Du den IRC Server höflich um die Information z.B. per IdIRC.ListChannelNicknames() oder IdIRC.ListServerUsers() oder IdIRC.GetBlaBlaXYZ(). Sobald die Antwort da ist, wird das Ereignis aufgerufen und Deine Methode z.B. für OnNicknamesListReceived ausgeführt. Die Strings in den Anfrage-Funktionen und -Prozedure sind dazu da, weitere Informationen an den *Remote* Server zu senden bevor die Antwort kommt.

Welche Methode für welche Prozedur benötigt wird, kann ich Dir ad hoc nicht sagen - ich verwende kein IRC. Es hängt aber wohl auch vom IRC Server ab, was unterstützt wird (3dl.am verweigerte mir eben USERS).

Mehr kann ich nicht dazu sagen. Erstmal kommen jetzt die DelphiTage dran.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Linguini

Registriert seit: 19. Mai 2009
95 Beiträge
 
#3

Re: Useranzahl per Indy ermitteln

  Alt 2. Jun 2009, 12:51
Irgendwie hilft mir das nichts...

Selbst wenn ich ListChannelNicknames in einem OnNicknamesListReceived/OnServerUsersListReceived aufrufe, bleibt der Targetstring trotzdem leer.

Auch mit der Methode:

Delphi-Quellcode:
var
i: integer;
//begin
for i:=0 to AUsers.Count-1 do //führe sooft aus wie User im Channel sind
ListBox1.Items.Add(AUsers.Items[i].Nick); //Adde diese zu ListBox
//end
In einem OnServerUsersListReceived Event passiert nichts, da er das "Items" nicht kennt...
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: Useranzahl per Indy ermitteln

  Alt 2. Jun 2009, 13:05
Hi,

Zitat von Linguini:
Irgendwie hilft mir das nichts...

Selbst wenn ich ListChannelNicknames in einem OnNicknamesListReceived/OnServerUsersListReceived aufrufe, bleibt der Targetstring trotzdem leer.

Auch mit der Methode:

Delphi-Quellcode:
var
i: integer;
//begin
for i:=0 to AUsers.Count-1 do //führe sooft aus wie User im Channel sind
ListBox1.Items.Add(AUsers.Items[i].Nick); //Adde diese zu ListBox
//end
In einem OnServerUsersListReceived Event passiert nichts, da er das "Items" nicht kennt...
Das fettgedruckte oben ist schonmal ziemlich verkehrt.

Du rufst im normalen Code die Funktion ListChannelNicknames auf. Indy ruft dann, sobald die Antwort da Deinen Methode auf (die z.B. OnNicknamesListReceived zugewiesen wurde). Du rufst jetzt die Funktion zum Aufrufen in der Methode selbst auf... Das kann doch nicht gehen.

Items: AUsers ist vom Typ TStrings. Das kennt keine Items. Ich habe auch nie gesagt, daß es so funktioniert und man da Items verwenden soll... In der Hilfe von Delphi findest Du unter dem Begriff TStrings alles zum Zugriff erklärt. Da findet man z.B. ein .Strings[Index: Integer].

In Deinem Fall also
Delphi-Quellcode:
var
i: integer;
//begin
for i:=0 to AUsers.Count-1 do //führe sooft aus wie User im Channel sind
  ListBox1.Items.Add(AUsers.Strings[i]); //Adde diese zu ListBox
//end
Das ist übrigens genau das, was ich im anderen Thread meinte. Es wird so schnell gesagt, Indy hat oder macht Probleme. Das stimmt ja sichtbar nicht... Indy und Delphi können beide nicht hellsehen, die richtige Umsetzung liegt ausschließlich am Programmierer.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Linguini

Registriert seit: 19. Mai 2009
95 Beiträge
 
#5

Re: Useranzahl per Indy ermitteln

  Alt 2. Jun 2009, 13:25
Ich steh wohl grad ziemlich aufm Schlauch.

Also ich sollte das doch so machen:

Delphi-Quellcode:
procedure TForm1.ServerUsersListReceived(ASender: TIdContext;
  AUsers: TStrings);
  var
  i : Integer;
begin

//begin
for i:=0 to AUsers.Count-1 do //führe sooft aus wie User im Channel sind
  UserList.Items.Add(AUsers.Strings[i]); //Adde diese zu ListBox

end;
Nur diese Prozedur wird ja garnicht aufgerufen.
Auch nicht wenn ich ListUsername oder ListServerUsers aufrufe...

Danke für deine Geduld
  Mit Zitat antworten Zitat
Linguini

Registriert seit: 19. Mai 2009
95 Beiträge
 
#6

Re: Useranzahl per Indy ermitteln

  Alt 4. Jun 2009, 11:07
Ich hab es bisher immer noch nicht hingebracht.
Kann mir jemand noch einen größeren Schubs in die richtige Richtung geben ?
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#7

Re: Useranzahl per Indy ermitteln

  Alt 4. Jun 2009, 13:20
Hi,

Zitat von Linguini:
Ich steh wohl grad ziemlich aufm Schlauch.

Also ich sollte das doch so machen:

Delphi-Quellcode:
procedure TForm1.ServerUsersListReceived(ASender: TIdContext;
  AUsers: TStrings);
  var
  i : Integer;
begin

//begin
for i:=0 to AUsers.Count-1 do //führe sooft aus wie User im Channel sind
  UserList.Items.Add(AUsers.Strings[i]); //Adde diese zu ListBox

end;
Nur diese Prozedur wird ja garnicht aufgerufen.
Auch nicht wenn ich ListUsername oder ListServerUsers aufrufe...
Da fehlen wohl ein paar Grundkenntnisse Delphi, richtig? Dann würd ich aber nicht mit IRC anfangen...

Du weist dem Ereignis eine Methode zu. Diese Methode (hier ServerUsersListReceived) wird vom Ereignis OnServeUserListReceived aufgerufen nachdem die Antwort des Servers da ist. Den Server fragst Du um seine Antwort, mit dem Aufruf von IdIRC.GetXYZ.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz