Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


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.
#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 )
#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
#4

tcl
putserv "PRIVMSG $::backroom $user\00312 => [lrange $line 1 end]"

#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
#6
Aragorn Wrote: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 Wrote: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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#7
mais hey j'ai essayer moi le TCL et il marche pas dans mon eggdrop il me donne aucun message d'erreur :O
#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é..."

#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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#10
es-ce normal que la commande ne fonctionne que pour 1 salon et non plusieur ??
#11
????????????????????????????????????
#12
Quelle commande ? Il y en a plusieurs dans le tcl
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#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
#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
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.
#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 :) ç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


Possibly Related Threads…
Thread Author Replies Views Last Post
Information Adaptation d'un tcl news.tcl KeeViiNou 12 2,740 13/05/2020, 10:49
Last Post: KeeViiNou
  Tcl gestion de news / Programme Radio KeeViiNou 5 6,251 29/12/2012, 13:27
Last Post: CrazyCat
  Petit souci de tcl !news modifier en !absent snip74 1 5,513 12/04/2012, 13:39
Last Post: snip74
  Eggdrop , diffuser des news o0TaGa0o 6 4,950 01/12/2010, 18:26
Last Post: DnS
  news-linuxfr.tcl dimoala 4 4,042 26/08/2009, 18:32
Last Post: dimoala

Forum Jump:


Users browsing this thread: 1 Guest(s)