AGB  ·  Datenschutz  ·  Impressum  







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

TIdIRC [Indy] Problem

Ein Thema von Toenn · begonnen am 20. Feb 2005 · letzter Beitrag vom 21. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Toenn

Registriert seit: 4. Okt 2003
Ort: Düsseldorf Beiträge: 10000
114 Beiträge
 
#1

TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 19:55
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
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#2

Re: TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 20:48
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)
  Mit Zitat antworten Zitat
Toenn

Registriert seit: 4. Okt 2003
Ort: Düsseldorf Beiträge: 10000
114 Beiträge
 
#3

Re: TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 21:01
gibt fehler.
ersma oben bei der function: Funktion benötigt Ergebnistyp.
Füge ich Integer ein kommt unten bei
  PrivMsg(copy(ACommand,SecondPos(' ',ACommand)+1,length(ACommand)); ein Inkomplatibe Typen: TObject und String;

Danke,
toenn
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#4

Re: TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 21:05
Hi,

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

cu
  Mit Zitat antworten Zitat
Toenn

Registriert seit: 4. Okt 2003
Ort: Düsseldorf Beiträge: 10000
114 Beiträge
 
#5

Re: TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 21:09
trotzdem gibts ein "Inkompatible Typen: 'TObject' und 'String'...
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#6

Re: TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 21:13
Hi,

hast du auf die Klammer geachtet?

cu
  Mit Zitat antworten Zitat
Toenn

Registriert seit: 4. Okt 2003
Ort: Düsseldorf Beiträge: 10000
114 Beiträge
 
#7

Re: TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 21:16
ja
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#8

Re: TIdIRC [Indy] Problem

  Alt 20. Feb 2005, 22:30
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":

if GetTok(ACommand, 2, ':') = '!testthen ... 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
Angehängte Dateien
Dateityp: pas tokfuncs_150.pas (9,0 KB, 5x aufgerufen)
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Toenn

Registriert seit: 4. Okt 2003
Ort: Düsseldorf Beiträge: 10000
114 Beiträge
 
#9

Re: TIdIRC [Indy] Problem

  Alt 21. Feb 2005, 14:43
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
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#10

Re: TIdIRC [Indy] Problem

  Alt 21. Feb 2005, 14:45
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:

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

showmessage(GetTok(Form2.LabeledEdit4.Text, i, ' ')); eingibst, werden dir die nicks doch richtig angezeigt oder?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:41 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