Entwickler-Ecke

Internet / Netzwerk - IdIRC isop problem


SuiZiD - So 26.04.09 19:34
Titel: IdIRC isop problem

Delphi-Quelltext
1:
2:
if (pos('!kick ',content) <> 0and (idirc1.IsOp(auser.Nick) = true) then
idirc1.Kick(labelededit3.Text,copy(content,7,17),'Kicked by ' +auser.Nick);


eig. müsste er denjenigen kicken wenn man op hat, aber es passiert gar nichts -.-
am copy liegt es net denn ohne isop geht es oo


Jakob_Ullmann - Mo 27.04.09 21:08

ein paar mehr Informationen. Was ist LabeledEdit3? Content?


jakobwenzel - Mo 27.04.09 21:17

user profile iconSuiZiD hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
copy(content,7,17)                    

Was sagt dir denn, dass der Benutzername maximal 17 Zeichen lang ist?


Xentar - Mo 27.04.09 21:22

Hat der ausführende Benutzer denn wirklich OP?
Viele IRC Netzwerke unterstützen inzwischen noch andere Modi: HOP, Admin, Owner, usw. Ich weiß nicht, wie die Funktion IsOp darauf reagiert...

Probier doch mal sowas in der Art, um zu testen ob das generell geht:

Delphi-Quelltext
1:
2:
if (idirc1.IsOp(auser.Nick)) then
  ShowMessage('Jo, der hat OP');


Die explizite Abfrag auf = true solltest du dir übrigens wieder abgewöhnen.

Edit: Grad mal nachgesehen. Die Funktion IsOp:

Delphi-Quelltext
1:
2:
3:
4:
5:
{ Return True if the string Nick is a channel operator. }
function TIdIRC.IsOp(ANick: String): Boolean;
begin
  Result := (Length(Nick)>0and (Nick[1] = '@');    {Do not Localize}
end;

es wird also nur geprüft, ob das Zeichen vor dem Nick ein @ ist. Andere Modi, die ich oben erwähnt hatte, werden also NICHT erkannt!


DelphiMarkus - Mo 27.04.09 21:26

Hi!

Eigentlich sollte man es variabel machen, hier mal ein Tipp:
Die Länge des Benutzernamens ist ja die Länge des Befehls, z.B.Length('!kick'). Und diese Länge wird von der ganzen Länge (content) abgezogen. Den Rest kannst du dann als Benutzernamen nehmen.
Überleg mal, die funktion copy() ist schon richtig. ;)

Um mal zu dem OP zu kommen: Der Bot muss auch OP sein um kicken zu können. Und ein OP macht das so: /kick <user> das ist vielleicht besser denn !kick erscheint im Chat und /kick nicht. ;)