[Résolu] rajout d'une exception sur une commande de kick
#1
Bonjour à tous,

Alors voila j'ai créer il y a quelque temps un petit script de modération pour un ami aujourd'hui je voudrais rajouter une exception sur celui-ci.
Je m'explique : de la façon que j'ai codé ses commandes il se trouve que les modérateurs peuvent kick un Chan Master par exemple. Se que je voudrais c'est qu'en fonction du vhost la commande ne fonctionne pas

J'ai tenter de faire ainsi
tcl
proc kickraison { nick host hand channel text } {
 global vhostmodo2 kickraison
 set args [split $text]
 set victim [lindex $args 0]
 set reason [join [lrange $args 1 end]]
 foreach vhost $vhostmodo2 {
   if { $vhost == $vhostmodo } { return 0 }
   if [string match -nocase $vhost $host] {
     putserv "PRIVMSG $::cs kick $channel $victim $reason"
     putserv "PRIVMSG $::log :\0034$victim \00312à été kick de \0034$channel \00312par \0034$nick \00312pour la raison\0037 $reason."
     }
  }
}


Non fonctionnel et j'ai se message en PL
Code :
[14:51:57] Tcl error [kickraison]: can't read "vhostmodo": no such variable
Et aussi de cette manière
tcl
proc kickraison { nick host hand channel text } {
 global vhostmodo2 kickraison vhostmodo
 set args [split $text]
 set victim [lindex $args 0]
 set reason [join [lrange $args 1 end]]
 foreach vhost $vhostmodo2 $vhostmodo {
   if { $vhost == $vhostmodo } { return 0 }
   if [string match -nocase $vhost $host] {
     putserv "PRIVMSG $::cs kick $channel $victim $reason"
     putserv "PRIVMSG $::log :\0034$victim \00312à été kick de \0034$channel \00312par \0034$nick \00312pour la raison\0037 $reason."
     }
  }
}


cette façon est non fonctionnel aussi et j'ai se message en PL
Code :
[14:55:39] Tcl error [kickraison]: wrong # args: should be "foreach varList list ?varList list ...? command"
J'avoue que je ne sais pas comment mi prendre pour arriver à mes fins
J'ai bien-sur bien définie le bloc "set vhostmodo" avec les vhost dont les commandes ne doivent pas fonctionné.
Merci d'avance pour votre aide.

Bien à vous.

Bye.
Répondre Avertir
#2
Il et préférable d'avoir le code complet pour une meilleur aide
Répondre Avertir
#3
salut

" set vhost le.vhost "


peut etre ?
Répondre Avertir
#4
ok aliasangelus donc voici le le code la procédure sans les modifications
tcl
set log "#services"
set cs "ChanServ"
 
set vhostmodo2 {
  RooT@domain.tld
  *@TechAdmin.domain.tld
  *@NetAdmin.domain.tld
  *@Admin.domain.tld
  *@CoAdmin.domain.tld
  *@IRCop.domain.tld
  *@ChanMaster.domain.tld
  Ange@Faucheur.domain.tld
}
 
set vhostmodo1 {
  *@Moderateur.domain.tld
  *@Moderatrice.domain.tld
  *@Operateur.domain.tld
  *@Operatrice.domain.tld
}
 
set vhostmodo {
  RooT@domain.tld
  *@TechAdmin.domain.tld
  *@NetAdmin.domain.tld
  *@Admin.domain.tld
  *@CoAdmin.domain.tld
  *@IRCop.domain.tld
  *@ChanMaster.domain.tld
  Ange@Faucheur.domain.tld
  *@Moderateur.domain.tld
  *@Moderatrice.domain.tld
  *@Operateur.domain.tld
  *@Operatrice.domain.tld
  *@Services.domain.tld
}
 
proc kickraison { nick host hand channel text } {
  global vhostmodo2 kickraison
  set args [split $text]
  set victim [lindex $args 0]
  set reason [join [lrange $args 1 end]]
  foreach vhost $vhostmodo2 {
    if [string match -nocase $vhost $host] {
      putserv "PRIVMSG $::cs kick $channel $victim $reason"
      putserv "PRIVMSG $::log :\0034$victim \00312a été kick de \0034$channel \00312par \0034$nick \00312pour la raison :\0037 $reason"
      }
   }
}


la procédures avec les modifications :
tcl
proc kickraison { nick host hand channel text } {
  global vhostmodo2 kickraison
  global vhostmodo kickraison
  set args [split $text]
  set victim [lindex $args 0]
  set reason [join [lrange $args 1 end]]
  if { $vhost == $vhostmodo } { return 0 }
  foreach vhost $vhostmodo2 {
    if [string match -nocase $vhost $host] {
      putserv "PRIVMSG $::cs kick $channel $victim $reason"
      putserv "PRIVMSG $::log :\0034$victim \00312à été kick de \0034$channel \00312par \0034$nick \00312pour la raison\0037 $reason."
      }
   }
}


Et le message d'erreur en PL :
Code :
[15:23:12] Tcl error [kickraison]: can't read "vhost": no such variable
Donc si je comprend bien je n'arrive pas a lire la variable "vhost" de la ligne
Code :
if { $vhost == $vhostmodo } { return 0 }
suis-je sur la bonne voix ?

Merci d'avance pour votre future aide.

Bien à vous.

Bye.
Répondre Avertir
#5
re,

ne pas mettre *@vhost mais plutot @vhost1 @vhost2 ect ... (peut être même juste mettre vhost1 vhost2 ect .. sans le @ )
à tester
Répondre Avertir
#6
@cestlemien
Je viens de tester comme tu me la dit ne fonctionne pas :( toujours le même message en pl :s
Répondre Avertir
#7
en relisant, je vois que tu appelles une proc vhostmodo1 .... et vhostmodo2, puis ailleurs dans ton code on vois, vhostmodo et vhostmodo2, peut etre voir par ici aussi .Et je ne suis pas certain que aie dans le bon sens ,ni les bons appels.

Perso je ferrait je pense plutot un systeme sur flag dans le bot, genre "flag 10" et "flag 11" corespondraient à tes "vost1" et "vhost2" exemple:

ajouter un user modo1, ajouter tous les hosts correspondants (vhosts)
.+user modo1
.+host modo1 *!RooT@domain.tld
.+host modo1 *!*@TechAdmin.domain.tld

(faire la liste) *!*@NetAdmin.domain.tld *!*@Admin.domain.tld *!*@CoAdmin.domain.tld
*!*@IRCop.domain.tld *!*@ChanMaster.domain.tld *!Ange@Faucheur.domain.tld

ensuite ajouter le flag .
.chattr modo1 +10

refaire la meme choser pour "modo2"

et enfin partir la dessus pour ton code (plus simple je pense de modifier /ajouter/retirer en partyline que sur un fichier tcl)

Cordialement.
Répondre Avertir
#8
@cestlemien pour le vhostmodo1 se sont d'autre commande au-quelle ces vhost ont accès tout simplement

Pour le vhostmodo se sont les vhost sur les quelles je veux que les commandes ne fonctionne pas
Et pour le moment je ne maitrise absolument pas les flags du bot...

Je pense pas que sa doit être bien compliquer de rajouter cette exception sur mon code en question

Encore merci pour votre aide future
Répondre Avertir
#9
Si je comprend bien, Tu veut que sur une liste de vhost ont puisse pas éxecuter la commande sur eux.

Une sorte de protection.. J'avais fait ça sur mon TCL de Gestion.Bot

Si la personne était dans le fichier des exempt sa leur retourner ceci :

tcl
if {[progfile exempt icr $nickverife]!="0"} {
         putserv "notice $nick :Attention le Nick: \2[lindex $text 0]\2 est dans la liste des protégés."



Regarde le code, tu devrais avoir ce que tu cherche comme exemple ;)

Puis essaye plutôt de travaillé avec les flag Eggdrop je trouve sa mieux..
En utilisant les vhost, je suppose que ton Eggdrop et Ircop à évitez ;)

Si besoin dit le ont pourra voir pour te faire un truc plus propre et qui fonctionne bien sur un eggdrop normal ;)
Répondre Avertir
#10
salut,

Oui aliasangelus tu as bien compris le principe :)
Hier je me suis rendu compte que je vais devoir repenser le code entièrement dans le staff nous avons des belges des canadiens et chose que je ne comprend pas avec eux les commandes de modération ne fonctionne pas.
Je m'explique toutes les commandes passant par le système de vhost fonctionne très bien avec les membres du staff française mais sont non fonctionnel avec les membres du staff en belge et au canadien.

Donc oui je veux un coup de main de revoire entièrement le code pour qu'il fonctionne bien sur l'eggdrop en utilisant les flags mais comme je l'ai dit ma connaissance sur les flags est casi nul pour ne pas dire completement nul

EDIT : le code est non fonctionnel avec les belges uniquement chose que je comprend pas...

Merci d'avance.

Bye.
Répondre Avertir
#11
Bon, Pour commencé tu veut un tcl qui fasse genre "!op !kick ! ban etc" ?

Pour ce qui et des flag, je vais te filer un exemple dans le courant de la journée, avec des explication précises et des test que je ferais pour te faire voir
Répondre Avertir
#12
Salut,

D'accord sa marche encore merci :)

Edit : oui aliasangelus un tcl du genre !k !kb

dans se style la
tcl
bind pub - !kr kickraison
bind pub - !kflood kickflood
 
proc kickraison { nick host hand channel text } {
  global vhostmodo1 kickraison
  set args [split $text]
  set victim [lindex $args 0]
  set reason [join [lrange $args 1 end]]
  foreach vhost $vhostmodo1 {
    if [string match -nocase $vhost $host] {
      putserv "PRIVMSG $::cs kick $channel $victim $reason"
      putserv "PRIVMSG $::log :\0034$victim \00312a été kick de \0034$channel \00312par \0034$nick \00312pour la raison :\0037 $reason"
      }
   }
}
 
proc kickflood { nick host hand channel arg } {
  global vhostmodo1 kickflood
  foreach vhost $vhostmodo1 {
    if [string match -nocase $vhost $host] {
      putserv "PRIVMSG $::cs kick $channel $arg \00312Le flood est interdit sur les salons officiels !"
      putserv "PRIVMSG $::log :\0034$arg \00312a été kick de \0034$channel \00312par \0034$nick \00312pour flood."
      }
   }
}


Voila encore merci de ton aide.
Répondre Avertir
#13
A savoir que sur le code que j'avais avant il y avais certaine commande réserver pour les chanmaster que les ops et modos ont pas acces je souhaiterais aussi pouvoir faire pareil avec se code

Bien à toi.

Et encore merci de ton aide précieuse
Répondre Avertir
#14
La en faite dans ton code :

tcl
bind pub - !kr kickraison
bind pub - !kflood kickflood
 
proc kickraison { nick host hand channel text } {
  global vhostmodo1 kickraison
  set args [split $text]
  set victim [lindex $args 0]
  set reason [join [lrange $args 1 end]]
  foreach vhost $vhostmodo1 {
    if [string match -nocase $vhost $host] {
      putserv "PRIVMSG $::cs kick $channel $victim $reason"
      putserv "PRIVMSG $::log :\0034$victim \00312a été kick de \0034$channel \00312par \0034$nick \00312pour la raison :\0037 $reason"
      }
   }
}
 
proc kickflood { nick host hand channel arg } {
  global vhostmodo1 kickflood
  foreach vhost $vhostmodo1 {
    if [string match -nocase $vhost $host] {
      putserv "PRIVMSG $::cs kick $channel $arg \00312Le flood est interdit sur les salons officiels !"
      putserv "PRIVMSG $::log :\0034$arg \00312a été kick de \0034$channel \00312par \0034$nick \00312pour flood."
      }
   }
}



Ont va prendre la partis :

tcl
bind pub - !kr kickraison
bind pub - !kflood kickflood



C'est ici que nous allons prend l'exemple.

Donc nous avons le bind pub, il faut lui interpréter le niveau de flag.
à savoir tu à deux niveau de flag sur eggdrop

1) Général
2) Local

Le général celui qui offre un accès partout.
Le local celui qui offre un accès sur un salon.

Voici un exemple de flag général :

tcl
bind pub o !kr kickraison



Ici la personne si elle à le flag +o ce qui et Operateur général, elle pourra se servir de la commande, si la personne ne la pas elle pourra pas.

tcl
bind pub o|o !kr kickraison



La partis bind pub -|o <= celui la et pour si la personne ayant un accès sur un salon définis, puisse se servir de la commande.
C'est ainsi que fonctionne les système de flag.

Je te donne le lien avec de bonne explication, et puis ceci reste mon avis personnel. Les flag reste mieux pour une utilisation d'un eggdrop
C'est l'une de c'est fonction principal, donc autant utilisé quelques chose qui existe et qui fonctionne.

https://wiki.eggdrop.fr/Flag

Si besoin hésite pas
Répondre Avertir
#15
Donc si j'ai bien compris mon code devrais ressembler a quelque chose comme
tcl
set cs "ChanServ"
set log "#Services"
 
bind pub o !kr kickraison
bind pub o !kflood kickflood
 
proc kickraison { nick host hand channel text } {
 global cs log
 set args [split $text]
 set victim [lindex $args 0]
 set reason [join [lrange $args 1 end]]
     putserv "PRIVMSG $cs kick $channel $victim $reason"
     putserv "PRIVMSG $log :\0034$victim \00312a été kick de \0034$channel \00312par \0034$nick \00312pour la raison :\0037 $reason"
}
 
proc kickflood { nick host hand channel arg } {
 global cs log
 putserv "PRIVMSG $cs kick $channel $arg \00312Le flood est interdit sur les salons officiels !"
 putserv "PRIVMSG $log :\0034$arg \00312a été kick de \0034$channel \00312par \0034$nick \00312pour flood."
}


ai-je bon ?
Et vu qu'il y a "2 niveau" je m'explique modo, op et protect ont accès a certaines commandes de modération.
Et ChanMaster Coadmin Admin etc... on aussi accès au commande de modération mais aussi à d'autre commande (aucune commande ircop le bot ne l'ai pas) mais des commandes de gestions du salon.
donc dois-je refaire les commandes avec le "flag m" en gros comme ça ou puis-je optimiser ça ?
tcl
set cs "ChanServ"
set log "#Services"
 
bind pub o !kr kickraison
bind pub o !kflood kickflood
bind pub m !kr kickraison
bind pub m !kflood kickflood
 
proc kickraison { nick host hand channel text } {
  global cs log
  set args [split $text]
  set victim [lindex $args 0]
  set reason [join [lrange $args 1 end]]
      putserv "PRIVMSG $cs kick $channel $victim $reason"
      putserv "PRIVMSG $log :\0034$victim \00312a été kick de \0034$channel \00312par \0034$nick \00312pour la raison :\0037 $reason"
}
 
proc kickflood { nick host hand channel arg } {
  global cs log
  putserv "PRIVMSG $cs kick $channel $arg \00312Le flood est interdit sur les salons officiels !"
  putserv "PRIVMSG $log :\0034$arg \00312a été kick de \0034$channel \00312par \0034$nick \00312pour flood."
}


Code non tester (savoir si je suis sur la bonne voix)
Aussi je vais devoir rajouter les pseudo avec le flag ou est t'il possible de juste mettre les vhost de cette façon :
(28/01/2017, 19:19)cestlemien a écrit : en relisant, je vois que tu appelles une proc vhostmodo1 .... et vhostmodo2, puis ailleurs dans ton code on vois, vhostmodo et vhostmodo2, peut etre voir par ici aussi .Et je ne suis pas certain que aie dans le bon sens ,ni les bons appels.

Perso je ferrait je pense plutot un systeme sur flag dans le bot, genre "flag 10" et "flag 11" corespondraient à tes "vost1" et "vhost2" exemple:

ajouter un user modo1, ajouter tous les hosts correspondants (vhosts)
.+user modo1
.+host modo1 *!RooT@domain.tld
.+host modo1 *!*@TechAdmin.domain.tld

(faire la liste) *!*@NetAdmin.domain.tld *!*@Admin.domain.tld *!*@CoAdmin.domain.tld
*!*@IRCop.domain.tld *!*@ChanMaster.domain.tld *!Ange@Faucheur.domain.tld

ensuite ajouter le flag .
.chattr modo1 +10

refaire la meme choser pour "modo2"

et enfin partir la dessus pour ton code (plus simple je pense de modifier /ajouter/retirer en partyline que sur un fichier tcl)

Cordialement.
Cela serait plus facile pour la gestion de procéder ainsi.
Et comment ajouter le flag "o" et "m"
Je suis désolé pour toute c'est question mais comme je ne maitrise pas du tout les flags je préfère poser des questions "con" plutôt que de faire des conneries.

Bien à toi.

Bye.
Répondre Avertir


Atteindre :


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