BOT IRC : GÉNÉRATEURS DE LOGS AU FORMAT MIRC

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 2 juil. 2008 à 10:22
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 23 oct. 2008 à 16:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47180-bot-irc-generateurs-de-logs-au-format-mirc

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 oct. 2008 à 16:02
j'aime bien le concept.

idealement, t'aurais du faire une interface genre IrcReader avec des methodes genre :
OnPrivMsg
OnNotice
etc...
simonviei Messages postés 17 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 1 décembre 2008
22 oct. 2008 à 08:49
Après avoir ajouté diverses focntion à mon bot, mais qui se trouvaient dans la class Irc_log elle même, j'ai décidé de refaire tout le code :
Une mini gestion des erreurs, une class de connexion, une class pour le bot, une class pour les stats.

J'ai encore des bugs, mais pour l'instant, rien de méchant, je me met dessus cette après midi.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 juil. 2008 à 22:32
Hello,

je ne vais pas redire ce qui a été dit; donc, j'ajouterais juste que je trouve ça pas mal comme code : c'est propre, clair, pas mal codé...pour un débutant en PHP5, c'est très bien :-)
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
2 juil. 2008 à 12:16
En fait c'est pas très compliqué, comme tu as pu le voir le bloc try{ ... }catch(Exception $e){ ... } est fait pour "attraper" les exceptions qui seraient "jetées" par ton application.
Tu dois identifier les erreurs qui peuvent survenir, pennons l'exemple de ta fonction connexion, une exception évidente serait : on n'as pas réussi à ouvrir notre socket parce que par exemple le serveur n'existe pas ou encore le port est bloqué, il te faudra donc tester le $errno de fsockopen et selon sa valeur tu va jeter une exception correspondant au type d'erreur et tu peu même incorporer dans le message de ton exception $errstr, exemple :

throw new UnknowServerException('Exception : '.$errstr);
throw new PortException('Exception : '.$errstr);
(Ce ne sont que deux rapides exemples)

Bien évidement tu vas devoir créer les classes correspondant aux exceptions en les faisant hériter de la classe Exception et ensuite dès que tu va faire appel à ta fonction connexion c'est la que tu met ton bloc try{}catch(){} :)

Pour une meilleure explication : http://classes.scriptsphp.org/article.PHP-5-et-les-exceptions
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
2 juil. 2008 à 12:06
De là à dire que tu es "débile", quand même ! :p J'en serai presque à supprimer ton post pour non respect de ... toi même ;)

Si tu passe tes scripts de php4 à 5, c'est forcément sur que tu oublie des choses, tu peux pas penser à tout ! Tes erreurs sont justifiées et ton acte est louable (enfin un qui comprends le fait de ne plus utiliser php4 !).

Tu verra, __get et __set, c'est que du bonheur !

Mes remarques ne sont pas très lourdes, ton code est corrigeable en une heure (sauf la dernière partie).

Bonne recherches :) n'hésite pas si tu bloque
simonviei Messages postés 17 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 1 décembre 2008
2 juil. 2008 à 11:44
J'ai longtemps codé en php4 et j'essaye de tout passer mes script en php5 et comme je suis autodidacte...enfin bref commençons :p :

codefalse :
- Pour le constructeur, je suis débile car en plus je le fais sur d'autres scripts, donc je vais vite corriger ça *se tape sur la main*
- En ce qui concerne les setters/getters, je vais vite me documenter après ce message pour mettre ça en place !
- Pour ping c'est en effet un peu débile...je corrige ça vite aussi :p
- Pour la dernière remarque, je vais voir ce que je peux faire :) Je ne promet rien ^^

Morphinof
- Pourquoi mais j'ai encore des flous dans ma tête concernant les exceptions, j'attends de comprendre à peu plus le sujet pour éventuellement faire ma propre gestion des exceptions :p

/me part coder

Je met à jour le code dès que j'ai convenablement avancé.
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
2 juil. 2008 à 10:35
C'est simple et efficace, je rajouterai rien CodeFalse à déjà relevé tout ce à quoi j'ai pensé. Ah non ! Il à oublié une petite chose ! :D
try { ... }catch (Exception $e) {
die(...);
}
Comment sa die?? ^^ Tu devrais faire ta propre gestion des exception et enlever ces horribles die ;)
Bonne continuation !
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
2 juil. 2008 à 10:22
J'aime bien le principe perso, c'est un truc tout simple mais qui est bien pensé :)

Sinon au niveau des remarques, je trouve bizar que ton constructeur propose des variables à modifier tel que server ou port, et pas d'autres, tel que nick, host, mail. C'est incohérent. Par ailleur, en php5 la syntaxe conseillée pour le constructeur est __construct. On garde généralement le nom de la classe en tant que fonction pour les compatibilité descendantes avec les anciennes versions de php mais dans ton cas, l'usage des propriétés public/privée/protegée ne rendront pas ton code compatible avec php4 donc ...

Pour ce qui est des setters et des getters, je te conseille aussi d'utiliser les méthodes magiques __set et __get, et de mettre toutes tes variables "propriétés" dans un tableau, comme ca dans tes setters/getters, tu n'a qu'à tester si l'entrée du tableau existe et agir en conséquence, c'est plus simple.

Parce qu'en fait là tu ne peux modifier que les trois entrées que tu n'a pas pu mettre dans le constructeur. Du coup avec l'idée des méthodes magiques, tu peux tout modifier ou non.

Du coup dans ton constructeur tu ne met que l'essentiel, du genre le serveur, le port, l'host, et éventuellement le nom et l'email du bot. Le reste tu attribue des valeurs prédéfinies.

L'utilisateur pourra modifier ce qu'il veux ensuite grace aux méthodes magiques.

Ensuite j'ai pas regardé attentivement toutes tes méthodes, mais la méthode pong m'interpelle. Tu teste dans analyseLine si la requete est "PING", si oui tu appele la méthode pong qui RE-teste si la requete est PING. Pourquoi le faire deux fois ? tu fait tous tes tests dans analyseLine et dans la méthode pong, tu ne fait que fwrite($this->connexion, 'PONG '.$line[1]);

Ma derniere remarque portera sur quelque chose de plus inutile mais à envisager si tu a le temps et la motivation. C'est au niveau conception POO. Tu définit un instance de Irc_Log, et dans cette instance, tu gère les informations concernant le bot (nom, mail, etc).
Normallement, tu devrait faire une classe IrcBot ou tu indique les informations concernant le bot, que tu passe à une classe Irc (par exemple, qui se chargera de la connection) et tu instancie IrcLog (avec les informations qu'il faut) que tu passera aussi à la classe Irc.
Tu sépare ainsi la gestion de la communication sur le serveur, de ton utilisateur (ici le bot) et d'un service d'enregistrement d'évenement (ici le log). Bon apres ca c'est l'extra bonus ! :)

Courage pour la suite ! :)
Rejoignez-nous