Source pour logger discussion d'une phrase P à une phrase P²

rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010 - 1 mars 2005 à 21:08
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008 - 7 mars 2005 à 17:54
Bonjour à tous.



Je suis à la recherche d'un code qui pourra sur commande sur un salon
précis de la part d'un utilisateur quelconque qui pourra logger dans un
fichier citations.txt une discussion entre 2 lignes.



Avec une commande genre !addlog phrase P | phrase P²



qui me logguera tout de ce qui c'est dit entre les 2 phrases en s'appuyant sur le fichier log du dit salon (#annéemoisjour.log)



A mon avis ce code est possible, mais je ne sais comment le tourner pour qu'il soit fonctionnel.



J'ai bien une idée mais elle reste trop floue.

13 réponses

cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008
1 mars 2005 à 22:06
on *:input:#:{
if ($1 == !addlog) && ($0 >= 4 ) {
var %chemin = logs\ $+ $chan $+ $replace($asctime($ctime , dd:mm:yy),$chr(58),) $+ .log
echo -a %chemin
if ($read(%chemin,w, * $+ $gettok($gettok($1-,1,124),2-,32) $+ *)) {
var %read1 = $readn
if ($read(%chemin,w, * $+ $gettok($1-,2,124) $+ *)) {
var %read2 = $readn
if (%read2 >= $calc(%read1 + 2)) {
write citations.txt Citation :
while (%read1 <= %read2) {
echo -a $read(%chemin,%read1)
write -l $lines(citations.txt) citations.txt $read(citations.txt, $lines(citations.txt)) $read(%chemin,%read1) $+ $chr(32)
inc %read1
}
}
}
}
}
}
Voilà qqcohse qui t'aidera peut etre
Moi j'ai testé avec var %chemin = logs\ $+ $chan $+ . $+ $network $+ .log pour mes fichiers de logs et y'a pas de pb.
Si le log est long il y a une erreur car la constante est trop longue, donc ut peux aussi choisir de les écrire sur plusieurs lignes, plutot que sur la même ligne.

Donc ça se démarre comme tu as demandé avec !addlog | phrase2 phrase1 et phrase2 . De plus, le script cherche juste un endroit du log ou se trouve lesz deux string de phrase1 et phrase2 et copie ce qui'l ya entre les deux.

Si tu veux que ce soit une prhase complète (seulement pris si la personne avait dit phrase1 comme phrase exclusive, tu rajouteras des if ($gettok($read(%chemin, %read1),2-,32) == $gettok($gettok($1-,1,124),2-,32) et le même système pour l'autre.

Mais je pense que tu seras capable de le perfectionner pr faire ce que tu veux ;)

Dernière chose : j'ai mis ici le fichier de log sous le forme #chanjour en deux chiffres mois en deux chiffres année en 4 chiffres.log le tout attaché,, donc si c pas exactement comme ça que tu as tes fichiers de logs, changes le aussi.
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
1 mars 2005 à 22:10
Ha oué, j'avais pas pensé à un truc aussi simple :), ça à l'air fonctionnel en plus, je vais tester ça, dès que possible !

Puis je ferai part des mes modifs éventuelles.
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
1 mars 2005 à 22:57
Ok, ben dans la forme c'est fonctionnel, mais ça ne loggue pas
correctement, ca prend bien en compte la premiere ligne du log, mais
mal la dernière ligne.



De plus la commande n'est pas fonctionnelle quand un autre user la
tape, j'ai mis un on*:text:":{ mais ça ne semble pas fonctionner non
plus ; bon je ne suis pas très bon en création de script, alors
forcement je demande bcp =).



Puis un renseignement, comment faire pour que ça garde la mise en forme
de mon log original, et surtout que la commande ne flood pas mon écran
:).



Et encore un auter détails, comment faire aussi pour que le script prenne en compte les talker et timer des autres utilisateurs.



Je sais je demande pas mal de chose :)
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008
2 mars 2005 à 12:49
Déjà, j'ai oublié d'enlever les echo que j'avais mis pour vérifier les paramètres, tu enlèves ça et tu verras plus rien sur ton écran.

Si tu mets on *:text:!addlog*:#*:{ ça devrait marcher (et oui la synthaxe de on text n'est pas tt à fait la même que le on input).
Et pr la dernière phrase, c que tu veux dire que ça ne la prend pas toujours, ou bien qu'elle est tronquée ?
Par contre je ne vois pas ce que tu veux dire par "mise en forme", et non plus ce que tu appelles la prise en compte des timers des autres, puisque tu ne les vois pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
2 mars 2005 à 15:56
Ha oki, on va tester avec les * et sans les echos
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
2 mars 2005 à 18:16
Ok, ben pour la mise en forme, en fait, savoir s'il était possible que
lors de l'écriture du fichier citations.txt, que ça garde les retours à
la ligne.

Pour le timer (en fait je voulais dire l'horloge), en fait après une
petite réflexion, ça ne sert à rien vu que d'après ce que j'ai compris
le script fonctionne en fonction des mots taper.

Pour le moment je retourne un peu dans tous les sens voir ce que je peux faire de mon coté, mais bon.
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
2 mars 2005 à 22:09
Ok ok !



Ca commence à se goupiller comme il faut :)



Actuellement j'arrive à logguer par moi même avec la commande !addlog phrase1 | phrase2



Les utilisateurs du salon peuvent aussi, mais il y'a qq probleme, car
l'heure de tout le monde n'est pas la même, à première vue ça coince à
ce niveau la ; puis aussi je pense que ça coince car y'a souvent des
déco autours des pseudos, donc pareil le script n'arrive pas à trouver
la phrase exact dans mon log. Et forcement la je ne sais pas du tout comment faire :(
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
3 mars 2005 à 09:43
Encore des news :)



J'ai pu mettre la commande utilisable au niveau utilisateur, avec
l'envoie en query de la mise en forme adéquate pour la commande, après
différents tests, il s'avère que c'est la meilleure façon d'opérer,
connaissant la multitude de possibilité d'horaire et d'écriture.



Je plenche tjs dessus pour me mettre à ma convenance la chose =)



Encore merci pour l'aide apportée !
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
3 mars 2005 à 09:47
Par contre je n'arrive pas à résoudre le pb de log trop long :( si
qq'un pouvait éclairer ma lanterne, ça serait bien urbain de sa part !
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008
3 mars 2005 à 19:56
Si tu veux garder la mise en forme initiale il n'y aura pas ce problème
remplaces : write -l $lines(citations.txt) citations.txt $read(citations.txt, $lines(citations.txt)) $read(%chemin,%read1) $+ $chr(32)

par : write citations.txt $read(%chemin,%read1)
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
3 mars 2005 à 21:00
Ha ben en changeant cette ligne, la source est totalement fonctionnelle et correspond quasiment à mes besoins, merci pour ton aide.





Je mettrai la source finalisée en ligne quand j'aurai vraiment pauffiné la chose.

Laisser couler la vie et la chance vous sourira
0
rellik77 Messages postés 48 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 22 mars 2010
7 mars 2005 à 09:53
Bon voila la source quasi fini, et dont la paternité en revient à Telepathmaster :)



on *:input:#:{

if ($1 == !addlog) && ($0 >= 4 ) {

var %chemin = Logs\ $+ $chan $+ . $+ $replace($asctime($ctime , yyyy:mm:dd),$chr(58),) $+ .log mettre le répertoire et la synthaxe pour accéder aux logs

if ($read(%chemin,w, * $+ $gettok($gettok($1-,1,124),2-,32) $+ *)) {

var %read1 = $readn

if ($read(%chemin,w, * $+ $gettok($1-,2,124) $+ *)) {

var %read2 = $readn

if (%read2 >= $calc(%read1 + 2)) {

write citations.txt Citation :

while (%read1 <= %read2) {

write citations.txt $read(%chemin,%read1)

inc %read1

}

}

}

}

}

}



On peut rajouter un code pour que les utilisateurs du salon puissent aussi logger en tapant !addlog P | P²



on *:text:*!addlog*:#:{

; un private pour expliquer le fonctionnement de la commande

; et des différentes restrictions qu'il peut y'avoir

msg $nick aide sur le commande !addlog :

msg $nick mise en forme de la commande :

msg $nick !addlog phrase de début de discussion à logger [touches Atl Gr+6] phrase de fin de discussion à logger

msg $nick les pseudonyme doivent être entouré de parenthèses
uniquement ainsi que leurs grades @ : opérateur, % : halfop, +
voice chez moi c'est comme ça les pseudos sont entourés de parenthèses (nick), donc faut mettre les caractères adéquats

msg $nick les phrases ne doivent pas contenir l'heure, ni de couleurs (utiliser la commande /say !addlog ...)

msg $nick le log ne doit pas être trop long 20 lignes, sinon ça ne fonctionne pas correctement à première vue ça fonctionne tranquillement meme avec plus de 20 lignes

msg $nick NB : attention aux horaires, le logging ne fonctionne que de 00:00 à 23:59 heure française

msg $nick si la discussion à commencer avant 23:59 et se termine à 01:15 le logging ne fonctionnera pas

msg $nick en gros ça donne : (@nick1) la premiere phrase de la discussion l (+nick2) le dernière phrase de la discussion

if ($1 == !addlog) && ($0 >= 4 ) { ça je sais pas si on peut enlever, mais bon une ligne de code en plus c'est pas la mort

var %chemin = logs\ $+ $chan $+ . $+ $replace($asctime($ctime , yyyy:mm:dd),$chr(58),) $+ .log

if ($read(%chemin,w, * $+ $gettok($gettok($1-,1,124),2-,32) $+ *)) {

var %read1 = $readn

if ($read(%chemin,w, * $+ $gettok($1-,2,124) $+ *)) {

var %read2 = $readn

if (%read2 >= $calc(%read1 + 2)) {

write
citations.txt Citation sur $+ $chan le $day
$+ $replace($asctime($ctime , yyyy:mm:dd),$chr(58),)

while (%read1 <= %read2) {

write citations.txt $read(%chemin,%read1)

inc %read1

}

}

}

}

}



Enfin l'idéal aurait été sur le on *:text:*!addlog*:#:{ de faire un renvoie au niveau du input pour raccourcir le code, mais bon j'ai pas fait, et je sais pas si je sais faire.
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008
7 mars 2005 à 17:54
En fait, c'es possible si tu fais une commande
alias commande {
// contenu de la commande (les arguments sont identifiés normalement par $1 etc
}


puis que ds le on input et dans le on text tu éxécutes /commande avec les arguments
0
Rejoignez-nous