begin process at 2010 02 09 12:27:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Bots

 > BOT PARLANT

BOT PARLANT


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Bots Classé sous :bots, parler, parle, parlant, bot Niveau :Débutant Date de création :24/10/2007 Date de mise à jour :07/01/2008 18:31:18 Vu :8 912

Auteur : Maxou1012

Ecrire un message privé
Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce bot enregistre ce que les personnes disent, et le re-dit de façon aleatoire (enfin si ça a un sens bien sur).
Exemple : Si une personne dit "Bonjour !" il va enregister le bonjour et le re-dire si quelqu'un d'autre dit bonjour.
Il peut donc s'addapter à toute les langues, mots ...

Source

  • on *:TEXT:*:#: {
  • var %repeat = 0
  • while(%repeat != 1000) {
  • inc %repeat
  • if ( $r(1,2) == 1 ) { set %msg $read(text.txt) }
  • elseif ( $r(1,5) == 1 ) { set %msg $read(text.txt) $read(text.txt) $read(text.txt) }
  • else { set %msg $read(text.txt) $read(text.txt) }
  • if $regex($1-,/( $+ $replace(%msg,$chr(32),$chr(124)) $+ )/i) {
  • timermsg 1 $r(2,5) msg $chan %msg
  • break
  • }
  • }
  • .fopen -on texte text.txt
  • .fwrite -n text $1 $2
  • .fwrite -n text $1 $2 $3 $4
  • .fwrite -n text $3 $4
  • .fwrite -n text $5 $6
  • if ( $r(1,100) == 5 ) { .fwrite -n text $nick }
  • .fclose text
  • unset %repeat
  • }
on *:TEXT:*:#: {
  var %repeat = 0
  while(%repeat != 1000) {
    inc %repeat
    if ( $r(1,2) == 1 ) { set %msg $read(text.txt) }
    elseif ( $r(1,5) == 1 ) { set %msg $read(text.txt) $read(text.txt) $read(text.txt) }
    else { set %msg $read(text.txt) $read(text.txt) }
    if $regex($1-,/( $+ $replace(%msg,$chr(32),$chr(124)) $+ )/i) {
      timermsg 1 $r(2,5) msg $chan %msg
      break
    }
  }
  .fopen -on texte text.txt
  .fwrite -n text $1 $2
  .fwrite -n text $1 $2 $3 $4
  .fwrite -n text $3 $4
  .fwrite -n text $5 $6
  if ( $r(1,100) == 5 ) { .fwrite -n text $nick }
  .fclose text
  unset %repeat
}

 Conclusion

Pour tout bug, problème ... Merci de me le dire !
Ce bot parle bizarement mais il parle ! C'est déja bien !


 Historique

25 octobre 2007 22:28:32 :
Remplacement du "timer msg" en "timermsg msg"
07 janvier 2008 18:18:44 :
Modification des writes en filehanding. Code maintenant en débutant. (ce qu'il mérite >.<)
07 janvier 2008 18:31:18 :
Modification des $rand en $r. Ajout d'une boucle While. Changement du Set %variable en Var %variable. Ajout d'une regex.

 Sources du même auteur

BOT DE SUPPORT (HELPSERV)
BOT DE LIASON DE CHANS

 Sources de la même categorie

ANIMATION POUR BOT par michounou
RECORD AFFLUENCE MULTI-SALON par extarsik
Source avec Zip Source avec une capture LOGCHAN BY DIIMS :: POUR BOT :: TOTALEMENT CONFIGURABLE par sodims
SALON TRADUCTION par CsDarkman
BOT DE SUPPORT (HELPSERV) par Maxou1012

 Sources en rapport avec celle ci

LA CONFIGURATION D'UN EGGDROP QUI ENLÈVE LES BANS APRÈS X ... par Atok
Source avec Zip Source avec une capture LOGCHAN BY DIIMS :: POUR BOT :: TOTALEMENT CONFIGURABLE par sodims
Source avec Zip BIOTECH [V1.0] par kassak1
Source avec Zip SYSTÈME SEEN par Niamor7
Source avec Zip WGARD, ROBOT MIRC EN SOCKETS, UN SEUL MIRC par webdoordi

Commentaires et avis

Commentaire de TropNul le 24/10/2007 16:45:11

lol, je suis sur que bon nombre de personnes tomberont dans le panneau et parleront a ce bot pendant un moment avant de se rendre compte du truc.

a l'etat ou est le code, il y subsiste une faille importante. a savoir que sur un salon avec plusieurs personnes, il y aura de fortes chances qu'il soit deconnecter en 'excess flood'. donc, a revoir le systeme de 'timer msg ...' (peut-etre dans une queue de messagerie).

a part ca, bon courage pour l'amelioration.

Commentaire de ISoKa le 24/10/2007 23:02:39

Bonjour,

faire 3 write sur chaque on text ca va ramer sa mémée sur des gros chans. essai ptete de voir pour gerer ca autrement au moins file handling ou mieu htables.
ensuite, pourquoi se limiter au 6iem mot pour le test ?

ca pourrait etre bien optimiser je pense.

Commentaire de wims le 25/10/2007 19:45:19

Faire 3 write sur un on text ça va faire ramer mémée ? sur un de mes vieux pc 266mhz ouais, mais pas sur les pc d'aujourd'hui...

Sur un fichier de plus de 700 lignes, je met 0 ms (15 max) a écrire trois fois dans le fichier,et le pc sur lequel je fais ça est vraiment bof :)

Commentaire de Maxou1012 le 25/10/2007 22:27:05

TropNul : Pour le timer j'ai mit un "timermsg msg ...", comme ça un timer à la fois !

ISoKa : tu parle un if %msg isin $1- ? Comme ça tout le texte est prit ! Sinon pour les htable je vois pas comment faire pour savoir si un mot est dnas une table ...

wims : Merci de défendre mon super ordi :D

Commentaire de ISoKa le 26/10/2007 03:33:14

je démord pas que franchement le write en 3 fois c grave pas joli et optimal :) moi je voi sur des remotes que je fai quand j'ai trop de write en meme temps je le sent passer. pour ce qui est des htables bin suffit au lieu de write de faire hadd et ensuite pour la recherche un $find ou $hmatch et ca se fai gentiment.

Commentaire de TropNul le 26/10/2007 15:22:10

as-tu fais des tests dans un salon 'reel' pour le timer nomme ?
je pense que cela n'aura pour effet que de reinitialiser le timermsg a chaque fois dans le cas ou le prochain temps du timermsg est superieur au temps du timermsg precedent. du coup, les timer se 'mangeront' a chaque fois que ce cas se presentera.
je ne peux affirmer ce que je dis car je n'ai pas les moyens de tester (pas de mirc installe sur le pc ou je suis) mais je maintiens toujours cette opinion.

simple exemple:

;[code]
alias timermangelautre {
  timerUn 1 10 echo -at salut toi
  timerUn 1 5 echo -at je ne salue pas :p
}
;[/code]

pour l'alias ci-dessus, je m'attendrais a ne voir s'afficher que 'je ne te salue pas :p'.

au cas ou j'aurais tort, veuillez ignorer ce post. (honte a moi) mais ce n'est qu'un doute. donc, maintenant,  a toi de tester. mets pleins d'echo pour voir et savoir si vraiment tous les timers lances son executes et qu'il n'y en aient pas qui sont reinitialises par les prochains.

cordialement

Commentaire de TropNul le 26/10/2007 15:24:53

ERRATA:

[1]
...dans le cas ou le prochain temps du timermsg est superieur au temps du timermsg precedent...

a remplacer par:

...dans le cas ou le prochain temps du timermsg est inferieur au temps du timermsg precedent...

[2]
timerUn 1 5 echo -at je ne salue pas :p

a remplacer par:

timerUn 1 5 echo -at je ne te salue pas :p

^^

Commentaire de wims le 26/10/2007 18:17:32

Il est vrai que faire des /writes signifie "ouvrir écrire et fermer le fichier" mais comme on dit, c'est de l'insolence de faire du file handling pour 3 write :)

Commentaire de TropNul le 26/10/2007 18:26:26

Tant que j'y suis, je continue.

[REMARQUE1]
Il faudrait aussi que tu prevois un systeme de remise a zero ou de stockage efficace du fichier text.txt. En effet, sa taille ne cessera de s'agrandir avec le present code.
[/REMARQUE1]

[REMARQUE2]
Ce qu'isoka a fait ressortir n'est pas denue de sens. D'apres mes tests personnels d'il y a quelques temps, a partir de 7000 lignes dans un fichier txt et quand on n'utilise pas les moyens misent a diposition par mirc pour ce genre de cas, tu risques d'avoir des petits intervalles de 'freeze' de mirc. Mais c'est assez insignifiant si tu ne fais que trois write. Donc, dans le cas ou tu changerais la facon d'acceder a ce fichier ou alors si tu changes ton algorithme de recherche, et surtout, s'il t'arrives a inclure ne serait-ce qu'une seule boucle while, utilises le file handling ou des hash tables. Ce sera nettement mieux et aussi beau a voir :p.
[/REMARQUE2]

[REMARQUE3]
L'identifieur $rand peut etre remplace par $r.
[/REMARQUE3]

[REMARQUE4]
La condition

if ( $1 isin %msg || $2 isin %msg || $3 isin %msg || $4 isin %msg || $5 isin %msg || $6 isin %msg ) { timermsg 1 $rand(2,5) msg $chan %msg }

peut etre optimise par

if $regex($1-,/( $+ $replace(%msg,$chr(32),$chr(124)) $+ )/i) { timermsg 1 $r(2,5) msg $chan %msg }

alors, oui, j'ai change son fonctionnement pour faire en sorte de verifier tous les mots dits par $nick. je pense que c'est mieux. mais evidemment, tu peux remplacer $1- par $1-6.
[/REMARQUE4]

[REMARQUE5]
La methode dont tu as use pour le goto me laisse perplexe. Une boucle while serait plus 'propre' a mon avis.
Voila ce que je propose:

On *:Text:*:#:{
  Var %repeat = 0
  While (%repeat <= 1000) {
    If ($r(1,2) == 1) { Set %msg $read(text.txt) }
    ElseIf ($r(1,5) == 1) { Set %msg $read(text.txt) $read(text.txt) $read(text.txt) }
    Else { Set %msg $read(text.txt) $read(text.txt) }
    If $regex($1-,/( $+ $replace(%msg,$chr(32),$chr(124)) $+ )/i) { Timermsg 1 $r(2,5) Msg $chan %msg }
    Inc %repeat
  }
  If $6 { Write text.txt $5 $6 }
  ElseIf $4 {
    Write text.txt $3 $4
    Write text.txt $1 $2 $3 $4
  }
  ElseIf $2 { Write text.txt $1 $2 }
  If ($r(1,100) == 5) { Write text.txt $nick }
  UnSet %repeat
}
[/REMARQUE5]

Si j'ai d'autres remarques/propositions, je le ferais :)

Cordialement

Commentaire de ISoKa le 26/10/2007 21:17:36

surtout que
# write text.txt $1 $2
# else write text.txt $1 $2 $3 $4
# write text.txt $3 $4
# write text.txt $5 $6

devient
var %t $1-2
else var %t $+(%t,$crlf,$1-4)
var %t (%t,$crlf,$3-4,$crlf,$5-6)
write text.txt %t

ce que je prefere grandement perso (oui oui je suis un chieur et j'aime ca :) )

Commentaire de wims le 27/10/2007 00:59:05

met un $+, ça marchera mieux (3e ligne)

Commentaire de ISoKa le 27/10/2007 02:00:08

ha merde g raté tt l'effet à cause de cet oubli :/

Commentaire de ISoKa le 27/10/2007 13:21:12

Tropnul en lisant le code que tu as fai je voi :
  While (%repeat <= 1000) {
    If ($r(1,2) == 1) { Set %msg $read(text.txt) }
    ElseIf ($r(1,5) == 1) { Set %msg $read(text.txt) $read(text.txt) $read(text.txt) }
    Else { Set %msg $read(text.txt) $read(text.txt) }
    If $regex($1-,/( $+ $replace(%msg,$chr(32),$chr(124)) $+ )/i) { Timermsg 1 $r(2,5) Msg $chan %msg }
    Inc %repeat
  }

pense peut etre à break si ton regex match pck si jamais y a bcp d'occurences dans le txt tu vas excess flood je pense. le code original avec ses if et elseif break de facon virtuelle.

Commentaire de TropNul le 27/10/2007 14:13:23

J'ai remplace

set %repeat 0
:repeat
inc %repeat 1
if ( $rand(1,2) == 1 ) { set %msg $read(text.txt) }
elseif ( $rand(1,5) == 1 ) { set %msg $read(text.txt) $read(text.txt) $read(text.txt) }
else { set %msg $read(text.txt) $read(text.txt) }
if ( $1 isin %msg || $2 isin %msg || $3 isin %msg || $4 isin %msg || $5 isin %msg || $6 isin %msg ) { timermsg 1 $rand(2,5) msg $chan %msg }
elseif ( %repeat != 1000 ) { goto repeat }

par

While (%repeat <= 1000) {
  If ($r(1,2) == 1) { Set %msg $read(text.txt) }
  ElseIf ($r(1,5) == 1) { Set %msg $read(text.txt) $read(text.txt) $read(text.txt) }
  Else { Set %msg $read(text.txt) $read(text.txt) }
  If $regex($1-,/( $+ $replace(%msg,$chr(32),$chr(124)) $+ )/i) { Timermsg 1 $r(2,5) Msg $chan %msg }
  Inc %repeat
}

Dans l'original, il rebouclera tant que %repeat n'est pas egal a 1000 avec un increment unitaire. C'est exactement ce que j'ai fait dans ma version. Donc je ne vois pas ou le code original fait le 'break' virtuellement. Si c'est le 'elseif' de la condition 'elseif ( %repeat != 1000 ) { goto repeat }' alors c'est ce qui m'a rendu perplexe (cf. mes precedents posts) car, il aurait du mettre un 'if'. Mais, quand bien meme il y a un 'elseif', le code rebouclera toujours jusqu'a ce que %repeat equivaut a 1000.

Commentaire de TropNul le 27/10/2007 14:24:14

Mea Culpa.

Tu avais raison isoka ;). Son code ne le fait pas 'virtuellement' mais bien concretement. Ah, le pouvoir du elseif ...

Soit, mon code devient donc:

On *:Text:*:#:{
  Var %repeat = 0
  While (%repeat <= 1000) {
    If ($r(1,2) == 1) { Set %msg $read(text.txt) }
    ElseIf ($r(1,5) == 1) { Set %msg $read(text.txt) $read(text.txt) $read(text.txt) }
    Else { Set %msg $read(text.txt) $read(text.txt) }
    If $regex($1-,/( $+ $replace(%msg,$chr(32),$chr(124)) $+ )/i) {
      Timermsg 1 $r(2,5) Msg $chan %msg
      ;thx isoka ^^
      Break
    }
    Inc %repeat
  }
  If $6 { Write text.txt $5 $6 }
  ElseIf $4 {
    Write text.txt $3 $4
    Write text.txt $1 $2 $3 $4
  }
  ElseIf $2 { Write text.txt $1 $2 }
  If ($r(1,100) == 5) { Write text.txt $nick }
  UnSet %repeat
}

Commentaire de ISoKa le 27/10/2007 15:39:25

je disai virtuel pck c'est pas écri "break" par contre pour le bot, si on ve detect un mot de sa phrase présent dans le txt il serait peut etre interessant de ne detecter que les mots d'une longueur superieure ou egale à 3 ou 4 caracteres pour éviter le match sur le, la, du, de etc...

Commentaire de wims le 27/10/2007 15:46:43

On *:Text:*:#:{
  Var %a 1 ,%r $+($!read(text.txt),$chr(32))
  While (%repeat <= 1000) {
  var %m $str($(%r,2),$iif(!$r(0,1),1,$iif(!$r(0,4),3,2)))
  var %p $+(/(,$replace(%m,$chr(32),$chr(124)),)/i)
  If $regex($1-,%p) { Timermsg 1 $r(2,5) Msg $chan %m | Break }
  Inc %repeat
  }
  var %w $+($iif($6,$5-6,$iif($4,$+($3-4,$crlf,$1-4),$iif($2,$1-2))))
  Write text.txt %w
  If (!$r(0,99)) Write text.txt $nick
}


C'est peut-être pas la meilleur optimisation car c'est surement plus long, et c'est un peu moche, mais ça montre des techniques a utiliser lorsque certaine action se ressemble un peu trop et qu'on ne sais pas comment amélioré ça :)

Commentaire de TropNul le 27/10/2007 17:17:12

Ah sacre wims !

+1 pour les techniques :)
Mais, comme tu me connais, je privilegierais la rapidite.
Par contre, je voudrais un peu d'explication sur cette syntaxe stp:

$!read(text.txt)

Je n'ai toujours pas capte le principe de mettre un '!' entre le $ et la commande. Quelles sont les applications les plus courantes de cette syntaxe ?

Merci

PS: Je dois m'excuser aupres de vous tous. Oui, je ne mets aucun accent aigue/grave/circonflexe ou autre cedille pour la simple et bonne raison que j'ai un foutu clavier qwerty et un pc qui refuse tout quand je veux modifier la langue. :(. Bref, maintenant vous savez lol. voila

Commentaire de wims le 27/10/2007 18:02:42

Le ! permet de retourné la forme non évalué d'un identifier/variable, du style :

//echo -a $!me $!!me
Combiné avec $() ( $eval() quoi ) :
//echo -a $($!!me,3)
;$me est la forme évalué 0 fois
;la valeur de $me est la formé évalué 1 fois ...
;$!me c'est -1
;donc là, $!!me c'est -2, on évalue 3 fois , -2 + 3 = 1 on retrouve bien la valeur de $me évalué une fois.

En gros dans le code, je stock la valeur non évalué de $read(text.txt) dans une variable parce que on va utiliser plusieur fois ce $read et la valeur doit etre actualisé a chaque fois qu'on l'utilise, si on mettais que $read(text.txt), la valeur serait tjs la même.J'utilise ensuite $(,2) pour actualisé a chaque coup :]

Commentaire de TropNul le 28/10/2007 10:06:00

Merfi wims pour ces eclaircissements. A present, je comprendrais mieux lors de la lecture de certaines sources ^^.

Commentaire de Drummond le 02/01/2008 13:43:06 7/10

super

Commentaire de wims le 07/01/2008 19:21:05

Je vois que tu n'écoutes pas trop les conseil qu'on te donne, et en plus tu as mis ton code a jour avec une erreur, au niveau du /while il manque un espace pour la condition

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

OH?mIRC me parle..ki me parle? [ par YoSkATeR ] tien aufait il parai kon peu faire parler notre chere mIRC et oui ouide plus g deja vu mon pc me parler kan g utilisé "sub7"mais seulement g pas testé BOT qui parle, comment faire ? [ par TheOnlyMaX ] lu all,Je suis completement nouveau sur irc, et j'aimerais faire un BOT qui parle tout seul toutes les 30 secondes. Il irait chercher les phrases dans Idle bots [ par exeral ] Je sais pas si vous avez remarquermais c la mode des idles bots(sur quakenet en tout cas )donc je voulais savoir si on peut me dire où en trouver ou c recherche addon pour faire parler un bot cservice [ par dj_balboa ] bonjourvoila je recherche une addon pour mon bot cservice pour le faire parler mais je ne trouve pas pourriez vous m'aidez ou me dire ou puis je trouv Bots permanents [ par djrandu ] Bonjour.J'aimerais installer un bot permanent dans mon channel.Un bot qui soir capable de rester connecter lorsque mon ordi est éteind ou que je ne so Bot floodeur [ par Lyune ] Bonjour,Mon probl&#232;me : des bots join mon channel, jamais ac le m&#234;me host, souvent ils viennent de chez wanadoo avec des lieux diff&#233;rent Bots [ par aln31 ] voila j'ai un petit probleme... j'ai cree un chat sur le web par Fly-irc, mais le probleme est que 1) Je ne suis pas OP, donc on m'a dt qu'il fallait Anti flood [ par Zqokmi ] kelkun pourai me dire ski va pas ds mon anti-flood ? on *:text:*:#:{ inc -u2 %flood $+ $nick if %flood [ $+ [ $nick ] ] >= 3 { ban -u900 # $nick 2 } Lancer une invitation de commande via une interface web [ par dafrd ] Bonjour,Je travaille en ce moment sur un projet d'&#233;tudes sur un site de cr&#233;ation de projet.Il faut que j'int&#232;gre un module de chat dans pickup bot pr quake4 [ par gribouts ] bonjour a tous, juste un petit message pour savoir si quelqu'un aurait un pickup bot pour quake 4. Je n'aurais juste besoin que d'un bot basique, 8sl


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,905 sec (4)

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