Indigo_
Messages postés15Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention27 février 2010
-
16 avril 2006 à 10:33
Indigo_
Messages postés15Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention27 février 2010
-
16 avril 2006 à 18:29
Bonjour tout le monde. J'essaye de faire un client irc sur delphi mais j'ai quelques petits problème. Enfait quand j'utilise le composant IdIrc de Indy qu'est intégré à delphi si j'utilise les events comme On MOTD il retourne dans la liste de scripting :
procedure TForm1.IdIRC1MOTD(ASender: TIdContext; AMOTD: TStrings);
begin
end;
Jusque là aucun problème apparrent dans le code mais le problème c'est que delphi après avoir relu le code affiche ça :
procedure TForm1.IdIRC1MOTD(ASender: TIdContext; AMOTD: TStrings);
begin
end;
Enfin c'est pas rouge comme ça c'est comme quand il y a une erreur de code. J'y connais pas grand chose au Sender donc je tente de compiler et ... :
Indigo_
Messages postés15Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention27 février 2010 16 avril 2006 à 18:18
Voilà j'ai trouvé quelle était la solution. Il fallait juste savoir que le MOTD était envoyé sous forme de RAW. C'est à dire que toutes les lignes sont envoyées en RAW et que le MOTD lui même n'est qu'uniquement le End of /MOTD ... . Donc pour avoir le MOTD à la connexion à un serveur il suffit d'ajouter :
procedure TForm1.IdIRC1Raw(ASender: TIdContext; AIn: Boolean; AMessage: string);
begin
memo1.Lines.add(Amessage);
end;
Vous obtiendrez les RAW au format brut après il suffit de les traiter une par une dans votre script.
Je remercie quand même les gens qui ont essayé de m'aider et surtout shining qui m'a mis sur la voie.
Indigo_
Messages postés15Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention27 février 2010 16 avril 2006 à 12:04
Je continues sur le même post parce que j'ai pas d'interêt à changer. Voici ma fonction
procedure TForm1.IdIRC1MOTD(ASender: TIdContext; AMOTD: TStrings);
var
s:String;
T:TStrings;
x:Integer;
begin
T:=AMOTD;
s:='';
for x:=0 to T.Count-1 do
begin
s:=s+T.Strings[x];
end;
memo1.Lines.Add(s);
end;
elle sort du four. un pbs elle retourne une seule ligne du motd
Emandhal
Messages postés194Date d'inscriptiondimanche 2 mars 2003StatutMembreDernière intervention10 octobre 20063 16 avril 2006 à 14:49
Normal tu demandes de mettre à la suite toutes les lignes de AMOTD, donc t'aura une seule ligne qui les réunit toutes à la suite.
Mais comme je ne sais pas cedont tu veux faire, je ne peux pas t'aider plus.
Tout problème a sa solution... Mais en général, celle que l'on trouve n'est jamais la bonne...
cs_shining
Messages postés304Date d'inscriptionlundi 30 décembre 2002StatutMembreDernière intervention10 mars 2012 16 avril 2006 à 14:57
si la ligne envoyée est "End of /MOTD command." uniquement dans l'événement MOTD celà veut dire qu'il n'ya pas de MOTD !!! je suppose que tu fait des tests avec un Serveur interne ? ça doit être pour ça !!!, il faut remplir le champ MOTD dans la config du serveur !!!
normalement le serveur envoi "ERR_NOMOTD" mais le composant indy ne prend pas en charge tout le protocole IRC !!!
Autre chose ...
tu peux optimsé ton code en remplacant ton code par ceci :
Memo1.Lines.AddStrings(AMOTD);// une seule ligne suffit !!!
Indigo_
Messages postés15Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention27 février 2010 16 avril 2006 à 15:32
merci beaucoup tout le monde. Mais aucune de vos méthodes ne fonctionnes, du moins je n'arrive à en faire fonctionner aucune. Chaque fois je reçois cette même ligne End of /MOTD. Au départ j'ai pensé aussi au fait qu'il n'y avait pitetre pas de motd sur le serveur distant que j'utilisait donc j'ai vérifié et si, il y en a. Il est interdit de faire de la pub mais si quelqu'un souhaite avoir l'adresse du serveur afin d'essayer par lui même je peux lui donner en M.P. . Merci encore pour ceux qui essayent de m'aider
en tant normal le serveur doit envoyé
RPL_MOTDSTART raw nuémrique 375
RPL_MOTD raw numérique 372
RPL_ENDOFMOTD raw numérique 376
d'ailleurs tu peux faire un test dans l'événement IRCRaw
procedure TForm1.IRCRaw(ASender: TIdContext; AIn: Boolean; AMessage: String);
begin
if AIn then
if Copy(AMessage , 1 , 3) = '372' then
begin
Memo1.Lines.add('--- MOTD ---');
Memo1.Lines.add(AMessage);
Memo1.Lines.add('-------------');
end;
end;
voilà malheureusement je viens de voir le source de indy et les raw 375 & 372 ne sont pas pris en charge
Indigo_
Messages postés15Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention27 février 2010 16 avril 2006 à 18:29
Voilà c'est ce qui m'aurait eclairé tout de suite ça serait sympa si un jour Indy rectictifiai le tire parce que ce On MOTD comme tu dis n'est en fait que ON EndMOTD. Merci de ton éclairage