|
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 POUR L'IRC
Information sur la source
Description
Ce code est simplifié pour simplement se connecter sur un serveur et un channel donné puis répondre à un mot reçu.
Il sera ensuite facile de rajouter des fonctions ou des mots le faisant parler...
Source
- #include <stdio.h> // printf
- #include <conio.h> // getche()
- #include <string.h> // strlen (compter caracteres)
- #include <winsock2.h> // socket
- #pragma comment(lib, "ws2_32.lib")
-
-
-
- int main(int argc, char* argv[])
- {
-
- /* on initialise notre winsock */
- WSADATA WSAData;
- WSAStartup(MAKEWORD(2,0), &WSAData);
- /* fin d'initialisation */
-
-
- /* on construit notre socket */
- SOCKET sock;
- SOCKADDR_IN sin;
- char buffer[BUFSIZ];
- char *ptr;
- char msg[256];
-
- sock = socket(AF_INET, SOCK_STREAM, 0);
-
-
- sin.sin_addr.s_addr = inet_addr("62.23.9.122");
- sin.sin_family = AF_INET;
- sin.sin_port = htons(6667);
- /* fin de la construction du socket */
-
-
- /* déclaration variables */
-
- char nickbot[30]="shownbot"; //nick à modifier
- char channel[20]="#hackplanet"; //channel à rejoindre
- char serveur[30]="62.23.9.122"; //ip du serveur irc
- char user[50]="lol lol lol :shownbot";
-
- // nick autorisé a fermer le bot
- char *autorize=":Shown!"; // ne pas toucher au ':' et au '!'
-
- /* on connecte le socket sur le serveur et le chan */
- connect(sock, (SOCKADDR *)&sin, sizeof(sin));
-
- sprintf (buffer, "NICK %s\n", nickbot);
- send (sock, buffer, strlen (buffer), 0);
-
- sprintf (buffer, "USER %s\n", user);
- send (sock, buffer, strlen (buffer), 0);
-
- sprintf (buffer, "JOIN %s\n", channel);
- send (sock, buffer, strlen (buffer), 0);
-
- sprintf (buffer, "PRIVMSG %s :yop :-)\n", channel); //message envoyé lors de l'arrivée sur le channel
- send (sock, buffer, strlen (buffer), 0);
-
-
- /* fin de la connexion au socket */
-
- /* on commence une boucle infinie */
- while (1) {
- memset(buffer, '\0', BUFSIZ); //on vide le buffer
- recv(sock, buffer, BUFSIZ-1, 0);
- printf("%s",buffer);
-
- /* gestion des pings */
- if (strstr(buffer, "PING :"))
- {
- ptr = strstr(buffer, "PING :") + strlen("PING :");
- snprintf(msg, 256, "PONG :%s\n", ptr);
- send(sock, msg, strlen(msg), 0);
- }
-
- /* fin de gestion des pings */
-
- /* --------------------animation du channel-------------------- */
-
- /* boucles pour les reponses auto */
- if (strstr(buffer, "salut"))
- {
- ptr = strstr(buffer, "salut");
- snprintf(msg, 256, "PRIVMSG %s :plop\n", channel);
- send(sock, msg, strlen(msg), 0);
- }
-
- if (strstr(buffer, "merci"))
- {
- ptr = strstr(buffer, "merci");
- snprintf(msg, 256, "PRIVMSG %s :de rien ;-)\n", channel);
- send(sock, msg, strlen(msg), 0);
- }
-
- //on ferme le socket si on envoie "!close" et si c'est le
- //propriétaire qui a lancé la commande.
- if ((strstr(buffer, autorize)) && (strstr(buffer, "!close")))
- {
- ptr = strstr(buffer, "!close");
- {
- WSACleanup();
- closesocket(sock);
- }
- }
-
-
- /* ---------------------fin de l'animation--------------------- */
-
-
-
- } //fin de la boucle infinie
-
- } //fin du programme
#include <stdio.h> // printf
#include <conio.h> // getche()
#include <string.h> // strlen (compter caracteres)
#include <winsock2.h> // socket
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
/* on initialise notre winsock */
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
/* fin d'initialisation */
/* on construit notre socket */
SOCKET sock;
SOCKADDR_IN sin;
char buffer[BUFSIZ];
char *ptr;
char msg[256];
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr("62.23.9.122");
sin.sin_family = AF_INET;
sin.sin_port = htons(6667);
/* fin de la construction du socket */
/* déclaration variables */
char nickbot[30]="shownbot"; //nick à modifier
char channel[20]="#hackplanet"; //channel à rejoindre
char serveur[30]="62.23.9.122"; //ip du serveur irc
char user[50]="lol lol lol :shownbot";
// nick autorisé a fermer le bot
char *autorize=":Shown!"; // ne pas toucher au ':' et au '!'
/* on connecte le socket sur le serveur et le chan */
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
sprintf (buffer, "NICK %s\n", nickbot);
send (sock, buffer, strlen (buffer), 0);
sprintf (buffer, "USER %s\n", user);
send (sock, buffer, strlen (buffer), 0);
sprintf (buffer, "JOIN %s\n", channel);
send (sock, buffer, strlen (buffer), 0);
sprintf (buffer, "PRIVMSG %s :yop :-)\n", channel); //message envoyé lors de l'arrivée sur le channel
send (sock, buffer, strlen (buffer), 0);
/* fin de la connexion au socket */
/* on commence une boucle infinie */
while (1) {
memset(buffer, '\0', BUFSIZ); //on vide le buffer
recv(sock, buffer, BUFSIZ-1, 0);
printf("%s",buffer);
/* gestion des pings */
if (strstr(buffer, "PING :"))
{
ptr = strstr(buffer, "PING :") + strlen("PING :");
snprintf(msg, 256, "PONG :%s\n", ptr);
send(sock, msg, strlen(msg), 0);
}
/* fin de gestion des pings */
/* --------------------animation du channel-------------------- */
/* boucles pour les reponses auto */
if (strstr(buffer, "salut"))
{
ptr = strstr(buffer, "salut");
snprintf(msg, 256, "PRIVMSG %s :plop\n", channel);
send(sock, msg, strlen(msg), 0);
}
if (strstr(buffer, "merci"))
{
ptr = strstr(buffer, "merci");
snprintf(msg, 256, "PRIVMSG %s :de rien ;-)\n", channel);
send(sock, msg, strlen(msg), 0);
}
//on ferme le socket si on envoie "!close" et si c'est le
//propriétaire qui a lancé la commande.
if ((strstr(buffer, autorize)) && (strstr(buffer, "!close")))
{
ptr = strstr(buffer, "!close");
{
WSACleanup();
closesocket(sock);
}
}
/* ---------------------fin de l'animation--------------------- */
} //fin de la boucle infinie
} //fin du programme
Conclusion
Ce bot fonctionne parfaitement avec Dev-C++, il répond aux PING; vous n'avez qu'à modifier le nick, le channel, et le serveur pour la connexion.
Vous pouvez facilement l'améliorer par exemple pour le faire changer de nick il vous suffit d'ajouter :
if (strstr(buffer, "!nick ")){
ptr = strstr(buffer, "!nick ") + strlen("!nick ");
snprintf(msg, 256, "NICK :%s\n", ptr);
send(sock, msg, strlen(msg), 0);
}
Donc si vous tapez "!nick bob" sur le channel ou en privé le bot prendra le nom "bob".
Si vous avez d'autres propositions mais que vous ne parvenez pas à la coder, dites-le moi je ferai de mon mieux pour vous aider ;-)
Historique
- 07 septembre 2004 02:32:14 :
- Changement de catégorie
- 07 septembre 2004 14:15:51 :
- Correction proposée par cosmobob + fermeture du bot controlée par le propriétaire
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Comparez les prix Nouvelle version
|