Programmation d'un bot en C

Profil bloqué -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,
J'ai depuis longtemps un projet que j'aimerais réaliser, mais pas assez compétent pour faire quelque chose de correct hélas.

J'ai quelques notions en C, plutôt vagues (je comment ça fonctionne, déclarer des variables, tout ça tout ça...) mais je reste plus que novice dans le domaine.

C'est pourquoi je fait appel à tous ceux qui s'y connaissent bien mieux que moi pour m'aider à faire ce que je souhaite.



Le but serait de réaliser ce qu'on peut appeler un "tchat bot", c'est à dire un bot avec lequel on peut "discuter".

Je précise immédiatement que l'intérêt est plus que limité. Ce qui me motive c'est avant tout la réalisation de celui-ci, pas réellement son utilisation.


Je ne sais absolument pas par où commencer...

Je souhaiterais que le programme en question soit réalisé en C, en console, et qu'il obéisse de manière très simple du style :

if bonjour else salut
printf Bonjour

Pour le moment c'est uniquement ce que je demande. Une console, sur laquelle je pourrais entrer du texte, reconnu par tout un tas de variable prédéfinies.



Par la suite, si j'arrive à faire plus ou moins ce que je veux, j'aimerais pouvoir y ajouter quelques fonctionnalités plus "utiles" comme le fait de pouvoir utiliser l'heure etc.

Et vraiment plus tard, le fait de pouvoir utiliser un log pour répertorier tout ce que le bot n'a pas compris, et pouvoir ensuite l'ajouter à un dictionnaire séparé, plus facile à éditer.





Bref, beaucoup de "je veux" je sais, pour le moment tout ce que j'aimerais c'est une petite piste simple pour me lancer correctement. J'ai déjà vu des tonnes de tutos mais rien qui ne puisse vraiment me rendre la tâche plus simple...





Si je peux avoir une réponse (préenregistrée et alors ? =D) à un "bonjour", je serais déjà bien content ! On verra ensuite pour la création d'un dictionnaire et tout le reste !



Note : je précise que c'est inutile de me faire partager des liens de bots déjà "tout faits" etc. Je les connait probablement déjà, et le seul intérêt à faire un bot, c'est le créer. En tout cas pour moi. Alors s'il vous plaît, pas d'URL ! Sauf si ça peut m'aider bien sûr :)




En espérant recevoir de l'aide, merci à tous !

8 réponses

ltfx
 
slt si sa peut d'aider :

Pour commenser : réalise un Client/Server il y a plein de tuto qui explique comment utiliser les Socket

http://c.developpez.com/cours/sockets-c-cpp-demystifies/

Le site du zero ( Socket , transmission de flux,thread):

http://www.siteduzero.com/tutoriel-3-3293-les-sockets.html

voir aussi :

- les structure
- les pointeur

sa c'est pour la socket

puis avec un client basic lors d'une reception le flux est rediriger vers une function qui hash ce qu'il recoit ( après donner une AI au soft je laisse la main )

if recept == bonjour

Mess= "HEllO";

...

resend(&Mess)-> function qui renvoie le message au client
0
seo610 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   102
 
C'est quoi le lien avec les sockets? C'est pas une application qui utilise le réseau qu'il veut faire.
0
seo610 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   102
 
Ca l'air vraiment chiant à faire, surtout si tu dis que tu n'y connais que dalle et que ça n'as aucun sens
if bonjour else salut
printf Bonjour 

Commence par comprendre le C avant de faire quelque chose comme ça en C. Tu vas juste te perdre.
0
adrienmarty Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   3
 
Realise se programe en batch, c'est beaucoup plus simplre pour ton niveau
0
Profil bloqué
 
ltfx >> Merci mais je cherche juste à faire un programme type console, sans faire intervenir aucune notion de réseau à aucun moment.
Par la suite ça pourrait être une évolution envisageable, mais uniquement quand j'aurais au moins fait quelque chose de fonctionnel =D

seo610 >> Logiquement ça ne devrait pas être particulièrement compliqué à réaliser...
La création du "dictionnaire" elle, sera fastidieuse, c'est évident.

Mais créer un petit programme en console qui renvoie le texte X si le texte Y est tapé n'a rien d'insurmontable. Même pour quelqu'un qui n'est pas expert en la matière.

En tout cas si quelqu'un à d'autres suggestions merci :)
0
seo610 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   102
 
oui, mais justement, il faudrait que tu traites de tous les cas possible si tu penses comme ça.
Et ça dépasse probablement les milliards.
0
Profil bloqué
 
seo610 >> Ca dépend...
Si je compte lui "apprendre" des milliards de choses, ou seulement quelques dizaines !
0
seo610 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   102
 
Y'a aucun intérêt à faire un programme comme ça.
Un exemple grossier :
if(!strcmp(input, "Salut"))
   printf("Salut.");
if(!strcmp(input, "Aurevoir"))
   printf("Bye bye");
...

Si c'est un truc comme ça que tu penses, c'est vraiment pas la bonne solution.
0
seo610 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   102
 
Comment tu veux lui "apprendre"? Comment tu vas t'y prendre? T'as lu des bouquins sur les IA? Sur la programmation?
0
Profil bloqué
 
J'ai dit "bot".
"chat bot" même.
Aucun rapport avec une intelligence artificielle =/

C'est quand même fou de voir que sur les forums, tout particulièrement les forums "informatique" les gens ont besoin de se sentir valorisés en prenant des tournures pompeuses =D

Bref, pour répondre à tes questions : Je n'ai pas besoin de lire un bouquin sur l'IA puisque je ne veux pas faire d'IA.
Et je connais un minimum la programmation. Donc je pense être à même de faire un programme qui n'a "aucun intérêt".


Après tout, du moment que ça m'amuse, quel intérêt à ce qu'il y ai de l'intérêt ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
Alors la trame est relativement simple :
static void videBuffer(void) {
   int c;
   while ((c=getchar()) != '\n' && c != EOF);
}

int main(void) {
   char chaine[255];
   char *p;
   printf("Pseudo : ");
   fflush(stdout);

   if (fgets(chaine, sizeof chaine, stdin)==NULL) {
      fputs("Erreur\n", stderr);
      return EXIT_FAILURE;
   }
   
   p=strchr(chaine,'\n');
   if (p != NULL) {
      *p='\0';
   else {
      videBuffer();
   }

   if (strcmp(chaine, "Bonjour")==0) 
      puts("Coucou");
   else if ...
      ...

   return 0;
}

J'ai fait ça à l'arrache, il y a sûrement des fautes d'inattention. Les entêtes, je te laisse les mettre (stdio.h, stdlib.h et string.h). Mais le principe reste correct. Après, pour plus d'évolution, je te conseille de mettre dans un fichier. Genre :
Bonjour : Coucou
Ca va ? : Oui et vous ?
Ainsi, dans ton programme, tu n'as plus qu'à lire le fichier. Avant les ":" (trouve un meilleur séparateur), il s'agit de la condition. Et après les ":", il s'agit de l'action.

Une fois que tu auras cette structure. Tu pourras t'amuser, à mettre des "Ecrire("Coucou")", "OP(pseudo))".

Cdlt,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adrienmarty Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   3
 
Un consei : Programme en batch, le language est très simple a aprendre est correspond exactement au type de programme que tu veux faire.
Pour faire ton programme, il va falloire que ton programme reconaisse ce que tu lui dit pour pouvoire y répondre, ca va etre compliquer car sa sapelle de l'intelligence artificielle.
0
Profil bloqué
 
fiddy >> Merci beaucoup !
Je suis en train d'étudier ça, c'est exactement dans l'esprit de ce que je recherchais =)
0
Profil bloqué
 
Pour créer un dictionnaire qui contienne les réponses/questions je ne pense pas avoir le niveau pour le moment.

Par contre, en restant sur cette base, quelle boucle utiliser pour toujours en revenir à la fonction main ?
Pour le moment, à chaque réponse, le programme s'arrête, normal.
Mais j'ai un peu de mal à mettre ma boucle correctement pour pouvoir faire une nouvelle saisie après la première.

Tout ce que j'arrive à faire c'est faire répéter à l'infini la réponse =D

Peut-être que ce n'est pas une boucle infinie qu'il faut faire ? =/
0
mahdu972 Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   18
 
Pour ne pas qu'il te reponde la meme chose il faut que tu "nettoies " la valeur sur la variable a la fin de ton if
0
Profil bloqué
 
Même, dans tous les cas c'est surtout ma boucle que je n'arrive pas à placer. Elle renvoie toujours la réponse à l'infini, sans me laisser en saisir une autre.

Pour "nettoyer" la valeur comme tu dis normalement c'est bon je m'en suis occupé. Reste à faire une boucle correcte...
0
mahdu972 Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   18
 
Ba tu peux commencer par une boucle qui englobe tout ton main
0
Profil bloqué
 
Bah c'est ce que j'ai fait, ça me paraissait logique, mais apparement ça foire quelque part...

Je vais faire une pause et j'essayerais de régler ça tout à l'heure, parce que j'ai pas vraiment l'impression d'avance là !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
De quoi "nettoyer" la variable ?
Il n'y a pas besoin. Ce qu'il faut, c'est lire la variable avec un fgets (en s'assurant que le buffer clavier est vide : fonction videBuffer()).
0
Profil bloqué
 
adrienmarty >> J'y avais pensé, mais étant donné que je fait ça avant tout pour m'exercer avec le C, et ensuite essayer de faire des choses plus complexes...
Si je n'y arrive pas en C, je ne testerais pas en batch. C'est seulement pour m'amuser avec le C ;)
0