Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

BOT IRC C++ FACONNABLE ET EXTENSIBLE AVEC ARCHITECTURE EVENEMENTIELLE (MVC LIKE). GERE DES COMPTES UTILISATEURS ET EXTENSIONS (PLUGINS)


Information sur la source

Catégorie :Réseaux & Internet Classé sous : bot, irc, sql, boost, client Niveau : Initié Date de création : 08/09/2007 Date de mise à jour : 22/09/2007 19:58:46 Vu / téléchargé: 4 961 / 188

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Ce programme utilise les librairies boost, mysqlpp (et donc mysql classique). Il a été programmé de façon portable, mais n'a jamais été compilé/testé sous linux. Merci de me reporter les erreurs éventuelles. Lire Readme.txt dans le zip pour plus d'informations sur la compilation.

Voici un bot irc sur lequel je travaille maintenant depuis pas mal de temps. La source contient tout d'abord un dossier dl_source, (Dynamic Library Source), où se situent les fichiers constituant la bibliothèque du bot : gestion des user irc, de la lecture des options jusqu'au logging des erreurs, en passant par les socket, ce sont de mini librairies en C++ proposant une approche orientée objet que le bot utilise. Ce dossier contient également MinXL, une mini API pour parser le XML téléchargée depuis codes-sources, et une implémentation de SHA1 (aussi de codes-sources).

Mais le plus important reste la gestion des évènements, orchestrée par trois fichiers : event.cpp/.hpp, listener.cpp/.hpp, dispatcher.cpp/.hpp.
Le fichier dispatcher contient une classe qui gère tout le bas-niveau associé à la programmation d'un bot irc : les socket, le protocole irc, l'analyse des réponses serveur pour en tirer des informations...cette classe lance un thread qui lit toutes les réponses du serveur, et lorsqu'il reçoit des données susceptibles d'intéresser les couches de plus haut niveau (réception d'un message, un utilisateur a quitté le serveur, etc...) il créer un objet de type event (message_event, quit_event, etc...) qui contient toutes les informations qu'il a pu tirer de l'analyse via les expressions régulières des données reçues, et il envoie cet évènement aux classes qui se sont enregistrées auprès de lui en tant que listener. Il met l'évènement dans une queue, qu'un autre thread indépendant vide en permanence (il utilise wait() pour ne pas bouffer tout le CPU). C'est pour ça qu'à la limite, cette classe pourrait tout à fait être utilisée pour programmer un client irc car c'est une sorte d'interface avec le protocole irc permettant aux autres classes de ne s'occuper que du haut niveau. La classe event_dispatcher propose également, dans l'autre sens, des méthodes pour converser avec le serveur : send_message(), send_notice(), send_command()...etc... voir dispatcher.hpp pour une plus ample descriptions (dossier dl_source)

On peut noter aussi la présence d'une classe io_interface dans le fichier dabaseio.hpp, qui définit une interface avec un support de données générique. Ainsi, le bot gère le stockage et l'accès aux comptes utilisateurs de façon abstraite, sans s'occuper de quel manière les données sont réellement stockées : sur le disque, dans une base de données, etc...une interface pour une base mysql est fournie et utilisée par défaut, mais vous pouvez très bien définir la votre. Voir dabaseio.hpp et mysql_impl.hpp (et main.cpp pour changer l'interface utilisée) pour plus d'informations (dans le dossier dl_source, toujours).

Le bot est également capable de charger en cours d'exécution des extensions : en réalité, le bot de base fourni ici gère la gestion des comptes utilisateurs, quelques commandes utilitaires, et les modules, mais est surtout destiné à accueillir ces extensions qui définiront vraiment ses fonctionnalités. Une description des plugins (nom, description, auteur, paramètres d'initialisation, etc...) est faite dans un fichier XML. Chaque module a une librairie dynamique associée (.dll sous windows, .so sous linux) que le bot ouvre en temps réel pour chercher les fonctions dont il a besoin. Les modules jouissent des mêmes avantages que le bot (c'est pour ça que la bibliothèque de bot est dans une librairie dynamique (ou partagée) : les modules doivent pouvoir en profiter), notamment au niveau de l'event_dispatcher et du niveau d'abstraction. Ils bénéficient de toute la librairie du bot. Pour des informations plus précises sur le fonctionnement des modules, voir le fichier bot_source/plugin.hpp.

Le tout fait un programme assez conséquent, et parfois un peu fouilli (trop de classe tue la classe...) mais j'ai essayé de programmer de la façon la plus claire et logique possible. Il manque aussi un peu de commentaire, même si je me suis efforcé d'en mettre un maximum, aussi si vous avez besoin d'un éclaircissement sur une partie précise, dîtes-le moi.

Pour une documentation plus complète, lisez les commentaires de début de fichier, surtout ceux des en-tête (.hpp), qui comportent souvent des précisions intéressantes. Lisez aussi le fichier Readme.txt contenu dans le zip. Pour des questions, n'hésitez pas à poster des commentaires ici.
Merci de votre lecture !
 

Source

  • Voir dans le zip (trop de code pour mettre ici ^^)
Voir dans le zip (trop de code pour mettre ici ^^)

Conclusion

comme précisé plus haut, n'a pas été testé en compilation/exécution sous linux.
Bug connu : segfault tout à la fin du programme (donc pas gênant), mais intriguant tout de même. Il semblerait se situer dans le destructeur de la classe bot (fichier : bot_source/bot.cpp).
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

08 septembre 2007 20:46:56 :
(ancien titre trop long et trop chargé)
09 septembre 2007 11:27:45 :
-
17 septembre 2007 18:58:25 :
Ajout d'un plugin IRCalc qui permet de calculer des expressions mathématiques (par exemple !calc 1*(2*-3/5^6), le bot répond : 1*(2*-3/5^6) = <résultat>)
22 septembre 2007 19:58:46 :

Commentaires et avis

signaler à un administrateur
Commentaire de Shromilder le 09/09/2007 11:45:05

Vu le descriptif, y a l'air d'y avoir du boulot!
Je prend pour regarder :)) (et apprendre des choses)
Merci ;)

signaler à un administrateur
Commentaire de lovejava le 09/09/2007 12:48:19

De rien ^^
C'est vrai que c'est imposant mais bon faut pas se fier au nombre de fichier, comme expliqué dans readme.txt, ya beaucoup de headers qui sont en double. Et puis j'ai voulu faire des truc bien séparés ;)
En tout cas si tu as des questions/suggestions n'hésite pas...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Client IRC [ par SAtaN ] quelqu'un aurait il un tutoriel, des infos, pour m'aider à creer un client IRC ???PS : j'utilise Borland C++a+ C++ Builder: Client irc (a laide!) [ par Psyc0s ] Bon je suis en train de faire un client irc avec C++ builder Mais le socket ne veux pas envoyer les message au serveur:(La connexion au serveur foncti Bot Pour Irc, Probléme pour les commandes [ par oshin ] Chalut tousJ'ai besoin de votre aide car je n'arrive pas à faire en sorte que lorsqu'on écrit sur le salon par ex: !jeux Le bot réponde : Je n'ai pas client IRC ?? [ par crAzYJoJoo ] Slt, je cherche le code source d'un client irc pour voir comment ca marcheest ce que qq1 sait ou je peux trouver ca ?merci d'avance ++ bot irc [ par Nano ] quelqu'un pourait me donner la source d un bot irc simple fait avec visual c++Merci d'avance un client irc ultra simplifié pour une radio [ par gastonzine ] Bonjour à tous,je suis à la recherche de quelqu'un qui serait capable de faire un petit client irc en cpp. Je ne suis pas developpeur mais je pense qu J'aimeré faire un bot irc qui marche en mode console , avec vc++ [ par y4r1 ] J'aimeré faire un bot irc qui marche en mode console , avec vc++aidé moi svp [C] Connexion à MsSQL sous Linux [ par ZedMaTrix ] Salut les codeurs !Voila, je suis interessé par le developpement d'un client SQL.La cible de mon programme est un serveur MS-SQL.Bon pour le moment, s Question pour bot irc [ par restesouple ] Bonjour,J'ai pris cette source http://www.cppfrance.com/code.aspx?ID=20596&nbsp;et avec celle -ci qui fonctionne parfaitement, je voudrais savoir comm Programmation d'un bot pour IRC [ par murony ] Bonjour,Voil&#224; j'aimerai cr&#233;er un bot irc moi m&#234;me. Je n'ai pas envie d'utiliser un eggdrop et un script tcl, ni avec mIRC, je ne suis p


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,702 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.