![]() |
Irc mit Indy
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, herzlich Willkommen!
In diesem Beitrag geht es um die Indy IRC-Komponente Du kannst sie ![]() Mann, war ich doof, da sind doch noch die 9er! Fangen wir an: Zuerst, ziehe eine Iindy-IRC Komponente (IdIRC) auf das Formular Dann sollte im Form.Create folgendes stehen:
Delphi-Quellcode:
Damit legst du die Einstellungen für das Verbinden fest.
IdIRC1.Nick:='MyNick'; // Legt den Nick fest
IdIRC1.Host:='irc.server.org'; // Gibt den Server an IdIRC1.Port:=6667; //Irc Port Nun, müssen wir uns nur noch verbinden: Ziehe einen Button auf das Formular, und erstelle ein OnClick Ereignis Caption sollte 'Verbinden' lauten Folgender Code kommt hinein:
Delphi-Quellcode:
Du solltest einen Button erstellen, mit folgendem Code im Ereignis onClick:
try //versuche
IdIRC1.Connect(); //zu verbinden except //wenn Fehler showMessage('Fehler beim Verbinden!'); //Meldung zeigen end;
Delphi-Quellcode:
Nun kannst du schon Verbinden und einen Channel joinen.
IdIRC1.Join('#lima-city');
Damit aber später aber auch Nachrichten angezeigt werden, solltest du noch eine Memo-Komponente auf das Formular ziehen. Dann musst du noch zwei Ereignisse, OnReceive und OnMessage, hinzufügen OnReceive (Bei mit hat es nur mit diesem zusätzlichen Ereignis geklappt):
Delphi-Quellcode:
OnMessage:
Memo1.lines.add(ACommand); //zum Memo hinzufügen
Delphi-Quellcode:
Memo1.lines.add(AUser.Nick+': '+Content); // Nachricht in Form Nick: Nachricht zum Memo hinzufügen
Jetzt kannst du schon Nachrichten empfangen, fehlt nur noch das Schreiben: Ziehe eine Edit- und eine Button-Komponente auf das Formular. Die Button-Komponente bekommt die Caption "Senden". Die OnClick-Ereignis Routine lautet:
Delphi-Quellcode:
Damit kannst du jetzt Nachrichten empfangen und senden.
IdIRC1.Say('#CHANNEL',Edit1.Text); //Nachricht zum Channel schicken
Memo1.Lines.Add(IdIRC1.Nick+': '+Edit1.Text); //Zum Memo hinzufügen, denn durch eigene Nachrichten wird das OnMessage-Ereignis nicht ausgelöst Schreibe in das OnClose Ereignis des Formulars:
Delphi-Quellcode:
IdIRC1.Disconnect(); //Zum stoppen
Zusatzcode: Erstelle eine Listbox. Erstelle das OnNames Ereignis und schreibe dorthin:
Delphi-Quellcode:
Nun hast du schon einen funktionierenden IRC-Client.
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 Tipp: Baue einen IRC-Bot, du brauchst nur den Content bei OnMessage überprüfen! |
Re: Irc mit Indy
Hi,
:kiss: danke, darauf hab ich schon immer gewartet. Ich habe es mal vor einer Ewigkeit alleine probiert, aber irgenwie hat es nicht geklappt. Aber ist das nicht eher ein Tutorial? Egal, ich füge es erst einmal den Lesezeichen hinzu, falls ich mal Langeweile habe. Mfg FAlter |
Re: Irc mit Indy
Das dies ein Tutorial ist habe ich auch schon gedacht :lol:
Aber letzendlich wollte ichs ja nicht noch einmal neu machen! Dann ist es leicht einen bot zu machen! z.B.: Befehl !learn BEFEHL ANTWORT mfg |
Re: Irc mit Indy
Hi,
irgendwie heißen die Events bei mir anders. OnReceive und OnMessage gibts gar nicht. Mfg FAlter |
Re: Irc mit Indy
benutzt du Indy 10?
Und wirklich die IdIrc Komponente? :twisted: :gruebel: Aber wenn sonts nix ist.... mfg Antwortet doch mal was mehr :lol: |
Re: Irc mit Indy
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ja, ich habe bei der TurboDelphi-Installation definitiv Indy 10 ausgewählt, und in D2k5 hab ich Version 10 manuell installiert und es stimmt mit TurboDelphi überein. Ansonsten noch ein Problem, aber das liegt wohl eher an Indy. Wenn ich OnPrivateMessage / OnNotice usw. verwende, wird die Nachricht immer beim letzten Buchstaben vor dem ersten Leerzeichen abgeschnitten. Hier mal mein Beispiel, wo der Bot alles einfach zurückschickt... In OnRaw steht es drin, aber dann müsste ich das ganze ja selbst zerpflücken... [edit] Als Anhang... [/edit] Wichtig noch: Fast immer sollte man UserName und evtl. RealName zuschicken, auch bei öffentlichen Servern, da bleibt dann das Passwort leer. Also entsprechende Eigenschaften setzen. Vorher hab ich nur Access denied gekriegt, von allen Servern, bei denen ichs probiert habe. Mfg FAlter |
Re: Irc mit Indy
servus,
ich habe auch definitiv indy 10 installiert in verbindung mit delphi 2007. auch bei mir fehlen die besagten events. mfg Jonny |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Tutorials und Kurse" verschoben.
Das passt hier besser |
Re: Irc mit Indy
tipp: nimm die explode-funktion aus der CodeLibrary!
Ich hab das ganze mit D7 vllt. liegts daran, dass meine eigl. eine Prof. ist? :evil: mfg |
Re: Irc mit Indy
bei mir kennt er merkwürdigerweise "IdIRC1.Nick" nicht.
Alles andere funktioniert. weis evtl. jemand was man da machen kann? |
Re: Irc mit Indy
Hi,
Nickname? Mein Test-Code:
Delphi-Quellcode:
Muss natürlich noch verbessert werden... Ist ja erstmal nur zum Test.
//IRC = TIdIRC
IRC.OnPrivateMessage := HandleMsg; IRC.OnNotice := HandleMsg; IRC.OnWallops := HandleMsg2; //IRC.OnRaw := HandleRaw; IRC.Nickname := NickEdit.Text; IRC.RealName := 'FAlter Bot'; IRC.Username := 'FAlterBot'; IRC.Host := ServerEdit.Text; IRC.Port := StrToIntDef(PortEdit.Text, IRC.Port); IRC.Connect; Mfg FAlter [edit] Aus der IdIRC.Pas: (Indy 10)
Delphi-Quellcode:
In der markierten Zeile liegt ein Fehler. Das -2 ist falsch und kann sogar komplett weggelassen werden, ansonsten kommt da -1 hin. Das erklärt das Fehlen des letzten Buchstabens.
procedure TIdIRC.CommandPRIVMSG(ASender: TIdCommand);
var LTmp: String; begin if ASender.Params[0][1] = #1 then begin ParseCTCPQuery(ASender.Params[1], ASender.Params[0]); end else if Assigned(FOnPrivMessage) then begin LTmp := copy(ASender.Params[1], 2, length(ASender.Params[1]) - 2); ///!!!!!!!!!!!!!!! OnPrivateMessage(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0], LTmp); end; end; Die anderen Worte liegen vermutlich in Params[3]..Params[Count-1], schätz ich mal. [/edit] [edit] Mit dieser Änderung gehts erstmal. Ist natürlich nicht gerade optimal, wenns erst auseinandergepflückt und hier wieder zusammengesetzt wird, erstmal reichts jedoch. Der Bot muss "liest" trotzdem schneller als ein Mensch.
Delphi-Quellcode:
[/edit]
procedure TIdIRC.CommandPRIVMSG(ASender: TIdCommand);
var LTmp: String; I: Integer; begin if ASender.Params[0][1] = #1 then begin ParseCTCPQuery(ASender.Params[1], ASender.Params[0]); end else if Assigned(FOnPrivMessage) then begin LTmp := copy(ASender.Params[1], 2, length(ASender.Params[1])); for I := 2 to ASender.Params.Count - 1 do LTmp := LTmp + ' ' + ASender.Params[I]; OnPrivateMessage(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0], LTmp); end; end; procedure TIdIRC.CommandNOTICE(ASender: TIdCommand); var LTmp: String; I: Integer; begin if ASender.Params[0][1] = #1 then begin ParseCTCPReply(ASender.Params[1], ASender.Params[0]); end else if Assigned(FOnNotice) then begin LTmp := copy(ASender.Params[1], 2, length(ASender.Params[1])); for I := 2 to ASender.Params.Count - 1 do LTmp := LTmp + ' ' + ASender.Params[I]; OnNotice(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0], LTmp); end; end; |
Re: Irc mit Indy
Ich habe das Tutorial mal aus gegebenem Anlass ins Englische übersetzt, damit unser User dangerduck auch was davon versteht. Ich hoffe, MSSSSM hat nichts dagegen. :-)
--- Hello and welcome! This post is about the Indy IRC component. You can download it ![]() Let's begin: First, put the Indy IRC component on your form. Form.Create should now look like the following:
Delphi-Quellcode:
With this you define the settings for the connection.
IdIRC1.Nick:='MyNick'; // Defines the nickname
IdIRC1.Host:='irc.server.org'; // Defines the Server IdIRC1.Port:=6667; //Irc Port Now we have to connect: Put a button on your form and create the onClick-event: The buttons caption should be 'Connect' Put in this code:
Delphi-Quellcode:
You should make a buton with the folling code in the onClick-event
try // try ...
IdIRC1.Connect(); // ... to connect except // ... when an error happens ... showMessage('Fehler beim Verbinden!'); // ... show a message end;
Delphi-Quellcode:
Now you can already connect and join a channel.
IdIRC1.Join('#lima-city');
But to display messages later, you should put a the TMemo component on the form. The you have to add two events: OnReceive and OnMessage. OnReceive (It only works with this additional event):
Delphi-Quellcode:
OnMessage:
Memo1.lines.add(ACommand); // add to memo
Delphi-Quellcode:
Memo1.lines.add(AUser.Nick+': '+Content); // Add message
Now you can already receive a message, but it lacks writing yet. Put a TEdit and a TButton component on your form. The button gets the caption "Send". The OnClick-event is:
Delphi-Quellcode:
Now you can send and receive messages with that.
IdIRC1.Say('#CHANNEL',Edit1.Text); // Send message to the channel
Memo1.Lines.Add(IdIRC1.Nick+': '+Edit1.Text); // Ad to memo, because the OnMessage event won't be called when sending own messages Put the following into the forms OnClose event:
Delphi-Quellcode:
IdIRC1.Disconnect(); // to stop
Additional code: Create a TListBox. Create the OnNames event and write:
Delphi-Quellcode:
Now you have a working IRC client!
var
i: integer; //begin for i:=0 to AUsers.Count-1 do // execute as many times as users in the channel ListBox1.Items.Add(AUsers.Items[i].Nick); // Add to ListBox //end Tip: Build an IRC-bot, you only have to work with the content in OnMessage! |
Re: Irc mit Indy
Hi,
Du solltest noch dazu schreiben, ob es sich um die Indy 9 oder Indy 10 handelt! |
Re: Irc mit Indy
Zitat:
Mit freundlichen Grüßen, Valle |
Re: Irc mit Indy
Er als Autor. Ich meinte, dass er es ins Tutorial schreiben soll und nicht nur in ein paar Beiträgen drunter.
|
Re: Irc mit Indy
Danke!
:-D |
Re: Irc mit Indy
download link doestn work :cry:
could someone upload it on rapidshare or megaupload please :D |
Re: Irc mit Indy
Which link do you mean?
|
Re: Irc mit Indy
Zitat:
![]() Everywhere I click, sooner or later I always find this page. But I don't know where to go now, there's no "Continue" button, no "Download" button. And every link on this page results in a 404 error page. :? |
Re: Irc mit Indy
Maybe you can have a look at
![]() |
Re: Irc mit Indy
|
Re: Irc mit Indy
:?:
|
Re: Irc mit Indy
:roll: anyone?
|
Re: Irc mit Indy
It's Private Message. Double click on "OnPrivateMesssage" and you should get the text there
|
Re: Irc mit Indy
Thx man
|
Re: Irc mit Indy
Ich bekommt wenn ich Verbinden will immer die Meldung "Zugriffsverletzung bei Adresse 00466A19 in Modul 'Project1.exe'. Lesen von Adresse 00000000' auf getreten." Das kommt immer an der Quelltetstelle:
Delphi-Quellcode:
in der Unit IdReplay
procedure TIdReply.UpdateText;
begin FReplyTexts.UpdateText(Self); end; Ich hab Indy 10 und Delphy 2k5 Personal Weiss jemand woran das liegt? |
Re: Irc mit Indy
:glaskugel:
In Zeile 42 fehlt ein "if Assigned" ohne Sourcecode können wir es nicht wissen. Aber das gehört hier nicht her, mach dafür ein eigenes Thema auf! |
Re: Irc mit Indy
Nothing work i will try with socekts now thx anyway :mrgreen:
|
Re: Irc mit Indy
Hey ;)
Habe da eine kleine frage: Ich habe mich genau an das gehalten, was du in deinem tutorial geschrieben hast. Wenn ich nun allerdings auf den Conenctbutton klicke, verbindet er zu dem server. Einen channel allerdings will er nicht joinen.. Hier mein source:
Delphi-Quellcode:
Den join-button habe ich weggelassen da auf dem server autojoin an ist, habe ihn zu testzwecken mal hinzugefüht, bringt allerdings auch kein ergebnis..
procedure TForm1.btConnectClick(Sender: TObject);
begin try IdIRC1.connect(); except showmessage('Verbidnung fehlgeschlagen'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin IdIRC1.Nickname:='sh0xXb0t'; IdIRC1.Host:='irc.3dl.am'; IdIrc1.Port:=6667; end; Würde mich über hilfe freuen Edit: Nutze Codeagear RAD studio 2009 (Demo-Version), soweit ichs erkennen kann nutzt diese Indy 12 Edit2: durch die andere indy-version steht bei mir statt "nick" auch "nickname" etc. und ich kann deinen source leider nicht benutzen. mfg sh0xX |
AW: Irc mit Indy
Hey,
Ich komme gerade einfach nicht weiter und habe dazu auch schon einen Thread eröffnet... ![]() LG ford |
AW: Irc mit Indy
Ok, der Client geht nun, aber nur ohne Proxy, mit habe ich es immer noch nicht hinbekommen...
Wie heißt denn das OnMessage-Ereignis in der neuen Version?? |
AW: Irc mit Indy
Warum führst du jetzt hier in einem 9 Jahre alten Thread Monologe, statt in deinem eigenen IRC-Thread zu posten? :roll:
|
AW: Irc mit Indy
Dachte, dass das vlt auch andere interessiert, die das machen wollen und auf diesen Thread stoßen...
EDIT: Würde es hier drin stehen müsste ich nicht fragen und in nem anderen Thread steht das vlt versteckt drin... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz