IdIrc

Résolu
Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 février 2010 - 16 avril 2006 à 10:33
Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 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 ... :

[Parse Error] Unit1.pas(69) : E2003 Undeclared Identifier : 'TidContext'
[Parse Error] Unit1.pas(69) : E2037 Declaration of 'idIRC1MOTD' differs from previous declaration

J'éspère avoir été assez explicite pour que vous puissiez m'aider. Merci d'avance

13 réponses

Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 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.
3
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
16 avril 2006 à 11:41
mets IdContext dans la clause uses !!!
0
Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 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
0
Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 février 2010
16 avril 2006 à 12:08
une tite précision la ligne retournée c'est la dernière. :End of /MOTD command.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Emandhal Messages postés 194 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 3
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...
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 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 !!!
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
16 avril 2006 à 14:59
procedure TForm1.IdIRC1MOTD(ASender: TIdContext; AMOTD: TStrings);
begin
memo1.Lines.Assign(AMOTD);
end;
0
Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 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
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
16 avril 2006 à 15:42
essaye celui de code source
irc://chat.viendez.com/#Programmation
0
Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 février 2010
16 avril 2006 à 15:45
ça fait exactement la même chose
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
16 avril 2006 à 18:24
Bon après analyse des raws !!! pas étonnant car l'événement OnMOTD se déclenche à la suite d'un raw 376 ils se sont trompés !!!

j'explique car ça fait un moment que je bosse sur le protocole IRC
http://www.respublica.ca/mambo/smf/index.php?topic=202.0

je le connais pratiquement par coeur !!!

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

il aurait dû mettre OnEndMOTD !!!
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
16 avril 2006 à 18:27
ah désolé j'ai pas rat-frais chit ma page ;)
0
Indigo_ Messages postés 15 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 27 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
0