Expliquation tcl ;)
#1
Bonjour

J'ouvre un nouveau topic pour avoir quelque expliquations si cela ne vous dérange pas

alors

je suis fondateur de Tournois on-line sur irc

je me suis mon propre script gestion admin/ topic / etc... mais en mirc
et je voudrai savoir comment je peut faire pour arriver a un résultat proche du mien

dans mon code mirc je défini un mot de passe %pass
a utiliser a chaque action avec le bot

un administrateur arrive et pour lancer le tournois faire le changement de topic

il doit taper cette ligne

/msg botnick setadmin motdepass (=%pass) nick

Code :
on *:text:setadmin*:?:{
  if ($2 == %pass) {
    set %admin $3-
    notice $nick Ok Admin effectuer .
  }
  else {
    notice $nick Erreur mauvais pass.
  }
}
un utilisateur arrive et veut l'administrateur il tape donc la commande !admin
le bot répond L'administrateur est :%admin

le fait des commande je sais le faire

mais c'est juste la fonction admin comment le faire
je voudrai savoir comment je peut procédé pour faire cela en tcl après longue recherche je n'est pas encore trouver de solution ou d'explication claire


Merci bien de votre aide et a bientot
Répondre Avertir
#2
Donc, il faut que tu utilises un Bind sur "MSG", ce qui donne:
TCL
bind msg - "setadmin" tournoi:setadmin
 
set tournoi(password) "tonpass"
set tournoi(admin) ""
proc tournoi:setadmin {nick uhost handle text} {
   set args [split $text]
   if {[lindex $args 1] != $::tournoi(password)} {
      putserv "PRIVMSG $nick :Erreur dans le mot de passe"
      return 0
   }
   set ::tournoi(admin) [lindex $args 2]
   putserv "PRIVMSG $nick :L'administrateur est maintenant [lindex $args 2]"
}



A toi ensuite de gérer le reste, sachant qu'au lieu de %admin, c'est $::tournoi(admin) que tu utiliseras.
Répondre
#3
Merci bien a vous je vais continuer mon code en tcl je vous en remercie

sinon je voudrai savoir comment par exemple
en plus

quand l'admin se set
ou tape une autre commande çà change le topic du genre il se setadmin et çà change un topic prédéfini avec dedans $::tournoi(admin)


Merci bien de vos réponses je vais o travail je regardait çà ce soir Wink bonen soirée
Répondre Avertir
#4
Imaginons que sur le même principe tu veuilles modifier le topic avec la commande: "settopic ton nouveau topic" et que seul celui qui a été défini comme admin puisse le faire, il te faut ajouter:
TCL
bind msg - "settopic" tournoi:topic
 
proc tournoi:topic {nick uhost handle text} {
   if {$nick != $::tournoi(admin) } {
      putserv "PRIVMSG $nick :Tu n'es pas l'admin actuel"
      return 0
   }
   set args [split $text]
   putserv "TOPIC #canal :[lrange $args 1 end]"
}


Répondre
#5
TCL
bind msg - "setadmin" tournoi:setadmin
bind msg - "settournois" tournoi:settournois
bind pubm - * !admin
bind pubm - * !tn

#set de ladmin
set tournoi(password) "1234"
set tournoi(admin) ""
proc tournoi:setadmin {nick uhost handle text} {
   set args [split $text]
   if {[lindex $args 1] != $::tournoi(password)} {
      putserv "PRIVMSG $nick :Erreur dans le mot de passe"
      return 0
   }
   set ::tournoi(admin) [lindex $args 2]
   putserv "PRIVMSG $nick :OK Changement admin effectuer [lindex $args 2]"
}

#set de la commande tn
set tournoi(password) "1234"
set tournoi(tournois) ""
proc tournoi:settournois {nick uhost handle text} {
   set args [split $text]
   if {[lindex $args 1] != $::tournoi(password)} {
      putserv "PRIVMSG $nick :Erreur dans le mot de passe"
      return 1
   }
   set ::tournoi(tournois) [lindex $args 2]
   putserv "PRIVMSG $nick :OK Changement de la cmd tn effectuer [lindex $args 2]"
}

 
#reaction des commandes 
proc !admin {nick uhost hand chan arg} { 
  if { [regexp "!admin" $arg] } { 
    putserv "PRIVMSG $chan :L'admin Du Tournois Est :  $::tournoi(admin)" 
  } 
} 
 
proc !tn {nick uhost hand chan arg} { 
  if { [regexp "!tn" $arg] } { 
    putserv "PRIVMSG $chan :Tournois :  $::tournoi(tournois)" 
  } 
}



Salut donc j'ai c/c ce que tu ma écris j'ai donc rajouter proc pour faire dire la commande sur le channel si un user tape !admin ou !tn

çà fonctionne très bien le pass etc la commande nickel

il me dit en pv l'admin est maintenant blabla mais aucune réaction au niveau du channel a la commande !admin
Merci bien Wink
Répondre Avertir
#6
N'utilise pas regexp, c'est lourd et inutile, à part provoquer des bugs ça te serviras pas à grand chose.

http://xineos.free.fr/listes_tcl.html

Utilises [split] et [lindex].
Répondre Avertir
#7
De plus, des noms de procédure ne devraient pas comporter de caractères spéciaux (comme le !), hormis les ":".
Tu peux très bien faire:
TCL
bind pubm - !admin tournoi:getadmin
 
proc tournoi:getadmin { nick uhost handle chan text } {
   set args [split $text]
   set key [stripcodes abcgru [lindex $args 0]]
   set key [string range $key 1 end]
   if { $key == "admin" } {
      putserv "PRIVMSG $chan :L'admin du tournois est : $::tournoi(admin)"
   }
   return 0;
}



Pour information, Cyril utilise pubm plutôt que pub pour éviter le souci des personnes qui écrivent en couleur, le premier caractère de la ligne étant alors le code couleur (et non pas le "!")
Répondre
#8
D'accord merci je vais essayer çà Wink

j'ai une petite erreur quand a la fonction setadmin

[15:31:56] <[5v5cs]A> setadmin 1234 Cyril
-{15:31:58}- < Tournois1 > Erreur dans le mot de passe

je me demande si les ( password ) son bien placer dans le script car pourtant le bon pass etc
Répondre Avertir
#9
Il ne faut faire qu'une fois chaque set (tournoi(password) et tournoi(tournois)).
Ensuite, j'ai fait une erreur pour la procédure setadmin:
TCL
if {[lindex $args 1] != $::tournoi(password)} {


Avec un bind MSG, $text contient tout ce qui suit la commande, c'est donc:
TCL
if {[lindex $args 0] != $::tournoi(password)} {


Répondre


Atteindre :


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