Indy wie IRC nachrichten empfangen
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Indy wie IRC nachrichten empfangen
Hallo ich hatte hier ja gestern schonmal gefragt wegen indy
viewtopic.php?f=10&t=9373
und irc, und das hat am ende ja auch funktioniert was ich vorhatte, nur hab ich wieder mal ein Problem ich weiß nicht wie ich Nachrichten empfangen kann mit indy.
Hab dann ein bissl gegoogelt und https://github.com/fabioxgn/IRC diesen Client gefunden. Von diesem hab ich mir den code mal angeschaut doch es hat mir leider nicht weitergeholfen.
viewtopic.php?f=10&t=9373
und irc, und das hat am ende ja auch funktioniert was ich vorhatte, nur hab ich wieder mal ein Problem ich weiß nicht wie ich Nachrichten empfangen kann mit indy.
Hab dann ein bissl gegoogelt und https://github.com/fabioxgn/IRC diesen Client gefunden. Von diesem hab ich mir den code mal angeschaut doch es hat mir leider nicht weitergeholfen.
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Indy wie IRC nachrichten empfangen
Weiß den wirklich keiner eine antwort.
versuch schon seit über 8std es hinzubekommen ohne erfolg.
versuch schon seit über 8std es hinzubekommen ohne erfolg.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Indy wie IRC nachrichten empfangen
Indy wird in Lazarus Kreisen wenig genutzt. Ist riesig und fehleranfällig.
Für Synaose hab ich das irgendwann schonmal gemacht muss ich aber schauen.
Allerdings ist das so trivial das dus auch selbst hinbekommen müsstest.
IRC ist einfach nur ne TCP Verbindung alle Befehle sind die selben wie du sie auch im IRC Client eingibst.
Für Synaose hab ich das irgendwann schonmal gemacht muss ich aber schauen.
Allerdings ist das so trivial das dus auch selbst hinbekommen müsstest.
IRC ist einfach nur ne TCP Verbindung alle Befehle sind die selben wie du sie auch im IRC Client eingibst.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Indy wie IRC nachrichten empfangen
Danke schonmal fur deine hilfe. Für indy hatte ich mich entschieden weil ich beib synapse gesehen hab das diebletzte version von 2012-13 war und ich somit dachte es ist eol. Auserdem möchte ich auch spater wenn alles funktioniert ssl einbauen
Vll wäre lnet noch ne möglichkeit.
Vll wäre lnet noch ne möglichkeit.
Re: Indy wie IRC nachrichten empfangen
Dragon hat geschrieben:Danke schonmal fur deine hilfe. Für indy hatte ich mich entschieden weil ich beib synapse gesehen hab das diebletzte version von 2012-13 war und ich somit dachte es ist eol. Auserdem möchte ich auch spater wenn alles funktioniert ssl einbauen
.
Merkwürdige Logik. Nur weil bei Indy nicht drauf steht, wie alt die Release Version ist, ist es aktueller?
Außerdem stimmt es nicht. An Synapse Trunk wurde in 2015 gearbeitet http://sourceforge.net/p/synalist/code/HEAD/tree/trunk/ und SSL unterstützt es auch.
-
- Beiträge: 90
- Registriert: Fr 2. Nov 2007, 13:32
- OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
- CPU-Target: 32Bit
- Wohnort: Ulm
Re: Indy wie IRC nachrichten empfangen
Indy ... Ist riesig und fehleranfällig.
kann ich so nicht bestätigen. Bei mir läuft Indy (egal welche Komponente) seit Jahren stabil in verschiedenen Projekten.
Manchmal wird hier im Forum irgendein Vorurteil gegen Indy herausgekramt, ohne ein konkretes Beispiel zu zeigen bzw. zu nennen - das nervt.
zur Frage:
Wenn ich mir die IdIRC.pas so anschaue, dann scheint der Server verschiedene Events / Nachrichten zu schicken, auf die reagiert werden kann, sofern die Ereignisbehandlungsroutine auch zugewiesen ist.
Ein Beispiel für den Anfang:
Code: Alles auswählen
...
procedure MeineVerarbeitungsprozedur(ASender: TIdContext; AWelcomeInfo: TIdStrings); // siehe IdIRC.pas: TIdIRCServerWelcomeEvent = procedure(ASender: TIdContext; AWelcomeInfo: TIdStrings) of object;
...
// bei Programmstart zuweisen:
IdIRC.OnServerWelcome := @MeineVerarbeitungsprozedur;
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Indy wie IRC nachrichten empfangen
@theo
ich hatte auf der website nicht im trunk nachgeguckt
@Thomas B.
die idirc hatte ich mir angegucktbhat mir nur leider net weitergeholfrn hab da nichts gefunden fur normale nachrichten nur events für topic, join, dejoin,.. nichts für message recieve. Ich werde mir die unit aber nochmal angucken wenn ich zuhause bin.
ich hatte auf der website nicht im trunk nachgeguckt
@Thomas B.
die idirc hatte ich mir angegucktbhat mir nur leider net weitergeholfrn hab da nichts gefunden fur normale nachrichten nur events für topic, join, dejoin,.. nichts für message recieve. Ich werde mir die unit aber nochmal angucken wenn ich zuhause bin.
-
- Beiträge: 90
- Registriert: Fr 2. Nov 2007, 13:32
- OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
- CPU-Target: 32Bit
- Wohnort: Ulm
Re: Indy wie IRC nachrichten empfangen
Die Events geben schon die entsprechende Klassifizierung der Nachricht vor.
Wer direkt auf die TCP-Daten zugreifen möchte, der nutzt wahrscheinlich am besten das OnRaw-Event, wie z.B. hier beschrieben
Wer direkt auf die TCP-Daten zugreifen möchte, der nutzt wahrscheinlich am besten das OnRaw-Event, wie z.B. hier beschrieben
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Indy wie IRC nachrichten empfangen
So sieht mein code jetzt aus
Aber jetzt mekert er in der IdsocketHandle unit das er IdGlobal nicht finden kann
P.S. Das Stackoverflow example kann ich auch nicht kompilieren
Code: Alles auswählen
program IRC_BOT;
{$mode objfpc}{$H+}
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes,
SysUtils,
IdIRC,
idContext;
procedure Test(ASender: TIdContext; AWelcomeInfo: TIdStrings);
begin
Writeln(AWelcomeInfo);
Say('#test', 'Wilkommen erhalten');
end;
{ you can add units after this }
var
a: string;
MyIdIRC: TIdIRC; // Vllt. heißt es auch anders, musst du mal schauen
begin
ReadLn(a);
if a = 'Connect' then
begin
begin
MyIdIRC := TIdIRC.Create; // Kann sein, dass da noch ein Parameter hin muss, aber du musst erst das Objekt konstruieren
MyIdIRC.username := 'Bot';
MyIdIRC.nickname := 'Bot';
MyIdIRC.Host := '127.0.0.1';
MyIdIRC.Port := 6667;
MyIdIRC.OnServerWelcome := @Test;
try
MyIdIRC.Connect();
MyIdIRC.Join('#test');
except
Writeln('Fehler beim Verbinden!');
end;
FreeAndNil(MyIdIRC); // Objekt wieder freigeben
end;
end;
end.
Aber jetzt mekert er in der IdsocketHandle unit das er IdGlobal nicht finden kann
P.S. Das Stackoverflow example kann ich auch nicht kompilieren
Zuletzt geändert von Dragon am Mo 25. Jan 2016, 16:07, insgesamt 1-mal geändert.
Re: Indy wie IRC nachrichten empfangen
Für Kommandozeilenprogramme ist Synapse mMn besser geeignet.
Synapse wartet, statt ein Event zu schmeißen.
Synapse wartet, statt ein Event zu schmeißen.
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Indy wie IRC nachrichten empfangen
Offenbar konnte er die unit "IdGlobal" nicht finden hab sie manuell eingebunden.
Jetzt hab ich aber den fehler
"IdIRC.pas(39,22) Fatal: Kann idContext nicht finden verwendet von IdIRC. Make sure all ppu files of a package are in its output directory. ppu im falschen Verzeichnis=/usr/local/codetyphon/typhon/components/pl_Indy/lib/x86_64-linux/qt/IdContext.ppu.."
Jetzt hab ich aber den fehler
"IdIRC.pas(39,22) Fatal: Kann idContext nicht finden verwendet von IdIRC. Make sure all ppu files of a package are in its output directory. ppu im falschen Verzeichnis=/usr/local/codetyphon/typhon/components/pl_Indy/lib/x86_64-linux/qt/IdContext.ppu.."
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Indy wie IRC nachrichten empfangen
Christian hat geschrieben:Indy wird in Lazarus Kreisen wenig genutzt. Ist riesig und fehleranfällig.
Etwas das ich nie verstehen konnte, die LCL ist auch riesig und fehleranfällig, warum verwendet man nach dieser Logik nicht lieber ein anderes Framework?
Bisher hat Indy bei mir, natürlich mit ein wenig Aufwand, immer alles geleistet was ich wollte. Nur man sollte nicht den Release nutzen, sondern den Trunk, da der Release mittlerweile schon ein paar Jahre gesehen hat, der trunk allerdings fortlaufend aktualisiert wird.
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Indy wie IRC nachrichten empfangen
@Warf ich habe nicht eine stable genommen war die version die bei CT5.60 dabei war.
Hab eben auf ne testing version von 5.70 aktualisierthab jetzt aber neue fehler
nähmlich wieder Identifier fehler
Hier erstmal der CODE
Die fehler lauten
Nachrichten, Warnungen: 1
Warning: other unit files search path (aka unit path) of "IRC_BOT" contains "/usr/local/codetyphon/typhon/components/pl_Indy/source", which belongs to package "pl_indy"
Projekt kompilieren, Ziel: IRC_BOT: Exit code 256, Fehler: 3
IRC_BOT.lpr(14,27) Error: Identifier not found "TIdContext"
IRC_BOT.lpr(14,53) Error: Identifier not found "TIdStrings"
IRC_BOT.lpr(23,30) Error: Incompatible types: got "<address of procedure(<erroneous type>;<erroneous type>);Register>" expected "<procedure variable type of procedure(TIdContext;const AnsiString) of object;Register>"
die unit IdGlobal.pas hab ich per hand eingefügt weil er sie sonst nicht gefunden hat
Nat würde ich auch theo LNET oder Synapse nehmen nur zu indy hab ich bisher am meisten hilfen gefunden deshalb hatte ich das genommen auserdem ar dort schon eine IRC unit vorhanden.
Hab eben auf ne testing version von 5.70 aktualisierthab jetzt aber neue fehler
nähmlich wieder Identifier fehler
Hier erstmal der CODE
Code: Alles auswählen
program IRC_BOT;
{$mode objfpc}{$H+}
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes,
SysUtils,
IdIRC,
IdGlobal,
pl_indy;
{ you can add units after this }
procedure test(ASender: TIdContext; AWelcomeInfo: TIdStrings);
begin
end;
var
Stop: boolean;
MyIdIRC: TIdIRC; // Vllt. heißt es auch anders, musst du mal schauen
begin
MyIdIRC.OnServerWelcome := @test;
Stop := False;
try
MyIdIRC := TIdIRC.Create;
// Kann sein, dass da noch ein Parameter hin muss, aber du musst erst das Objekt konstruieren
MyIdIRC.username := 'Bot';
MyIdIRC.nickname := 'Bot';
MyIdIRC.Host := '127.0.0.1';
MyIdIRC.Port := 6667;
try
MyIdIRC.Connect();
MyIdIRC.Join('#test');
except
Writeln('Fehler beim Verbinden!');
ReadLn();
end;
finally
repeat
// MyIdirc.Say('#test', 'Hi');
// sleep(1000);
until Stop = True;
FreeAndNil(MyIdIRC); // Objekt wieder freigeben
end;
end.
Die fehler lauten
Nachrichten, Warnungen: 1
Warning: other unit files search path (aka unit path) of "IRC_BOT" contains "/usr/local/codetyphon/typhon/components/pl_Indy/source", which belongs to package "pl_indy"
Projekt kompilieren, Ziel: IRC_BOT: Exit code 256, Fehler: 3
IRC_BOT.lpr(14,27) Error: Identifier not found "TIdContext"
IRC_BOT.lpr(14,53) Error: Identifier not found "TIdStrings"
IRC_BOT.lpr(23,30) Error: Incompatible types: got "<address of procedure(<erroneous type>;<erroneous type>);Register>" expected "<procedure variable type of procedure(TIdContext;const AnsiString) of object;Register>"
die unit IdGlobal.pas hab ich per hand eingefügt weil er sie sonst nicht gefunden hat
Nat würde ich auch theo LNET oder Synapse nehmen nur zu indy hab ich bisher am meisten hilfen gefunden deshalb hatte ich das genommen auserdem ar dort schon eine IRC unit vorhanden.
-
- Beiträge: 957
- Registriert: Mo 11. Sep 2006, 22:56
Re: Indy wie IRC nachrichten empfangen
Zu dem CT Zeugs kann dir wohl am bestem im Pilotlogic/CT Forum geholfen werden.
Davon abgesehen ist IRC dokumentiert
http://www.faqs.org/rfcs/rfc2812.html
https://tools.ietf.org/html/rfc1459
Davon abgesehen ist IRC dokumentiert
http://www.faqs.org/rfcs/rfc2812.html
https://tools.ietf.org/html/rfc1459
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Indy wie IRC nachrichten empfangen
Zu CT weiß ich relativ wenig,
aber versucht mal idContext & idStrings in der uses Klausel zu verwenden, Indy ist über sehr viele Dateien verteilt
und:
das Funktioniert nicht da OnServerWelcome eine Methode erwartet (Funktion/Prozedur einer Klasse, da dieses über thiscall aufgerufen wird) du übergibst eine normale funktion.
aber versucht mal idContext & idStrings in der uses Klausel zu verwenden, Indy ist über sehr viele Dateien verteilt
und:
Code: Alles auswählen
MyIdIRC.OnServerWelcome := @test;
das Funktioniert nicht da OnServerWelcome eine Methode erwartet (Funktion/Prozedur einer Klasse, da dieses über thiscall aufgerufen wird) du übergibst eine normale funktion.