Trouver une ressource
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 TOUT SIMPLE, FAIT A L'AIDE DE LA CLASSE PROSOCK
Information sur la source
Description
le code d'un bot irc tout bete, fait à l'aide de la classe ProSock. j'ai remis prosock.cpp dans le projet meme s'il ne sert pas (tout est mis entre /* */ d'ailleurs...) : prosock.h se sert de la libraire prosock.lib. Le bot se connecte sur un serveur irc, et join un channel. il s'identifie sur le port 113 (ircid). cf la source ! le seul truc ke le bot fait est de répondre au PING du serveur (sinon il se fait déconnecter pour ping timeout)
Source
- #include "prosock.h"
- #include <stdio.h>
- #include "token.h"
- #include <time.h>
-
- void IrcProc(ProSock* s, int message);
- void proc_ircid(ProSock* s, int message);
-
- ProSock s_accept = CreateProSocket(proc_ircid);
- ProSock s_listen = CreateProSocket(proc_ircid);
-
- ProSock botirc = CreateProSocket(IrcProc);
-
-
- void main()
- {
- s_listen.SockListen(113);
- botirc.SockOpen("mesra.dal.net",6669);
-
- while (true)
- {
- Sleep(INFINITE);
- }
- }
-
-
- void IrcProc(ProSock* s, int message)
- {
- switch(message)
- {
- case ON_SOCKOPEN:
- {
- // Géneration d'un nick 'aléatoire'/////
- srand(time(0));
- char c1 = (rand() % 10) + '0';
- char c2 = (rand() % 10) + '0';
- char c3 = (rand() % 10) + '0';
- char c4 = (rand() % 10) + '0';
- char nick[20];
- sprintf(nick,"cosmo%c%c%c%c",c1,c2,c3,c4);
- //////////////////////////////////////////
-
- printf("connection reussie sur %s (port %d) !\n",s->Ip(),s->Port());
- s->SockWrite("NICK ");
- s->SockWriteln(nick);
- s->SockWriteln(" USER pouet . . pouit");
- s->SockWriteln("JOIN #CosmoBob");
- break;
- }
- case SOCKOPEN_ERROR:
- {
- printf("impossible de se connecter sur %s (port %d)\n",s->Ip(),s->Port());
- // Le socket va être automatiquement fermé.
- break;
- }
-
- case SOCKWRITE_ERROR:
- {
- printf("Erreur de send\n");
- s->SockClose();
- break;
- }
- case SOCKREAD_ERROR:
- {
- printf("erreur de recv, le socket est automatiquement fermé\n");
-
- break;
- }
-
-
- case ON_SOCKREADLN:
- {
- char buffer[512];
- s->SockReadln(buffer,sizeof(buffer));
-
- printf("%s\n",buffer);
-
- char param1[50];
- token(buffer,param1,sizeof(param1),1,1,32);
- if (!strcmp(param1,"PING"))
- {
- s->SockWrite("PONG ");
- s->SockWriteln(buffer);
- }
-
- break;
- }
- }
- }
-
-
- void proc_ircid(ProSock* s, int message)
- {
- switch(message)
- {
-
- case ON_SOCKLISTEN:
- {
- printf("listen ok !\n");
- s->SockAccept(&s_accept);
- s->SockClose();
- break;
- }
-
- case SOCKLISTEN_ERROR:
- {
- printf("listen error (le socket va etre fermé automatiquement)!\n");
- break;
- }
-
- case ON_SOCKACCEPT:
- {
- printf("accept ok Ip : %s (port %d)\n",s->Ip(),s->Port());
- break;
- }
-
- case SOCKACCEPT_ERROR:
- {
- printf("accept error\n");
- break;
- }
-
- case ON_SOCKREADLN:
- {
- char buffer[200];
- s->SockReadln(buffer,sizeof(buffer));
- printf("%s\n",buffer);
-
- char param1[50];
- char param2[50];
- token(buffer,param1,sizeof(param1),1,1,32);
- token(buffer,param2,sizeof(param2),3,3,32);
- char string2send[150];
- strncpy(string2send,param2,sizeof(string2send));
- strncat(string2send," , ",sizeof(string2send));
- strncat(string2send,param1,sizeof(string2send));
- strncat(string2send," : USERID : UNIX : pouet",sizeof(string2send));
- s->SockWriteln(string2send);
-
- break;
- }
- }
- }
-
#include "prosock.h"
#include <stdio.h>
#include "token.h"
#include <time.h>
void IrcProc(ProSock* s, int message);
void proc_ircid(ProSock* s, int message);
ProSock s_accept = CreateProSocket(proc_ircid);
ProSock s_listen = CreateProSocket(proc_ircid);
ProSock botirc = CreateProSocket(IrcProc);
void main()
{
s_listen.SockListen(113);
botirc.SockOpen("mesra.dal.net",6669);
while (true)
{
Sleep(INFINITE);
}
}
void IrcProc(ProSock* s, int message)
{
switch(message)
{
case ON_SOCKOPEN:
{
// Géneration d'un nick 'aléatoire'/////
srand(time(0));
char c1 = (rand() % 10) + '0';
char c2 = (rand() % 10) + '0';
char c3 = (rand() % 10) + '0';
char c4 = (rand() % 10) + '0';
char nick[20];
sprintf(nick,"cosmo%c%c%c%c",c1,c2,c3,c4);
//////////////////////////////////////////
printf("connection reussie sur %s (port %d) !\n",s->Ip(),s->Port());
s->SockWrite("NICK ");
s->SockWriteln(nick);
s->SockWriteln(" USER pouet . . pouit");
s->SockWriteln("JOIN #CosmoBob");
break;
}
case SOCKOPEN_ERROR:
{
printf("impossible de se connecter sur %s (port %d)\n",s->Ip(),s->Port());
// Le socket va être automatiquement fermé.
break;
}
case SOCKWRITE_ERROR:
{
printf("Erreur de send\n");
s->SockClose();
break;
}
case SOCKREAD_ERROR:
{
printf("erreur de recv, le socket est automatiquement fermé\n");
break;
}
case ON_SOCKREADLN:
{
char buffer[512];
s->SockReadln(buffer,sizeof(buffer));
printf("%s\n",buffer);
char param1[50];
token(buffer,param1,sizeof(param1),1,1,32);
if (!strcmp(param1,"PING"))
{
s->SockWrite("PONG ");
s->SockWriteln(buffer);
}
break;
}
}
}
void proc_ircid(ProSock* s, int message)
{
switch(message)
{
case ON_SOCKLISTEN:
{
printf("listen ok !\n");
s->SockAccept(&s_accept);
s->SockClose();
break;
}
case SOCKLISTEN_ERROR:
{
printf("listen error (le socket va etre fermé automatiquement)!\n");
break;
}
case ON_SOCKACCEPT:
{
printf("accept ok Ip : %s (port %d)\n",s->Ip(),s->Port());
break;
}
case SOCKACCEPT_ERROR:
{
printf("accept error\n");
break;
}
case ON_SOCKREADLN:
{
char buffer[200];
s->SockReadln(buffer,sizeof(buffer));
printf("%s\n",buffer);
char param1[50];
char param2[50];
token(buffer,param1,sizeof(param1),1,1,32);
token(buffer,param2,sizeof(param2),3,3,32);
char string2send[150];
strncpy(string2send,param2,sizeof(string2send));
strncat(string2send," , ",sizeof(string2send));
strncat(string2send,param1,sizeof(string2send));
strncat(string2send," : USERID : UNIX : pouet",sizeof(string2send));
s->SockWriteln(string2send);
break;
}
}
}
Sources de la même categorie
Commentaires
|
|