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


Join chan
#1
Bonjour,

Pour des raisons de sécurité, j'aimerais faire un TCL qui va permettre au Bot d'autoriser l'accès à certains salons en fonction de la Vhost du pseudo.
PS: Je veux pas passer par les services Anope, car il se peut que le nick "A" a toujours son accès sur le salon X ou il est plus désiré, donc l'accès sera filtré par les vhost.

Voici mon code:


tcl
#######################
## Secure Join Staff ##
#######################
 
 
set chekback "#test"
 
 
set vhost {
    *NetAdmin.***.org
    *TechAdmin.***.org
    *BotAdmin.***.org
 
}
 
bind join - * pub:join
proc pub:join { nick host hand chan } {
if {$chan == "#test"} {
 if {[string match [string tolower $vhost]]} {
   set hostmask "[getchanhost $nick $chan]"
   set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
    putquick "KICK $chan $pseudo $raison"
    putquick "MODE $chan +bb $hostmask $pseudo"
    } else {
   putserv "PRIVMSG $chekback \00302L'accès de $checknick a été autorisée sur #staff ."
}
}
}


Voici ce que j'ai en party line:

Code:
[01:03] Tcl error [join]: wrong # args: should be "join nick host hand chan text"
[01:03] Tcl error [pub:join]: wrong # args: should be "join nick host hand chan text"
#2
coucou,

Pourquoi ne pas passer par la party-line du bot, au lieu de recoder ( donc alourdir ton bot ? )
exemple :
Quote:
.+user autorise
.chattr autorise +f #test
.+host autorise *NetAdmin.***.org
.+host autorise *TechAdmin.***.org
.+host autorise *BotAdmin.***.org
(ect .... )

j'ai juste mis le flag F pour exemple, tu peux trés bien creer un flag, ou en mettre plusieurs / d'autres)

Cordialement.
#3
Je veux que çà soit automatisé via le bot, sans passer par la party line. Merci pour la réponse cestlemien
#4
oui justement une fois les vhost entrés, c'est automatique, pas besoin en plus de re-ouvrir le code pour ajouter/modifier ton code si besoin est.

aprés effectivement il faut faire un tcl avec un binds join, regarder si $arg est bien friend, ( ou autre flag que tu auras defini) si "oui", laisser entrer, sinon "non", virer avec le motif adequat.
Et bien entendu envoyer le message sur le salon de retour.

(le but etait juste d'eviter de devoir faire un tableau comprenant les Vhost/hosts autorisés)

Cordialement.
#5
C'est ce que je veux faire avec ce code mais çà marche pas.

Donc si tu peux me préciser ce que je dois modifier dans le code.

Merci d'avance.
#6
Salut,

Essaye ce code :


tcl
#######################
## Secure Join Staff ##
#######################
 
set chekback "#test"
 
set vhost {
	*@NetAdmin.*.org
	*@TechAdmin.*.org
	*@BotAdmin.*.org
}
 
bind join - "*" pub:join
proc pub:join { nick uhost handle channel } {
 global chekback
  if {$channel == $chekback} {
    foreach host $vhost {
	  if {![string match -nocase $host $uhost]} {
	   set hostmask "[getchanhost $nick $channel]"
	   set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
	    putquick "KICK $channel $pseudo $raison"
	    putquick "MODE $channel +bb $hostmask $pseudo"
	  }
	}
  }
}

#7
remplacer ca:

tcl
if {$channel == $chekback} {

par ca:
tcl
if [string equal -nocase $channel $chekback] {

C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#8
Bonjour,

@ArKeNiS: Merci pour la réponse, là je n'ai aucune erreur en party-line, mais le bot ne kick pas les pseudos sans vhost, alors que dans le code on a bien précisé les vhost autorisés à joindre le chan.

@djkenny: Merci pour la réponse :) .

Merci d'avance pour l'aide.
#9
Il y a quelque chose qui me gène dans le script donné par ArKeNiS:

tcl
foreach host $vhost {
     if {![string match -nocase $host $uhost]} {
      set hostmask "[getchanhost $nick $channel]"
      set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
       putquick "KICK $channel $pseudo $raison"
       putquick "MODE $channel +bb $hostmask $pseudo"
     }
   }

Donc dès que $uhost est différent de $host, la personne est bannie ?
Pour ma part, je ferai:

tcl
foreach host $vhost {
   if {[string match -nocase $host $uhost]} {
      return 1
   }
   set hostmask "[getchanhost $nick $channel]"
   set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
   putquick "KICK $channel $pseudo $raison"
   putquick "MODE $channel +bb $hostmask $pseudo"
}

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#10
CrazyCat Wrote:Il y a quelque chose qui me gène dans le script donné par ArKeNiS:

tcl
foreach host $vhost {
     if {![string match -nocase $host $uhost]} {
      set hostmask "[getchanhost $nick $channel]"
      set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
       putquick "KICK $channel $pseudo $raison"
       putquick "MODE $channel +bb $hostmask $pseudo"
     }
   }

Donc dès que $uhost est différent de $host, la personne est bannie ?
Pour ma part, je ferai:

tcl
foreach host $vhost {
   if {[string match -nocase $host $uhost]} {
      return 1
   }
   set hostmask "[getchanhost $nick $channel]"
   set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
   putquick "KICK $channel $pseudo $raison"
   putquick "MODE $channel +bb $hostmask $pseudo"
}

par contre
tcl
foreach host $vhost {
      if {[string match -nocase $host $uhost]} {
         return 1
      }
   }
   set hostmask "[getchanhost $nick $channel]"
   set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
   putquick "KICK $channel $pseudo $raison"
   putquick "MODE $channel +bb $hostmask $pseudo"

sinon il teste seulement le 1er vhost et vire le gars si il ne l'a pas
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#11
C'est toujours le même soucis, le bot ne réagi pas quand un pseudo join le chan, sans vhost pas de kick poser sur Nick.

NB: Je n'ai aucune erreur en party-line
#12
essais ca:

tcl
#######################
## Secure Join Staff ##
#######################
 
set chekback "#test"
 
set vhost {
   *@NetAdmin.*.org
   *@TechAdmin.*.org
   *@BotAdmin.*.org
}
 
bind join - "*" pub:join
proc pub:join { nick uhost handle channel } {
   global chekback vhost
   if [string equal -nocase $channel $chekback] {
      foreach host $vhost {
         if [string match -nocase $host $uhost] {
            return 1
         }
      }
      set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
      putquick "KICK $channel $pseudo :$raison"
      putquick "MODE $channel +bb *!$uhost $pseudo*!*@*"
   }
}

C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#13
a tu essayer comme ceci ?


tcl
#######################
## Secure Join Staff ##
#######################
 
set chekback "#test"
 
set vhost {
    NetAdmin.*****.org
    TechAdmin.*****.org
     BotAdmin.*****.org
}
 
bind join - "*" pub:join
proc pub:join { nick uhost handle channel } {
   global chekback vhost
   if [string equal -nocase $channel $chekback] {
      foreach host $vhost {
         if [string match -nocase $host $uhost] {
            return 1
         }
      }
      set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
      putquick "KICK $channel $pseudo :$raison"
      putquick "MODE $channel +bb *!$uhost $pseudo*!*@*"
   }
}

peut etre ton poste TCL-Auto-sajoin-fonctionne-partiellement peut t'aider ?


Cordialement DnS
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.
#14
@djkenny: Merci pour la réponse, mais avec ce code que tu as mis, çà kick tous les pseudos même avec les vhost autorisées dans la variable "vhost".
#15
euh, t es sur de toi? car en fait il y a une erreur dans le code que je t ai filé et ça ne peut pas fonctionner (il ne pouvais pas kickban vu que la variable $pseudo n'existe pas).

tcl
#######################
## Secure Join Staff ##
#######################
 
set chekback "#test"
 
set vhost {
   *@NetAdmin.*.org
   *@TechAdmin.*.org
   *@BotAdmin.*.org
}
 
bind join - "*" pub:join
proc pub:join { nick uhost handle channel } {
   global chekback vhost
   if [string equal -nocase $channel $chekback] {
      foreach host $vhost {
         if [string match -nocase $host $uhost] {
            return 1
         }
      }
      set raison " \00304$nick - \00302Vous n'êtes pas autorisé à être sur ce salon."
      putquick "KICK $channel $nick :$raison"
      putquick "MODE $channel +bb *!$uhost $nick*!*@*"
   }
}

celui la fonctionne, je l ai testé!!
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away


Forum Jump:


Users browsing this thread: 1 Guest(s)