![]() |
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 |
Re: TIdIRC [Indy] Problem
Hi,
hol dir einfach den zweiten Abschnitt des Strings, z.B. so:
Delphi-Quellcode:
(ungetestet)
// 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; cu, sECuRE (Edit: Variablenname angepasst) (Edit2: 2 Fehler Korrigiert) |
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:
ein Inkomplatibe Typen: TObject und String;
PrivMsg(copy(ACommand,SecondPos(' ',ACommand)+1,length(ACommand));
Danke, toenn |
Re: TIdIRC [Indy] Problem
Hi,
stimmt, integer hab ich vergessen, editier ich gleich. Des Weiteren fehlt 'ne Klammer ;) cu |
Re: TIdIRC [Indy] Problem
trotzdem gibts ein "Inkompatible Typen: 'TObject' und 'String'...
|
Re: TIdIRC [Indy] Problem
Hi,
hast du auf die Klammer geachtet? cu |
Re: TIdIRC [Indy] Problem
ja
|
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:
die funktion benutzt also ":" als trenner und holt dann das 2te stück.
if GetTok(ACommand, 2, ':') = '!test' then ...
Zitat:
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 |
Re: TIdIRC [Indy] Problem
hm warum geht das nich´?
Delphi-Quellcode:
danke,
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; toenn |
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:
das:
if Auser.Nick = GetTok(Form2.LabeledEdit4.Text, i, ' ') then begin
Delphi-Quellcode:
eingibst, werden dir die nicks doch richtig angezeigt oder?
showmessage(GetTok(Form2.LabeledEdit4.Text, i, ' '));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 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