begin process at 2010 03 17 00:24:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > IRC_BOT ( MON PREMIER PROGRAMME !!! )

IRC_BOT ( MON PREMIER PROGRAMME !!! )


 Information sur la source

Note :
4 / 10 - par 2 personnes
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Débutant Date de création :18/11/2003 Vu :4 351

Auteur : abdoulax

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


 Description

Hello world , lol , bah moi pour ma premiere source g préférer apprendre ac les sockets , heyhey c plus interressant . Bon ce bot ne fé que se connecté à l'irc , il join un canal à la connection , se reconnect après déconnection .

Je compte l'ameliorer en ajoutant des raws commandes ms fo que je trouve comment filtrer les messages reçu par le server ( lol il fo que je puisse récuperer des bou de message pr les comprarers )
!Help! si vous pouvez m'aider , no problem !Help!

si vous compilez en console , vs pouvez rajouté ceci a la fin du prog pour savoir se qui est envoyé par le server :
printf("bot :%s",buff);

Source

  • #include <winsock2.h>
  • #pragma comment(lib, "ws2_32.lib")
  • char *server = "127.0.0.1";
  • int port = 6667;
  • char *nick = "nick-bot";
  • char *chan = "#chan";
  • char buff[4096];
  • char tmp[4096];
  • void main()
  • {
  • while (1) {
  • WSADATA WSAData;
  • WSAStartup(MAKEWORD(2,0), &WSAData);
  • SOCKET sock;
  • SOCKADDR_IN sin;
  • sock = socket(AF_INET, SOCK_STREAM, 0);
  • sin.sin_addr.s_addr = inet_addr(server);
  • sin.sin_family = AF_INET;
  • sin.sin_port = htons(port);
  • connect(sock, (SOCKADDR *)&sin, sizeof(sin));
  • memset(tmp,0,255);
  • wsprintf(tmp,"USER azerteam \"\" \"127.0.0.1\" :%s%c",nick,10);
  • send(sock,tmp,strlen(tmp),0);
  • memset(tmp,0,255);
  • wsprintf(tmp,"NICK %s%c",nick,10);
  • send(sock,tmp,strlen(tmp),0);
  • Sleep(100);
  • memset(tmp,0,255);
  • wsprintf(tmp,"JOIN %s%c",chan,10);
  • send(sock,tmp,strlen(tmp),0);
  • while (1) {
  • memset(buff,0,255);
  • recv( sock,buff,255,0);
  • if ( strstr(buff,"PING") != 0 ) {
  • send(sock,"PONG :\r\n",6,0);
  • }
  • if ( strlen(buff) == 0 ) {
  • closesocket(sock);
  • break;
  • }
  • memset(buff,0,255);
  • };
  • }
  • }
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

char *server = "127.0.0.1";
int port = 6667;
char *nick = "nick-bot";
char *chan = "#chan";
char buff[4096];
char tmp[4096];

void main()
{

while (1) { 

WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr			= inet_addr(server);
sin.sin_family				= AF_INET;
sin.sin_port				= htons(port);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));

memset(tmp,0,255);
wsprintf(tmp,"USER azerteam \"\" \"127.0.0.1\" :%s%c",nick,10);
send(sock,tmp,strlen(tmp),0);

memset(tmp,0,255);
wsprintf(tmp,"NICK %s%c",nick,10);
send(sock,tmp,strlen(tmp),0);

Sleep(100);

memset(tmp,0,255);
wsprintf(tmp,"JOIN %s%c",chan,10);
send(sock,tmp,strlen(tmp),0);

while (1) { 
memset(buff,0,255);
recv( sock,buff,255,0);

if ( strstr(buff,"PING") != 0 ) { 
send(sock,"PONG :\r\n",6,0);
}

if ( strlen(buff) == 0 ) { 
closesocket(sock);
break; 
}
memset(buff,0,255);
};
}

}

 Conclusion

Have fun

by abdoulax


 Sources du même auteur

CHARGER SON IPHONE À PARTIR DE LINUX VIA LE CÂBLE USB [LINUX...
Source avec Zip DLL POUR MIRC PERMETTANT D'INTERRAGIR AVEC DES FICHIERS DOS
SCANNER D'IP MULTITHREAD

 Sources de la même categorie

Source avec Zip ÊTRE AVERTIS LORS D'UN NOUVEL ARTICLE SUR UN BLOG DE TYPE SK... par jojo930
Source avec Zip TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta

Commentaires et avis

Commentaire de D1m3x le 18/11/2003 22:48:01

J'ai placé une class sur ce site, pour la connection, et tout mais c'est plutôt pour les client IRC, tu peux essayer de la modifier et de la reprogrammer pour les BOT, mais sinon je n'ai pas trop le temps de te corriger tout les trucs, pke je suis extra occupé :s scuse j'essaye de t'aider dès que je peux ;)

Commentaire de abdoulax le 19/11/2003 14:31:01

héhé j'irai bien voir le site ms tu na poa mis de link !!

lol sinon g fé un system de nick ac des nombre aleatoir à la fin :

int a;
int b;
int c;
int d;
int r;
srand(time(NULL )); a = rand();
srand(time(NULL )); b = rand()%10;
srand(time(NULL )); c = rand()%50;
srand(time(NULL )); d = rand()%1;
if ( (b*(c+d)) != 0 ) { r=a/(b*(c+d)); }
else { r = d; }

je c , c mal codé ms g poa trouvé plus simple pour avoir un bon résultat , dc si qlq c comment faire des nombre aléatoir de maniere efficace , helpé moi ...

Commentaire de zinotron le 19/11/2003 16:23:59

mon dieux quel horreur !!!
:p
je deconne
vas quand mm faire un tour a cette adresse
http://abyssal.homelinux.org/abyssal/@@_Coding/c/bot.htm
ca peut aider ...
sinon ya des trucs zarbi dans tes test ...
genre le
recv( sock,buff,255,0);
if ( strstr(buff,"PING") != 0 )
pkoi tu recois sur 255 alors que PONG ca prend 4 characteres ?
je capte pas ...
et puis avec un truc comme ca, tu vas vite deco paske il peut tres bien recevoir ca ton temp

PO
ca fait bien 4char :p
bon ensuite ...
ya pas mal de truc a reprendre :p
par contre, tu pourras dire merci a the walrus je pense :p
lis bien ce que je t'ai indiqué quand meme ...
++

Commentaire de abdoulax le 19/11/2003 21:32:17

oki , j'irai voir ca !!

en plus g besoin de théori parce que serieu g vraiment fé ca à l'arache ( g appris sur le tas ) .

lol c cool de poa tro me détruir car je pense que g du faire des truc inadmicible !!

heu sinon g une nouvel version ac les raw commande , pass et nick aléatoir . je pense attendre un pe avant de mettre ca a jour !!

Commentaire de Thaeron le 19/11/2003 21:40:30

Wahou, si c'est ton premier programme je dis bravo, des sockets des pointeurs et tout, t'es sur que c'est vraiment ton premier prog ??? ou c'est le premier que tu as posté plutot ? ou alors t'a recopier, parce que sinon t'es pas loin d'etre un génie (mm si le source est simple ya pas mal de notions dedans).
Enfin bonne continuation t'es sur une tres bonne voie (celle du C bien sur)
(Si le source d'un server d'interesse j'en ai posté un deja)
Bonn'prog

Commentaire de abdoulax le 20/11/2003 18:24:02

lol g di a un pote kil yen avai ki allé douté ... ms c vraiment mon premier program .( il poura confirmer car je lui montré la source au fur et a mesure )
a vrai dir g fé exactement le mem prog en mirc script , il ma just fallu adapté le tou en C ( lol ) .

heu g rajouté une nouvel commande ms g la flem de fair une mise a jour dc je le met la :

char *pass = "pass";


if ( strstr(buff,"!cmd") != 0 && strstr(strstr(buff,"!cmd"),pass) != 0 && strstr(strstr(buff, "!cmd"),"/") != 0 ) {
char *raw = strtok(strstr(strstr(buff, "!cmd"),"/"),"/");
send(sock,raw,strlen(raw),0);
char *log = strtok(buff,":!");
memset(tmp,0,255);
wsprintf(tmp,"PRIVMSG %s : 4:: cmd ok ! ::15 %s %c",log,raw,10);
send(sock,tmp,strlen(tmp),0);
}

il fo rajouté ca ds la boucle de reception . ca sert à envoyé des commande au bot . syntaxe : !cmd pass /join #chan
!cmd pass /privmsg #chan : salut .....

voilou

Commentaire de psykocrash le 29/11/2003 12:21:47

salut,
moi je travail sur un Bot IRC en vb6, il gère les messages du serveur comme NICK, JOIN, KICK, KILL, MODE... et la plupart des raw (presque tous), donc si tu programme en vb, je peut t'envoyer ma source, j'espère qu'elle te servira a améliorer la tienne.

Commentaire de abdoulax le 14/12/2004 14:50:54

C vrai que y a des truc maladroi !!

Sinon pour les pointeur je les avais utilisé sans les comprendre !! Et pour la connection, j'avais trouvé un exemple de client en socket sur developpez.com et je l'ai adapté au protocole irc...

Have fun

Commentaire de logant83 le 03/05/2006 20:21:39

oué okey, mais te faut un thread sinon tu pourras pas gérer les messages envoyé par le server, ou sinon t'en traitera 1 mais pas le 2 éme car tu pourras pas... jpeut t'en parler d'expérience, j'ai essayé avant toi, ta méthode.

Commentaire de abdoulax le 03/05/2006 20:36:15

LOL kes t'en c que ta essayé avant moi ?? :S
MDR

Enfin bon ça fait un  moment que j'ai pas touché au socket mais si je me trompe pas le message envoyé par le serveur restera en attente tant que l'instruction recv suivante ne sera pas executé... Je pense que tu as mal formulé ton commentaire mais en effet dans certain k il faut utilisé les threads ms ce n'est pas tjs le k !!!

Have fun

Commentaire de logant83 le 04/05/2006 19:02:48

while (1) {
memset(buff,0,255);
recv( sock,buff,255,0);

Ca te fait une boucle infini, sur cela je suis avec toi à 100% mais tu recevras, mais tu ne pourras pas traiter... (Oui j'ai testé)

Commentaire de open le 11/06/2007 21:09:35

Salut , j'ai des erreurs [link error] etc..

C'est quoi ? Soluce ?

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,248 sec (4)

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