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


Kick / Ban depuis un salon secret
#1
Shield 
Hello à toutes et tous !

Je souhaites savoir s'il est possible d'améliorer une commande. J'aimerai améliorer la commande suivante :

Code :
bind pub - "!kickf" dop:kickf
proc dop:kickf {n ht hd ch a} {
set cible [lindex $a 0]
    if {![string compare -nocase $cible ""]} {
   putserv "NOTICE $n :\002\00304KO. \00312La syntaxe est \00303!invite \00307pseudo\003\002"
   return 0
}


Avec : ceci

Code :
bind pub - "!kracisme" dop:kracisme
proc dop:kracisme {n ht hd ch a} {
set cible [lindex $a 0]
    pushmode $ch +k $cible!*@*
    putkick $ch $cible "Reste Cool !"
   return 1
   }
    putspeed "PRIVMSG $::chans :L'utilisateur a bien été averti "
    putspeed "NOTICE $cible :4 ~!~ ATTENTION ~!~2 $cible 14ceci est un message d'avertissement à votre encontre lancer312 par34 $n"
    putspeed "NOTICE $cible :2$cible 14 merci de bien vouloir modifier votre comportement ceci est votre dernier avertissement avant l'exclusion \003\002"
}


Mais sa ne fonctionne pas des masses... En gros, je souhaite que sur le salon #chan+ je puisse commander la commande et déclencher une action sur #chan...

Merci pour votre aide.
  Répondre
#2
Code :
bind pub - "!kracisme" dop:kracisme
proc dop:kracisme {n ht hd ch a} {
set cible [lindex $a 0]
   pushmode $ch +k $cible!*@*
   putkick $ch $cible "Reste Cool !"
  return 1
  }
   putspeed "PRIVMSG $::chans :L'utilisateur a bien été averti "
   putspeed "NOTICE $cible :4 ~!~ ATTENTION ~!~2 $cible 14ceci est un message d'avertissement à votre encontre lancer3312 par334 $n"
   putspeed "NOTICE $cible :2$cible 14 merci de bien vouloir modifier votre comportement ceci est votre dernier avertissement avant l'exclusion \003\002"
}

Tout le monde sur ton salon secret peut utiliser la commande (je sais pas si c'est voulu).
Le mode +k est fait pour que les utilisateurs doivent indiquer un mot de passe pour joindre le salon.
Le mode +b est fait pour bannir un utilisateur.
Pourquoi le return 1 ? Je pense qu'il n'est pas utile.
La variable $ch dans l'état actuel des choses va bannir sur le salon ou est tapé la commande (#chan+) pas sur le salon voulu (#chan, qui n'est défini nul part).
Si la personne banni change de pseudo (genre passer de BdS  à BdS1), elle peut revenir avec le mask que tu utilises pour bannir ($cible!*@*).
La variable $::chans représente le salon secret ($ch) ?
Ensuite tu ban et kick l'utilisateur et seulement après tu lui envoi un avertissement.

Revois déjà ces points
  Répondre
#3
Salut, merci pour ta réponse. Effectivement j'ai pas fais attention en faisant mon C/C le code n'est pas bon !

En fait le principe c'est que le bot soit mini halfop sur le salon à modérer et qu'il soit cacher dans un salon secret accessible qu'avec un axxe vu que le salon sera en +m donc aucun "risque" par la suite je pense y mettre des vhost pour le sécuriser totalement.

J'ai refait un codage qui se déclenche (sa fait longtemps que j'ai pas codé) Maintenant je cherche a avoir l'accès à la commande sur un autre salon...

Code :
bind pub - !kick dop:kick
bind pub - !k dop:kick
proc dop:kick {nick host hand chan arg} {
global chanoff botnick
set pseudo [lindex $arg 0]
set reason [lrange $arg 1 end]
if {$pseudo == ""} {set pseudo "$nick"}
if {$reason == ""} {set reason "Dehors les virus !"}
if {![matchattr $hand A]} {return 0}
if {[matchattr $pseudo A]} {putspeed "notice $nick :Impossible de Kicker un Admin Protèger"; return 0}
if {$pseudo == $nick} {putspeed "notice $nick :Vous pouvez pas vous Kicker du salon $chan"; return 0}
if {$pseudo == $botnick} {putspeed "notice $nick :Vous pouvez pas Kicker $botnick du salon $chan"; return 0}
if {[matchattr $hand A]} {
putquick   "MODE $chan -o $pseudo"
putquick  "MODE $chan -h $pseudo"
putquick  "MODE $chan -v $pseudo"
putquick  "KICK $chan $pseudo :$reason"
} }
  Répondre
#4
tcl
set chanoff "#Salon Officiel"
set chanmod "#Salon Secret"
bind pub - "!k" dop:kick
proc dop:kick {nick host hand chan arg} {
	global chanmod chanoff
	if {$chan == $chanmod} {
	  set pseudo [lindex [split $arg] 0]
	  set reason [join [lrange [split $arg] 1 end]]
		if {![onchan $pseudo $chanoff]} {
		  putchan $chan "$pseudo n'est pas sur le salon $chanoff"
		} else {
	   if {[botisop $chanoff]} {putkick $chanoff $pseudo $reason}
	  }
	return 0
	} 
}



Démarre avec ce morceau de code ...
Je te laisse le soin de rajouter tes vérifications
  Répondre
#5
J'avais ça qui fonctionne mais le tiens est quand même plus clair !
tcl
set chans "#salon"
set chansource "#!salon!"
set chanradio "#!salon+!"
 
bind pub - !kick dop:kick
proc dop:kick {nick host hand chan arg} {
global chanoff botnick
set cible [lindex $arg 0]
if {![string compare -nocase $cible ""]} {putspeed "notice $nick :\002\00304KO. \00312La syntaxe est \00303!kick\00307pseudo\003\002"; return}
putquick "privmsg $cible : vous êtes ejecté"
putquick "PRIVMSG $::chansource :L'utilisateur a bien été averti "
putquick "MODE $chan -o $cible"
putquick "MODE $chan -h $cible"
putquick "MODE $chan -v $cible"
putquick "KICK $chan $cible"
 }


  Répondre
#6
tcl
set chanoff "#Salon Officiel"
set chanmod "#Salon secret"
set listA {}
 
bind pub - "!k" dop:kick
 
proc dop:kick {nick host hand chan arg} {
	global chanmod chanoff listA botnick
	if {[string equal -nocase $chan $chanmod]} {
		set pseudo [lindex [split $arg] 0]
		set reason [join [lrange [split $arg] 1 end]]
		if {$reason == ""} { set reason "Dehors les virus !"}
		if {$pseudo == ""} { putquick " PRIVMSG $chanmod  : Aucun pseudo n'est renseigné (Syntaxe: !k pseudo raison)"; return 0 }
		if {[string equal -nocase $botnick $pseudo]} { putquick " PRIVMSG $chanmod  : Tu n'es pas autorisé a éjecter le robot du salon $chanoff"; return 0 }
		if {[matchattr $pseudo n]} { putquick " PRIVMSG $chanmod  : Tu n'es pas autorisé a éjecter un admin du robot $botnick"; return 0}
		if {[lsearch -nocase $listA $pseudo] eq 0} {
			if {![onchan $pseudo $chanoff]} {
				putquick " PRIVMSG  $chanmod  : $pseudo n'est pas sur le salon $chanoff"
			} else {
				if {[botisop $chanoff]} {
				set userhost [getchanhost $pseudo]
				set userhost "*!*[string range $userhost [string first @ $userhost] e]"
				pushmode $chanoff +b $userhost
				putkick $chanoff $pseudo $reason
				}
			}
		} else {
			if {[onchan $pseudo $chanoff]} {
				lappend listA "$pseudo"
				putquick "NOTICE $pseudo : ~!~ ATTENTION ~!~ Ceci est un message d'avertissement à votre encontre lancé par $nick, merci de bien vouloir modifier votre comportement ceci est votre dernier avertissement avant l'exclusion !"
				putquick " PRIVMSG $chanmod  : $pseudo a bien été averti, la prochaine fois il sera éjecté et banni"
			} else {
  				putquick " PRIVMSG  $chanmod  : $pseudo n'est pas sur le salon $chanoff"
			}
		}
	return 0
	} 
}



Je me suis amusé a faire la commande que tu voulais réaliser au début, c'est largement perfectible mais c'est un bon début pour toi.
  Répondre
#7
Bonjour,

j'ai testé ton codage et je me suis aperçu que rien ne s'effectue...

j'ai donc fait ça :
Code :
bind pub - !dvm dop:dvm
proc dop:dvm {nick host hand chan arg} {
global chans chansource  botnick
set cible [lindex [split $arg] 0]
if {[matchattr $cible A]} {putspeed "notice $nick :Impossible de kicker un Admin Protèger"; return 0}
if {$cible == $nick} {putspeed "notice $nick :Vous pouvez pas vous kicker du salon $chan"; return 0}
if {$cible == $botnick} {putspeed "notice $nick :Vous pouvez pas kicker $botnick du salon $chan"; return 0}
if {$cible == ""} { putspeed $chan "Aucun pseudo n'est renseigné (Syntaxe: !k pseudo raison)"; return 0 }    
putquick "privmsg $chan : $cible 1 ton niveau t'emmerde vient de passer à 14 2/3 2 -> La parole vient de t'être retirer pour le moment. Un modérateur va revenir vers toi pour régulariser ta situation, merci de patienter.  "
putquick "PRIVMSG $::chansource :$cible a bien été dévoice du salon $chan"
putquick "MODE $chan -v $cible"
}
le souci, c'est que tout le monde à accès aux commandes...
  Répondre
#8
Pourtant j'ai testé mon code et il fonctionne "correctement", il peut être amélioré par contre.
Sur ton code, tu ne vérifies a aucun endroit que la commande est tapé depuis le salon "secret", du coup c'est normal que tous le monde puisse s'en servir.
Encore une fois tu utilises putspeed ... et deux lignes plus bas tu utilises putquick. Tu es sur de ne pas piocher des bouts de codes en essayant de les accordés ?
Pour les modes sur un salon: pushmode est nettement mieux.

As-tu une erreur en utilisant mon code tel quel ? Ou as-tu bien renseigné les variables chanoff et chanmod ?
  Répondre
#9
(26/04/2020, 14:18)BdS a écrit : Pourtant j'ai testé mon code et il fonctionne "correctement", il peut être amélioré par contre.
Sur ton code, tu ne vérifies a aucun endroit que la commande est tapé depuis le salon "secret", du coup c'est normal que tous le monde puisse s'en servir.
Encore une fois tu utilises putspeed ... et deux lignes plus bas tu utilises putquick. Tu es sur de ne pas piocher des bouts de codes en essayant de les accordés ?
Pour les modes sur un salon: pushmode est nettement mieux.

As-tu une erreur en utilisant mon code tel quel ? Ou as-tu bien renseigné les variables chanoff et chanmod ?

Je dois avouer que j'ai un peu fait du montage !

Mais au fin tout est opé.

Code :
bind pub - !dvm dop:dvm
proc dop:dvm {nick host hand chan arg} {
global chanoff botnick
set cible [lindex $arg 0]
if {$cible == ""} { putspeed "privmsg $chan : Aucun pseudo n'est renseigné (Syntaxe: !vdm <Pseudo> )"; return 0 }
if {$cible == $hand} {putspeed "notice $nick :Vous pouvez pas vous kicker du salon $chan"; return 0}
if {$cible == $botnick} {putspeed "notice $nick :Vous ne pouvez pas kicker $botnick du salon $chan"; return 0}
if {![matchattr $hand A]} {putspeed "notice $nick :Vous ne posseder aucuns accès sur $botnick!"; return 0}
if {[matchattr $hand A]} {        
putspeed "privmsg $chan : $cible ton niveau t'emmerde vient de passer à 2/3 -> La parole vient de t'être retirer pour le moment. Un modérateur va revenir vers toi pour régulariser ta situation, merci de patienter. "
putspeed "privmsg $::chansource :$cible a bien été dévoice du salon $chan"
putspeed "MODE $chan -v $cible"
} }
  Répondre
#10
tcl
bind pub - !dvm dop:dvm
proc dop:dvm {nick host hand chan arg} {
global chanoff botnick  # A quoi te sert la variable global chanoff ?
set cible [lindex $arg 0]
if {$cible == ""} { putspeed "privmsg $chan : Aucun pseudo n'est renseigné (Syntaxe: !vdm <Pseudo> )"; return 0 } # Si je tape !dvm (même ta syntaxe d'aide est fausse), le bot va envoyer cette phrase sur le salon ... pourtant je n'ai aucun accès sur le robot.
if {$cible == $hand} {putspeed "notice $nick :Vous pouvez pas vous kicker du salon $chan"; return 0} # Tu veux kick ou devoice ?
if {$cible == $botnick} {putspeed "notice $nick :Vous ne pouvez pas kicker $botnick du salon $chan"; return 0} # Tu veux kick ?
if {![matchattr $hand A]} {putspeed "notice $nick :Vous ne posseder aucuns accès sur $botnick!"; return 0} # La commande est utilisable sur tous les salons , Tu va juste envoyer une notice a chaque fois qu'un guignol va vouloir taper la commande sur le salon en lui disant: non tu n'a pas d'accès ... pas très économe pour ton egg.
if {[matchattr $hand A]} { # A vérifier mais je crois que le flag A n'est pas natif a l'eggdrop.
putspeed "privmsg $chan : $cible ton niveau t'emmerde vient de passer à 2/3 -> La parole vient de t'être retirer pour le moment. Un modérateur va revenir vers toi pour régulariser ta situation, merci de patienter. "
putspeed "privmsg $::chansource :$cible a bien été dévoice du salon $chan"
putspeed "MODE $chan -v $cible" # pushmode $chan -v $cible , tu ne semble pas lire tout ce qu'on te dit ...
} }



Je t'ai mis des commentaires sur le code après les #
Une dernière fois: putspeed n'est pas natif à l'eggdrop ...
  Répondre
#11
Quelques petits ajouts / commentaires..
- effectivement, le flag A n'existe pas, j'imagine donc que ton script n'est pas présenté dans son entièreté.
- idem pour putspeed, il vaut mieux utiliser ce qui est natif (putquick, putserv ou puthelp)
- tu fais if {![matchattr $hand A]} { et ensuite if {[matchattr $hand A]} {, un } else { serait mieux
- tu envoies tes messages "suite au dévoice" avant de faire ton pushmode (enfin, ton putspeed mode)
- tu ne vérifies même pas que l'eggdrop soit halfop ou op sur le canal où il doit agir,
- tu ne mets pas les nicks dans la même casse,
- ...

Pour le dernier point: si ton eggdrop s'appelle "MonBot" et que l'on tape "!dvm monbot", $cible == $botnick sera faux. Et d'une manière générale on utilise plutôt 'eq' et 'ne' pour comparer des chaînes de caractères.
  Répondre
#12
(26/04/2020, 16:16)CrazyCat a écrit : Quelques petits ajouts / commentaires..
- effectivement, le flag A n'existe pas, j'imagine donc que ton script n'est pas présenté dans son entièreté.
- idem pour putspeed, il vaut mieux utiliser ce qui est natif (putquick, putserv ou puthelp)
- tu fais if {![matchattr $hand A]} { et ensuite if {[matchattr $hand A]} {, un } else { serait mieux
- tu envoies tes messages "suite au dévoice" avant de faire ton pushmode (enfin, ton putspeed mode)
- tu ne vérifies même pas que l'eggdrop soit halfop ou op sur le canal où il doit agir,
- tu ne mets pas les nicks dans la même casse,
- ...

Pour le dernier point: si ton eggdrop s'appelle "MonBot" et que l'on tape "!dvm monbot", $cible == $botnick sera faux. Et d'une manière générale on utilise plutôt 'eq' et 'ne' pour comparer des chaînes de caractères.

Merci pour tes réponses je vais améliorer mon codage.
  Répondre


Atteindre :


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