News.tcl
#1
Alors voila j'ai un news.tcl mais j'ai un souci dessus

Voila le tcl en question:
TCL
############
# News.tcl #
############
 
set backroom "#Staff";
set base "/home/Aragorn/shell/eggnews/scripts/News/news.txt";
 
bind pub - "!helpnews" news:help
proc news:help {nick uhost handle chan text} {
    putserv "NOTICE $nick :\00312Debut de l'aide de News-Staff"
    putserv "NOTICE $nick :\0034!addnews <news>\00312 Pour ajouter une news"
    putserv "NOTICE $nick :\0034!news <numero>\00312 Pour voir une news precise"
    putserv "NOTICE $nick :\0034!delnews <numero>\00312 Pour suprimer une news"
    putserv "NOTICE $nick :\00312Fin de l'aide de News-Staff"
}
 
bind pub - "!addnews" news:sent
proc news:sent {nick uhost handle chan text} {
    set fp [open $::base a]
    puts $fp "$nick $text"
    close $fp
    putserv "NOTICE $nick :\00312Votre news a été enregistrée"
}
 
bind pub - "!news" news:read
proc news:read {nick uhost handle chan args} {
    if {[lindex $args 0] eq ""} {
        return 0
    } else  {
        set nb [lindex $args 0]
    }
    set fp [open $::base r]
    set cpt 0
    set data [read -nonewline $fp]
    close $fp
    foreach templine [split $data "\n"] {
        incr cpt
        if {$cpt == $nb} {
            set line [split $templine]
            set $user [lindex $line 0]
            putserv "PRIVMSG $::backroom $user\00312 => [lindex $line 1]"
            return 1
        }
    }
    putserv "PRIVMSG $::backroom \00312news $nb introuvable"
}
 
bind pub - "!delnews" news:del
proc news:del {nick uhost handle chan args} {
    if {[lindex $args 0] eq ""} {
        return 0
    } else  {
        set nb [lindex $args 0]
    }
    set fp [open $::base r]
    set cpt 0
    set data [read -nonewline $fp]
    close $fp
    set fp [open $::base w]
    foreach templine [split $data "\n"] {
        incr cpt
        if {$cpt != $nb} {
            puts $fp $templine
        }
    }
    close $fp
    putserv "NOTICE $nick :\00312La news $nb as été suprimée"
}



Alors la commande !addnews fonctionne parfaitement la commande !delnews fonctionne aussi le problème vient de la commandes !news nomero de la news sa ne marche pas:
TCL
-02:17:27- ‹Aragorn› !addnews je test pour voir
-02:17:28- Notice News-Staff:Aragorn Votre news a été enregistrée
-02:17:34- ‹Aragorn› !news 1



Et voila le message d'erreur en party-line avec le bot:
TCL
-02:17:34- <News> [01:20] Tcl error [news:read]: can't read "user": no such variable



Voila je ne vois pas d'ou vient le problème merci de votre aide futur.

Et j'aimerais aussi avoir une commande !newslist qui donnerai en notice la list complète des news et aussi avoir la date de la news.
Actuellement les news sont enregistrer de la façon "pseudo news" je voudrai quel soit enregistré de la façon "date pseudo news".

Voila j'arrete là merci de votre aide futur.
Cordialement Aragorn.
Répondre Avertir
#2
Je pense que cette ligne est fausse:
TCL
set $user [lindex $line 0]



Je pense que c'est plutôt:

TCL
set user [lindex $line 0]




Pour la date de la new:

TCL
clock format [clock seconds] -format "%d:%m:%y"



Cela te donnera la date sous le format jj/mm/aaaa ( source: http://wfr.tcl.tk/137 )
CrazyCat a écrit :La prochaine fois, essaye d'imaginer que j'ai un cerveau ...
Répondre Avertir
#3
Bonjour,
BdS j'ai modifier la ligne
TCL
set $user [lindex $line 0]


par
TCL
set user [lindex $line 0]


cela fonctionne mais j'ai un autre souci la news ne se lit pas entierement
TCL
-16:04:34- ‹Aragorn› !addnews sa marche ou pas
-16:04:36- Notice News:Vampire Votre news a été enregistrée
-16:04:42- ‹Aragorn› !news 1
-16:04:43- ‹News› Aragorn »» sa


Je pense que le problème vient de cette ligne
TCL
putserv "PRIVMSG $::backroom $user\00312 »» [lindex $line 1]"


en particulier [lindex $line 1]
Mais je ne sais pas comment régler se problème

Ensuite je ne sais pas ou intégrer cette ligne dans mon code
TCL
clock format [clock seconds] -format "%d:%m:%y"


je l'avais mise de cette manière mais sa ne fonctionne pas :s
TCL
bind pub - "!addnews" news:sent
proc news:sent {nick uhost handle chan text} {
    set fp [open $::base a]
    putserv "PRIVMSG $::backroom $user\00312 »» [lindex $line 1]"
    puts $fp "$nick $text"
    close $fp
    putserv "NOTICE $nick :\00312Votre news a été enregistrée"
}



Et pour finir comment créer un !newslist qui donnerais toute les news enregistrer sur la base en notice.

Cordialement Aragorn
Répondre Avertir
#4
TCL
putserv "PRIVMSG $::backroom $user\00312 => [lrange $line 1 end]"


Répondre Avertir
#5
BeussAy merci sa fonctionne impec
mais je ne sais tjs pas ou metre cette ligne pour avoir la date de la news
TCL
clock format [clock seconds] -format "%d:%m:%y"



et comment créer une commande !newslist qui renverai as la personne qui la la tapez toute les news en notice

Cordialement Aragorn
Répondre Avertir
#6
Aragorn a écrit :mais je ne sais tjs pas ou metre cette ligne pour avoir la date de la news
TCL
clock format [clock seconds] -format "%d:%m:%y"

Voila pour ajouter la date en début de ligne:
TCL
bind pub - "!addnews" news:sent
proc news:sent {nick uhost handle chan text} {
    set fp [open $::base a]
    puts $fp "[clock format [clock seconds] -format "%d:%m:%y"] $nick $text"
    close $fp
    putserv "NOTICE $nick :\00312Votre news a été enregistrée"
}


Aragorn a écrit :et comment créer une commande !newslist qui renverai as la personne qui la la tapez toute les news en notice
C'est assez simple, tu as déjà les éléments:
TCL
bind pub - "!newslist" news:list
proc news:list {nick uhost handle chan text} {
   set fp [open $::base r]
   set data [read -nonewline $fp]
   close $fp
   foreach templine [split $data "\n"] {
      set line [split $templine]
      puthelp "NOTICE $nick :$line"
   }
}


Note que j'utilise plutôt puthelp pour éviter le flood lorsque c'est un envoit d'un nombre inconnu de lignes.
Répondre
#7
mais hey j'ai essayer moi le TCL et il marche pas dans mon eggdrop il me donne aucun message d'erreur :O
Répondre Avertir
#8
Bonsoir, CrazyCat j'ai me le code que tu ma fourni sa fonctionne impec
Encore merci as vous pour votre aide
Je poste le code complet fini au cas ou d'autres personne en es besoin.
TCL
############
# News.tcl #
############
 
set backroom "#Staff";
set base "/home/votre-chemin/news.txt";
 
bind pub - "!helpnews" news:help
proc news:help {nick uhost handle chan text} {
    putserv "NOTICE $nick :\00312Debut de l'aide de News"
    putserv "NOTICE $nick :\0034"
    putserv "NOTICE $nick :\0034!addnews <news>\00312 Pour ajouter une news"
    putserv "NOTICE $nick :\0034!newslist\00312 Pour voir toute les news"
    putserv "NOTICE $nick :\0034!news <numero>\00312 Pour voir une news precise"
    putserv "NOTICE $nick :\0034!delnews <numero>\00312 Pour suprimer une news"
    putserv "NOTICE $nick :\0034"
    putserv "NOTICE $nick :\00312Fin de l'aide de News"
    putserv "PRIVMSG #Services :\00312News Help : \0034$nick"
}
 
bind pub - "!addnews" news:sent
proc news:sent {nick uhost handle chan text} {
    set fp [open $::base a]
    puts $fp "[clock format [clock seconds] -format "%d/%m/%y"] $nick $text"
    close $fp
    putserv "NOTICE $nick :\00312Votre news a été enregistrée"
    putserv "PRIVMSG #Services :\00312Add News : \0034$nick"
}
 
bind pub - "!newslist" news:list
proc news:list {nick uhost handle chan text} {
   set fp [open $::base r]
   set data [read -nonewline $fp]
   close $fp
   foreach templine [split $data "\n"] {
      set line [split $templine]
      puthelp "NOTICE $nick :$line"
      putserv "PRIVMSG #Services :\00312News list : \0034$nick"
   }
}
 
bind pub - "!news" news:read
proc news:read {nick uhost handle chan args} {
    if {[lindex $args 0] eq ""} {
        return 0
    } else  {
        set nb [lindex $args 0]
    }
    set fp [open $::base r]
    set cpt 0
    set data [read -nonewline $fp]
    close $fp
    foreach templine [split $data "\n"] {
        incr cpt
        if {$cpt == $nb} {
            set line [split $templine]
            set user [lindex $line 0]
            putserv "PRIVMSG $::backroom $user\00312 »» [lrange $line 1 end]"
            return 1
        }
    }
    putserv "PRIVMSG $::backroom \00312news $nb introuvable"
    putserv "PRIVMSG #Services :\00312News : \0034$nick"
}
 
bind pub - "!delnews" news:del
proc news:del {nick uhost handle chan args} {
    if {[lindex $args 0] eq ""} {
        return 0
    } else  {
        set nb [lindex $args 0]
    }
    set fp [open $::base r]
    set cpt 0
    set data [read -nonewline $fp]
    close $fp
    set fp [open $::base w]
    foreach templine [split $data "\n"] {
        incr cpt
        if {$cpt != $nb} {
            puts $fp $templine
        }
    }
    close $fp
    putserv "NOTICE $nick :\00312La news $nb as été suprimée"
    putserv "PRIVMSG #Services :\00312Del News : \0034$nick"
}
 
putlog "\00312News.tcl V1.0 par Vampire chargé..."


Répondre Avertir
#9
Si je puis me permettre une petite réflexion (personnelle), le script serait peut-être plus rapide si les news étaient chargées en mémoire (dans un tableau) lors de l'initialisation du tcl.

Pour la lecture d'une news, tu n'aurais plus qu'à lire la bonne ligne du tableau, sans ouvrir le fichier.
Pour la suppression et l'ajout, il te suffirait de modifier le tableau (supprimer l'élément X ou ajouter un élément) puis sauvegarder dans ton fichier.

Et tu pourrais capitaliser avec une procédure (news2file par exemple) qui se chargerait de l'écriture du fichier.
Répondre
#10
es-ce normal que la commande ne fonctionne que pour 1 salon et non plusieur ??
Répondre Avertir
#11
????????????????????????????????????
Répondre Avertir
#12
Quelle commande ? Il y en a plusieurs dans le tcl
Répondre
#13
tout les commandes je peux faire !news sur #Accueil et tout mes user von voir les news de staff ... :S il me faudrais un code comme sa avec la host

bind pub - !h+ h+
proc h+ { nick uhost handle channel arg } {
if {
[string match -nocase *@AdminZone.zet-land.org $uhost] ||
[string match -nocase *@OpZone.zet-land.org $uhost] ||
[string match -nocase *@TechAdmin.zet-land.org $uhost] ||
[string match -nocase *@ChefAdmin.zet-land.org $uhost] ||
[string match -nocase *@NetAdmin.zet-land.org $uhost] ||
[string match -nocase *@ChefZone.zet-land.org $uhost] ||
[string match -nocase *@ChanAdmin.zet-land.org $uhost] ||
[string match -nocase *@ChanOp.zet-land.org $uhost] ||
[string match -nocase *@AnimPlus.zet-land.org $uhost]
} {
putquick "MODE $channel +h $nick"
} }

C'est un exemple mais j'ignore comment ajouter les vhost dans la remote de news et j'ignore comment faire des news pour SEULEMENT 1 salon :S exmeple que jai mon eggdrop sur 2 salon ben que jaimerais qu'il dise les news du salon staff sur #staff et les news des admin sur #admin tu comprend ... ? Merci de répondre ^^

Coordialment Babytigrou16
Répondre Avertir
#14
bonjour,
pourquoi ne fait tu pas par système de flag ?

exemple :
TCL
bind pub S !news news:read
proc news:read {nick uhost handle chan args} {
if {(![matchattr $nick Z]) && (![matchattr $nick A]) && ([matchattr $nick S])} {
..blablabla..




ceci reste un simple exemple.


ps: stp utilise les balise tcl et /tcl merci
[font=Times New Roman]La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.[/font]
Répondre Avertir
#15
eu, fedora moi je lui proposerais directement un genre de global :
TCL
global vhostnews vhostaddnews vhostdelnews


ça serais mieux que mettre par pseudo et dans un fichier du style varglobal.tcl il mettrait :
TCL
set vhostnews {
  *@host.dlt
}


ainsi de suite et il met ça sur son bot dans script et il peut s'en servir pour ces prochain script Smile ça serais mieux je pense.
TCL
bind pub S !news news:read
proc news:read {nick host hand chan arg} {
    global vhostaddlesb femmeweb nfeweb listlesbweb listaxx
    foreach vhost $vhostnews $vhostaddnews $vhostdelnews {
    if {[string match -nocase $vhost $host]  {


après c'est jute un point de vue lol
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté