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


Droit user unique
#1
Question 
Hello,

Afin d'améliorer mon codage de gitan pour un tcl, je souhaite qu'un seul user ait acces aux commandes du bot. Je sais que sa se gère via les flags mais je ne sais pas comment le mettre en place...

tcl
bind pub - "!addpub" add:pub
proc add:pub {n ht hd ch a} {
set pub [lrange $a 0 end]
if {$ch == "#smoothoff"} {
	if {$pub == ""} {putspeed "notice $n :Syntaxe => !addpub < message >"; return}
	if {![file exists "scripts/annonce.txt"]} {set files [open "scripts/annonce.txt" a+]; close $files}
	# enregistrement de la news #
	set num [expr {int(rand() * 37)}]
	set files [open "scripts/annonce.txt" a+]
	puts $files "$pub"
	close $files
	putspeed "notice $n :Annonce enregistre"
} else {
	putspeed "notice $n :Erreur Salon"
} }



Je pense qu'il est possible d'optimisé le codage.. je sèche un peu !

Merci d'avance pour votre aide
  Répondre
#2
Un seul utilisateur ? Connu de l'eggdrop donc ?
tcl
proc add:pub {n ht hd ch a} {
   if { $hd ne "toto" } { return 0 }


Et je te conseille fortement de mieux nommer les variables de tes procédures:
tcl
proc add:pub {nick host handle chan args} {


  Répondre
#3
Oui, un ajout d'utilisateur via la PL
  Répondre
#4
Salut,

Voir du côté de "matchattr".

Si tu ne veut qu'une personne spécifique puisse avoir accès à la commande en la tapant sur un salon par exemple.
Ceci peut-être réalisable autrement, mais c'est une piste pour tu puisse voir plus ou moins.
Sinon en utilisant aussi le système de "setudef flag".

tcl
if ![matchattr $handle o|m $chan] {
         puthelp "notice $nick :Vous n'avez pas le level suffisant dans $::botnick pour utiliser cette commande $nick !"
    return 0
    }


Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#5
Merci pour ta réponse. J'avoue que je suis un peu dépassé pour le coup. Effectivement, avec le "matchattr" je peux faire un truc

j'avais pensé à ça :

tcl
if {![matchattr $hand A]} {return 0}
 
if {[matchattr $hand A]} {


mais le souci c'est que je dois ajouter moi même l'user. Je sais pas s'il existe un moyen autre...
  Répondre
#6
Heu... Dans tous les cas, tu devras ajouter l'utilisateur dans la userlist de ton eggdrop, ça ne se fait pas magiquement.
  Répondre
#7
Ah ok. J'en demande trop pour le coup ^^ #gourmand :')
  Répondre
#8
Pour ajouter un user dans la userlist faut tu fasse manuellement, ou via un code..

Prend exemple sur le addop du Gestion.Bot de l'époque j'avais pondu ça :

tcl
	proc addop { nick host hand text } {
         set vhand [lindex [split [lindex $text 0] |] 0]
         set chan [lindex $text 1]
	if {[channel get $chan GB]==0} { return; }
    if { [nick2hand $nick] eq "*" } {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(access)]"
    return 0
    }
    if ![isauth $hand] {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(auth)]"
    return 0
    }
    if {![string match #* $chan]} {
         puthelp "notice $nick :Syntaxe incorrecte ! ( /msg $::botnick addop <pseudo> <#salon> ) !"
    return 0
    }
    if ![validchan $chan] {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(salon)]"
    return 0
    }
    if ![matchattr $hand o|m $chan] {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(level)]"
    return 0
    }
    if [matchattr $vhand |n $chan] {
         puthelp "notice $nick :Ce pseudo figure dans l'Access-List Owners sur $chan !"
    return 0
    }
    if [matchattr $vhand |m $chan] {
         puthelp "notice $nick :Ce pseudo figure dans l'Access-List Masters sur $chan !"
    return 0
    }
    if [matchattr $vhand |o $chan] {
         puthelp "notice $nick :Ce pseudo figure dans l'Access-List Opérateurs sur $chan !"
    return 0
    }
    if [matchattr $vhand |m $chan] {
         puthelp "notice $nick :Ce pseudo figure dans l'Access-List Masters sur $chan !"
    return 0
    }
         adduser $vhand $vhand*!*@*
		 setuser $vhand HOSTS $vhand!*@*
         setuser $vhand HOSTS $vhand|*!*@*
         chattr  $vhand -h|+o $chan
		 foreach line [split $::GB::msg(pvmsg) "\n"] {
		 putserv "privmsg $vhand :$line"
        }
         puthelp "notice $nick :$vhand a bien été ajouté(e) en tant qu'opérateur sur $chan !"
         putserv "privmsg $GB::log :\00314Commande \0036\[\0033Add-Op\0036\] \0031par : \0034$hand"
		 save
}



regarde la partie : setuser + chattr en bas du code, ça va répondre à ta question.
Bien évidament il existe des moyen plus simple, mais bon la c'est par pur aide et exemple.

De plus

tcl
if {![matchattr $hand A]} {return 0}
 
if {[matchattr $hand A]} {



N'as aucun sens :)
va dll Gestion.Bot v2, et dedans tu aura les exemple que tu cherche, inspire toi de ça pour comprendre mieux le fonctionnement
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#9
Hello,

Merci pour ton info, j'ai testé ton codage et en PL j'ai juste ça en info "addop NICK #SALON" mais aucune notice pour me prévenir de l'ajout de l'user.

En revanche, j'ai un souci pour le codage

tcl
#############################################################
 
#   ____        _     _ _      _ _              _       _   #
 
#  |  _ \ _   _| |__ | (_) ___(_) |_ ___       | |_ ___| |  #
 
#  | |_) | | | | '_ \| | |/ __| | __/ _ \      | __/ __| |  #
 
#  |  __/| |_| | |_) | | | (__| | ||  __/  _   | || (__| |  #
 
#  |_|    \__,_|_.__/|_|_|\___|_|\__\___| (_)   \__\___|_|  #                           
 
#############################################################
proc addop { nick host hand text } {
        set vhand [lindex [split [lindex $text 0] |] 0]
        set chan [lindex $text 1]
if {[channel get $chan GB]==0} { return; }
   if { [nick2hand $nick] eq "*" } {
        puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(access)]"
   return 0
   }
   if ![isauth $hand] {
        puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(auth)]"
   return 0
   }
   if {![string match #* $chan]} {
        puthelp "notice $nick :Syntaxe incorrecte ! ( /msg $::botnick addop <pseudo> <#salon> ) !"
   return 0
   }
   if ![validchan $chan] {
        puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(salon)]"
   return 0
   }
   if ![matchattr $hand o|m $chan] {
        puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(level)]"
   return 0
   }
   if [matchattr $vhand |n $chan] {
        puthelp "notice $nick :Ce pseudo figure dans l'Access-List Owners sur $chan !"
   return 0
   }
   if [matchattr $vhand |m $chan] {
        puthelp "notice $nick :Ce pseudo figure dans l'Access-List Masters sur $chan !"
   return 0
   }
   if [matchattr $vhand |o $chan] {
        puthelp "notice $nick :Ce pseudo figure dans l'Access-List Opérateurs sur $chan !"
   return 0
   }
   if [matchattr $vhand |m $chan] {
        puthelp "notice $nick :Ce pseudo figure dans l'Access-List Masters sur $chan !"
   return 0
   }
        adduser $vhand $vhand*!*@*
setuser $vhand HOSTS $vhand!*@*
        setuser $vhand HOSTS $vhand|*!*@*
        chattr  $vhand -h|+o $chan
foreach line [split $::GB::msg(pvmsg) "\n"] {
putserv "privmsg $vhand :$line"
       }
        puthelp "notice $nick :$vhand a bien été ajouté(e) en tant qu'opérateur sur $chan !"
        putserv "privmsg $GB::log :\00314Commande \0036\[\0033Add-Op\0036\] \0031par : \0034$hand"
save
}
 
bind pub - "!addpub" add:pub
proc add:pub {nick host hand chan arg} {
set pub [lrange $a 0 end]
if {$ch == "#salon"} {
if {$pub == ""} {putspeed "notice $n :Syntaxe => !addpub < message >"; return}
if {![file exists "scripts/annonce.txt"]} {set files [open "scripts/annonce.txt" a+]; close $files}
# enregistrement de la news #
set num [expr {int(rand() * 37)}]
set files [open "scripts/annonce.txt" a+]
puts $files "$pub"
close $files
putspeed "notice $nick :Annonce enregistre"
} else {
putspeed "notice $nick :Erreur Salon"
} }
 
 
;########################################
 
;##                                    ##
 
;##     Timer phrase aléatoire         ##
 
;##   ##
 
;########################################
 
set fichier "/home/D/shell/scripts/annonce.txt"
 
set canal "#salon"
 
set fi [open $fichier "r"]
 
set phrases [split [read -nonewline $fi] "\n"]
 
close $fi
 
 
bind cron - "*/20 * * * *" randlecture
 
proc randlecture {mm hh dd mo yy} {
 
  set laphrase [lindex $::phrases [rand [llength $::phrases]]]
 
  putserv "PRIVMSG $::canal :$laphrase"
 
}
 
putlog "Publicite.tcl by Datura"



Jusque là, j'avais pas de souci avec le codage du tcl mais maintenant j'ai cette erreur en PL [code]Tcl error [add:pub]: can't read "a": no such varia[code]
  Répondre
#10
Hello, heu j'ai regarder vite fait.

Demain je regarderais mieux, mais ya pas mal d'incompréhension, et c'est un poil le bordel l'organisation et l'ordre de ta source.
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#11
Bonjour,

Alors j'ai regarder ton code de plus près..

Lorsque je te dit de t'inspiré c'est pas de copié coller et ça va fonctionné direct sans lire le code..
Regardons les erreurs.

tcl
if {[channel get $chan GB]==0} { return; }


Ceci et une fonction avec setudef, c'est à dire le code va vérifié si sur le salon précis le setudef "GB" est actif ou pas. Mais si tu n'as pas activé sa ne fera rien, de plus il faudrait mettre dans le code :

tcl
setudef flag GB


NB : GB peut-être modifié par n'importe quoi du moment que tu respecte la règle pour son appel etc.

tcl
puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(access)]"


Où es appeler msg(access) ? de plus : $::GB et en rapport avec namespace ou est-il ?
La même pour les autres messages..

tcl
if ![isauth $hand] {


Il manque la proc là aussi.. donc aucune chance que sa fonctionne

tcl
foreach line [split $::GB::msg(pvmsg) "\n"] {


Même erreur cité un peut plus haut faut regarder ou c'est appeler

Ensuite tu cite :
Citation :Jusque là, j'avais pas de souci avec le codage du tcl mais maintenant j'ai cette erreur en PL [code]Tcl error [add:pub]: can't read "a": no such varia[code]
C'est faux ce que tu dis.., car c'est suite à la modification que @CrazyCat ta dit de faire que tu n'as pas modifié partout.
Ton erreur et dans ta source de base ici :

tcl
set pub [lrange $a 0 end]


$a = ? regarde mieux la correction demander par CrazyCat, et le code de début tu aura la réponse :)

tcl
if {$pub == ""} {putspeed "notice $n :Syntaxe => !addpub < message >"; return}


Tu m'explique l'intérêt de ton putspeed appeler nulle par ? Puis pour une notice un simple puthelp et tout aussi éfficace surcharge pas le server pour un bout de code..
Lien wiki : https://wiki.eggdrop.fr/Puthelp
regarde aussi : Voir aussi putserv etc..

ah et pour finir..
tcl
proc addop { nick host hand text } {


Le bind il et où ?
Wiki : https://wiki.eggdrop.fr/Binds

La tu as fait des erreurs avec un simple c/c
Essaye d'adapté et de voir les erreurs, te guider pas de soucis mais la franchement..
Après c'est pas méchamment hein, mais plus pour toi, sa peut s'adapté à ta demander mais pas de cette manière ci.
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#12
Bonjour,

Merci pour tes réponses. Je crois que suis trop dépassé niveau codage surtout... du je fais de l'assemblage mais pas concluant :/
  Répondre
#13
Salut,

hmm, dit moi exactement ce que tu veut. Le code doi faire quoi ? et que certains doivent y avoirs accès ?

Je vais faire un exemple, et ensuite avec ça tu verra.. Mais je ne garantie pas ça fonctionnera, juste je te mets sur la bonne piste :)
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#14
En gros, c'est une système d'annonce pour un salon particulier toutes les 20 minutes. Seul d'owner du salon peut ajouter et supprimer les annonces. En gros, !addnews <message> une notice retour, un !delnews pour remettre à zéro. Pour le codage des annonces le code fonctionne, c'est juste la parti, add "securisé" qui me pose souci. Je souhaite lui coller une flag. J'ai repris ça et sa fonctionne :
tcl
bind pub - !newchefdebot dop:chefdebot
 
proc dop:chefdebot {nick host hand chan arg} {
 
global chanoff botnick
 
set chefdebot [split [lindex $arg 0] "|" ]
 
set chefdebot1 [string range [lindex $chefdebot 0] 0 8]
 
if {$chefdebot == ""} {puthelp "notice $nick :4Erreur 14=> 3Veuillez préciser un pseudo 6!newchefdebot <Pseudo>"; return 0}
 
if {![matchattr $hand A]} {puthelp "notice $nick :4Vous n'avez pas les accès requis !"; return 0}
 
if {[matchattr $hand A]} {
 
adduser $chefdebot1
 
chattr $chefdebot1 +J
 
setuser $chefdebot1 HOSTS $chefdebot1!*@*
 
setuser $chefdebot1 HOSTS $chefdebot|*!*@*
 
foreach robot [userlist B] {
 
puthelp "privmsg $robot :newchefdebot $chefdebot"
 
}
 
puthelp "notice $nick :14Vous venez d'ajouter 7$chefdebot 14en tant que 10CHEF DE BOT 14sur le réseau"
 
puthelp "notice $chefdebot :14Vous venez d'être ajouter en tant que 10CHEF-DE-BOT 14sur le réseau"
 
}
 
putserv "privmsg #smoothoff :12NEW-CHEF-DE-BOT 14=> 7$chefdebot 14Vient d'être ajouter en tant que 10CHEF-DE-BOT 14sur le réseau"
 
}
proc scan:chefdebot {} {
 
set num 0
 
foreach users [userlist] {
 
if {[matchattr $users J]} {
 
incr num 1
 
lappend nombre $num
 
}
 
}
 
If {$nombre == "5"} {putspeed "notice $nick :Access Chef de bot atteint a 5"}
 
}


  Répondre
#15
D'accord je vois le principe, je vais tenter de te faire un exemple..
Ensuite je vais commenter et ont verra aussi un autre point sur la partie optimisation.. Je pense il et faisable de faire un truc sympa.

Par contre ne disposant plus de server dédié tu sera le testeur.

Je regarde ça lorsque je suis dispo

Envoyé de mon Redmi Note 8T en utilisant Tapatalk
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Problème de droit J M 2 1,587 27/10/2010, 17:42
Dernier message: J M

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)