Communauté sur les Eggdrops - Community about Eggdrops
News.tcl - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: News.tcl (/showthread.php?tid=322)

Pages: 1 2


News.tcl - Aragorn - 18/01/2009

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.


RE: News.tcl - BdS - 18/01/2009

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 )


RE: News.tcl - Aragorn - 18/01/2009

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


RE: News.tcl - BeussAy - 18/01/2009


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




RE: News.tcl - Aragorn - 18/01/2009

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


RE: News.tcl - CrazyCat - 19/01/2009

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.


RE: News.tcl - Babytigrou16 - 19/01/2009

mais hey j'ai essayer moi le TCL et il marche pas dans mon eggdrop il me donne aucun message d'erreur :O


RE: News.tcl - Aragorn - 19/01/2009

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é..."




RE: News.tcl - CrazyCat - 19/01/2009

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.


RE: News.tcl - Babytigrou16 - 25/03/2009

es-ce normal que la commande ne fonctionne que pour 1 salon et non plusieur ??


RE: News.tcl - Babytigrou16 - 30/03/2009

????????????????????????????????????


RE: News.tcl - CrazyCat - 30/03/2009

Quelle commande ? Il y en a plusieurs dans le tcl


RE: News.tcl - Babytigrou16 - 03/04/2009

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


RE: News.tcl - fedora - 03/04/2009

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


RE: News.tcl - MorDenX - 03/04/2009

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