Readme de ia bot





Index:

I) Première utilisation
II) Conseil pour l'ia
III) Les commandes
IV) Gérer ces access
V) Principe de l'ia
VI) Pour les miRC scripteurs
VII) Integrer IA bot dans votre bot/script



I) Première utilisation

Il y a plusieurs façons d'installer l'add-on:
-Mettez iascript.txt dans le même repertoire que mIRC.exe, puis tapez:
/load -rs iascript.txt
- OU tapez juste:
//load -rs $$sfile(c:\,iascript,ok)
et chercher dans l'arbre iascript.txt

Puis il faut configurer l'ia :
Menubar>ia>config
Normalement une super fenêtre apparait. Remplissez toutes les cases.
-Serveur: Serveur auquel vous voulez vous connecter (exemple: irc.jeux.fr (la pub c'est mal))
-Port: le port au quel vas se connecter votre bot (exemple: 6667)
-Nickname: Nom qu'aura votre bot (exemple: iabot)
-Modes par default: ce sont les modes qu'on un user sans aucun access (cf gérer ces access) si vous savez pas quoi mettre, mettez: 'n'
-chans join: ce sont les chans join automatiquement par le bot quand il se connecte. Si vous voulez qu'il join plusieurs salon il faut séparer les noms des salons par une virgule (exemple: #central,#mIRC,#I.A.)
-commande par default: est le mot qui faudra faire préceder toutes les phrases dans un salon, par défault c'est "ia" et sera prit comme exemple après. Mais pour faire mieux vous pouvez mettre le nom de votre bot

Enfin pour connecter votre merveilleux bot il suffira de faire:
menubar>ia>connecter
OU
/ia.co

IMPORTANT: Quand il se connectera la première fois vous devez être la première personne qui lui parlez pour avoir un access total. Puis vous lui direz en PV !addaxx (login) (pass) olac (cf gérer ces access), exemple !addaxx: tiot ks1xwq3 olac


II) Conseil pour l'ia

Deux façons de parler à votre ia:
Sur un chan: nick_ia phrase (exemple: "iabot salut toi :)"
en privée: phrase (exemple: "salut toi :)")

L'ia ne sera absolument rien dire à votre première rencontre, c'est vous qui devez lui apprendre à parler. Et à bien parler. Ce bot marche par association direct. Cela veux dire qu'il "lie" ce que vous dite avec ce qui a été dit dans la phrase juste avant. C'est pour cela que vous devez toujours garder un lien logique entre ce que vous dite et ce qui a été dit juste avant. Si le bot ne sait pas il vas vous dire "J'aurais du dire... ?" il est alors important de ne pas dire un synonyme de ce que vous avez dit, mais ce que vous aurez voulu que le bot réponde.
Tout de suite un exemple de début de conversation quand le bot ne sait rien dire:

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 çà vas pas mal
ia: J'aurais du dire... ?
moi: que ce passe t il ?
ia: J'aurais du dire... ?
...

Il vas arriver à un moment où il connaitra un mot et sera vous réponde (même si alors la réponse sera absolument à côté). Si il répond à côté vous devez répondre à ce qu'il vient de dire. Exemple:

moi: salut
ia: Mon chien est un bogos
moi: tu as un chien toi ?
ia: comment çà vas ?
moi: bien et toi ?
...


III) Les commandes

Une commande ce fait sois en PV avec le bot sois sur un salon mais précédé du nom du bot.
exemple:
Sur le salon:iabot !reco
En pv:!reco

Dans les nom de commande entre parenthèse désignes les options, les | designe le choix. Puis après les ":" (c) désigne qu'il faut un access "c" pour cette commande

!reco :Comme recommencer. Vous en avez besoin que quand vous êtes avec un flag "l" (cad que vous lui apprenez à parler) cela sert à faire comprende au bot que vous changez de conversation. Surtout pratique quand vous allez dans une mauvaise direction et voulez revenir sois au début, à "salut" sois à tout autre chose.

!stats :affiche quelques stats.

!version :retourne la version de l'ia bot


!non (phrase) :(l) Vous devez vous servire quand votre bot vous répond n'importe quoi. Alors vous lui ditez ce que vous vouliez qu'il réponde.

!syn (mot1) (mot2) :(c) Comme synonyme. Sert à définir le mot2 comme synonyme de mot 1. QUAND 2 MOTS SONT SYNONYME ON NE PEUT PAS REVENIR EN ARRIERE ! cette commande est très puissante mais il faut bien s'en servir. Exemple: !syn salut yep

!eff (phrase) :(c) efface la phrase de votre base de phrase, vous devez le faire si il vous sort la phrase trop souvent, ou seulement si elle vous plait pas. Vous devez lui dire la phrase éxact! Exemple: !eff jdooqdsfjklmncnvb

!addm (N) (Mot) :(c) rajoute un lien entre MOT et la phrase numeros N. exemple: !addm 54 philosophie science vie

!delm (N) (Mot) :(c) enlève un lien entre MOT et la phrase n° N. exemple: !delm 54 vie science

!addp (N) (Mot) :(c) ajoute une phrase à la base des phrases et retourne son n°. exemple !addp comment çà vas

!wp (N|Phrase) :(c) retourne le n° de la phrase ou retourne la phrase si vous spécifié un n°. exemple !wp comment çà vas !wp 54

!wm (N) :(c) retourne à qu'elles mot est liés la phrase. exemple: !wm 84

!remplace (mot1) (mot2) :(c) Remplace partout le mot1 par le mot2 (on peut pas revenir en arrière). exemple: !Remplace vpoiture voiture


Il y a aussi des commandes qui permettent de gerer la BD (a taper dans le mIRC où il y a l'ia):

/ia.saveBD (fichier) :Sauvgarge la BD dans le fichier qui se trouvera dans le repertoire "ia\save\fichier" (en partant du rep de mIRC) cette opération peut être longue pour les très grosse bd et les petits pc. exemple: /ia.saveBD save1.txt

/ia loadBD (-r) :Vas ouvrir une fenetre ou vous devez choisir la BD à charger. si vous spécifier "-r" la BD vas REMPLACER votre ancienne BD, si vous ne spécifiez par d'option alors la BD sera rajouté à votre ancienne BD. exemple: /ia.loadBD


IV) Gérer ces access

Le bot marche avec un système d'access assez simple. C'est le principe du "flag". Voici la liste des flags:
n = normal (répond mais ne fait pas de lien)
l = fait des liens
c = access au commande permétant de modifier la bd (!syn, !non, !eff)
i = ignore
a = peut gerer les autres access
o = owner (les 'a' ne peuvent changer son access)

Il y a 2 façons de mettre un access à quelqu'un. Soit vous lui mettez sur son host, sois vous le faites selon un login/pass. Faire un access sur un host est très pratique car la personne n'a pas à se loger par contre il ne faut pas que son host change au cours du temps, sinon c'est un access temporaire. Mais çà reste pratique dans des réseaux avec des hosts du type tiot.users.undernet.org , tiot.users.jeux.fr etc...
L'access sur le pass quand à lui est pratique que quand l'host change et que vous ne voulez pas rajouter un access host à chaque fois. Donc des commandes diférentes pour ces 2 types d'access:

!addh (host) (flag) :Rajoute un access host à un host avec les flags. Vous pouvez vous en servir aussi pour modifer un access éxistant.

!delh (host) : efface un access host

!listh :Liste tous les access host, syntaxe: (host:flag)

!addaxx (login) (pass) (flag) :Rajoute un access pass avec le login/pass et les flags.

!delaxx (login) : efface un access pass

!listaxx : liste les access pass

!auth (login) (pass): pour se loger


Le système (qui d'après moi offre un bon compromis sécurité/rapidité) fait que quand quelqu'un se auth à son access pass alors cela vas créer un access host sur son host.

Conseil :Soyez un peu logique. Si vous donnez à qqn un flag 'a' donnez lui en même tant les flag 'lc' etc.

Exemple:
!addh tiot.users.jeux.fr lc (permet à cette host de pouvoir modifier apprende au bot à parler)
!addaxx tiot bogos oalc (met un access pass, avec des flags 'owner').

Dans la config, quand vous choisirez de mettre les modes par default, je vous conseil de mettre 'n' ce qui fera que tout le monde pourra parler avec le bot, mais il y aura que ceux qui auront des access qui pourront modifier la base de donné, çà laisse un bon niveau de sécurité. Si vous voulez pas vous embetez et que tout le monde puisse faire apprende au bot il suffit de mettre "lc" (vous pouvez aussi ne mettre que "l" pour qu'il apprenne de nouveau mot, mais que la personne n'ai pas access à des commandes du genres !eff), cependant attention, si vous ne mettez pas de mode par défault, alors les personne n'ayant pas d'access ne pourront pas parler avec votre bot (pareil que si vous mettez un flag "i"). Donc je vous conseil de mettre au minimum le flag "n" à tout le monde.


V) Principe de l'ia


Personnelement c'est en utilisant un eggdrop ayant une petite ia que je me suis demandé "mais comment cela marche-t-il ?" c'est alors que j'ai mit au point mon propre système, qui est enfaites diférent que celui qu'utilisait l'eggdrop. Le bot fait des liens, c'est à dire qu'a chaque mot est associé une série de phrase. Exemple:

ia:j'aime bien me promener.
moi:Moi aussi j'adore.

Je lie:
j'aime -> Moi aussi j'adore.
bien -> Moi aussi j'adore.
me -> Moi aussi j'adore.
promener -> Moi aussi j'adore.
j'aime¤bien -> Moi aussi j'adore
bien¤me -> Moi aussi j'adore
me¤promener -> Moi aussi j'adore

Comme cela je fait centaines de lien au cours de la conversation. Cela est enfaites juste l'aprentissage (il fait des liens que si vous avez le flag "l") après il faut aussi qu'il cherche la bonne réponse.
Quand vous lui dite une phrase, il vas chercher dans sa base toutes les phrase corespondant à chaque mot. Puis vas chercher les phrases les plus citez, les phrases qui sont lié avec le plus de mot de votre phrase. Enfin il vas sortir plusieurs phrase qui seront à égalité (la plupart du temps) et après il vas choisir la phrase au hasard.
Les groupes de mots cad mot1¤mot2 sont plus important que les mots seuls. ce qui fait que "çà vas" peut être diférent de "vas çà"
J'espère que mon explication vous a plus et surtout qu'il vous a montré que l'ia n'est pas si compliqué.

Maintenant je vais rentrer plus dans les détails, c'est à dire comment je l'ai script:
Il y a tout d'abord deux chose à part. Les phrases stockées dans un .txt et les mots stocker dans une hash table. Il y a une phrase par ligne, je peut donc apeller les phrases par leur ligne. Les hashs sont donc organiser de la façons suivant:

m.mot1 -> 54 2 13 9 7 21 20 58 63 120 154 320 5
m.mot2 -> 78 54 25 69 125 68 41 57
m.mot3 -> 4 96 72 38
m.mot4 -> 4 95 21 32 20 24 68 45
m.mot1¤mot3 -> 4 56 8 12

...
Chaque nombre represente le n° d'une phrase. Cependant un problème peut apparaitre. En effet si la base de donné est très grosse il se peut qu'il y est un trop gros nombre de lien et alors cela dépasse la capacité d'un item.
Pour éviter cela, quand je lie 54 à salut. Si 54 est déjà dans salut je le met en première position dans la liste. Si 54 n'est pas dans la liste et que la liste est pleine. Je met 54 en 20ème position en partant de la fin. et vire la dernière phrase de la liste.

Cela permet d'éviter des bugs dans les très grosse base de données et faire que le bot s'affine au cours du temps


VI) Pour les miRC scripteurs

Cette ia peut avoir bcp d'aplication dans vos scripts, bot etc.
Vous pouvez donc prende ce script et vous en servir dans un autre script, prend un bout du script pour vous en servir, le modifier et faire de ce que vous voulez avec, a une seul condition :
-Citez que l'auteur de l'ia est tiot
-Mettre au moins dans la source où on peut télécharger mon add-on
Je demande pas beaucoup mais je veux que çà soit fait.

Sinon les alias clef du script:

-ia.traite :c'est lui qui vas traiter tout l'ia, et cette alias qui sert d'entrer. Dans l'alias $1 est où doit sortir le text, $2 est le nick de celui qui a entré du text, $3- est la phrase rentré. Quand à %temp il désigne l'host de la personne.
A savoir que %ia.Md désigne le flag par défault, très utile si vous voulez pas utiliser les access.

-ia.out :c'est l'alias de sortit, dedans $1 est la sortie (chan/nick etc) $2- est la phrase dites.

-ia.CmotP :c'est l'alias qui vas lier les mots avec la phrase. Les mots se trouve dans $hget(ia,t. $+ %temp $+ .1) (%temp étant tjrs l'host de la personne) et la phrase dans $1-

-ia.cher :c'est un identificateur qui vas retourner une phrase selon le $1- rentrer.

-ia.ccl :c'est l'alias qui sert surtout pour le !syn, il vas copiez les liens de $1 dans $2 et éffacé $1

-haddt :c un alias très pratique, il conjugue les hash table avec les tokens. Il permet de rajouter un token à une liste de token dans un item. (séparateur 32 par défault). /haddt

-hdelt :cette alias enlève un token de la liste de token dans un item avec pour séparateur 32



A savoir que cette aide est assez vielle et qu'il y a plein d'alias en + donc il faut regarder directement dans la source, au début de chaque alias il y a un détail.
Bon, donc si vous voulez intégré ce bot dans votre script n'importe où, il suffit d'éditer "ia.out" par défault:
alias ia.out {
  sockwrite -n ia PRIVMSG $1 : $+ $2-
}

Si vous voulez par exemple fait un répondeur de PV. il suffira de mettre :
  

on 1:text:*:?:ia.traite $nick $1-
alias ia.out {
  msg $1 $2-
}

Et çà sera votre bot qui répondra à vos pv, cependant attention, les access ne seront plus géré, et si vous vous parlez en pv le bot parlera tout seul et il y a un risque qu'il parte en excès de flood.

Pour les access tous ce passe par "%temp" cette identificateur doit contenir l'host de la personne. Pour notre répondeur de pv il sufira de faire:

on 1:text:*:?:{ set %temp $gettok($wildsite,2,64) | ia.traite $nick $1- }

En effet $wildsite retourne "*!*@host" donc avec le gettok et 64 = @ çà nous fait "host" et le tour est joué.

Vous remarquez (enfin j'espère) qu'il est relativement facile d'intégrer ce script à n'importe quoi, vous pouvez bien sûr ne pas tout mettre, modifier des trucs etc, mais là c à vos risques et périls.

%ia.ip : contient l'ip/dns au quelle le bot doit se connecter
%ia.port : contient le port au quelle le bot se connect
%ia.nick : contient le nick du bot
%ia.Md : contient les modes par default du bot (mettre nl ou n et préférable)
%ia.join : ce sont les chans que JOIN le bot quand il se connecte
%ia.call : c la commande d'apelle. A savoir que si vous le modifié il faut que çà soit ":cmd" et pas juste "cmd"
%ia.log : contient 1 si le bot doit loguer c PV sinon 0
%ia.debug: contient 1 si le bot doit faire un debug (@ia) sinon 0



VII) Integrer IA bot dans votre bot/script



Je vais imaginer que vous avez un bot gérant des access et que vous voulez intégrer l'ia bot à ce bot.
Donc déjà la menubar ne vous sert pas, ni les remotes. Sauf le exit qui peut être utile (sauve la base de donné quand on fait ferme le script), toute la partie sockets, toute la partie de la gestion des access "ia.Botaxx".
Vous devez qu'éditer %ia.nick, %ia.log et %ia.debug et garder que les alias (sauf l'alias gérant les access).

Il suffit donc comme cela est dit précédament éditer "ia.out" et faire des ia.traite comme vous le voulez. Pour les access etc, %ia.temp doit avant chaque appelle de ia.traite contenir qqch qui identifie la personne. Pour moi j'utilise l'host, mais votre bot peut identifier le personne par son ident@host ou autre.
Cela servira car vous devez editer ia.axx En effet cette identificateur retourne l'access de la personne celon le %ia.temp (qui est passé en paramètre). Par exemple imaginons que pour vous %access.ident@host contient l'access de la personne sous la forme d'un nbr (entre 0 et 500). Vous devez remplacer l'ancien ia.axx par:
alias ia.axx {
 set %temp % $+ access. $+ $1
 set %temp [ [ %temp ] ]
 ;%temp contient le niveau de la personne
 if (%temp == $null) return 0
 else return %temp
}

Ensuite ce qui vas se passer c que l'ia vas verifier si la personne avec son access peut utiliser tel ou tel commande. Il y a les commandes "c" qui sont ceux qui modifient la base de donnée (BD). Avec ces commandes on peut facilement détruire une BD mais elle permette une gestion avancé du bot de l'ia. Après il y a les commandes "l" qui eux permettent de faire des liens, cad que le bot puisse apprende les phrase de la personnes, vous pouvez mettre cela pour tout le monde ou des peronne ayant un minimum. Puis a chaque fois qu'on appelle ia.traite il regarde si la personne n'a pas un access "i" cad si il ne doit pas être ignoré. Donc par exemple au dessus de 1 on peut faire "l", au dessus de 100 "c" et les autres sont normal (peuve parler avec le bot mais ne peuvent pas modifier le bot ni lui apprende qqch) :
 

;$1 = access de la personne (défini par ia.axx)
;$2 = commande que la personne veut utiliser
alias ia.axx2 {
 if (($2 == l) && ($1 >= 1)) return $true
 if (($2 == c) && ($1 >= 100)) return $true
 else return $false
}

Et voila votre ia bot est parfaitement intégrer à votre bot.


Amusez vous bien, si vous avez fait une modif et que vous pensez que je devrait la rajouter à l'ia vous pouvez me l'envoyer. Sinon pour toutes remarques, sugestions, acclamations, idolations ou n'importe quoi :

tiot@redpowa.com