Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TIdIRC [Indy] Problem (https://www.delphipraxis.net/40770-tidirc-%5Bindy%5D-problem.html)

Toenn 20. Feb 2005 18:55


TIdIRC [Indy] Problem
 
Hi,
ich habe ein Problem.
Ich will mir einen Bot programmieren. In der OnReceive-Procedur steht das:
if ACommand = ':tuenn!tuenn@disconnected.by.net-split.de PRIVMSG #such€n :!test' then
IdIRC1.Say(Label2.Caption, 'Test');

Es hat aber jedoch jeder User nen anderen Nick und ne andere Ident. Wie kann ich das machen, dass nur das nach dem : entscheident ist?



Und noch was:
Ich habe da nen Topicsave eingebaut.
Damit die Botmaster das Topic ändern können, habe ich das in die OnTopic-Procedure eingetragen:
if AUser.Nick = Form2.LabeledEdit1.Text then begin
Wie kann ich jedoch mehrere Nick in das Edit Feld eintragen und mit ner Leertaste trennen?



Danke,
Toenn

sECuRE 20. Feb 2005 19:48

Re: TIdIRC [Indy] Problem
 
Hi,

hol dir einfach den zweiten Abschnitt des Strings, z.B. so:
Delphi-Quellcode:
// sehr schlampige methode falls du die auf ThirdPos erweitern willst, dient nur zu Demozwecken..
function SecondPos(searchfor, searchin:string):integer;
var count:integer; foundfirst:boolean;
begin
foundfirst:=false;
for count:=1 to length(searchin) do
  if (copy(searchin,count,length(searchfor)) = searchfor) then
    if (not foundfirst) then
      foundfirst:=true
    else begin
      result:=count;
      exit;
    end;
end;

procedure PrivMsg(AMsg:string);
begin
if (AMsg = '!test') then
  // blah blah...
end;

// OnReceive
var command:string;
begin
command:=copy(ACommand,Pos(' ',ACommand)+1,length(ACommand));
command:=lowercase(copy(command,1,Pos(' ',command)-1));
if (command = 'privmsg') then
  PrivMsg(copy(ACommand,SecondPos(' ',ACommand)+1,length(ACommand)));
end;
(ungetestet)

cu, sECuRE

(Edit: Variablenname angepasst)
(Edit2: 2 Fehler Korrigiert)

Toenn 20. Feb 2005 20:01

Re: TIdIRC [Indy] Problem
 
gibt fehler.
ersma oben bei der function: Funktion benötigt Ergebnistyp.
Füge ich Integer ein kommt unten bei
Delphi-Quellcode:
  PrivMsg(copy(ACommand,SecondPos(' ',ACommand)+1,length(ACommand));
ein Inkomplatibe Typen: TObject und String;

Danke,
toenn

sECuRE 20. Feb 2005 20:05

Re: TIdIRC [Indy] Problem
 
Hi,

stimmt, integer hab ich vergessen, editier ich gleich. Des Weiteren fehlt 'ne Klammer ;)

cu

Toenn 20. Feb 2005 20:09

Re: TIdIRC [Indy] Problem
 
trotzdem gibts ein "Inkompatible Typen: 'TObject' und 'String'...

sECuRE 20. Feb 2005 20:13

Re: TIdIRC [Indy] Problem
 
Hi,

hast du auf die Klammer geachtet?

cu

Toenn 20. Feb 2005 20:16

Re: TIdIRC [Indy] Problem
 
ja

Pseudemys Nelsoni 20. Feb 2005 21:30

Re: TIdIRC [Indy] Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi Toenn,

wieso fängst du PRIVMSG's im "OnReceive" ab? Dazu ist eigentlich "OnMessage" da.

wie auch immer, ich hab mal eine unit die ich vor langer zeit mal geschrieben habe angehängt, pack sie einfach in dein projekt-ordner und binde bei "uses" "TokFuncs" mit ein.

dann benutzt du die funktion "GetTok":

Delphi-Quellcode:
if GetTok(ACommand, 2, ':') = '!test' then ...
die funktion benutzt also ":" als trenner und holt dann das 2te stück.


Zitat:

Wie kann ich jedoch mehrere Nick in das Edit Feld eintragen und mit ner Leertaste trennen?
hier kann ich dir die unit auch anbieten *g*...

Wie gesagt unit einbinden und dann:

Delphi-Quellcode:
var
  i: Integer;
begin
  for i := 0 to NumTok(Form2.LabeledEdit1.Text, ' ') do
  begin
    if Auser.Nick = GetTok(Form2.LabeledEdit1.Text, i, ' ') then ...

  end;
end;

hier ist NumTok die Menge deiner nicks in deinem edit (getrennt durch space) und GetTok der einzelne nick.

mfg

Toenn 21. Feb 2005 13:43

Re: TIdIRC [Indy] Problem
 
hm warum geht das nich´?

Delphi-Quellcode:
procedure TForm1.IdIRC1Topic(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel; const AChanName, ATopic: String);
var topicini: TIniFile;
var i: Integer;
begin
if CheckBox2.Checked then begin
for i := 0 to NumTok(Form2.LabeledEdit4.Text, ' ') do
 begin
   if Auser.Nick = GetTok(Form2.LabeledEdit4.Text, i, ' ') then begin
   Edit2.Text := ATopic;
   topicini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'settings.ini');
   topicini.WriteString('Channel', 'Topic', Edit2.Text);
   topicini.Free;
   IdIRC1.Say(Label2.Caption, 'Topicsave active.');
 end else begin
   IdIRC1.SetTopic(Label2.Caption, Edit2.Text);
   IdIRC1.Say(Label2.Caption, 'You are not allowed to change the Topic.');
end;
end;
end;
end;
danke,
toenn

Pseudemys Nelsoni 21. Feb 2005 13:45

Re: TIdIRC [Indy] Problem
 
hi toenn,

du solltest deinen schreibstil nochmal überdenken, wegen einreihen und so, der code ist nicht gerade leserlich :\

btw: was funktioniert denn nicht?

wenn du vor:

Delphi-Quellcode:
if Auser.Nick = GetTok(Form2.LabeledEdit4.Text, i, ' ') then begin
das:

Delphi-Quellcode:
showmessage(GetTok(Form2.LabeledEdit4.Text, i, ' '));
eingibst, werden dir die nicks doch richtig angezeigt oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr.
Seite 1 von 2  1 2      

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