On $*:Text:/^((?:\s*?)!(blague|del(\s\d{1,})|add(\s[^$]{150,})|blague-aide)$)/Si:*:{
Var %e = $gettok($regml(2),1,32)
If (!%busy) {
Set -u7 %busy 1
If (%e == blague) {
.Timer 1 2 .Notice $nick $read(blagues.txt)
}
ElseIf (%e == del) {
If ($nick isop $chan) && ($strip($2) <= $lines(blagues.txt)) {
Write -dl $+ $v1 blagues.txt
Msg $chan [Blague Effacée]
}
}
ElseIf (%e == add) {
Write blagues.txt Le $date(dd/mm/yy) a $time : $2- [ $+ $nick $+ ]
Msg $chan [Blague Ajoutée]
}
ElseIf (%e == blague-aide) {
Var %com = .Notice $nick
.Timer 1 1 %com Pour lire une blague au hasard: !blague
.Timer 1 2 %com Pour ajouter une blague: !add [message] (sans crochets)
.Timer 1 4 %com Pour effacer une blague (seulement pour les op): !del [numero]
.Timer 1 5 %com Cette commande a ete mise a votre disposition pour vous distraire.
.Timer 1 7 %com Merci de ne pas en abuser et merci de ne pas flooder le bot.
}
}
Else {
.Notice $nick Veuillez patienter quelques secondes et reessayez ...
}
}
Euh je crois que sa a un petit probleme je l'ai tester sa ne marche pas. J'ai un leger doute sur le $*:Text:/^((?:\s*?)!(blague|del(\s\d{1,})|add(\s[^$]{150,})|blague-aide)$)/Si:*:{et sur les (%e add) (%e del) ...
Désolé si c'est évidant pour vous sa ne l'est pas pour moi ...
-Déjà arkanis je te comprend pas -_- comme a dit uaip je commence deja depuis peux en plus quand tu dit:
ça marche comment ? aucune aide ...
je tape !blagues, !add, !blgue-aide, rien ne se passe, comment ça se fait ?!
TOUT SIMPLEMENT PARCE QUE JE NE SUIS PAS SUR TCHAT-ONLINE !!!
Faut pas etre boulet pour savoir que tchat-online c'est le salon et je m'excuse pour l'avoir laisser je l'ai pas vue.
Et merci TropNul, je vais pouvoir améliorer tout sa =].
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 28 oct. 2007 à 12:28
Encore un détail :
si le bot déco pendant les 7 secondes, il ne te sera plus jamais possible de taper !blague ou tout autre commande
tu devrais donc par exemple passer par des hash tables ou implémenter un système qui vide %busy 7 sec après la fois qu'une personne ait tapé !add, busy ou pas
quand il n'y a qu'une action, tu devrais mettre tout en une ligne
exemple avec le dernier else :
else .notice $nick Veuillez patienter ...
tu peux le faire 2 fois dans le code, et tu gagnes 4 lignes
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 28 oct. 2007 à 12:11
Tiens une remarque qui me taraude ...
Ce serait bien qu'on puisse editer un de nos commentaires :D
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 28 oct. 2007 à 12:10
Oula, voila une chose bizarre:
//echo -a $regex( !add super,/^((?:\s*?)!(blague|del(?:\s\d{1,})|add(?:\s[^$]{5,})|blague-aide)$)/i) | //echo -a $regml(2)
renvoit:
1
add super
Damned!
Donc, en effet, il ne faut pas mettre de (?:) si ensuite on fait ceci (pattern(?:pattern)pattern) ! lol, honte a moi !
et faudra bien sur mettre var %e = $gettok($regml(2),1,32) par la suite.
donc le code devient:
On $*:Text:/^((?:\s*?)!(blague|del(\s\d{1,})|add(\s[^$]{150,})|blague-aide)$)/Si:*:{
Var %e = $gettok($regml(2),1,32)
If (!%busy) {
Set -u7 %busy 1
If (%e == blague) {
.Timer 1 2 .Notice $nick $read(blagues.txt)
}
ElseIf (%e == del) {
If ($nick isop $chan) && ($strip($2) <= $lines(blagues.txt)) {
Write -dl $+ $v1 blagues.txt
Msg $chan [Blague Effacée]
}
}
ElseIf (%e == add) {
Write blagues.txt Le $date(dd/mm/yy) a $time : $2- [ $+ $nick $+ ]
Msg $chan [Blague Ajoutée]
}
ElseIf (%e == blague-aide) {
Var %com = .Notice $nick
.Timer 1 1 %com Pour lire une blague au hasard: !blague
.Timer 1 2 %com Pour ajouter une blague: !add [message] (sans crochets)
.Timer 1 4 %com Pour effacer une blague (seulement pour les op): !del [numero]
.Timer 1 5 %com Cette commande a ete mise a votre disposition pour vous distraire.
.Timer 1 7 %com Merci de ne pas en abuser et merci de ne pas flooder le bot.
}
}
Else {
.Notice $nick Veuillez patienter quelques secondes et reessayez ...
}
}
encore desole :s
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 28 oct. 2007 à 12:00
de taper seulement '!add par exemple' ne fonctionnera evidement pas etant donne la limite de caractere imposee a 150. Donc il faut faire quelque chose de la sorte '!add un truc plus long que cent cinquante caractere' pour que ca match.
J'ai mis le (?:) car je n'ai pas besoin de capturer la suite. Ainsi, avec simplement $regml(2) on retrouve la commande voulue. Bien sur, de ne pas mettre de (?:) et par la suite de faire var %e = $gettok($regml(1),1,32) fonctionnera tout aussi bien :).
Je vais meme aller plus loin a present en proposant ce pattern pour palier aux scripts ayant des addons de couleurs chiants !
Ceci fait, meme si un script d'input fait cela: '<quelques.espace.ici>!blague', le pattern matchera.
Pour en revenir a la limite de caractere, on pourrait mettre de 150 a 920 mais etant donne que le serveur lui meme tronquera le texte recu par le bot, j'ai donc impose que la limite inferieur.
:)
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 28 oct. 2007 à 11:14
je ne compare(rai) jamais une source à l'une des miennes, parce que le bilan serait très largement faussé.
j'attends juste d'un code qu'il soit FINI, relativement bien codé, qu'il fonctionne, et qu'il soit un minimum bien présenté, si possible avec de l'aide pour savoir comment il faut s'y prendre
j'ai beau relire cette page, je ne trouve rien de tout ça
Sinon, tu as testé ton regex TropNul ?
moi oui, il fonctionne pas (essaye !add par exemple)
essaye directement ça : /^(!(blague|del(\s\d{1,})|add(\s.{1,150})|blague-aide)$)/Si
le ?: est inutile ici, non ? après par contre tu dois faire var %e = $gettok($regml(1),1,32)
et au passage, je pense que tu pourrais monter le 150 jusqu'à 800-900, limite de caractères qui peuvent être contenus dans une variable. Si tu as le temps, cherche la limite de caractères imprimable en une fois sur un salon et prends cette limite :)
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 28 oct. 2007 à 10:41
Juste pour t'aider un peu:
On $*:Text:/^(!(blague|del(?:\s\d{1,})|add(?:\s[^$]{150,})|blague-aide)$)/Si:*:{
Var %e = $regml(2)
If (!%busy) {
Set -u7 %busy 1
If (%e == blague) {
.Timer 1 2 .Notice $nick $read(blagues.txt)
}
ElseIf (%e == del) {
If ($nick isop $chan) && ($strip($2) <= $lines(blagues.txt)) {
Write -dl $+ $v1 blagues.txt
Msg $chan [Blague Effacée]
}
}
ElseIf (%e == add) {
Write blagues.txt Le $date(dd/mm/yy) a $time : $2- [ $+ $nick $+ ]
Msg $chan [Blague Ajoutée]
}
ElseIf (%e == blague-aide) {
Var %com = .Notice $nick
.Timer 1 1 %com Pour lire une blague au hasard: !blague
.Timer 1 2 %com Pour ajouter une blague: !add [message] (sans crochets)
.Timer 1 4 %com Pour effacer une blague (seulement pour les op): !del [numero]
.Timer 1 5 %com Cette commande a ete mise a votre disposition pour vous distraire.
.Timer 1 7 %com Merci de ne pas en abuser et merci de ne pas flooder le bot.
}
}
Else {
.Notice $nick Veuillez patienter quelques secondes et reessayez ...
}
}
Je ne l'ai pas commente volontairement afin que tu fasses l'effort de recherche/comprehension des differentes techniques d'optimisations dont j'ai fait usage. Dans le meilleur des cas, j'aurais aussi inclus un chti dialog pour plus d'interaction utilisateur/source. Maintenant, a toi de jouer :p.
Par contre, la prochaine fois, utilises un tagX pour demander un/plusieurs conseils sur comment ameliorer ta source avant de la poster en tant que source. Le forum de ce site est un tres bon endroit d'ailleurs.
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 28 oct. 2007 à 01:32
Moi aussi je vais poster pour poster vous allez voir
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 28 oct. 2007 à 01:13
erf... j'avoue c'est pas cool comme commentaire... m'enfin, faut quand même préciser que minerbe code depuis très peu de temps, donc comparé à ce qu'il me demandait ya quelques semaines, je suis plutot surpris. arkanis, je comprends que comparé a tes codes (sockets, binvars, etc) ceci est un peu ridicule, mais il faut laisser sa chance aux nouveaux. [et je précise que ce n'est pas minerbe qui m'envoie, jsuis venu faire mon ptit tour habituel du site ^^].
bref, comme l'a dit arkanis, c'est a toi (minerbe) de gérer l'excess flood. fait en sorte que la commande !blague-aide ne puisse etre faite que toutes les 2min par exemple.
<quote>
ça marche comment ? aucune aide ...
je tape !blagues, !add, !blgue-aide, rien ne se passe, comment ça se fait ?!
TOUT SIMPLEMENT PARCE QUE JE NE SUIS PAS SUR TCHAT-ONLINE !!!
</quote>
MDR ! c'est vrai que ce n'est qu'un détail, mais quand on poste sur un site, il faut penser a tout. enfin voila... arkanis a tout dit en fait, je venais juste rajouter mon grain de sel.
bonne continuation
Doudis
Messages postés26Date d'inscriptionjeudi 19 avril 2007StatutMembreDernière intervention29 décembre 2007 28 oct. 2007 à 01:11
Ton code on voit que tu ne la pas relu deux fois avant de poster ; tu oublie les cases pour définir la couleur a plusieurs reprises (ctrl+k).
Pourquoi tu définit un canal particulier (#tchat-online)
tu aurai pu mettre sa : On *:TEXT:*:#:
Ou tu aurais pu crée une variable pour définir le salon , au lieu de chercher dans son script le code a modifier.
Et je ne vois pas la grande utilité de crée un fichier zip pour un si petit code !!! :-o
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 28 oct. 2007 à 00:35
bon, je fais le boulet mais bon ...
ça marche comment ? aucune aide ...
je tape !blagues, !add, !blgue-aide, rien ne se passe, comment ça se fait ?!
TOUT SIMPLEMENT PARCE QUE JE NE SUIS PAS SUR TCHAT-ONLINE !!!
le nom du fichier dans le .zip est script14.ini, tu n'aurais pas pu nous choissir un nom un peu mieux ?! visiblement non
si je tape !blague-aide , ton bot risque très fortement de partir en excess flood (oui j'ai dit TON bot, car qui voudrait d'un bot codé comme ça ?). "Merci de ne pas flooder le bot", c'est à toi et non à nous de gérer ça :/ A partir d'une bonne dizaine de blagues les chances sont grandes ... le nom du timer est très mal adapté : un "$+(.timerblague.,%o)" aurait été largement plus adapté pour ne pas flooder.
pour ta première boucle, fix une variable contenant le nombre de lignes du fichier, histoire de ne pas devoir le réévaluer à chaque fois ...
En plus d'être mal codé, il y a des fautes de grammaire/orthographe : "une blagues", mais tu plaisantes là ou quoi ?
u lieu de metre 150 fois ton $strip($1-), mets ce bout de code dès la 2e ligne :
tokenize 32 $strip($1-)
bonne continuation, en espérant que tu aies le temps de lire ce message avant la suppression de la source
28 oct. 2007 à 19:24
Var %e = $gettok($regml(2),1,32)
If (!%busy) {
Set -u7 %busy 1
If (%e == blague) {
.Timer 1 2 .Notice $nick $read(blagues.txt)
}
ElseIf (%e == del) {
If ($nick isop $chan) && ($strip($2) <= $lines(blagues.txt)) {
Write -dl $+ $v1 blagues.txt
Msg $chan [Blague Effacée]
}
}
ElseIf (%e == add) {
Write blagues.txt Le $date(dd/mm/yy) a $time : $2- [ $+ $nick $+ ]
Msg $chan [Blague Ajoutée]
}
ElseIf (%e == blague-aide) {
Var %com = .Notice $nick
.Timer 1 1 %com Pour lire une blague au hasard: !blague
.Timer 1 2 %com Pour ajouter une blague: !add [message] (sans crochets)
.Timer 1 4 %com Pour effacer une blague (seulement pour les op): !del [numero]
.Timer 1 5 %com Cette commande a ete mise a votre disposition pour vous distraire.
.Timer 1 7 %com Merci de ne pas en abuser et merci de ne pas flooder le bot.
}
}
Else {
.Notice $nick Veuillez patienter quelques secondes et reessayez ...
}
}
Euh je crois que sa a un petit probleme je l'ai tester sa ne marche pas. J'ai un leger doute sur le $*:Text:/^((?:\s*?)!(blague|del(\s\d{1,})|add(\s[^$]{150,})|blague-aide)$)/Si:*:{et sur les (%e add) (%e del) ...
Désolé si c'est évidant pour vous sa ne l'est pas pour moi ...
28 oct. 2007 à 18:43
-Déjà arkanis je te comprend pas -_- comme a dit uaip je commence deja depuis peux en plus quand tu dit:
ça marche comment ? aucune aide ...
je tape !blagues, !add, !blgue-aide, rien ne se passe, comment ça se fait ?!
TOUT SIMPLEMENT PARCE QUE JE NE SUIS PAS SUR TCHAT-ONLINE !!!
Faut pas etre boulet pour savoir que tchat-online c'est le salon et je m'excuse pour l'avoir laisser je l'ai pas vue.
Et merci TropNul, je vais pouvoir améliorer tout sa =].
28 oct. 2007 à 12:28
si le bot déco pendant les 7 secondes, il ne te sera plus jamais possible de taper !blague ou tout autre commande
tu devrais donc par exemple passer par des hash tables ou implémenter un système qui vide %busy 7 sec après la fois qu'une personne ait tapé !add, busy ou pas
quand il n'y a qu'une action, tu devrais mettre tout en une ligne
exemple avec le dernier else :
else .notice $nick Veuillez patienter ...
tu peux le faire 2 fois dans le code, et tu gagnes 4 lignes
28 oct. 2007 à 12:11
Ce serait bien qu'on puisse editer un de nos commentaires :D
28 oct. 2007 à 12:10
//echo -a $regex( !add super,/^((?:\s*?)!(blague|del(?:\s\d{1,})|add(?:\s[^$]{5,})|blague-aide)$)/i) | //echo -a $regml(2)
renvoit:
1
add super
Damned!
Donc, en effet, il ne faut pas mettre de (?:) si ensuite on fait ceci (pattern(?:pattern)pattern) ! lol, honte a moi !
Du coup, le pattern devient:
/^((?:\s*?)!(blague|del(\s\d{1,})|add(\s[^$]{150,})|blague-aide)$)/Si)
et faudra bien sur mettre var %e = $gettok($regml(2),1,32) par la suite.
donc le code devient:
On $*:Text:/^((?:\s*?)!(blague|del(\s\d{1,})|add(\s[^$]{150,})|blague-aide)$)/Si:*:{
Var %e = $gettok($regml(2),1,32)
If (!%busy) {
Set -u7 %busy 1
If (%e == blague) {
.Timer 1 2 .Notice $nick $read(blagues.txt)
}
ElseIf (%e == del) {
If ($nick isop $chan) && ($strip($2) <= $lines(blagues.txt)) {
Write -dl $+ $v1 blagues.txt
Msg $chan [Blague Effacée]
}
}
ElseIf (%e == add) {
Write blagues.txt Le $date(dd/mm/yy) a $time : $2- [ $+ $nick $+ ]
Msg $chan [Blague Ajoutée]
}
ElseIf (%e == blague-aide) {
Var %com = .Notice $nick
.Timer 1 1 %com Pour lire une blague au hasard: !blague
.Timer 1 2 %com Pour ajouter une blague: !add [message] (sans crochets)
.Timer 1 4 %com Pour effacer une blague (seulement pour les op): !del [numero]
.Timer 1 5 %com Cette commande a ete mise a votre disposition pour vous distraire.
.Timer 1 7 %com Merci de ne pas en abuser et merci de ne pas flooder le bot.
}
}
Else {
.Notice $nick Veuillez patienter quelques secondes et reessayez ...
}
}
encore desole :s
28 oct. 2007 à 12:00
/^(!(blague|del(?:\s\d{1,})|add(?:\s[^$]{150,})|blague-aide)$)/Si
de taper seulement '!add par exemple' ne fonctionnera evidement pas etant donne la limite de caractere imposee a 150. Donc il faut faire quelque chose de la sorte '!add un truc plus long que cent cinquante caractere' pour que ca match.
J'ai mis le (?:) car je n'ai pas besoin de capturer la suite. Ainsi, avec simplement $regml(2) on retrouve la commande voulue. Bien sur, de ne pas mettre de (?:) et par la suite de faire var %e = $gettok($regml(1),1,32) fonctionnera tout aussi bien :).
Je vais meme aller plus loin a present en proposant ce pattern pour palier aux scripts ayant des addons de couleurs chiants !
/^((?:\s*?)!(blague|del(?:\s\d{1,})|add(?:\s[^$]{150,})|blague-aide)$)/Si
Ceci fait, meme si un script d'input fait cela: '<quelques.espace.ici>!blague', le pattern matchera.
Pour en revenir a la limite de caractere, on pourrait mettre de 150 a 920 mais etant donne que le serveur lui meme tronquera le texte recu par le bot, j'ai donc impose que la limite inferieur.
:)
28 oct. 2007 à 11:14
En niveau débutant, tous les codes devraient tendre vers celui-ci :
http://www.ircfr.com/codes/RANDOM-REPLACE_44231.aspx
j'attends juste d'un code qu'il soit FINI, relativement bien codé, qu'il fonctionne, et qu'il soit un minimum bien présenté, si possible avec de l'aide pour savoir comment il faut s'y prendre
j'ai beau relire cette page, je ne trouve rien de tout ça
Sinon, tu as testé ton regex TropNul ?
moi oui, il fonctionne pas (essaye !add par exemple)
essaye directement ça : /^(!(blague|del(\s\d{1,})|add(\s.{1,150})|blague-aide)$)/Si
le ?: est inutile ici, non ? après par contre tu dois faire var %e = $gettok($regml(1),1,32)
et au passage, je pense que tu pourrais monter le 150 jusqu'à 800-900, limite de caractères qui peuvent être contenus dans une variable. Si tu as le temps, cherche la limite de caractères imprimable en une fois sur un salon et prends cette limite :)
28 oct. 2007 à 10:41
On $*:Text:/^(!(blague|del(?:\s\d{1,})|add(?:\s[^$]{150,})|blague-aide)$)/Si:*:{
Var %e = $regml(2)
If (!%busy) {
Set -u7 %busy 1
If (%e == blague) {
.Timer 1 2 .Notice $nick $read(blagues.txt)
}
ElseIf (%e == del) {
If ($nick isop $chan) && ($strip($2) <= $lines(blagues.txt)) {
Write -dl $+ $v1 blagues.txt
Msg $chan [Blague Effacée]
}
}
ElseIf (%e == add) {
Write blagues.txt Le $date(dd/mm/yy) a $time : $2- [ $+ $nick $+ ]
Msg $chan [Blague Ajoutée]
}
ElseIf (%e == blague-aide) {
Var %com = .Notice $nick
.Timer 1 1 %com Pour lire une blague au hasard: !blague
.Timer 1 2 %com Pour ajouter une blague: !add [message] (sans crochets)
.Timer 1 4 %com Pour effacer une blague (seulement pour les op): !del [numero]
.Timer 1 5 %com Cette commande a ete mise a votre disposition pour vous distraire.
.Timer 1 7 %com Merci de ne pas en abuser et merci de ne pas flooder le bot.
}
}
Else {
.Notice $nick Veuillez patienter quelques secondes et reessayez ...
}
}
Je ne l'ai pas commente volontairement afin que tu fasses l'effort de recherche/comprehension des differentes techniques d'optimisations dont j'ai fait usage. Dans le meilleur des cas, j'aurais aussi inclus un chti dialog pour plus d'interaction utilisateur/source. Maintenant, a toi de jouer :p.
Par contre, la prochaine fois, utilises un tagX pour demander un/plusieurs conseils sur comment ameliorer ta source avant de la poster en tant que source. Le forum de ce site est un tres bon endroit d'ailleurs.
28 oct. 2007 à 01:32
28 oct. 2007 à 01:13
bref, comme l'a dit arkanis, c'est a toi (minerbe) de gérer l'excess flood. fait en sorte que la commande !blague-aide ne puisse etre faite que toutes les 2min par exemple.
<quote>
ça marche comment ? aucune aide ...
je tape !blagues, !add, !blgue-aide, rien ne se passe, comment ça se fait ?!
TOUT SIMPLEMENT PARCE QUE JE NE SUIS PAS SUR TCHAT-ONLINE !!!
</quote>
MDR ! c'est vrai que ce n'est qu'un détail, mais quand on poste sur un site, il faut penser a tout. enfin voila... arkanis a tout dit en fait, je venais juste rajouter mon grain de sel.
bonne continuation
28 oct. 2007 à 01:11
Pourquoi tu définit un canal particulier (#tchat-online)
tu aurai pu mettre sa : On *:TEXT:*:#:
Ou tu aurais pu crée une variable pour définir le salon , au lieu de chercher dans son script le code a modifier.
Et je ne vois pas la grande utilité de crée un fichier zip pour un si petit code !!! :-o
28 oct. 2007 à 00:35
ça marche comment ? aucune aide ...
je tape !blagues, !add, !blgue-aide, rien ne se passe, comment ça se fait ?!
TOUT SIMPLEMENT PARCE QUE JE NE SUIS PAS SUR TCHAT-ONLINE !!!
le nom du fichier dans le .zip est script14.ini, tu n'aurais pas pu nous choissir un nom un peu mieux ?! visiblement non
si je tape !blague-aide , ton bot risque très fortement de partir en excess flood (oui j'ai dit TON bot, car qui voudrait d'un bot codé comme ça ?). "Merci de ne pas flooder le bot", c'est à toi et non à nous de gérer ça :/ A partir d'une bonne dizaine de blagues les chances sont grandes ... le nom du timer est très mal adapté : un "$+(.timerblague.,%o)" aurait été largement plus adapté pour ne pas flooder.
pour ta première boucle, fix une variable contenant le nombre de lignes du fichier, histoire de ne pas devoir le réévaluer à chaque fois ...
En plus d'être mal codé, il y a des fautes de grammaire/orthographe : "une blagues", mais tu plaisantes là ou quoi ?
u lieu de metre 150 fois ton $strip($1-), mets ce bout de code dès la 2e ligne :
tokenize 32 $strip($1-)
bonne continuation, en espérant que tu aies le temps de lire ce message avant la suppression de la source