06/09/2011, 00:27 (Modification du message : 07/09/2011, 09:43 par CrazyCat.)
Bonjour,
J'avais pris un code TCL qui a été posté sur le Forum, et qu'il ne fonctionnait pas, alors j'ai du modifier quelque lignes dans le code pour le faire débuger. Le code sert à historiser les connexions entrantes sur le serveur IRC, et les enregistrer dans un fichier "connects.db", et j'aimerais ajouter une nouvelle fonctionnalité qui servira à retourer via l'adresse IP les pseudo qui ont été passés sous cette adresse, et vis-versa via un pseudo çà me retourne les adresse qui ont été utilisées par le pseudo en question.
Exemple:
Code :
<Good>!connect bob
<Bot>Connection de bob
<bot>pseudo : bob IP: 00.000.00.IP Date:01/02/03 à 13h03
<bot>pseudo : bob IP: 00.000.00.IP Date:01/02/03 à 14h03
sens contraire :
<Good>!connect 01.020.0301.IP
<Bot>Connection de 01.020.0301.IP
<bot> IP: 00.000.00.IP pseudo: bob1 Date:01/02/03 à 13h03
<bot> IP: 00.000.00.IP pseudo: bob09 Date:01/02/03 à 14h03
Voici le code que j'utilise:
tcl
################### PUTQUICK #################proc putquick {arg}{append arg "\n"
putdccraw 0[string length $arg]$arg}
bind raw - NOTICE connexion
proc connexion {from key arg}{global botnick notc mod
set text [split$arg]if{[join[lrange$text25]] == "Notice -- Client connecting"}{set g_nick [lindex$text9]set g_user [string range [lindex[split[lindex$text10]"@"]0]1 end]set g_host [string range [lindex[split[lindex$text10]"@"]1]0 end-1]set g_userhost "$g_nick!$g_user@$g_host"set connexion "$g_nick $g_host"
putquick "PRIVMSG #test :\00301Connexion de:\00303 $g_nick \00301sous le host \00301$g_user\00304@\00301$g_host"}set logfichier [open"connect.txt""a+"]puts$logfichier"$connexion"close$logfichier}return0}}
bind pub - !connect connects
proc connects { nick uhost handle channel arg }{
putquick "NOTICE $nick :\0033..:Liste des connexions:.."catch{open"connect.txt""r"} connexion
set num 0while{![eof$connexion]}{gets$connexion verif
if{$verif ne ""}{incr num 1;putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"}}if{$num eq "0"}{putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))";return0catch{close$connexion}}
Donc, je sais pas d'ou commencer pour ajouter cette fonction.
Merci de votre aide à l'avance.
En fait ce qui te manque, c'est le moyen de rechercher dans le fichier un pseudo ou une IP précise, c'est bien ça ?
Donc, il y a deux choses à faire:
1) modifier le format de ton fichier pour ajouter les informations manquantes (date ?)
2) modifier la procédure connects pour utiliser les arguments ($args) et ne faire d'affichage que si l'argument passé est dans la ligne
J'ai effectué plusieurs tests, mais je ne comprends toujours pas comment faire, j'ai fait des recherches ailleurs mais pas grand monde serait me dire comment faire l'exemple que j'ai posté au début du poste, pourriez vous me faire un exemple ou avoir une aide plus précise.
09/09/2011, 07:39 (Modification du message : 09/09/2011, 08:02 par djkenny.)
salut
tcl
if{$verif ne ""&&[string match -nocase *$arg*$verif]}{incr num 1;putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"}
ça devrais faire ce que tu veux.
par contre à la fin tu fermes le fichier après un "return" donc en réalité il ne se ferme pas
tcl
if{$num eq "0"}{putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))";return0catch{close$connexion}
à remplacer par
tcl
catch{close$connexion}if{$num eq "0"}{putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))";return0
C'est en reconnaissant ses erreurs que l'on progresse
nan en fait j pense que la proc ne passe pas le if, vu que " puts $logfichier "$connexion"" ne se trouve pas dans le if l erreur est logique.
pour moi c est le if qui est faux
C'est en reconnaissant ses erreurs que l'on progresse
@CrazyCat: Merci pour la réponse, j'ai remplacé les lignes que tu m'avais précisé dans le code et j'ai toujours la même erreur en partyline
Code :
<Hestia> [22:32] Tcl error [connexion]: can't read "connexion": no such variable
@djkenny: Merci aussi pour tes réponses, et si seulement tu pourrai me corriger le code, çà serait trop bien. Merci encore pour l'aide et pour le temps que tu consacres pour nous aider.
tcl
################### PUTQUICK #################proc putquick {arg}{append arg "\n"
putdccraw 0[string length $arg]$arg}
bind raw - NOTICE connexion
proc connexion {from key arg}{global botnick notc mod
set text [split$arg]if{[string match -nocase "*notice*client*connecting*"$text]}{set g_nick [lindex$text9]set g_user [string range [lindex[split[lindex$text10]"@"]0]1 end]set g_host [string range [lindex[split[lindex$text10]"@"]1]0 end-1]set g_userhost "$g_nick!$g_user@$g_host"set ts [clockformat[clock seconds] -format"%d/%m/%Y %H:%M:%S"]set connexion "$g_nick $g_host $ts"
putquick "PRIVMSG #test :\00301Connexion de:\00303 $g_nick \00301sous le host \00301$g_user\00304@\00301$g_host"}set logfichier [open"connect.txt""a+"]puts$logfichier"$connexion"close$logfichier}return0}}
bind pub - !connect connects
proc connects { nick uhost handle channel arg }{
putquick "NOTICE $nick :\0033..:Liste des connexions:.."catch{open"connect.txt""r"} connexion
set num 0while{![eof$connexion]}{gets$connexion verif
if{$verif ne ""&&[string match -nocase *$arg*$verif]}{incr num 1;putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"}}catch{close$connexion}if{$num eq "0"}{putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))";return0}