begin process at 2012 02 10 20:10:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > BOT IRC BASIQUE

BOT IRC BASIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :robot, bot, irc, winsock, socket Niveau :Débutant Date de création :09/09/2005 Vu / téléchargé :9 500 / 380

Auteur : Kitu2

Ecrire un message privé
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Bonjour tout le monde,
Voilà je débute en langage C, je sais que commencer par les sockets c'est pas l'idéale.
Ce bot IRC se connecte uniquement sur le réseau Voilà/Wanadoo (je ne sais pas trop pkoi ...).

Pour que ce code fonctionne il suffit d'ajouter un lien vers la librairie winsock (-lwsock32), pour les débutant (plus que moi), utilisez dev-c++ 4.9.9.2, allez dans "option du compilateur", cochez "ajouter ces commandes lors de l'appel a l'éditeur de liens" puis mettez dans la zone de texte : -lwsock32 .
Aussi pour réaliser ce code je me suis aidé d'un tutorial sur les socket et j'ai modifié l'exemple de client à la fin : http://c.developpez.com/WalrusSock .

Si quelqu'un pourrait me dire pkoi ce bot se connecte uniquement à voilà/wanadoo ca serait cool. Je crois qu'il s'agit d'un problème d'ident, pourtant je pense utiliser la bonne syntaxe, bref merci de votre aide :).

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <winsock2.h>
  • #include <windows.h>
  • int main(void)
  • {
  • char user[] = "USER DiCoToRuS free.fr chat9.x-echo.com :DiCoToRuS\r\n";
  • char nick[] = "NICK DiCoToRuS\r\n";
  • char join[] = "JOIN #testtt\r\n";
  • char privmsg[] = "PRIVMSG #testtt :Hello world\r\n";
  • WSADATA WSAData;
  • WSAStartup(MAKEWORD(2,0), &WSAData);
  • SOCKET sock;
  • SOCKADDR_IN sin;
  • char buffer[1000];
  • sock = socket(AF_INET, SOCK_STREAM, 0);
  • sin.sin_addr.s_addr = inet_addr("195.101.94.173");
  • sin.sin_family = AF_INET;
  • sin.sin_port = htons(6667);
  • connect(sock, (SOCKADDR *)&sin, sizeof(sin));
  • send(sock,user, strlen(user), 0);
  • printf ("%s\n",user);
  • send(sock,nick, strlen(nick), 0);
  • printf ("%s\n",nick);
  • int a;
  • char *p, tokit[30];
  • char *j;
  • char poulet[30];
  • while (1) {
  • recv(sock, buffer, sizeof(buffer), 0);
  • p = strstr (buffer, "PING");
  • if (p)
  • {
  • for (p += 6, a = 0; *p && *p != '\n'; p++, a++)
  • tokit[a] = *p;
  • tokit[a] = 0;
  • printf ("tokit: %s\n", tokit);
  • sprintf (poulet, "PONG: %s\n", tokit);
  • send (sock, poulet, strlen (poulet), 0);
  • printf ("%s\n",poulet);
  • }
  • printf ("%s\n",buffer);
  • j = strstr (buffer, "End of /MOTD command.");
  • if (j) {
  • send(sock,join, strlen(join), 0);
  • printf ("%s\n",join);
  • send (sock,privmsg, strlen(privmsg), 0);
  • printf ("%s\n",privmsg);
  • int len = recv(sock,buffer,sizeof(buffer)-1,0);
  • buffer[len]=0;
  • }
  • }
  • // send(sock, "quit\r\n", strlen(quit), 0);
  • closesocket(sock);
  • WSACleanup();
  • system("pause");
  • return 0;
  • }
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <windows.h>
int main(void)
{   
 char user[] = "USER DiCoToRuS free.fr chat9.x-echo.com :DiCoToRuS\r\n";
 char nick[] = "NICK DiCoToRuS\r\n";
 char join[] = "JOIN #testtt\r\n";
 char privmsg[] = "PRIVMSG #testtt :Hello world\r\n";
  
 WSADATA WSAData;
 WSAStartup(MAKEWORD(2,0), &WSAData);
 SOCKET sock;
 SOCKADDR_IN sin;

 char buffer[1000];
  sock = socket(AF_INET, SOCK_STREAM, 0);
  sin.sin_addr.s_addr			= inet_addr("195.101.94.173");
  sin.sin_family				= AF_INET;
  sin.sin_port				= htons(6667);
   
  connect(sock, (SOCKADDR *)&sin, sizeof(sin));
  
  send(sock,user, strlen(user), 0);
  printf ("%s\n",user);
  send(sock,nick,  strlen(nick), 0);
  printf ("%s\n",nick);
  
 int a;
 char *p, tokit[30];
 char *j;
 char poulet[30];

while (1) {
      recv(sock, buffer, sizeof(buffer), 0);
      p = strstr (buffer, "PING");
      if (p)
      { 
            for (p += 6, a = 0; *p && *p != '\n'; p++, a++) 
                  tokit[a] = *p; 
            tokit[a] = 0;
            printf ("tokit: %s\n", tokit);
            sprintf (poulet, "PONG: %s\n", tokit);
            send (sock, poulet, strlen (poulet), 0);
            printf ("%s\n",poulet);
      }
      printf ("%s\n",buffer);
      j = strstr (buffer, "End of /MOTD command.");
      if (j) {
            send(sock,join, strlen(join), 0);
            printf ("%s\n",join);
            send (sock,privmsg, strlen(privmsg), 0);
            printf ("%s\n",privmsg);
            int len = recv(sock,buffer,sizeof(buffer)-1,0);
            buffer[len]=0;
      }
}

// send(sock, "quit\r\n",  strlen(quit), 0);
 closesocket(sock);
 
 WSACleanup();
 
    system("pause");
    return 0;
}

 Conclusion

Si quelqu'un pourrait me dire pkoi ce bot se connecte uniquement à voilà/wanadoo ca serait cool. Je crois qu'il s'agit d'un problème d'ident, pourtant je pense utiliser la bonne syntaxe, bref merci de votre aide :).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • IRC.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 858 octets
  • IRC.exeTélécharger ce fichier [Réservé aux membres club]19 136 octets

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture CONTACTS MANAGER par eapaceinfo
Source avec Zip Source avec une capture CONTACTES BOOK par mature
Source avec Zip Source avec une capture [C++/QT] SLIDEALWAYS, RÉALISEZ DES SLIDES POUR VOTRE SITE AV... par doderic
Source avec Zip Source avec une capture MAILLAGE 3D (VTK + QT) par ammoun007
Source avec Zip Source avec une capture CONVHTML : UN UTILITAIRE DE CONVERSION POUR FICHIERS HTML par pgl10

 Sources en rapport avec celle ci

Source avec Zip INTÉGRATION SIMPLE D'UN CLIENT IRC À UNE APPLICATION par PJulot
PROXY IRC SIMPLE (WINDOWS/WINSOCK) par _michel
Source avec Zip Source avec une capture CLIENT IRC SIMPLE AVEC DEV-CPP par TeniX
Source avec Zip BOT IRC C++ FACONNABLE ET EXTENSIBLE AVEC ARCHITECTURE EVENE... par lovejava
Source avec Zip UN BOT EN C POUR LE IRC AVEC SON BAZOOKA par The_Guardian

Commentaires et avis

Commentaire de lowan le 09/09/2005 00:23:31

tete parce que l'ip est 195.101.94.173 nan ? :D

Commentaire de DeAtHCrAsH le 09/09/2005 09:57:03

Si tu veux pouvoir te connecter à d'autre serveur irc, tu n'as qu'a changer l'IP.
A la place de 195.101.94.173, mets 62.23.9.122, tu veras que tu te connecteras a un autre serveur IRC.
Sinon pense bien a vérifier les ports aussi, le plus souvent utilisé étant le 6667.

Commentaire de Tidam le 10/09/2005 10:39:10

Non en faite, il faut que tu renvois un "USER DiCoToRuS free.fr chat9.x-echo.com :DiCoToRuS\r\n" a un certain moment

exemple de mon code:
if ( !strcmp(IRC_gettok(temp,2,32),"AUTH") )
    IRC_send(sock,"USER testbot tbot tbot :By Tidam\n");

Il peut aussi y avoir le probleme de l'email et du fullname, qui doivent etre identiques sur certains serveur (ex: si le fullname est 'Tidam' l'adresse doit etre 'Tidam@machin.truc')

Enfin bref si t'as des problemes demande moi !

Commentaire de Kitu2 le 12/09/2005 14:49:30

c'était pas ca le pb, j'avais un problème de réponse aux pings ... selon les serveurs cela diffère ... (Je sais encore changer une ip et un port !!!) ce soir je vous envoi ma nouvelle source qui fonctionne bien mieux :) !

Commentaire de remram44 le 24/09/2005 22:00:18

C'est quand même vachement basique comme code... Mais ça montre bien comment se connecter à l'IRC.

Commentaire de PtitKev le 07/10/2005 16:07:12

Kitu2 le prob vien du fait que ta des chr \r \n et que plusieurs serv envoient plusieurs lignes d'un seul coup.

Le plus simple pour tester ca c d'utiliser le debug mirc ;) en sachant que mirc lui découpe auto les \r\n et traite indépendament chaque ligne (ce qui est pas tjrs pratique).

En gros, tu dois découper chaque ligne reçue par \r ou \n et testet chaque bloque : j'y connais pas grand chose au C mais j'ai eu ce prob en python ^^. Fo voir, si comme en perl, ya une option pour découper auto chaque ligne au lieu de traiter chaque packet comme une ligne.

Je code mes bots IRC en php mais je pense que je vais tester en C avec mysql pour voir ce que ca donne.

Bonne continuation et @+

PS: Voila c dla merde : ca a preque plus rien a voir avec l'IRC, le seul raport, c le chat : le protocol a été modif de partout :p

Commentaire de remram44 le 07/10/2005 20:45:00

Moi je fais des recv() avec une taille de 1 octet et je regarde si c'est un \n. Si oui je traite le contenu du buffer et je le vide.

char buffer[256];
int pos=0;
while(true)
{
    recv(socket,&buffer[pos],1,0);
    pos+=1;
    buffer[pos]='\0';
    if(buffer[pos-1]=='\n')
    {
        // Traitement
        pos=0;
        buffer[0]='\0';
    }
}

Commentaire de tagboys le 18/08/2006 19:15:51

bah moi a la compil 0 erreur mais au build :

test4.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
test4.obj : error LNK2001: unresolved external symbol __imp__closesocket@4
test4.obj : error LNK2001: unresolved external symbol __imp__recv@16
test4.obj : error LNK2001: unresolved external symbol __imp__send@16
test4.obj : error LNK2001: unresolved external symbol __imp__connect@12
test4.obj : error LNK2001: unresolved external symbol __imp__htons@4
test4.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
test4.obj : error LNK2001: unresolved external symbol __imp__socket@12
test4.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
Debug/test4.exe : fatal error LNK1120: 9 unresolved externals
Error executing link.exe.

test4.exe - 10 error(s), 0 warning(s)

Commentaire de Tidam le 25/08/2006 20:00:09

{Quote}Pour que ce code fonctionne il suffit d'ajouter un lien vers la librairie winsock (-lwsock32), pour les débutant (plus que moi), utilisez dev-c++ 4.9.9.2, allez dans "option du compilateur", cochez "ajouter ces commandes lors de l'appel a l'éditeur de liens" puis mettez dans la zone de texte : -lwsock32 .{Quote}
:*

Commentaire de tagboys le 27/08/2006 04:25:53

je voie pas lùtiliter de recopier cela si jùtiliserait belle et bien dev jorait pas poser une tel question jutilise plutot vc++ a moin que jme trompe dev et vc++ on pas les meme options :) allors super ton copie coller maintenant je vais pouvoir relire a partir dèn bas ;)

Commentaire de Tidam le 27/08/2006 17:15:06

Ca veut dire qu'il ne faut pas oublier de linker la lib, ce que j'ai copié c'est la methode pour dev-cpp mais pour vc++ je crois que c'est : #pragma comment(lib, "ws2_32.lib") a rajouter dans le header.

Commentaire de yohan49 le 10/11/2006 16:55:29

pour le probleme de connexion , faut pas preciser la provenance si on n'est pas un bot linké

donc USER pseudo 0 * :real name\r\n

:)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

quel est le prob avec send(); en socket C [ par shadow1779 ] Bonjour,j'ai un petit probleme, je developpe un petit bot irc en C via les socket, j'ai fai le debut ou le programme demande a l'utilisateur quel est Connexion a irc.voila.fr [ par Globox60 ] Bonjour a tous,Je prog sous builder, et je cherche a me faire un client irc avec. Le pb est la clé d' acces de orange.J utilise ce code :ClientSocket1 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 EVENEMENTS WINSOCK [ par DeAtHCrAsH ] Quelqu'un aurait il une liste detaillé des differents evenements mis en place pour mes socket ? (WM_SOCKET)Et sans MFC ou VCL !Du genre l'evenement qu Winsock fonction listen qui bloque [ par elbertondu62 ] Bonjour voila je suis entrain d'effectuer un programme avec winsock en graphique mais j'ai un probleme arriv&#233; sur une boucle d'ecoute. Quand un c projet bot irc [ par shadow1779 ] Bonjour,j'ai un projet de faire un petit bot irc, tout sommaire au debut pour m'ameliorer avec les sockets en C, le socket se connecte bien mais je pe [GRAVE]!! TOUTES MES APPLI winsock marche pu [ par sebastienmz ] Salut tout le mondeje suis devant un cas assé dure :ce matin je démare mon pc.. le lance mon google search (la source que j'ai posté) et la imppossibl bot irc [ par Nano ] quelqu'un pourait me donner la source d un bot irc simple fait avec visual c++Merci d'avance Winsock simple... [ par DeAtHCrAsH ] Comment faire pour que le serveur puisse gerer plusieurs client a la fois ?Dois-je declarer autant de socket qu'il y a de client ?Ou y a t'il un equiv 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales