Les bots : programmation, pièges, principes, etc....

Les bots : programmation, pièges, principes, etc.... - Divers - Programmation

Marsh Posté le 12-05-2003 à 11:55:47    

Vu que le sujet commençait à polluer blabla@prog (c'est vrai quoi, parler de programmation dans ce topic, faut pas exagérer :d), j'ouvre ce topic pour ceux qui souhaitent parler des bots qu'ils développent actuellement.
 
Au delà de l'aspect purement fun (les 3 projets actuellement en cours visent surtout à scanner le forum pour poster le premier post après la page 999 pour avoir le split de blablaz@prog), la programmation d'un bot se révèle formatrice à plus d'un titre. En effet, les concepts suivants sont abordés :
 
- multithreading,
- programmation réseau, haut et bas niveau,
- connaissance du protocole HTTP,
- création d'une interface graphique multithreadée,
- création de divers outils d'administration et de supervision
- création d'une interface d'administration HTML pour administrer le bot à distance,
- etc...
 
La programmation d'un bot est donc quelque chose d'assez formateur sur pas mal de plans.
 
A ce jour, 3 projets existent :
 
- Celui de benou, programmé en java, et qui est le seul actuellement à avoir prouvé son fonctionnement (et quel fonctionnement ! il est même parvenu à créer une page 26 :d)
- Celui de kadreg, programmé en C++/QT
- Le mien, programmé en C# (une version 100% assembleur existe, mais sa maintenance est une horreur). Pas encore totalement finalisé, et pas mal buggé. Je paye ma méconnaissance du framework .NET (mais quel meilleur moyen d'apprendre que celui ci ?)
 
Donc voilà, ce topic est dédié à toute question sur ces 3 projets, aussi bien de la part de leurs auteurs que des autres :)

Reply

Marsh Posté le 12-05-2003 à 11:55:47   

Reply

Marsh Posté le 12-05-2003 à 12:05:42    

En ce qui concerne l'administration, moi j'aurai plus pensé à un dialogue par IRC avec le bot. D'autant plus qu'il existe une superbe API en Java : jircBot (jibbles.org)
 
Je pensais également à ajouter une surveillence du contenu des topics, du genre detecteur de newbie qui demande une question mille fois posée, ou qui est dans une des FAQ ...
 
En parlant de threads, vous en avez combien et pour quels tâches ?


Message édité par bobuse le 12-05-2003 à 12:07:01

---------------
get amaroK plugin
Reply

Marsh Posté le 12-05-2003 à 12:09:14    

bobuse a écrit :


En parlant de threads, vous en avez combien et pour quels tâches ?


 
5 qui lisent le forum. Le premier qui trouve qu'il peut poster (999 réponses) prends le droit de poster (section sous mutex) pour poster. Les suivants ne pourront de toutes façon pas prendre ce droit et irons donc roupiller en découvrant que le topic à moins de 500 réponses.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 12-05-2003 à 12:14:05    

On a quand même de beaux exemples de ce qui peut arriver :
- un post de trop dans une partie du topic : http://forum.hardware.fr/forum2.ph [...] 10&page=26
- un loserbot : http://forum.hardware.fr/forum2.ph [...] 25#t383507
:D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-05-2003 à 12:20:51    

J'ai le prix du bot le plus laid [:yaisse2]
 
 http://rincevent.dyndns.org/toto/qbot.jpg


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 12-05-2003 à 12:25:27    

Pour le dialogue avec le bot, lorill avait suggéré un moyen encore plus fun : jabber ! J'ai vu qu'il existait un wrapper de jabber pour .NET, quand mon bot sera débuggé je tacherais de créer une interface jabber. Trop bon : je suis au boulot, et je reçois un message instantané de mon bot me disant que le split a eu lieu [:yaisse2]
 
Pour mes threads, j'en ai 4 pour la surveillance du forum, et 1 pour le post du message.
 
J'extrais le n° du post en cours via une regexp, et je met mes threads de surveillance en pause selon cette table : n < 500 => Thread.Sleep(30000), 501 < n <= 900 => Thread.Sleep(10000), 901 < n <=950 => Thread.Sleep(5000), n > 950 => Thread.Sleep(1000)

Reply

Marsh Posté le 12-05-2003 à 12:26:33    

Harkonnen a écrit :

Au delà de l'aspect purement fun (les 3 projets actuellement en cours visent surtout à scanner le forum pour poster le premier post après la page 999 pour avoir le split de blablaz@prog)

c'est sûr qu'il risque pas de marcher si tu attends la page 999 pour poster [:boidleau]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-05-2003 à 12:27:58    


[:boiteakaola]


Message édité par Harkonnen le 12-05-2003 à 12:28:22
Reply

Marsh Posté le 12-05-2003 à 12:29:06    

Au fait, comment vous cherchez le nombre de posts du topic ? Sur son nom ou son Id ? Perso, je cherche le premier topic appelé "BlaBla@Programmation".


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 12-05-2003 à 12:30:29    


Y a [:shooter], aussi :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 12-05-2003 à 12:30:29   

Reply

Marsh Posté le 12-05-2003 à 12:32:01    

kadreg a écrit :

Au fait, comment vous cherchez le nombre de posts du topic ? Sur son nom ou son Id ? Perso, je cherche le premier topic appelé "BlaBla@Programmation".


Sur son ID. Je rentre manuellement le n° du topic dans un champ texte après chaque split. Ca évite au bot de se faire avoir avec ce genre de ficelle : :whistle:
 
http://forum.hardware.fr/forum2.php3?post=36512&cat=10


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-05-2003 à 12:35:21    

kadreg a écrit :

Au fait, comment vous cherchez le nombre de posts du topic ? Sur son nom ou son Id ? Perso, je cherche le premier topic appelé "BlaBla@Programmation".

si tu te base sur l'ID, t'es obligé de remettre les infos à jour à chaque split, spa top :/
 
A mon avis, le mieux est de se baser sur le nom du topic, du createur du topic et eventuellement de la presence de l'asterisque dans le nombre de pages (pour éviter les petits malins qui postent des topics appelés "blabla@prog 999" :whistle: ).


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-05-2003 à 13:00:52    

Harkonnen a écrit :

Pour le dialogue avec le bot, lorill avait suggéré un moyen encore plus fun : jabber !  


a ce propos, pour ceux que ca interesse :
un bot en python par jabber. Pas le même principe que les botsASplit, c'est juste pour causer sur le forum via jabber.
 
http://equinoxe.dnsalias.org/PERSO/pyqaplop/
 
pas finalisé et le sera jamais, mais a titre educatif ca peut etre utile.
 
le principe : un user jabber pour le bot. On lui envoie un message d'abonnement au topic. Ensuite, chaque nouveau message est envoyé aux abonnés, et un message envoyé au bot est posté sur le topic avec le compte de l'abonné.

Reply

Marsh Posté le 13-05-2003 à 08:29:38    

Bon, ce con a planté dans la journée d'hier. Aujourd'hui, je le relance sous debugger pour essayer de comprendre le pb, mais s'il ne plante que lorsque je suis parti bosser, c'est pas gagné ...


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-05-2003 à 08:45:24    

Moi j'ai cassé le moteur et je l'ai entièrement refait.
 
Avant :
- 4 threads qui surveillaient le post 999
- Dés qu'un des threads l'avait trouvé, il envoyait un évènement au thread principal qui postait via un 5eme thread  
 
Inconvénient majeur : mon thread principal était bloqué en attendant que l'évènement se produise et me bouffait la quasi totalité des ressources
 
Maintenant :
- 4 threads qui surveillent le post 999
- Dés que le post est trouvé, le thread qui l'a trouvé poste le message via un 5eme thread.
- Je m'assure qu'aucun autre thread ne poste via un mutex : dés que le post 999 est trouvé, le thread prend le mutex et ne le libère qu'une fois le message posté. Ainsi, même si un autre thread détecte le post 999 (au cas ou le message ne serait pas encore posté), il ne pourra pas poster tant qu'il n'aura pas le mutex.
 
Codage terminé cette nuit [:lorelei]. Ce soir je passe au test.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-05-2003 à 09:40:39    

je reposte ici mes screens shoot :
http://perso.wanadoo.fr/vieuxbenou/hfr_bot/accueil.gif
http://perso.wanadoo.fr/vieuxbenou/hfr_bot/supervision.gif
http://perso.wanadoo.fr/vieuxbenou/hfr_bot/admin.gif
 
ma technique à moi c'est une liste d'état : chacune a un objectif (surveiller le topic jusqu'à un certain nombre de posts), des moyens (nombre thread) et un phase de repos (sleep).
 
Le bot commence au premier état. Dès qu'un état a atteint son objectif, il libère les ressources (stop les threads) et demande au bot de passer à l'état suivant.
 
Une fois que tous les états ont été effectués (logiquement le dernier objectif est 999), on passe en mode post : un nombre prédeterminé de messages sont postés parraléllement.
 
Le plus chaint ca a été d'assurer que tous les threads se sycnhronise correctement et qu'il n'y ait pas des threads qui continue à fonctionner tous seuls ...
 
ca a surtout été compliqué avec l'interface d'admin : c'est chaud de mofifier en live le nombre de thread d'un état qui est actif :/
 
Là mon bot fonctionne depuis hier à 2h du mat ... (bientot 30h). A priori y a pas de fuite mémoire. Par contre, je crains un peu la phase de posting : j'ai pû la tester qu'un fois en "conditions réelles", et même si j'ai un le split, mon bit était carrément parti en couille !  [:mlc2]


Message édité par benou le 13-05-2003 à 09:41:02

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 13-05-2003 à 09:53:00    

benou a écrit :

Le plus chaint ca a été d'assurer que tous les threads se sycnhronise correctement et qu'il n'y ait pas des threads qui continue à fonctionner tous seuls ...


Je pense qu'on est tous d'accord pour dire que la programmation multithreadée est complexe, surtout quand les threads doivent faire la même chose : on doit alors synchroniser, et ça peut tourner en une galère infame
 

benou a écrit :


ca a surtout été compliqué avec l'interface d'admin : c'est chaud de mofifier en live le nombre de thread d'un état qui est actif :/


Une fois que mon bot fonctionnera correctement (même si j'ai pas le split je m'en fous, je considère qu'il fonctionne correctement s'il me détecte le post 999 et qu'il poste juste après), j'envisage aussi de faire une interface d'admin, mais en réalisant un éxécutable client, pas une interface web. Pour la simple raison que .... je sais pas faire ! [:w3c compliant]
Mon bot se transformera en serveur et je créérai un mini protocole avec quelques commandes (HALT, PAUSE, SLEEP n, etc...) qui me permettront de l'administrer à distance.
Puis, étape suivante : interfacer mon bot avec Jabber pour qu'il me prévienne que le message a été posté !
Le fin du fin serait que le bot m'envoie un SMS via le site de SFR une fois le message posté [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-05-2003 à 09:53:52    

benou a écrit :

mon bit était carrément parti en couille !  [:mlc2]


un peu de tenue que diable [:toad666]

Reply

Marsh Posté le 13-05-2003 à 09:56:20    

[:rofl] le lapsus


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-05-2003 à 10:28:10    

lorill a écrit :


un peu de tenue que diable [:toad666]


[:rofl] [:rofl] [:rofl]
 
il est trop beau celui là :lol:  je le laisse !!!  [:netbios]

Reply

Marsh Posté le 13-05-2003 à 10:29:49    

Harkonnen a écrit :

j'envisage aussi de faire une interface d'admin, mais en réalisant un éxécutable client, pas une interface web. Pour la simple raison que .... je sais pas faire ! [:w3c compliant]


bha, tu peux faire un petit site ASP ... c'est pas bien compliqué !  
mais bon, faudrait que tu laisses tourner IIS sur ta machine :/

Reply

Marsh Posté le 13-05-2003 à 10:30:35    

Harkonnen a écrit :


 
Le fin du fin serait que le bot m'envoie un SMS via le site de SFR une fois le message posté [:ddr555]


Le plus simple est de t'envoyer un mail sur ton compte SFR ..
Enfin, je sais pas s'il le font chez SFR, mais chez bouygues, j'ai un compte mail, qui m'envoie un SMS avec l'expediteur et l'objet du message. du coup, je peux m'envoyer autant de SMS que je veux et avec juste un pauv' commande mail ;)


---------------
get amaroK plugin
Reply

Marsh Posté le 13-05-2003 à 10:31:32    

benou a écrit :


bha, tu peux faire un petit site ASP ... c'est pas bien compliqué !  
mais bon, faudrait que tu laisses tourner IIS sur ta machine :/


SSH, c'est bien sinon  [:spamafote]


---------------
get amaroK plugin
Reply

Marsh Posté le 13-05-2003 à 10:33:39    

sinon, harko, vu que t'es partit sur une solution full crosoft, tu sais que tu peux utiliser des API qui permettent d'envoyer des messages à MSN ...

Reply

Marsh Posté le 13-05-2003 à 10:36:25    

bobuse a écrit :


SSH, c'est bien sinon  [:spamafote]  


 
Moi, ça passe pas du buureau [:spamafote]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-05-2003 à 10:37:06    

kadreg a écrit :


 
Moi, ça passe pas du buureau [:spamafote]


httptunnel

Reply

Marsh Posté le 13-05-2003 à 10:37:21    

:jap:
c'est excellent comme projet ca n'empeche!!!!
Peut être que quand j'aurai le temps et que j'aurai fini le projet sur lequel je bosse en ce moment j'essairai de me faire un bot :D
(quoique d'ici là ca sera passible d'un ban :o)

Reply

Marsh Posté le 13-05-2003 à 11:03:08    

lorill a écrit :


httptunnel


 
faute grave :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-05-2003 à 11:04:08    

ca va spliter [:totoz]

Reply

Marsh Posté le 13-05-2003 à 11:05:46    

kadreg a écrit :


faute grave :o


:??:

Reply

Marsh Posté le 13-05-2003 à 11:06:15    

benou a écrit :

ca va spliter


ratai  :whistle:

Reply

Marsh Posté le 13-05-2003 à 11:06:35    

benou a écrit :

ca va spliter  


 
Ca a splitter, aucun bot n'a marché [:mdr]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-05-2003 à 11:10:14    

tin c'est les boules !! :D
 
en plus le plantage de mon bot a niqué mon site :/
 
j'ai du le stoper avec l'url fatidique du kill_serveur ... mais du coup j'aurais pas les logs [:ruisseau de larmes]
 
keskicépasé  :??:

Reply

Marsh Posté le 13-05-2003 à 11:15:31    

benou a écrit :

tin c'est les boules !! :D
 
en plus le plantage de mon bot a niqué mon site :/
 
j'ai du le stoper avec l'url fatidique du kill_serveur ... mais du coup j'aurais pas les logs [:ruisseau de larmes]
 
keskicépasé  :??:  


t'as qu'a lui dire de poster au 100eme message par exemple, ca sera moins long que d'attendre le prochain split et tu pourras voir où ca a planté....

Reply

Marsh Posté le 13-05-2003 à 11:28:34    

harrysauce a écrit :


t'as qu'a lui dire de poster au 100eme message par exemple, ca sera moins long que d'attendre le prochain split et tu pourras voir où ca a planté....


le problème c'est que mon algo a besoin qu'un nouveau topic du même nom passe devant l'ancien de façon à ce que je ne continue pas à poster dessus ... et puis bon... ca me dérange un peu de faire des tests sur blabla ...
 
mais va bien falloir que je trouve le bug :/

Reply

Marsh Posté le 13-05-2003 à 11:30:31    

Bon alors, je vais faire mon gros newbie ... comment on s'y prend pour poster un message ?
 
J'imagine qu'on envoie une requete http POST. On envoie une url d'une page PHP avec des parametres ?


---------------
get amaroK plugin
Reply

Marsh Posté le 13-05-2003 à 11:31:34    

bobuse a écrit :


J'imagine qu'on envoie une requete http POST. On envoie une url d'une page PHP avec des parametres ?


 
oui. Perso, j'utilise curl (la lib), j'ai juste copier/coller les exemples pour que ça marche


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-05-2003 à 11:34:02    

kadreg a écrit :


 
oui. Perso, j'utilise curl (la lib), j'ai juste copier/coller les exemples pour que ça marche


okay :D  merci
 
[:neowen]


Message édité par bobuse le 13-05-2003 à 11:34:57

---------------
get amaroK plugin
Reply

Marsh Posté le 13-05-2003 à 11:34:16    

benou a écrit :

sinon, harko, vu que t'es partit sur une solution full crosoft, tu sais que tu peux utiliser des API qui permettent d'envoyer des messages à MSN ...


pas bête ça [:meganne]
En fait, j'ai choisi le C# pour une simple raison : ne pas me faire chier avec les fuites mémoire. c'était soi ça, soit rajouter un GC à une programmation en C++ (je l'aurais fait aussi avec QT d'ailleurs). Et comme je connais pas Java...
Et puis, faut reconnaitre que le C# est quand même un langage sympa, et gratuit de surcroit. Pour une fois que crosoft fait un truc bien, il faut le dire.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-05-2003 à 11:34:49    

moi j'ai fait ca à la main avec des sokets ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed