begin process at 2010 02 09 16:42:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Bots

 > IA BOT

IA BOT


 Information sur la source

Note :
9,82 / 10 - par 11 personnes
9,82 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Bots Niveau :Expert Date de création :13/09/2003 Date de mise à jour :31/05/2004 16:56:13 Vu / téléchargé :19 239 / 1 368

Auteur : tiot

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

 Description

C'est un bot qui sera rien dire et vous devez lui aprendre à parler. Le bot aprend relativement rapidement (disons qu'en 10minutes de conversation il connait pas mal de mot). L'interrêt de la chose est ... euh ... bah j'avais scripté ça par défi, on peut critiquer mon système mais il a l'avantage d'être simple, ludique et rapide.
Si vous arrivez à faire un bot qui s'exprime assez bien vous pouvez m'envoyer la bd à tiot@redpowa.com je la posterai sur mon site (http://moipetit.free.fr/ia/) essayez de ne pas écrire comme un porc.

Normalement cette add-on ne marche que sur mIRC 6.03 et 6.1x

Source

  • ;*******************************************
  • ;*** ***
  • ;** **
  • ;* IA BOT VERSION 1.5b BY TIOT *
  • ;* *
  • ;** **
  • ;*** ***
  • ;*******************************************
  • ;La super moderne menubar
  • menu menubar {
  • ia
  • .config:dialog -m ia ia
  • .connection:if ((%ia.ip) && (%ia.port)) if (%ia.nick) ia.co
  • .déconnection:{ .timeria off | if ($hget(ia)) hsave -o ia ia/ia.hash | hfree -w ia* | ia.s QUIT :ia bot by tiot }
  • }
  • ;-----------------------------
  • ;
  • ; LES REMOTES
  • ;
  • ;-----------------------------
  • ;un tit dialog
  • dialog ia {
  • title "ia config"
  • size -1 -1 197 172
  • option dbu
  • button "Annuler",77, 73 132 37 12, cancel
  • button "OK", 5, 16 131 37 12, ok
  • edit %ia.ip,1,60 19 75 10
  • edit %ia.port,2, 60 34 75 10
  • edit %ia.nick,3, 60 49 75 10
  • edit %ia.Md,4, 60 64 75 10
  • edit %ia.JOIN, 7, 60 79 75 10
  • edit %ia.call, 8, 60 94 75 10
  • text "Serveur",10,7 20 50 8, center
  • text "Port",11,7 35 50 8, center
  • text "Nickname",12, 7 50 50 8, center
  • text "Mode par défault",13,7 65 50 8, center
  • text "chans join",14,7 80 50 8, center
  • text cmde d'apelle,15,7 95 50 8, center
  • check "log pv",61,140 19 50 10
  • check "fenetre debug",62,140 29 50 10
  • }
  • on 1:dialog:ia:init:0:{
  • if (%ia.log) did -c ia 61
  • if (%ia.debug) did -c ia 62
  • }
  • ;Quand on appuie sur "ok" çà sauve tout
  • on 1:dialog:ia:sclick:5:{
  • set %ia.ip $did(1).text
  • set %ia.port $did(2).text
  • set %ia.nick $did(3).text
  • set %ia.Md $did(4).text
  • set %ia.join $did(7).text
  • set %ia.call $iif($left($did(8).text,1) != :,:) $+ $did(8).text
  • set %ia.log $did(61).state
  • set %ia.debug $did(62).state
  • }
  • on 1:load:{
  • if ($version < 6.00) { echo -a 12Votre version de mIRC est trop vielle pour suporter cette add-on | return }
  • if ($version < 6.03) echo -a 12Version mIRC <6.03 des commandes ne marcheront plus : /ia.saveBD !eff !wm et surment d'autre commandes
  • mkdir ia
  • mkdir ia\log
  • if (!%ia.port) {
  • set %ia.port 6667
  • set %ia.nick ia
  • set %ia.Md n
  • set %ia.call ia
  • }
  • echo -a 12Ia bot chargé dans votre mIRC
  • }
  • on 1:exit:if ($hget(ia)) hsave -o ia ia\ia.hash
  • ;***************************
  • ;**** ****
  • ;*** ***
  • ;** LES SOCKETS **
  • ;*** ***
  • ;**** ****
  • ;***************************
  • ;Sert à faire envoyer des cmdes aux serveur à la main
  • alias ia.s sockwrite -n ia $1-
  • ;Sert à se connecter au serveur
  • alias ia.co sockopen ia %ia.ip %ia.port
  • on 1:sockopen:ia:{
  • sockwrite -n ia NICK %ia.nick
  • sockwrite -n ia USER ia "" "" :ia by tiot
  • echo -a 2Connection ouverte
  • }
  • on 1:sockread:ia:{
  • if ($sockerr > 0) return
  • var %temp
  • sockread %temp
  • tokenize 32 %temp
  • if ($1 == PING) sockwrite -n $sockname PONG $2
  • ;On fait un montage, si c sur un salon à fait :
  • ;ia.traite $chan $nick phrase
  • ;si c'est dans un pv
  • ;ia.traite $nick $nick phrase
  • elseif ($2 == PRIVMSG) {
  • ;%temp contiendra l'host du gars, cela m'évite de le passer en paramètre.
  • set %ia.temp $gettok($1,2,64)
  • if ($asc($3) == 35) { if ($strip($4) == %ia.call) ia.traite $3 $right($gettok($1,1,33),-1) $strip($5-) }
  • else ia.traite $right($gettok($1,1,33),-1) $right($gettok($1,1,33),-1) $strip($right($4-,-1))
  • }
  • ;Si le nick est déjà prit on rajoute un `
  • elseif ($2 == 433) sockwrite -n ia NICK %ia.nick $+ `
  • elseif ($2 == 001) { if (%ia.join) sockwrite -n ia JOIN %ia.join | echo -a 2Bot connecté }
  • }
  • ;***************************
  • ;**** ****
  • ;*** ***
  • ;** LES ALIAS **
  • ;*** ***
  • ;**** ****
  • ;***************************
  • ;-----------------------
  • ;
  • ;LES ALIAS INDIPENSABLE
  • ;
  • ;-----------------------
  • ;Vas traiter l'entrée.
  • ;$1 = Où il doit dire la phrase.
  • ;$2 = Nick du gars
  • ;$3- = phrase dite par le gars
  • ;%ia.temp = qqch qui identifie la personne. Par default (avec les socket) c l'host de la personne
  • alias ia.traite {
  • ;%c = Phrase dite par la personne
  • ;%ia.axx = access de la personne (l n c o a)
  • var %c,%ia.axx
  • %ia.axx = $ia.axx(%ia.temp)
  • ;On inianalise
  • if (!$hget(ia)) ia.init
  • if ($left($3,1) == !) {
  • if ($3 == !help) ia.out $1 Toutes l'aide sur ce bot se trouve sur: 2http://moipetit.free.fr/ia/readme.htm
  • elseif ($3 == !syn) {
  • if ($ia.axx2(%ia.axx,c)) ia.out $1 $gettok($ia.syn($4-),2-,32)
  • else ia.out $1 Access insufisant
  • }
  • elseif ($3 == !eff) {
  • if ($ia.axx2(%ia.axx,c)) ia.out $1 $gettok($ia.eff($4-),2-,32)
  • else ia.out $1 Access insufisant
  • }
  • elseif ($3 == !non) {
  • if (!$ia.axx2(%ia.axx,l)) { ia.out $1 Access insufisant | return }
  • if ($hget(ia,t2. $+ %ia.temp) != $null ) {
  • hadd ia t1. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)
  • ia.CmotP $4-
  • }
  • hadd ia t3. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)
  • hadd ia t2. $+ %ia.temp $hget(ia,t1. $+ %ia.temp)
  • hadd ia t1. $+ %ia.temp $4-
  • ia.out $1 $iif($asc($1) == 35,$2 $+ :) $4-
  • }
  • elseif ($3 == !reco) {
  • hdel -w ia t?. $+ %ia.temp
  • hadd ia idk. $+ %ia.temp 1
  • ia.out $1 La conversation recommence depuis le début
  • }
  • elseif ($3 == !stats ) ia.out $1 Je connais $hget(ia,Nbr) phrases, $hfind(ia,^m([^?])+$,0,r) mots et ma bd pèse $bytes($file(ia\ia.txt).size).suf
  • elseif ($3 == !version) ia.out $1 Ia bot version 1.5b by tiot (2http://moipetit.free.fr/ia/)
  • elseif ($istok(!addm !delm !addp !Wm !Wp !Remplace,$3,32)) {
  • if ($ia.axx2(%ia.axx,c)) {
  • var %c
  • if ($3 == !addm) %c = $ia.addm($4-)
  • elseif ($3 == !delm) %c = $ia.delm($4-)
  • elseif ($3 == !addp) %c = $ia.addp($4-)
  • elseif ($3 == !wp) %c = $ia.wp($4-)
  • elseif ($3 == !wm) %c = $ia.wm($4-)
  • elseif ($3 == !remplace) %c = $ia.Remplace($4-)
  • }
  • ia.out $1 $gettok(%c,2-,32)
  • else ia.out $1 Access insufisant
  • }
  • elseif ($istok(!auth !addh !delh !listh !addaxx !delaxx !listaxx,$3,32)) return $ia.BotAxx($1,$3-)
  • return
  • }
  • ;bordel
  • %c = $ia.cher($3-,$hget(ia,t1. $+ %ia.temp))
  • if ($ia.axx2(%ia.axx,l)) ia.CmotP $3-
  • if ($asc($1) == 35) ia.out $1 $2 $+ : %c
  • else {
  • if (%ia.log) {
  • write ia\log\ $+ %ia.temp $+ $date(dd.mm.yy) $+ .log $timestamp $+(<,$1,>) $3-
  • write ia\log\ $+ %ia.temp $+ $date(dd.mm.yy) $+ .log $timestamp $+(<,%ia.nick,>) %c
  • }
  • if (%ia.debug) {
  • if (!$window(@Ia)) window -en @ia
  • aline @ia $2 -> $3-
  • aline @ia %ia.nick -> %c
  • }
  • ia.out $1 %c
  • }
  • ;ia,idk = 1 si il a trouver une réponse, sinon il est égal à 0
  • if (!$hget(ia,idk. $+ %ia.temp)) {
  • hadd ia t3. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)
  • hadd ia t2. $+ %ia.temp $hget(ia,t1. $+ %ia.temp)
  • hadd ia t1. $+ %ia.temp $3-
  • hadd ia idk. $+ %ia.temp 1
  • }
  • else {
  • hadd ia t3. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)
  • hadd ia t2. $+ %ia.temp $3-
  • hadd ia t1. $+ %ia.temp %c
  • }
  • }
  • ;$1 = #canaux/nick vers lequelle vas le msg
  • ;$2- = phrase que le bot dit
  • ;C'est l'alias qui indique la sortit, dans ce le cas par default c un socket.
  • alias ia.out {
  • sockwrite -n ia PRIVMSG $1 : $+ $2-
  • }
  • ;Vas lié chaque mot de $hget(ia,t1. $+ %ia.temp) avec la phrase $1-
  • alias ia.CmotP {
  • var %P = $hget(ia,t1. $+ %ia.temp),%ia.Np,%b,%a,%c
  • if ($read(ia\ia.txt,w,$1-)) %ia.Np = $readn
  • else {
  • write ia\ia.txt $1-
  • hinc ia Nbr
  • %ia.Np = $hget(ia,Nbr)
  • }
  • %P = $replace(%P,$chr(44),$chr(32),',$chr(32),?,$chr(32) $+ ?)
  • %P = $remove(%P,?)
  • %b = $numtok(%P,32)
  • while (%b) {
  • %c = %a
  • %a = $gettok(%P,%b,32)
  • dec %b
  • if ($hgeti(ia,eff,%a)) continue
  • if ($hgetg(ia,s. $+ %a,1) == 0) %a = $hgetg(ia,s. $+ %a,2)
  • %c = %a $+ ? $+ %c
  • ia.LPM %a %ia.Np
  • ia.LPM %c %ia.Np
  • }
  • hdel -w ia m.*?
  • hdel -w ia m.?*
  • return 1 Les phrase sont bien lié
  • }
  • ;C'est l'alias qui vas chercher la bonne phrase celon $1 et $2
  • ;$1 est la phrase primordial et $2 au cas où
  • alias ia.cher {
  • hdel -w ia2 *
  • if (($numtok($1,32) < 4) && ($2 != $null)) tokenize 32 $1 $1 $2
  • else tokenize 32 $1
  • var %list,%phrase,%a1,%c1,%c2,%a2,%b,%a,%b2,%b1 = $0,%Max = 0
  • ;%Phrase = c la phrase qu'il va sortir
  • ;%List = liste des n° de phrases possible
  • ;%a1 = c un MOT de la phrase
  • ;%c1 = c un groupe de mot de la phrase
  • ;%a2 = c une des phrases liées a %a1
  • ;%b,%b1,%b2 = compteurs de boucle
  • ;%Max = max de fois qu'une phrase est cité
  • while (%b1) {
  • %c1 = %a1
  • %a1 = $gettok($1-,%b1,32)
  • if ($hgetg(ia,s. $+ %a1,1) == 0) %a1 = $hgetg(ia,s. $+ %a1,2)
  • %c1 = %a1 $+ ? $+ %c1
  • %b2 = $numtok($ia.m(%a1),32)
  • while (%b2) {
  • %a2 = $gettok($ia.m(%a1),%b2,32)
  • hinc ia2 %a2
  • if ($hget(ia2,%a2) > %Max) %Max = $ifmatch
  • dec %b2
  • }
  • %b2 = $numtok($ia.m(%c1),32)
  • while (%b2) {
  • %a2 = $gettok($ia.m(%c1),%b2,32)
  • hinc ia2 %a2 2
  • if ($hget(ia2,%a2) > %Max) %Max = $ifmatch
  • dec %b2
  • }
  • dec %b1
  • }
  • ;On recherche les phrases les plus cités.
  • %b = $hfind(ia2,%max,0,n).data
  • while (%b) {
  • if ($len(%list) > 900) break
  • %list = %list $hfind(ia2,%max,%b,n).data
  • dec %b
  • }
  • ;%phrase contient maintenant la phrase final, il faut maintenant chercher les synonymes.
  • %phrase = $read(ia\ia.txt,$gettok(%list,$rand(1,$numtok(%list,32)),32))
  • %b = $numtok(%phrase,32)
  • while (%b) {
  • %a = $gettok(%phrase,%b,32)
  • if ($hget(ia,s. $+ %a) != $null) {
  • if ($hgetg(ia,s. $+ %a,1) == 0) %a = $hgetg(ia,s. $+ %a,2)
  • %a = $hget(ia,s. $+ %a)
  • %a = $gettok(%a,$rand(2,$numtok(%a,32)),32))
  • %Phrase = $puttok(%Phrase,%a,%b,32)
  • }
  • dec %b
  • }
  • if (%Phrase == $null) { hadd ia idk. $+ %ia.temp 0 | return j'aurais du dire ... ? }
  • else return %Phrase
  • }
  • ;Lié Le mot $1 avec la phrase n° $2
  • ;-Si $2 est déjà dans $1 on le met en pôle position
  • ;-Si l'item est remplit on vire le dernièrs token et on place notre $2 en -20 position
  • :-tout ce passe bien on le met normal (en dernièrs position comme même)
  • alias ia.LPM {
  • if ($hgeti(ia,m. $+ $1,$2)) {
  • hdelt ia m. $+ $1 $2
  • hadd ia m. $+ $1 $2 $ia.m($1)
  • return 1
  • }
  • if ($len($ia.m($1)) > 900) {
  • hadd ia m. $+ $1 $instok($deltok($ia.m($1),-1,32),$2,-20,32)
  • return 1
  • }
  • haddt ia m. $+ $1 $2
  • return 1
  • }
  • ;$1 = access de la personne
  • ;$2 = commande qu'il veut éxercé (c l a o)
  • ;return 1 si il peut éxercer la commande, sinon 0.
  • ;Cette alias sert uniquement si vous voulez intégré l'ia à votre bot.
  • alias ia.axx2 {
  • if ($2 isin $1) return 1
  • else return 0
  • }
  • ;Cette alias retourne l'access de la personne par raport à %ia.temp (par défault contient l'host).
  • ;Vous pouvez ici personalisez vos access pour intégrer l'ia à votre bot.
  • alias ia.axx {
  • if ($hget(ia,a. $+ $1) != $null) return $ifmatch
  • else return %ia.Md
  • }
  • ;retourne les lien du mot $1 (c un alias de fainiantise)
  • alias ia.m return $hget(ia,m. $+ $1)
  • ;Cette alias sert à inialiser le bot.
  • alias ia.init {
  • .hmake -s ia 100
  • if (!$hget(ia2)) .hmake -s ia2 100
  • if ($exists(ia\ia.hash)) hload ia ia\ia.hash
  • else {
  • hadd ia eff la le un une l' des les d'
  • hadd ia a. $+ %ia.temp olac
  • }
  • hadd ia Nbr $lines(ia\ia.txt)
  • .timeria 0 300 hsave -o ia ia\ia.hash
  • if ($hget(ia,NL) != $null) ia.ConBD
  • }
  • ;-------------------------------------------------------------------
  • ;
  • ;Les alias indispensables et qui peuvent servir dans d'autre script
  • ;
  • ;-------------------------------------------------------------------
  • ;Rajoute $3 à la listes de token de l'item $2 de la hash $1
  • alias haddt hadd $1 $2 $addtok($hget($1,$2),$3,32)
  • ;Enlève $3 à la listes de token de l'item $2 de la hash $1
  • alias hdelt hadd $1 $2 $remtok($hget($1,$2),$3,1,32)
  • ;Retourne $true si $3 est dans la liste de token de l'item $2 de la hash $1
  • alias hgeti return $istok($hget($1,$2),$3,32)
  • ;Return le $3 de la listes des token de l'item $2 de la hash $1
  • alias hgetg return $gettok($hget($1,$2),$3,32)
  • ;---------------------
  • ;
  • ;Les alias optionnels
  • ;
  • ;---------------------
  • ;-0 para : liste des synonymes
  • ;-1 para : liste des synonymes de 1
  • ;-2 para : mettre $1 synonyme à $2
  • alias ia.syn {
  • tokenize 32 $1-
  • if (!$1) {
  • var %list,%b = $hfind(ia,s.*,0,w)
  • while (%b) {
  • %list = $addtok(%list,$right($hfind(ia,s.*,%b,w),-2),32)
  • dec %b
  • }
  • return 1 %list
  • }
  • if (!$2) {
  • ;La on recherche tous les synonyme du mot et les balance. Si le mot n'existe pas on fait un return
  • ;Si par contre le première lettre est "0" (cad ce n'est pas un syn de référence, on balance le syn de ref)
  • if (!$hget(ia,s. $+ $1)) return 0 $1 n'a aucun synonyme
  • if (!$hgetg(ia,s. $+ $1,1)) tokenize 32 $hgetg(ia,s. $+ $1,2)
  • return 1 $hgetg(ia,s. $+ $1,2-)
  • }
  • ;Il y a un synonyme de référence, c lui qui à tout les liens.
  • ;Chaque synonyme on pour nom "s.Nom" leur item contient "N syn", N est de 0 si le synonyme n'est pas de référence.
  • ;Si n = 1 alors le synonyme est dé référence, et tout ce qui est après le N se sont les synonyme qui se réfère à lui
  • ;Donc une prise de tête en perspective pour gérer tout çà
  • :syn
  • var %a1 = $hget(ia,s. $+ $1),%a2 = $hget(ia,s. $+ $2),%c1 = $gettok(%a1,2-,32),%c2 = $gettok(%a2,2-,32),%r1 = $gettok(%a1,1,32),%r2 = $gettok(%a2,1,32)
  • ;A chaque fois le 1 c pour $1 et le 2 pour $2 (dans les var)
  • :%a = N syn (est nul si $1 n'a aucun synonyme)
  • ;%c = liste des syonyme
  • ;%r = 1 si synonyme est de référence sinon 0
  • ;si $1 n'existe pas
  • if (!%a1) {
  • ;si $1 et $2 n'ont aucun synonyme
  • if (!%a2) {
  • hadd ia s. $+ $1 1 $2
  • hadd ia s. $+ $2 0 $1
  • ia.ccl $2 $1
  • ia.RP $2 $1
  • }
  • ;si $1 n'existe pas et $2 lui éxiste.
  • else {
  • ;si $2 est une référence
  • if (%r2) {
  • haddt ia s. $+ $2 $1
  • hadd ia s. $+ $1 0 $2
  • ia.ccl $1 $2
  • ia.RP $1 $2
  • }
  • ;si $2 n'est pas une référence (mais $1 n'éxiste pas) on dit $1 synonyme de la référence de $2
  • else {
  • haddt ia s. $+ %c2 $1
  • hadd ia s. $+ $1 0 %c2
  • ia.ccl $1 %c2
  • ia.RP $1 %c2
  • }
  • }
  • }
  • ;Par contre si $1 n'est pas null
  • else {
  • ;Si $1 est une référence
  • if (%r1) {
  • ;Si $2 n'éxiste pas
  • if (!%a2) {
  • haddt ia s. $+ $1 $2
  • hadd ia s. $+ $2 0 $1
  • ia.ccl $2 $1
  • ia.RP $2 $1
  • }
  • ;Si $2 éxite
  • else {
  • ;Si $2 et $1 sont des référence alors $1 devient la référence de $2 est donc des référencés de $2
  • if (%r2) {
  • var %a,%b = $numtok(%a2,32)
  • while (%b) {
  • %a = $gettok(%a2,%b,32)
  • haddt ia s. $+ $1 %a
  • hadd ia s. $+ %a 0 $1
  • dec %b
  • }
  • haddt ia s. $+ $1 $2
  • hadd ia s. $+ $2 0 $1
  • ia.ccl $2 $1
  • ia.RP $2 $1
  • }
  • ;$1 est une référence et $2 a pour référence %a2. Donc $1 synonyme de %c2
  • else {
  • if ($1 == %c2) return 0 $1 déjà synonyme avec $2
  • tokenize 32 $1 %c2
  • goto syn
  • }
  • }
  • }
  • ;Si $1 éxiste mais n'est pas une référence, donc il est référencé à %c1
  • else {
  • ;Cela revient à $2 synonyme de %c1
  • if ($2 == %c1) return 0 $1 déjà synonyme avec $2
  • tokenize 32 %c1 $2
  • goto syn
  • }
  • }
  • return 1 $1 Synonyme bien enregistré
  • }
  • ;Copie les liens de $1 dans $2 puis efface $1
  • alias ia.ccl {
  • var %a = $ia.m($1),%b = $numtok(%a,32)
  • while (%b) {
  • ia.LPM $2 $gettok(%a,%b,32)
  • dec %b
  • }
  • hdel ia m. $+ $1
  • }
  • ;Remplace dans toutes les phrase $1 par $2 et dans tous les groupes de mots.
  • alias ia.RP {
  • var %b = 1,%c,%d,%b2
  • while ($read(ia\ia.txt,w,* $+ $1 $+ *,%b)) {
  • %d = $ifmatch
  • %c = $readn
  • %b = %c
  • %b2 = $findtok(%d,$1,0,32)
  • while (%b2) {
  • write -l $+ %c ia\ia.txt $reptok(%d,$1,$2,%b2,32)
  • dec %b2
  • }
  • inc %b
  • }
  • %b = $hfind(ia,m. $+ $1 $+ ?*,0,w)
  • while (%b) {
  • %c = $hfind(ia,m. $+ $1 $+ ?*,%b,w)
  • dec %b
  • if ($hget(ia,m. $+ $2 $+ ? $+ $gettok(%c,2,164)) != $null) { ia.ccl %c $2 $+ ? $+ $gettok(%c,2,164) | continue }
  • hadd ia m. $+ $2 $+ ? $+ $gettok(%c,2,164) $hget(ia,%c)
  • hdel ia %c
  • }
  • %b = $hfind(ia,m.*? $+ $1,0,w)
  • while (%b) {
  • %c = $hfind(ia,m.*? $+ $1,%b,w)
  • dec %b
  • if ($hget(ia,m. $+ $gettok(%c,1,164) $+ ? $+ $1) != $null) { ia.ccl %c $gettok(%c,1,164) $+ ? $+ $1 | continue }
  • hadd ia m. $+ $gettok(%c,1,164) $+ ? $+ $1 $hget(ia,%c)
  • hdel ia %c
  • }
  • }
  • ;Efface la phrase $1- ou le n° de phrase $1
  • alias ia.eff {
  • tokenize 32 $1-
  • if ($1 == null) return 0 Pas assez de paramètre
  • if ($1- !isnum) {
  • if ($read(ia\ia.txt,w,$1-) == $null) return 0 La phrase n'existe pas
  • tokenize 32 $readn
  • }
  • write -l $+ $1 ia\ia.txt --- ligne éffacé --- $ticks
  • ;Le (^|\s) $+ $1 $+ (\s|$) et pour "$1 mot de l'item"
  • %b = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),0,r).data
  • while (%b) {
  • %c = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),%b,r).data
  • ;Le if sert à savoir si on loock bien un mot
  • if ($left(%c,2) == m.) hdelt ia %c $1
  • dec %b
  • }
  • return 1 Phrase corectement éffacé.
  • }
  • ;---------------------------------------------
  • ;
  • ; ALIAS DE MODIFICATION DE LA BD AVANCÉE
  • ;
  • ;----------------------------------------------
  • ;Lie les mots $2- à la phrase n° $1
  • ;$1 = n° de phrase valide
  • ;$2- = mot
  • alias ia.addm {
  • tokenize 32 $1-
  • if ($2 == $null) return 0 Pas assez de paramètre
  • if ($1 !isnum) return 0 $1 n'est pas un n°
  • if ($1 > $hget(ia,Nbr)) return 0 $1 ne corespond à aucune phrase
  • var %a,%b = $numtok($2-,32)
  • while (%b) {
  • %a = $gettok($2-,%b,32)
  • if (? isin %a) {
  • if ($hgetg(ia,s. $+ $gettok(%a,1,164),1) == 0) %a = $hgetg(ia,s. $+ $gettok(%a,1,164),2) $+ ? $+ $gettok(%a,2,164)
  • if ($hgetg(ia,s. $+ $gettok(%a,2,164),1) == 0) %a = $gettok(%a,1,164) $+ ? $+ $hgetg(ia,s. $+ $gettok(%a,2,164),2)
  • }
  • if ($hgetg(ia,s. $+ %a,1) == 0) %a = $hgetg(ia,s. $+ %a,2)
  • ia.LPM %a $1
  • dec %b
  • }
  • return 1 Les mots $2- on été lié à la phrase n° $1 
  • }
  • alias ia.delm {
  • tokenize 32 $1-
  • if ($2 == $null) return 0 Pas assez de paramètre
  • if ($1 !isnum) return 0 $1 n'est pas un n°
  • if ($1 > $read(ia\ia.txt,0)) return 0 $1 ne corespond à aucune phrase
  • var %b = $numtok($2-,32)
  • while (%b) {
  • hdelt ia m. $+ $gettok($2-,%b,32) $1
  • dec %b
  • }
  • return 1 Les mots $2- ne sont plus liés avec la phrase n° $1 
  • }
  • alias ia.addp {
  • tokenize 32 $1-
  • if ($1 isnum) {
  • if ($2 == $null) return 0 Pas assez de paramètre
  • if ($1 > $hget(ia,Nbr)) return 0 Erreur, la phrase n° $+ $1 n'éxiste pas
  • write -l $+ $1 ia\ia.txt $2-
  • }
  • else {
  • if ($read(ia\ia.txt,w,$1-)) return 0 La phrase est déjà enregistré n° $readn
  • write ia\ia.txt $1-
  • hinc ia Nbr
  • }
  • return 1 Phrase bien ajouté et à pour n° $hget(ia,Nbr) 
  • }
  • alias ia.Wp {
  • tokenize 32 $1-
  • if (($1 isnum) && ($2 == $null)) return 1 La phrase n° $1 Correspond à $read(ia\ia.txt,$1)
  • if ($read(ia\ia.txt,w,$1-)) return 1 La phrase a pour numero: $readn
  • else return 0 La phrase n'est pas dans la BD
  • }
  • alias ia.Wm {
  • tokenize 32 $1-
  • if ((!$1) || ($1 !isnum)) return 0 $1 n'éxiste pas ou n'est pas un nombre
  • var %b1,%list,%c
  • %b1 = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),0,r).data
  • %list = $null
  • while (%b1) {
  • %c = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),%b1,r).data
  • ;Le if sert à savoir si on loock bien un mot
  • if ($left(%c,2) == m.) %list = %list $right(%c,-2)
  • dec %b1
  • }
  • return 1 2 $+ %list lié à4 $1
  • }
  • alias ia.remplace {
  • tokenize 32 $1-
  • if ($2 == $null) return 0 Pas assez de paramètre
  • if ($1 === $2) return 0  $1 et $2 c la même chose chez moi
  • ia.ccl $1 $2
  • ia.RP $1 $2
  • return 1 Opération réussi: $1 a été remplacé par $2 
  • }
  • ;-------------------------------------------------------
  • ;
  • ;Alias s'occupant de SAUV - LOAD - CONVERTIR la BD
  • ;
  • ;-------------------------------------------------------
  • alias ia.saveBD {
  • if (!$1) { echo -a precisez le nom de votre sauvgarde: /ia.saveBD pokemon.txt | return }
  • if (!$exist(ia\save\)) mkdir ia\save
  • var %a,%b,%b1,%i,%c,%c1
  • %i = $ticks
  • %c = $gettok($ia.syn,2-,32)
  • %b = $numtok(%c,32)
  • while (%b) {
  • %a = $gettok(%c,%b,32)
  • write ia\save\ $+ $1 s: %a $hgetg(ia,s. $+ %a,2-)
  • dec %b
  • }
  • %b = 1
  • var %list
  • while ($read(ia\ia.txt,%b)) {
  • write ia\save\ $+ $1 m %b $ifmatch
  • %b1 = $hfind(ia,(^|\s) $+ %b $+ (\s|$),0,r).data
  • %list = $null
  • while (%b1) {
  • %c = $hfind(ia,(^|\s) $+ %b $+ (\s|$),%b1,r).data
  • ;Le if sert à savoir si on loock bien un mot
  • if ($len(%list) > 900) {
  • write ia\save\ $+ $1 mm %b %list
  • %list = $null
  • }
  • if ($left(%c,2) == m.) %list = %list $right(%c,-2)
  • dec %b1
  • }
  • write ia\save\ $+ $1 mm %b %list
  • inc %b
  • }
  • if ($isid) return 1 La BD a bien été sauvé en $calc($ticks - %i) ms
  • else echo 2 -a La BD a bien été sauvé en $calc($ticks - %i) ms
  • }
  • alias ia.LoadBD {
  • var %b,%b1,%c,%N,%der,%ou = $shortfn($sfile($mircdir,Choisit la BD à loader,LOAD))
  • %b = 1
  • if (!$hget(ia)) ia.init
  • if ($1 == -r) {
  • hdel -w ia m.*
  • hdel -w ia s.*
  • remove ia\ia.txt
  • }
  • while ($read(%ou,%b)) {
  • tokenize 32 $ifmatch
  • if ($1 == s:) ia.syn $2 $3
  • elseif ($1 == m) {
  • if ($read(ia\ia.txt,w,$3-)) %N = $readn
  • else {
  • write ia\ia.txt $3-
  • hinc ia Nbr
  • %N = $hget(ia,Nbr)
  • }
  • %der = $2
  • }
  • elseif ($1 == mm) {
  • if (%der != $2) return 0 problème lors du chargement de la BD
  • ia.addm %N $3-
  • }
  • else return 0 Ce fichier n'est pas un BD d'une ia
  • inc %b
  • }
  • if ($isid) return 1 chargement réussi
  • else echo 2 -a Chargement réussi
  • }
  • alias ia.ConBD {
  • hadd ia Nbr $hget(ia,Nl)
  • hdel ia Nl
  • var %b,%c
  • %b = $hfind(ia,1.*,0,w)
  • while (%b) {
  • %c = $hfind(ia,1.*,%b,w)
  • hadd ia m. $+ $right(%c,-2) $hget(ia,%c)
  • hdel ia %c
  • dec %b
  • }
  • hdel -w ia 0.*
  • hdel -w ia 1.*
  • hdel -w ia 2.*
  • hdel -w ia 3.*
  • hdel -w ia t.*
  • %b = $hfind(ia,syn.*,0,w)
  • while (%b) {
  • %c = $hfind(ia,syn.*,%b,w)
  • hadd ia s. $+ $right(%c,-4) $hget(ia,%c)
  • hdel ia %c
  • dec %b
  • }
  • hdel -w ia syn.*
  • hadd ia eff la le un une l' des les d'
  • return 1 Convertion de la base réussi
  • }
  • ;--------------------------------------------------------
  • ;
  • ;L'alias s'occupant de la gestion des access
  • ;
  • ;--------------------------------------------------------
  • alias ia.BotAxx {
  • var %axx = $ia.axx(%ia.temp)
  • var %nick = $1
  • tokenize 32 $2
  • if ($1 == !addh) {
  • if ((a !isin %axx) || (!$3)) return
  • if ((o isin $hget(ia,a. $+ $2)) && (o !isin %axx)) return
  • hadd ia a. $+ $2 $3
  • ia.out %nick $2 avec les modes $3 a bien été rajouté (ou modifié)
  • }
  • elseif ($1 == !delh) {
  • if ((a !isin %axx) || (!$2)) return
  • if (!$hget(ia,a. $+ $2)) { ia.out %nick $2 n'existe pas | return }
  • if ((o isin $hget(ia,a. $+ $2)) && (o !isin %axx)) return
  • hdel ia a. $+ $2
  • ia.out %nick l'host de $2 a été bien éffacé
  • }
  • elseif ($1 == !listh) {
  • var %list,%c,%b = $hfind(ia,a.*,0,w)
  • while (%b) {
  • %c = $hfind(ia,a.*,%b,w)
  • if ($len(%list) > 400) { ia.out %nick Liste des axxh: %list | %list = $null }
  • %list = %list ( $+ $right(%c,-2) $+ : $+ $hget(ia,%c) $+ )
  • dec %b
  • }
  • ia.out %nick Liste des axxh: %list
  • }
  • elseif ($1 == !addaxx) {
  • if ((a !isin %axx) || (!$4)) return
  • if ((o isin $gettok($hget(ia,axx. $+ $2),2,32)) && (o !isin %axx)) return
  • hadd ia axx. $+ $2 $3 $4
  • ia.out %nick Un axx à été rajouté (username $2 et mode $4 $+ )
  • }
  • elseif ($1 == !delaxx) {
  • if ((a !isin %axx) && (!$2)) return
  • if (o isin $gettok($hget(ia,axx. $+ $2),2,32) && (o !isin %axx)) return
  • hdel ia axx. $+ $2
  • }
  • elseif ($1 == !listaxx) {
  • var %list,%c,%b = $hfind(ia,axx.*,0,w)
  • while (%b) {
  • %c = $hfind(ia,axx.*,%b,w)
  • if ($len(%list) > 400) { ia.out %nick Liste des axx: %list | %list = $null }
  • %list = %list ( $+ $right(%c,-4) $+ : $+ $gettok($hget(ia,%c),2,32) $+ )
  • dec %b
  • }
  • ia.out %nick Liste des axx: %list
  • }
  • elseif ($1 == !auth) {
  • var %c = $hget(ia,axx. $+ $2)
  • if ((!$3) || (!%c)) return
  • if ($3 != $gettok(%c,1,32)) return
  • hadd ia a. $+ %ia.temp $gettok(%c,2,32)
  • }
  • return
  • }
;*******************************************
;***                                     ***
;**                                       **
;*       IA BOT VERSION 1.5b BY TIOT        *
;*                                         *
;**                                       **
;***                                     ***
;*******************************************

;La super moderne menubar 
menu menubar {
  ia 
  .config:dialog -m ia ia
  .connection:if ((%ia.ip) && (%ia.port)) if (%ia.nick) ia.co
  .déconnection:{ .timeria off | if ($hget(ia)) hsave -o ia ia/ia.hash | hfree -w ia* | ia.s QUIT :ia bot by tiot }
}

;-----------------------------
;
;         LES REMOTES
;
;-----------------------------

;un tit dialog
dialog ia {
  title "ia config"
  size -1 -1 197 172
  option dbu

  button "Annuler",77, 73 132 37 12, cancel
  button "OK", 5, 16 131 37 12, ok
  edit %ia.ip,1,60 19 75 10 
  edit %ia.port,2, 60 34 75 10  
  edit %ia.nick,3, 60 49 75 10
  edit %ia.Md,4, 60 64 75 10
  edit %ia.JOIN, 7, 60 79 75 10
  edit %ia.call, 8, 60 94 75 10
  text "Serveur",10,7 20 50 8, center
  text "Port",11,7 35 50 8, center
  text "Nickname",12, 7 50 50 8, center
  text "Mode par défault",13,7 65 50 8, center
  text "chans join",14,7 80 50 8, center
  text cmde d'apelle,15,7 95 50 8, center
  check "log pv",61,140 19 50 10
  check "fenetre debug",62,140 29 50 10
}

on 1:dialog:ia:init:0:{
  if (%ia.log) did -c ia 61
  if (%ia.debug) did -c ia 62
}

;Quand on appuie sur "ok" çà sauve tout
on 1:dialog:ia:sclick:5:{
  set %ia.ip $did(1).text
  set %ia.port $did(2).text
  set %ia.nick $did(3).text
  set %ia.Md $did(4).text
  set %ia.join $did(7).text
  set %ia.call $iif($left($did(8).text,1) != :,:) $+ $did(8).text
  set %ia.log $did(61).state
  set %ia.debug $did(62).state
}

on 1:load:{
  if ($version < 6.00) { echo -a 12Votre version de mIRC est trop vielle pour suporter cette add-on | return }
  if ($version < 6.03) echo -a 12Version mIRC <6.03 des commandes ne marcheront plus : /ia.saveBD !eff !wm et surment d'autre commandes
  mkdir ia
  mkdir ia\log
  if (!%ia.port) {
    set %ia.port 6667
    set %ia.nick ia
    set %ia.Md n
    set %ia.call ia
  }
  echo -a 12Ia bot chargé dans votre mIRC
}

on 1:exit:if ($hget(ia)) hsave -o ia ia\ia.hash

;***************************
;****                   ****
;***                     ***
;**      LES SOCKETS      **
;***                     ***
;****                   ****
;***************************


;Sert à faire envoyer des cmdes aux serveur à la main
alias ia.s sockwrite -n ia $1-

;Sert à se connecter au serveur
alias ia.co sockopen ia %ia.ip %ia.port

on 1:sockopen:ia:{
  sockwrite -n ia NICK %ia.nick
  sockwrite -n ia USER ia "" "" :ia by tiot
  echo -a 2Connection ouverte
}

on 1:sockread:ia:{
  if ($sockerr > 0) return 
  var %temp
  sockread %temp 
  tokenize 32 %temp  
  if ($1 == PING) sockwrite -n $sockname PONG $2

  ;On fait un montage, si c sur un salon à fait : 
  ;ia.traite $chan $nick phrase
  ;si c'est dans un pv
  ;ia.traite $nick $nick phrase

  elseif ($2 == PRIVMSG) {
    ;%temp contiendra l'host du gars, cela m'évite de le passer en paramètre.
    set %ia.temp $gettok($1,2,64)
    if ($asc($3) == 35) { if ($strip($4) == %ia.call) ia.traite $3 $right($gettok($1,1,33),-1) $strip($5-) }
    else ia.traite $right($gettok($1,1,33),-1) $right($gettok($1,1,33),-1) $strip($right($4-,-1))
  }
  ;Si le nick est déjà prit on rajoute un `
  elseif ($2 == 433) sockwrite -n ia NICK %ia.nick $+ ` 
  elseif ($2 == 001) { if (%ia.join) sockwrite -n ia JOIN %ia.join | echo -a 2Bot connecté }

}






;***************************
;****                   ****
;***                     ***
;**       LES ALIAS       **
;***                     ***
;****                   ****
;***************************

;-----------------------
;
;LES ALIAS INDIPENSABLE
;
;-----------------------

;Vas traiter l'entrée.
;$1 = Où il doit dire la phrase.
;$2 = Nick du gars
;$3- = phrase dite par le gars
;%ia.temp = qqch qui identifie la personne. Par default (avec les socket) c l'host de la personne

alias ia.traite {
  ;%c = Phrase dite par la personne
  ;%ia.axx = access de la personne (l n c o a) 

  var %c,%ia.axx
  %ia.axx = $ia.axx(%ia.temp)

  ;On inianalise
  if (!$hget(ia)) ia.init

  if ($left($3,1) == !) {
    if ($3 == !help) ia.out $1 Toutes l'aide sur ce bot se trouve sur: 2http://moipetit.free.fr/ia/readme.htm 
    elseif ($3 == !syn) { 
      if ($ia.axx2(%ia.axx,c)) ia.out $1 $gettok($ia.syn($4-),2-,32) 
      else ia.out $1 Access insufisant     
    }
    elseif ($3 == !eff) {
      if ($ia.axx2(%ia.axx,c)) ia.out $1 $gettok($ia.eff($4-),2-,32)
      else ia.out $1 Access insufisant 
    }
    elseif ($3 == !non) {
      if (!$ia.axx2(%ia.axx,l)) { ia.out $1 Access insufisant | return }
      if ($hget(ia,t2. $+ %ia.temp) != $null ) {
        hadd ia t1. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)
        ia.CmotP $4-
      }
      hadd ia t3. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)    
      hadd ia t2. $+ %ia.temp $hget(ia,t1. $+ %ia.temp)
      hadd ia t1. $+ %ia.temp $4-
      ia.out $1 $iif($asc($1) == 35,$2 $+ :) $4-
    }
    elseif ($3 == !reco) {
      hdel -w ia t?. $+ %ia.temp
      hadd ia idk. $+ %ia.temp 1    
      ia.out $1 La conversation recommence depuis le début
    }
    elseif ($3 == !stats ) ia.out $1 Je connais $hget(ia,Nbr) phrases, $hfind(ia,^m([^?])+$,0,r) mots et ma bd pèse $bytes($file(ia\ia.txt).size).suf    
    elseif ($3 == !version) ia.out $1 Ia bot version 1.5b by tiot (2http://moipetit.free.fr/ia/)     
    elseif ($istok(!addm !delm !addp !Wm !Wp !Remplace,$3,32)) {
      if ($ia.axx2(%ia.axx,c)) {
        var %c
        if ($3 == !addm) %c = $ia.addm($4-)
        elseif ($3 == !delm) %c = $ia.delm($4-)
        elseif ($3 == !addp) %c = $ia.addp($4-)
        elseif ($3 == !wp) %c = $ia.wp($4-) 
        elseif ($3 == !wm) %c = $ia.wm($4-)
        elseif ($3 == !remplace) %c = $ia.Remplace($4-)
      }
      ia.out $1 $gettok(%c,2-,32)
      else ia.out $1 Access insufisant     
    } 
    elseif ($istok(!auth !addh !delh !listh !addaxx !delaxx !listaxx,$3,32)) return $ia.BotAxx($1,$3-)    
    return
  }

  ;bordel
  %c = $ia.cher($3-,$hget(ia,t1. $+ %ia.temp))
  if ($ia.axx2(%ia.axx,l)) ia.CmotP $3-

  if ($asc($1) == 35) ia.out $1 $2 $+ : %c
  else {
    if (%ia.log) {
      write ia\log\ $+ %ia.temp $+ $date(dd.mm.yy) $+ .log $timestamp $+(<,$1,>) $3- 
      write ia\log\ $+ %ia.temp $+ $date(dd.mm.yy) $+ .log $timestamp $+(<,%ia.nick,>) %c
    }
    if (%ia.debug) {
      if (!$window(@Ia)) window -en @ia
      aline @ia $2 -> $3-
      aline @ia %ia.nick -> %c
    }
    ia.out $1 %c
  }
  ;ia,idk = 1 si il a trouver une réponse, sinon il est égal à 0
  if (!$hget(ia,idk. $+ %ia.temp)) { 
    hadd ia t3. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)    
    hadd ia t2. $+ %ia.temp $hget(ia,t1. $+ %ia.temp)
    hadd ia t1. $+ %ia.temp $3-
    hadd ia idk. $+ %ia.temp 1
  }
  else {
    hadd ia t3. $+ %ia.temp $hget(ia,t2. $+ %ia.temp)    
    hadd ia t2. $+ %ia.temp $3-
    hadd ia t1. $+ %ia.temp %c
  }
}

;$1 = #canaux/nick vers lequelle vas le msg
;$2- = phrase que le bot dit
;C'est l'alias qui indique la sortit, dans ce le cas par default c un socket. 
alias ia.out {
  sockwrite -n ia PRIVMSG $1 : $+ $2- 
}

;Vas lié chaque mot de $hget(ia,t1. $+ %ia.temp) avec la phrase $1-
alias ia.CmotP { 
  var %P = $hget(ia,t1. $+ %ia.temp),%ia.Np,%b,%a,%c
  if ($read(ia\ia.txt,w,$1-)) %ia.Np = $readn
  else {
    write ia\ia.txt $1- 
    hinc ia Nbr 
    %ia.Np = $hget(ia,Nbr) 
  }
  %P = $replace(%P,$chr(44),$chr(32),',$chr(32),?,$chr(32) $+ ?)
  %P = $remove(%P,?)
  %b = $numtok(%P,32)
  while (%b) {
    %c = %a
    %a = $gettok(%P,%b,32)
    dec %b
    if ($hgeti(ia,eff,%a)) continue
    if ($hgetg(ia,s. $+ %a,1) == 0) %a = $hgetg(ia,s. $+ %a,2)
    %c = %a $+ ? $+ %c
    ia.LPM %a %ia.Np
    ia.LPM %c %ia.Np
  }
  hdel -w ia m.*?
  hdel -w ia m.?*  
  return 1 Les phrase sont bien lié
}

;C'est l'alias qui vas chercher la bonne phrase celon $1 et $2
;$1 est la phrase primordial et $2 au cas où 
alias ia.cher {
  hdel -w ia2 *
  if (($numtok($1,32) < 4) && ($2 != $null)) tokenize 32 $1 $1 $2
  else tokenize 32 $1
  var %list,%phrase,%a1,%c1,%c2,%a2,%b,%a,%b2,%b1 = $0,%Max = 0

  ;%Phrase = c la phrase qu'il va sortir
  ;%List = liste des n° de phrases possible 
  ;%a1 = c un MOT de la phrase
  ;%c1 = c un groupe de mot de la phrase
  ;%a2 = c une des phrases liées a %a1
  ;%b,%b1,%b2 = compteurs de boucle
  ;%Max = max de fois qu'une phrase est cité

  while (%b1) {
    %c1 = %a1     
    %a1 = $gettok($1-,%b1,32)
    if ($hgetg(ia,s. $+ %a1,1) == 0) %a1 = $hgetg(ia,s. $+ %a1,2) 
    %c1 = %a1 $+ ? $+ %c1  
    %b2 = $numtok($ia.m(%a1),32)
    while (%b2) {
      %a2 = $gettok($ia.m(%a1),%b2,32)    
      hinc ia2 %a2   
      if ($hget(ia2,%a2) > %Max) %Max = $ifmatch
      dec %b2    
    }

    %b2 = $numtok($ia.m(%c1),32)
    while (%b2) {
      %a2 = $gettok($ia.m(%c1),%b2,32)     
      hinc ia2 %a2 2
      if ($hget(ia2,%a2) > %Max) %Max = $ifmatch
      dec %b2    
    }
    dec %b1
  }
  ;On recherche les phrases les plus cités.
  %b = $hfind(ia2,%max,0,n).data
  while (%b) {
    if ($len(%list) > 900) break
    %list = %list $hfind(ia2,%max,%b,n).data  
    dec %b  
  }

  ;%phrase contient maintenant la phrase final, il faut maintenant chercher les synonymes. 
  %phrase = $read(ia\ia.txt,$gettok(%list,$rand(1,$numtok(%list,32)),32)) 
  %b = $numtok(%phrase,32)
  while (%b) {
    %a = $gettok(%phrase,%b,32)
    if ($hget(ia,s. $+ %a) != $null) {
      if ($hgetg(ia,s. $+ %a,1) == 0) %a = $hgetg(ia,s. $+ %a,2) 
      %a = $hget(ia,s. $+ %a)      
      %a = $gettok(%a,$rand(2,$numtok(%a,32)),32))
      %Phrase = $puttok(%Phrase,%a,%b,32)
    }
    dec %b
  }
  if (%Phrase == $null) { hadd ia idk. $+ %ia.temp 0 | return j'aurais du dire ... ? }
  else return %Phrase
}

;Lié Le mot $1 avec la phrase n° $2
;-Si $2 est déjà dans $1 on le met en pôle position
;-Si l'item est remplit on vire le dernièrs token et on place notre $2 en -20 position
:-tout ce passe bien on le met normal (en dernièrs position comme même)
alias ia.LPM {
  if ($hgeti(ia,m. $+ $1,$2)) {
    hdelt ia m. $+ $1 $2
    hadd ia m. $+ $1 $2 $ia.m($1)
    return 1
  }
  if ($len($ia.m($1)) > 900) {
    hadd ia m. $+ $1 $instok($deltok($ia.m($1),-1,32),$2,-20,32)
    return 1
  }
  haddt ia m. $+ $1 $2
  return 1
}

;$1 = access de la personne
;$2 = commande qu'il veut éxercé (c l a o)
;return 1 si il peut éxercer la commande, sinon 0.
;Cette alias sert uniquement si vous voulez intégré l'ia à votre bot.  
alias ia.axx2 {
  if ($2 isin $1) return 1
  else return 0
}

;Cette alias retourne l'access de la personne par raport à %ia.temp (par défault contient l'host). 
;Vous pouvez ici personalisez vos access pour intégrer l'ia à votre bot. 
alias ia.axx {
  if ($hget(ia,a. $+ $1) != $null) return $ifmatch
  else return %ia.Md
}

;retourne les lien du mot $1 (c un alias de fainiantise)
alias ia.m return $hget(ia,m. $+ $1)

;Cette alias sert à inialiser le bot. 
alias ia.init {
  .hmake -s ia 100
  if (!$hget(ia2)) .hmake -s ia2 100
  if ($exists(ia\ia.hash)) hload ia ia\ia.hash
  else {
    hadd ia eff la le un une l' des les d'
    hadd ia a. $+ %ia.temp olac 
  }
  hadd ia Nbr $lines(ia\ia.txt)
  .timeria 0 300 hsave -o ia ia\ia.hash 
  if ($hget(ia,NL) != $null) ia.ConBD
}
;-------------------------------------------------------------------
;
;Les alias indispensables et qui peuvent servir dans d'autre script
;
;-------------------------------------------------------------------

;Rajoute $3 à la listes de token de l'item $2 de la hash $1
alias haddt hadd $1 $2 $addtok($hget($1,$2),$3,32)

;Enlève $3 à la listes de token de l'item $2 de la hash $1
alias hdelt hadd $1 $2 $remtok($hget($1,$2),$3,1,32)

;Retourne $true si $3 est dans la liste de token de l'item $2 de la hash $1
alias hgeti return $istok($hget($1,$2),$3,32)

;Return le $3 de la listes des token de l'item $2 de la hash $1
alias hgetg return $gettok($hget($1,$2),$3,32)

;---------------------
;
;Les alias optionnels
;
;---------------------


;-0 para : liste des synonymes
;-1 para : liste des synonymes de 1
;-2 para : mettre $1 synonyme à $2
alias ia.syn {
  tokenize 32 $1-
  if (!$1) {
    var %list,%b = $hfind(ia,s.*,0,w) 
    while (%b) {
      %list = $addtok(%list,$right($hfind(ia,s.*,%b,w),-2),32)
      dec %b
    }     
    return 1 %list
  }
  if (!$2) {
    ;La on recherche tous les synonyme du mot et les balance. Si le mot n'existe pas on fait un return
    ;Si par contre le première lettre est "0" (cad ce n'est pas un syn de référence, on balance le syn de ref)
    if (!$hget(ia,s. $+ $1)) return 0 $1 n'a aucun synonyme 
    if (!$hgetg(ia,s. $+ $1,1)) tokenize 32 $hgetg(ia,s. $+ $1,2)
    return 1 $hgetg(ia,s. $+ $1,2-)
  }
  ;Il y a un synonyme de référence, c lui qui à tout les liens.
  ;Chaque synonyme on pour nom "s.Nom" leur item contient "N syn", N est de 0 si le synonyme n'est pas de référence.
  ;Si n = 1 alors le synonyme est dé référence, et tout ce qui est après le N se sont les synonyme qui se réfère à lui
  ;Donc une prise de tête en perspective pour gérer tout çà 
  :syn    
  var %a1 = $hget(ia,s. $+ $1),%a2 = $hget(ia,s. $+ $2),%c1 = $gettok(%a1,2-,32),%c2 = $gettok(%a2,2-,32),%r1 = $gettok(%a1,1,32),%r2 = $gettok(%a2,1,32)
  ;A chaque fois le 1 c pour $1 et le 2 pour $2 (dans les var)
  :%a = N syn (est nul si $1 n'a aucun synonyme)
  ;%c = liste des syonyme 
  ;%r = 1 si synonyme est de référence sinon 0

  ;si $1 n'existe pas
  if (!%a1) {
    ;si $1 et $2 n'ont aucun synonyme 
    if (!%a2) {
      hadd ia s. $+ $1 1 $2
      hadd ia s. $+ $2 0 $1
      ia.ccl $2 $1
      ia.RP $2 $1
    }
    ;si $1 n'existe pas et $2 lui éxiste. 
    else {
      ;si $2 est une référence
      if (%r2) {
        haddt ia s. $+ $2 $1
        hadd ia s. $+ $1 0 $2
        ia.ccl $1 $2     
        ia.RP $1 $2    
      }
      ;si $2 n'est pas une référence (mais $1 n'éxiste pas) on dit $1 synonyme de la référence de $2
      else {
        haddt ia s. $+ %c2 $1
        hadd ia s. $+ $1 0 %c2
        ia.ccl $1 %c2 
        ia.RP $1 %c2
      }
    }
  }
  ;Par contre si $1 n'est pas null 
  else {
    ;Si $1 est une référence 
    if (%r1) {
      ;Si $2 n'éxiste pas
      if (!%a2) {
        haddt ia s. $+ $1 $2
        hadd ia s. $+ $2 0 $1
        ia.ccl $2 $1
        ia.RP $2 $1
      }
      ;Si $2 éxite 
      else {
        ;Si $2 et $1 sont des référence alors $1 devient la référence de $2 est donc des référencés de $2
        if (%r2) {
          var %a,%b = $numtok(%a2,32)
          while (%b) {
            %a = $gettok(%a2,%b,32)
            haddt ia s. $+ $1 %a 
            hadd ia s. $+ %a 0 $1           
            dec %b
          }
          haddt ia s. $+ $1 $2
          hadd ia s. $+ $2 0 $1
          ia.ccl $2 $1
          ia.RP $2 $1
        }
        ;$1 est une référence et $2 a pour référence %a2. Donc $1 synonyme de %c2
        else {
          if ($1 == %c2) return 0 $1 déjà synonyme avec $2
          tokenize 32 $1 %c2
          goto syn 
        }
      }
    }
    ;Si $1 éxiste mais n'est pas une référence, donc il est référencé à %c1
    else {
      ;Cela revient à $2 synonyme de %c1
      if ($2 == %c1) return 0 $1 déjà synonyme avec $2 
      tokenize 32 %c1 $2
      goto syn  
    }      
  }
  return 1 $1 Synonyme bien enregistré   
}


;Copie les liens de $1 dans $2 puis efface $1
alias ia.ccl {
  var %a = $ia.m($1),%b = $numtok(%a,32)
  while (%b) {
    ia.LPM $2 $gettok(%a,%b,32)
    dec %b
  }
  hdel ia m. $+ $1
}

;Remplace dans toutes les phrase $1 par $2 et dans tous les groupes de mots.
alias ia.RP {
  var %b = 1,%c,%d,%b2
  while ($read(ia\ia.txt,w,* $+ $1 $+ *,%b)) {
    %d = $ifmatch    
    %c = $readn
    %b = %c
    %b2 = $findtok(%d,$1,0,32)
    while (%b2) {
      write -l $+ %c ia\ia.txt $reptok(%d,$1,$2,%b2,32)
      dec %b2
    }
    inc %b
  }
  %b = $hfind(ia,m. $+ $1 $+ ?*,0,w)
  while (%b) {
    %c = $hfind(ia,m. $+ $1 $+ ?*,%b,w)
    dec %b
    if ($hget(ia,m. $+ $2 $+ ? $+ $gettok(%c,2,164)) != $null) { ia.ccl %c $2 $+ ? $+ $gettok(%c,2,164) | continue }
    hadd ia m. $+ $2 $+ ? $+ $gettok(%c,2,164) $hget(ia,%c)
    hdel ia %c
  }
  %b = $hfind(ia,m.*? $+ $1,0,w)
  while (%b) {
    %c = $hfind(ia,m.*? $+ $1,%b,w)
    dec %b
    if ($hget(ia,m. $+ $gettok(%c,1,164) $+ ? $+ $1) != $null) { ia.ccl %c $gettok(%c,1,164) $+ ? $+ $1 | continue }
    hadd ia m. $+ $gettok(%c,1,164) $+ ? $+ $1 $hget(ia,%c)
    hdel ia %c
  }
}

;Efface la phrase $1- ou le n° de phrase $1
alias ia.eff {
  tokenize 32 $1-
  if ($1 == null) return 0 Pas assez de paramètre
  if ($1- !isnum) {
    if ($read(ia\ia.txt,w,$1-) == $null) return 0 La phrase n'existe pas
    tokenize 32 $readn
  }
  write -l $+ $1 ia\ia.txt --- ligne éffacé --- $ticks
  ;Le (^|\s) $+ $1 $+ (\s|$) et pour "$1 mot de l'item"
  %b = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),0,r).data
  while (%b) {
    %c = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),%b,r).data
    ;Le if sert à savoir si on loock bien un mot
    if ($left(%c,2) == m.) hdelt ia %c $1 
    dec %b
  }
  return 1 Phrase corectement éffacé. 
}

;---------------------------------------------
;
; ALIAS DE MODIFICATION DE LA BD AVANCÉE 
;
;----------------------------------------------

;Lie les mots $2- à la phrase n° $1 
;$1 = n° de phrase valide
;$2- = mot 
alias ia.addm {
  tokenize 32 $1-  
  if ($2 == $null) return 0 Pas assez de paramètre 
  if ($1 !isnum) return 0 $1 n'est pas un n° 
  if ($1 > $hget(ia,Nbr)) return 0 $1 ne corespond à aucune phrase 
  var %a,%b = $numtok($2-,32)
  while (%b) {
    %a =  $gettok($2-,%b,32)
    if (? isin %a) {
      if ($hgetg(ia,s. $+ $gettok(%a,1,164),1) == 0) %a = $hgetg(ia,s. $+ $gettok(%a,1,164),2) $+ ? $+ $gettok(%a,2,164) 
      if ($hgetg(ia,s. $+ $gettok(%a,2,164),1) == 0) %a = $gettok(%a,1,164) $+ ? $+ $hgetg(ia,s. $+ $gettok(%a,2,164),2)  
    }
    if ($hgetg(ia,s. $+ %a,1) == 0) %a = $hgetg(ia,s. $+ %a,2)   
    ia.LPM %a $1
    dec %b
  }
  return 1 Les mots $2- on été lié à la phrase n° $1 
}

alias ia.delm {
  tokenize 32 $1-
  if ($2 == $null) return 0 Pas assez de paramètre 
  if ($1 !isnum) return 0 $1 n'est pas un n° 
  if ($1 > $read(ia\ia.txt,0)) return 0 $1 ne corespond à aucune phrase 
  var %b = $numtok($2-,32)
  while (%b) {
    hdelt ia m. $+ $gettok($2-,%b,32) $1
    dec %b
  }
  return 1 Les mots $2- ne sont plus liés avec la phrase n° $1 
}

alias ia.addp {
  tokenize 32 $1-
  if ($1 isnum) {
    if ($2 == $null) return 0 Pas assez de paramètre
    if ($1 > $hget(ia,Nbr)) return 0 Erreur, la phrase n° $+ $1 n'éxiste pas
    write -l $+ $1 ia\ia.txt $2-
  }
  else {
    if ($read(ia\ia.txt,w,$1-)) return 0 La phrase est déjà enregistré n° $readn
    write ia\ia.txt $1-
    hinc ia Nbr
  } 
  return 1 Phrase bien ajouté et à pour n° $hget(ia,Nbr) 
}
alias ia.Wp {
  tokenize 32 $1-
  if (($1 isnum) && ($2 == $null)) return 1 La phrase n° $1 Correspond à $read(ia\ia.txt,$1) 
  if ($read(ia\ia.txt,w,$1-)) return 1 La phrase a pour numero: $readn
  else return 0 La phrase n'est pas dans la BD
}

alias ia.Wm {
  tokenize 32 $1-
  if ((!$1) || ($1 !isnum)) return 0 $1 n'éxiste pas ou n'est pas un nombre
  var %b1,%list,%c
  %b1 = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),0,r).data  
  %list = $null    
  while (%b1) {
    %c = $hfind(ia,(^|\s) $+ $1 $+ (\s|$),%b1,r).data
    ;Le if sert à savoir si on loock bien un mot      
    if ($left(%c,2) == m.)  %list = %list $right(%c,-2)
    dec %b1
  }
  return 1  2 $+ %list lié à4 $1 
}

alias ia.remplace {
  tokenize 32 $1-
  if ($2 == $null) return 0 Pas assez de paramètre
  if ($1 === $2) return 0  $1 et $2 c la même chose chez moi 
  ia.ccl $1 $2
  ia.RP $1 $2
  return 1 Opération réussi: $1 a été remplacé par $2 
}
;-------------------------------------------------------
;
;Alias s'occupant de SAUV - LOAD - CONVERTIR la BD
;
;-------------------------------------------------------

alias ia.saveBD {
  if (!$1) { echo -a precisez le nom de votre sauvgarde: /ia.saveBD pokemon.txt | return }
  if (!$exist(ia\save\)) mkdir ia\save  
  var %a,%b,%b1,%i,%c,%c1
  %i = $ticks
  %c = $gettok($ia.syn,2-,32)
  %b = $numtok(%c,32)
  while (%b) {
    %a = $gettok(%c,%b,32)
    write ia\save\ $+ $1 s: %a $hgetg(ia,s. $+ %a,2-)
    dec %b
  }
  %b = 1
  var %list
  while ($read(ia\ia.txt,%b)) {
    write ia\save\ $+ $1 m %b $ifmatch
    %b1 = $hfind(ia,(^|\s) $+ %b $+ (\s|$),0,r).data  
    %list = $null    
    while (%b1) {
      %c = $hfind(ia,(^|\s) $+ %b $+ (\s|$),%b1,r).data
      ;Le if sert à savoir si on loock bien un mot
      if ($len(%list) > 900) {
        write ia\save\ $+ $1 mm %b %list
        %list = $null
      }      
      if ($left(%c,2) == m.)  %list = %list $right(%c,-2)
      dec %b1
    }
    write ia\save\ $+ $1 mm %b %list
    inc %b
  }
  if ($isid) return 1 La BD a bien été sauvé en $calc($ticks - %i) ms
  else echo 2 -a La BD a bien été sauvé en $calc($ticks - %i) ms
}

alias ia.LoadBD {
  var %b,%b1,%c,%N,%der,%ou = $shortfn($sfile($mircdir,Choisit la BD à loader,LOAD))
  %b = 1
  if (!$hget(ia)) ia.init
  if ($1 == -r) {
    hdel -w ia m.*
    hdel -w ia s.*
    remove ia\ia.txt
  }  
  while ($read(%ou,%b)) { 
    tokenize 32 $ifmatch    
    if ($1 == s:) ia.syn $2 $3
    elseif ($1 == m) {
      if ($read(ia\ia.txt,w,$3-)) %N = $readn
      else {
        write ia\ia.txt $3- 
        hinc ia Nbr 
        %N = $hget(ia,Nbr) 
      }
      %der = $2
    }
    elseif ($1 == mm) {
      if (%der != $2) return 0 problème lors du chargement de la BD 
      ia.addm %N $3-
    }
    else return 0 Ce fichier n'est pas un BD d'une ia 
    inc %b
  }
  if ($isid) return 1 chargement réussi
  else echo 2 -a Chargement réussi
}
alias ia.ConBD {
  hadd ia Nbr $hget(ia,Nl)
  hdel ia Nl
  var %b,%c
  %b = $hfind(ia,1.*,0,w)
  while (%b) {
    %c = $hfind(ia,1.*,%b,w)
    hadd ia m. $+ $right(%c,-2) $hget(ia,%c)
    hdel ia %c
    dec %b
  }
  hdel -w ia 0.*
  hdel -w ia 1.*
  hdel -w ia 2.*
  hdel -w ia 3.*
  hdel -w ia t.*
  %b = $hfind(ia,syn.*,0,w) 
  while (%b) {
    %c = $hfind(ia,syn.*,%b,w)
    hadd ia s. $+ $right(%c,-4) $hget(ia,%c)
    hdel ia %c
    dec %b
  }
  hdel -w ia syn.*
  hadd ia eff la le un une l' des les d'
  return 1 Convertion de la base réussi
}

;--------------------------------------------------------
;
;L'alias s'occupant de la gestion des access
;
;--------------------------------------------------------

alias ia.BotAxx {
  var %axx = $ia.axx(%ia.temp)
  var %nick = $1
  tokenize 32 $2 
  if ($1 == !addh) { 
    if ((a !isin %axx) || (!$3)) return 
    if ((o isin $hget(ia,a. $+ $2)) && (o !isin %axx)) return
    hadd ia a. $+ $2 $3
    ia.out %nick $2 avec les modes $3 a bien été rajouté (ou modifié)
  }
  elseif ($1 == !delh) {
    if ((a !isin %axx) || (!$2)) return
    if (!$hget(ia,a. $+ $2)) { ia.out %nick $2 n'existe pas | return }
    if ((o isin $hget(ia,a. $+ $2)) && (o !isin %axx)) return
    hdel ia a. $+ $2 
    ia.out %nick l'host de $2 a été bien éffacé
  }
  elseif ($1 == !listh) {
    var %list,%c,%b = $hfind(ia,a.*,0,w)   
    while (%b) {
      %c = $hfind(ia,a.*,%b,w)
      if ($len(%list) > 400) { ia.out %nick Liste des axxh: %list | %list = $null }         
      %list = %list ( $+ $right(%c,-2) $+ : $+ $hget(ia,%c) $+ )  
      dec %b
    }
    ia.out %nick Liste des axxh: %list
  }
  elseif ($1 == !addaxx) {
    if ((a !isin %axx) || (!$4)) return 
    if ((o isin $gettok($hget(ia,axx. $+ $2),2,32)) && (o !isin %axx)) return
    hadd ia axx. $+ $2 $3 $4
    ia.out %nick Un axx à été rajouté (username $2 et mode $4 $+ )
  }
  elseif ($1 == !delaxx) {
    if ((a !isin %axx) && (!$2)) return 
    if (o isin $gettok($hget(ia,axx. $+ $2),2,32) && (o !isin %axx)) return 
    hdel ia axx. $+ $2      
  }
  elseif ($1 == !listaxx) {
    var %list,%c,%b = $hfind(ia,axx.*,0,w)
    while (%b) {
      %c = $hfind(ia,axx.*,%b,w)
      if ($len(%list) > 400) { ia.out %nick Liste des axx: %list | %list = $null }         
      %list = %list ( $+ $right(%c,-4) $+ : $+ $gettok($hget(ia,%c),2,32) $+ )
      dec %b
    }
    ia.out %nick Liste des axx: %list
  }
  elseif ($1 == !auth) {
    var %c = $hget(ia,axx. $+ $2)
    if ((!$3) || (!%c)) return
    if ($3 != $gettok(%c,1,32)) return
    hadd ia a. $+ %ia.temp $gettok(%c,2,32)
  }
  return
}

 Conclusion

Je pense que c'est la dernière version de mon bot ...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip MIRCD ( UN SERVEUR IRC EN SCRIPTING )
A LE JEUX DU MORPION

 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

Commentaires et avis

Commentaire de T0x1K le 14/09/2003 01:03:04

essayé de ne pas écrire comme un porc. &lt;&lt; Ca serait bien que tu n'écrive pas comme un porc toi déjà lol. aussinon c'est bien!
bye

Commentaire de tiot le 18/10/2003 11:30:19

ce n'est pas bien de ce moquer, sinon je n'ai pas bcp de commentaire ...

Commentaire de Kerrigan le 30/10/2003 21:12:49

c'est magnifique !! vraiment beau boulot !!!!

Commentaire de samueldr le 31/10/2003 02:40:54

Ca a l'air bien...
mais commentaire sur les scripts de bot:
Pourquoi il y a souvent des dialogs???
cé inutile!
mon bot est hébergé sur un shell, je ne peux pas utiliser les idlogs...

donc, SvP, crée une version sans dialog mais config ETC en DCC merci!

Commentaire de tiot le 06/11/2003 15:24:00

Pour repondre à samueldr je dirais que je n'ai pas comprit ton problème.
En effet, je ne connais aucun shell qui accepte les scripts mIRC ... c pas du C ni du TCL ni aucune chose divers et varié suporter par un s hell. C du mIRC scripting il doit donc être utiliser sous mIRC.

Pour les dialogs c pas un problème, si tu es chaud tu as juste à mettre des valeurs dans des variables ... (normalement c détaillé dans l'help) ... toute les variables qui sont utilisées pour le bot sont de ce type %ia.* (avec * qui est n'importe quoi)

Commentaire de meenux le 19/11/2003 18:55:46

tiot cochonne va, c'est bien tu l'a fait ;)

Commentaire de Remi3d le 14/12/2003 13:37:01

Euh je comprend pas ..
j'ai demaré le bot sur mirc 6.03.je l'ai mis sur le salon
je me suis identifié,et ensuite faut commencer a parler?c ca?
il arrete pas de dire j'aurais du dire..?quand est ce quil commence a repondre ? A chaque fois je remet la meme conversation pour qu'il me reponde mais il veut pas . dans l'aide tu mets au bout d'un moment cad ?
faut le repeter jusqu'a ce qu'il comprenne?
Merci de me repondre au plus vite...

Commentaire de Remi3d le 14/12/2003 13:37:56

ah oui autre chose il faut en mettre une partie dans les alias et une dans les remote ou tt dans les alias??

Commentaire de tiot le 14/12/2003 16:12:57

Logiquement dès que tu utilises un mot qu'il a déjà entendu il va rebondir dessus ... si il ne te repond jamais c que tu as mal configurer les "modes par default" (nlc) je crois.

Il faut tout mettre dans les remotes

Commentaire de GjMan9 le 12/03/2004 17:44:22

Salut tiot !
Franchement ton script est terrible !
Le pb c'est la base de données, c chiant à faire...alors g mis la seule bd proposée ...
mais bon c un peu vulgaire et branché cul à mon gout ....
Je suis donc en train de créer une base de données plus "conventionnelle" et je te l'enverrai des que le bot sera capable de tenir une conversation logique.
Si tu as d'autres bd, merci de m'avertir, je serai vraiment content :)))))))))
@+
...et encore bravo !

Gj_M@n9

PS: il me semble qu'il y a quelques problèmes avec l'authentification host. J'ai mis i.a en mode n et j'e n'arrive pas à donner le mode lc  à plus d'une personne est ce normal ?

Commentaire de GjMan9 le 14/03/2004 00:39:53

...en fait c'est bon fallait que je me donne le mode olac des le premier chargement du script des la premiere connection et avec
le mode n par default pour tout le monde
Par contre la listh n'est pas modifiable par la suite d'ou le premier commentaire que j'ai posté.
voila

:o)

PS: j'ai fait deux bases de données ( "Henry" un vieux pervers et "Brandon" un bogoss LOL)

Commentaire de GjMan9 le 14/03/2004 00:42:02

...en fait c'est bon fallait que je me donne le mode olac des le premier chargement du script des la premiere connection et avec
le mode n par default pour tout le monde
Par contre la listh n'est pas modifiable par la suite d'ou le premier commentaire que j'ai posté.
voila

:o)

PS: j'ai fait deux bases de données ( "Henry" un vieux pervers et "Brandon" un bogoss LOL)

Commentaire de Showtime_2 le 03/05/2004 20:34:29

Franchement genial

Mais pour ta base de données c pareil que GjMan9

enfin voila koi trop cool

Commentaire de lefl0u le 10/06/2004 18:09:39

On le telecharge Ou ??

Commentaire de samsungman le 24/06/2004 17:16:43

Je comprend pas quand je lui parle y dit "Jaurai dut dire..." et quand je lui repond Y dit encrore "Jaurai dut dire ..." Jy comprend rien!

Commentaire de samsungman le 24/06/2004 17:32:52

et il repond souvent a coté de la plaque

Commentaire de tiot le 04/07/2004 23:13:57

Il est loin d'être parfait.
Suffit de dompter la bête !

Pour la base de donnée j'en attend tjrs :)

Commentaire de GjMan9 le 05/07/2004 20:32:53

bon bah ma Jessica ia bot commence a vraiment pas mal se debrouiller.
Vous pouvez lui parler sur #ia sur undernet.
Si elle vous plait je peux vous envoyer la BD.
J'ai d'autre BD (Brandon et Lolita).
De toute façon je v mettre les BD dispo sur mon site bientot.
http://gary.dub.free.fr/gjman9.htm
:)

PS: mettez vos bots ia sur #ia sur undernet avec les miens ca fera un chan bi1 rigolo.

Commentaire de GjMan9 le 13/07/2004 11:18:25

yopla !

Ayé ma base de données "Jessica" est dispo sur mon site http://gary.dub.free.fr/gjman9.htm
J'y ai mis aussi les logs de quelques "victimes"  piégées sur Undernet.
J'y ai mis aussi les mails qu'elle a recu looooooool (et oui Jessica donne son mail si on lui demande ! ).
Suite à quelques discussions avec tiot j'ai modifié légèrement le script à savoir:
- un timer aléatoire (entre 3 et 7 secondes) pour eviter que le bot ne reponde instantanément (ca faisait louche)
- une fenetre plus grande ia > config > join pour pouvoir joindre un nombre plus important de chan
- j'ai remplacé le "J'aurais du dire ... " par " t'as du mal avec ton clavier" car m1tenant que Jessica sait bien parlé, si elle n'a pas de reponse c'est que généralement le type ecrit en chinois :/
- j'ai remplacé le nom du bot "ia by tiot" par "je suis chaude" pour eviter que l'on sache que c 1 bot. (pareil pour le msg de quit).
- dès qu'on lui dit "do u ..." , "how r u " etc ... elle repond "je ne parle pas anglais" ca evite les conversations en franglais lol

A part ca je fais evoluer la BD assez rapidement, mais bon vu ke la sauvegarde marche pas terrible quand la BD devient importante, c'est tiot ki me la reconstitue ... donc je peux pas mettre la BD à jour sur le site quand je veux :/  ... mais bon ca viendra :)

Si vous aussi vous avez des BD correctes  ou avez des suggestions pour l'amelioration du script ca m'interesse !

@ bientot

(et encore felicitation tiot pour ce script genial, kler, commenté, sans bug ... bref parfait comme tu le dis toi meme ahahah)

Commentaire de samueldr le 23/07/2004 00:31:16

désolé pr le retard de réponse... je n'étais pas informé sur mon mail des réponses...

avant, j'avais un shell qui roulait windows et il allait bien :P c'est pour ca que javais un mirc sur un shell :P

j'Aurais du répondre avant

Commentaire de remington le 22/08/2004 04:40:44

j'ai remarké k'en pv les gens finissait par griller ke c t un bot parsque les reponses sont trop rapides
dc

"est il possible d'augmenter les temps de reponse du bot si oui comment ?"

et pour les gens ki grillent ke c un bot en general apres il ecrivent n'importe koi genre "lkjlkfsdjl" dc deuxieme question

"est il possible de mettre en ignore les gens ki flood et si oui comment ?"

merci de votre reponse

Commentaire de GjMan9 le 01/09/2004 05:48:30

réponse pour remington:
oui on peut le faire, j'ai demandé à tiot :)
Faut remplacer l'alias ia.out comme suit:

alias ia.out {
  .timer 1 $rand(5,7) sockwrite -n ia PRIVMSG $1 : $+ $2-
}

Comme ça le bot répond après un temps mort aléatoire compris entre 5 et 7 secondes.

Tu peux biensur changer le 5 et le 7 ...

PS: amélioration indispensable du bot !!!

Commentaire de J4Gu4R le 01/09/2004 16:37:14

heu salut tout l'monde
j'suis un pti peu dépasser moi
j'pense faire tout ski est dit dans le tuto mais rien ne se passe mon mirc est pourtant bien un 6.03


il se trouve que même en lisant le tuto du bot je n'arrive pas à le faire parler

problème 1:
une fois que j'ai configurer le bot ( serveur, port ect...), si j'ai bien compris faut être le premier à lui parler et taper "!addaxx (login) (pass) olac"
question 1:
est-ce que le login c'est obligatoirement mon nick ou ça peut être un mot aléatoire?

problème2:
je lui parle comme dans le tuto

moi: salut
ia: J'aurais du dire... ?
moi: comment vas tu ?
ia: J'aurais du dire... ?
moi: bien et toi ?
ia: J'aurais du dire... ?
moi: moi ça vas pas mal

et là j'voudrais m'arrêter, théoriquement ça fait court comme conversation mais j'vais pas faire un coup d'essai de 15 pages, et normalement il devrait déja se débrouiller à me répondre quand je lui dit "salut"
question2:
à partir de là je doit le fermer? lui dire quelque chose pour qu'il sauvegarde? je ne sais pas çen tous les cas ça ne fonctionne pas

problème3:
je recommence et je sauvegarde la BD comme dans le tuto "/ia.saveBD save1.txt
et là ya rien du tout dedans ( ya bien un dossier save qui se crée mais c tout)

problème 4:
dans mon répertoire Mirc dossier "ia" dossier save" j'ai non seulement pas de fichier txt qui s'est créer comme précédemment dit mais je trouve dans mon dossier ia un fichier "ia.txt avec quelque chose d'écrit de mon tout premier chargement mais c'est la seule chose qui a été sauvegarder jusqu'ici

bon... les questions à la rigueur c pas grave je sais meme pas si elles sont clair. mais l'aide que je demande en venant ici, c'est si ya quelqu'un qu'à un pti 1/4 d'heure à perdre pour me dire pas à pas ce qu'il aurait fait pour qu'au final quand je lui dit "salut" il me réponde comment vas tu ?
pas besoin de se compliquer la vie une explication sous forme de :
"je vais ici je fait ça"
"je vais ici je fait ça"...
ça suffira

c'est sympa à vous merci encore d'avance...


-J4Gu4R-

Commentaire de remington le 01/09/2004 21:54:32

merci pour la reponse ;) op

mais pour mettre les gens en ignore on fé comment

car le robot j'aimerai k'il aprenne de tou les gens ki lui parle cependant la plupart finissent par capter ke c un robot et dc ils lui repondent n'importe koi et les phrases prononcée pas le bot deviennent incoherente ...

merci a tous !!!

Commentaire de Vincentsaxo le 02/09/2004 23:26:51

lol c'est génial, je me suis amusé a le mettre dans un chan de quizz, c'est un vrai délire, déjà de l'amener sans rien dire a personne ca me fait tripper mais qu'il capte les questions et qu'il reponde c'est vraiment tordant.
Franchement, ca faisait longtemps que j'avais pas rigolé autant, j'en ai encore les crampes au ventre, lolll
Félicitations, c'est tout ce que j'ai à dire :>

Commentaire de J4Gu4R le 03/09/2004 06:23:31

slt ya vraiment personne pour me dire ce qu'il fait comme truc pour qu'au final le bot réponde à "bonjour" ?

Commentaire de GjMan9 le 17/11/2004 20:04:11

Voila mon IA bot s'appelle Jessica ^^
http://gary.dub.free.fr/IRC/jessica/jessica.htm
IA Script 1.5b modifié "Jessica" chargé dans CService 2.3 "Melinda" sous mIRC 6.16.
Nombreuses améliorations ...

Enjoy ...

Commentaire de starz11 le 21/12/2004 02:34:35

slt, ca ma l'air pas trop mal comme source, mais jveux jsute savoir si c'est posible de modifié le sens d'énonciation genre kan kelle parle a l'IA il peu mettre son pseudo nimporte ou ds sa phrase et pas uniquement au debut, si oui, comment faire ?
je connait pas grand choze a mIRC alors un petit coup de pouce (:oP merci
starz5@hotmail.com

Commentaire de Neotenny le 02/03/2005 05:30:39

salut

j'ai quelques problemes en ce qui concerne la configuration.
j'ai téléchargé la version Mirc 6.03 et je me suis connecté sur un serveur ensuite j'ai créer mon salon.

mais quand je tape Menubar>ia>config sa ne marche pas du tout il n'y a rien que doisje faire??

merci de me répondre

Commentaire de overthetop0000 le 08/03/2005 21:20:01

Comme ca tu peux faire Starz11

On *:TEXT:*:#:{
  if (%ia.nick isin $1-) {
    if ($nick == %ia.nick) {
      echo @ia 4*** 5 $+ %ia.nick  est le pseudo 4***
      halt
    }
    elseif (%ia.nick isin $1) {
      var %ianick1 %ia.nick $+ $chr(62)
      var %ianick2 %ia.nick $+ $chr(58)
      if (%ianick1 isin $1) {
        echo @ia 4*** 5 $+ %ia.nick $+ $chr(62)  est le premier token avec > 4***
        set %phrase $strip($1-,burc)
        set %phrase $replace(%phrase,%ia.nick $+ $chr(62), )
        echo @ia 4*** 5 $+ %ia.nick  n'est plus dans la phrase 4***
        echo @ia 4*** 5 $+ %ia.nick  répond 4***
        /ia.traite $chan $nick %phrase
      }
      elseif (%ianick2 isin $1) {
        echo @ia 4*** 5 $+ %ia.nick $+ $chr(58)  est le premier token avec : 4***
        set %phrase $strip($1-,burc)
        set %phrase $replace(%phrase,%ia.nick $+ $chr(58), )
        echo @ia 4*** 5 $+ %ia.nick  n'est plus dans la phrase 4***
        echo @ia 4*** 5 $+ %ia.nick  répond 4***
        /ia.traite $chan $nick %phrase
      }
      else {
        echo @ia 4*** 5 $+ %ia.nick  est le premier token 4***
        halt
      }
    }
    else {
      set %phrase $strip($1-,burc)
      echo @ia 4*** 5 $+ %ia.nick  n'est pas le premier token 4***
      set %phrase $replace(%phrase,%ia.nick, )
      echo @ia 4*** 5 $+ %ia.nick  n'est plus dans la phrase 4***
      echo @ia 4*** 5 $+ %ia.nick  répond 4***
      /ia.traite $chan $nick %phrase
    }
  }

Commentaire de freenaute le 20/03/2005 04:44:19

salut...
je découvre, j'ai installé, et c'est simplement magik...! merci.!

Commentaire de SamouZak le 19/04/2005 20:15:55

c'est bien tout ça , mais si on a une ip changeante comme moi (je suppose que c'est de la que vient le probleme)

Et bien une fois deconnecté , on a plus d'acces .
Solution ?

Commentaire de tiot le 10/05/2005 15:02:21

Il faut rajouter ton host à chaque fois :

!addh (host) (flag)

Et bien sûr effacer les anciens hosts...

Commentaire de GjMan9 le 26/05/2005 19:16:20

yop yop c'est encore moi ^^

Ce bot m'a rendu fou ... de bots parlants ...

On est assez nombreux à être fascinés par ces tas de feraille :D
j'ai donc créé un salon IRC dédié à la programmation de bots parlants: #IA sur irc.voila.fr.

Ce salon sert aussi à construire des bases de données (c'est à dire apprendre à parler aux bots).

Le site du salon: http://ia.3d.net
Pour ceux que cela interesse ...

PS: nous n'acceptons que les personnes sachant écrire correctement en français, le "SMS style" n'est pas toléré ...

Commentaire de samuel974 le 18/06/2005 20:29:17

salut probleme je tappe Menubar>ia>config sa affiche rien bizzre

Commentaire de oscard74 le 29/06/2005 12:15:58

SVP je suis débutant et je comprend pas tout mais apres l'avoir configuré je voudrais le connecter mais il me marque :

* /sockopen: invalid parameters (line 94, iascript.txt)

Alors si on pouvait m'aider en ne parlant sans trop de mot assez dur a comprendre ca serait gentil sinon bravo :)

Commentaire de Wendellw le 26/08/2005 16:13:46

Idem, exactement le meme message

Commentaire de GjMan9 le 12/11/2005 15:45:50

Plop.

Je suis toujours aussi fan de ce petit joujou.
D'autres codes "IA bot" sont présentés sur
http://ia-bot.lxhost.com

A bientôt

Commentaire de tiot le 10/02/2006 18:11:20

Bon bah pour le problème du /sockopen je ne sais pas...
Si tu as tout bien configurer c'est peut être juste du à des problèmes de version de mIRC... ça fait longtemps que je n'ai pas mis le nez la dedans.

Donc si il y a qqn de courageux qui veut l'adapter aux nouvelles versions il peut m'envoyer un mail... sinon je vais le faire un jour...

Commentaire de Ultime_Gohan le 08/03/2006 19:56:55

heu..salut ou est-ce qu'on va apres l'avoir telecharger ?Parce que j'ai eté voir le dossier qui contient "@Source telecharge depuis ce lien et apres quand je vais dans le lien je ne sais pas ou aller alors une petite aide sil'vouplais merci.

Commentaire de tiot le 22/03/2006 13:10:44

http://moipetit.free.fr/ia/iabot.zip

Commentaire de ZoRNeuS le 26/12/2006 11:40:27

BONJOUR A TOUS comme je fait pour co l'ia-bot par ce que sur voila il fo une celf merci

Commentaire de madoudou le 07/01/2007 17:55:16

il existe une version v3 de se bot ( http://jessica-melinda.f2g.net/download.html ) mais le lien et mort et je le trouve nul part ailleurs. quelqu'un peut m'aider ?

Commentaire de GjMan9 le 07/01/2007 21:34:13

Ultime_Gohan: tu charges le script c'est tout !

ZoRNeuS: t'es encore sur Voila ? Au secours sauve toi de là lol

Mamadou: Nan c'est pas une version v3, c'est mes bots dont l'un utilise ia-bot de tiot... et en effet ce lien est mort.

---------------------
GjMan9
http://ia.bot.free.fr
---------------------

Commentaire de lebaronrouge le 04/03/2007 14:51:15

Salut interessé depuis peu à ce types de bot je vois que plus aucuns lien n'est valide pour telecharger et tester des BD d'utilisateurs de ce fabuleux bot,je plafonne aux eternel : "j'aurais due dire?" et si déja plusieurs BD de personnalitées diférentes sont dispo j'aimerais pouvoir en trouver afin de les integrer à ce boot pour la tester pleinement.

Merci ;o)

Commentaire de freenaute le 14/04/2007 21:46:18

reponse a madoudou :

melinda and jessica c'est ici : http://jessica.melinda.free.fr/
la dernière version en cours...

Commentaire de FtPiZzZz le 15/07/2007 19:31:25

Question à GjMan9

Je suis hélas aussi sur Voilà/Orange...

Je possede le bot Melinda qui fonctionne encore labas mais Jess nous manque lol

La new version pourrat elle s'y connecter ? Ou...

Commentaire de GjMan9 le 16/07/2007 23:45:45

Je ne pense pas prévoir cette possibilité... change de réseau tout simplement, ça te fera le plus grand bien :)
(PS: c'est pas ici qu'il faut poster si tu veux parler de Jessica...)

Commentaire de FtPiZzZz le 18/07/2007 18:36:53

Ah changer de reseau on y avait pensé à l'epoque, mais il s'agit d'un salon de quizz et il est difficile de garder nos users :s

Merci d'avoir repondu (ici)

(Désolé d'avoir pollué le topic :s)

 Ajouter un commentaire




Nos sponsors


Sondage...

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 : 1,576 sec (3)

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