Messages : 140
Sujets : 28
Inscription : Mar 2012
Niveau d’avertissement :
0%
Bonjour à tous,
Alors voila j'ai fait un petit code d'autovoice sur le join au salon.
TCL bind join - "*" join:avjoin
proc join:avjoin { nick uhost hand chan } {
global botnick
if {$nick == $botnick} {return 0} {
putserv "mode $chan +v $nick"
return 0
}
}
Se code est fonctionnel. j'aimerais rajouter une liste de pseudo qui n'auront pas l'autovoice (les personnes ayant un statut sur le salon) j'ai donc tenté ainsi
TCL set exemptnick "nick nick1 etc..."
bind join - "*" join:avjoin
proc join:avjoin { nick uhost hand chan } {
global botnick exemptnick
if {$nick == $botnick} {return 0}
if {$nick == $exemptnick} {return 0} {
putserv "mode $chan +v $nick"
return 0
}
}
Celui ci fonctionne partiellement si dans le "set exemptnick" je met un pseudo ça fonctionne par contre si je rajoute un 2ème pseudo ça ne fonctionne plus. j'avoue ne pas savoir comment faire pour résoudre se problème.
Je n'ai aucun message d'erreur en PL avec le bot.
Et dans un 2eme temps j'aimerais aussi rajouter une option pour que l'autovoice ne soit actif que sur certain salon mais la je ne sais pas comme m'y prendre.
Merci de votre aide future.
Cordialement.
Alucard.
Messages : 921
Sujets : 93
Inscription : Jul 2007
Niveau d’avertissement :
0%
05/07/2018, 14:54
(Modification du message : 05/07/2018, 15:05 par MenzAgitat.)
Attention à $::botnick, il s'agit du nick que l'eggdrop "devrait" avoir en temps normal, mais il ne correspondra pas forcément à la réalité s'il s'est renommé à cause d'un ghost ou s'il est renommé en AnonymeXXXX par les services suite à un problème d'authentification.
$::nick en revanche, correspond au nick actuel de l'eggdrop quel qu'il soit.
Maintenant, pour répondre à ta question :
TCL if { ($nick == $::nick) || ($nick in $exemptnick) } then {
return 0
} else {
....
}
A noter que $exemptnick doit être une liste correctement formatée (échappement des caractères choquants pour tcl).
Ensuite, pour que l'autovoice ne soit actif que sur certains salons, je te suggère de jeter un oeil aux commandes SETUDEF FLAG et CHANNEL GET.
Messages : 140
Sujets : 28
Inscription : Mar 2012
Niveau d’avertissement :
0%
Merci MenzAgitat je comprend mon erreur voila comment j'ai modifié :
TCL set exemptnick "nick nick1 nick2 nick3"
bind join - "*" join:avjoin
proc join:avjoin { nick uhost hand chan } {
global botnick exemptnick
if { ($nick == $::nick) || ($nick in $exemptnick) } then {
return 0
} else {
putserv "mode $chan +v $nick"
return 0
}
}
mais du coup ais-je encore besoin de la variable "botnick" dans le "global" ?
Je vais aller voir au niveau des SETUDEF FLAG et CHANNEL GET pour que mon autovoice ne soit actif que sur certain salon.
Mais je ne suis pas contre un petit aiguillage lol.
Messages : 921
Sujets : 93
Inscription : Jul 2007
Niveau d’avertissement :
0%
Non, global botnick ne sert plus à rien.
Alucard`68 a écrit :Je vais aller voir au niveau des SETUDEF FLAG et CHANNEL GET pour que mon autovoice ne soit actif que sur certain salon.
Mais je ne suis pas contre un petit aiguillage lol. Un petit aiguillage avant même d'avoir pris la peine d'aller voir ?... Je veux bien donner un coup de main mais c'est un coup de pied au cul qu'il te faut là
Les exemples d'utilisation ne manquent pas dans mes scripts.
Messages : 297
Sujets : 8
Inscription : Dec 2008
Niveau d’avertissement :
0%
salut,,
pourquoi ne pas utiliser les services pour faire ceci ??
Code : /cs levels #chan set autovoice -1
Cordialement.
Messages : 921
Sujets : 93
Inscription : Jul 2007
Niveau d’avertissement :
0%
@cestlemien:
Oui, aussi, mais c'est pas comme ça qu'on apprend le Tcl
Messages : 297
Sujets : 8
Inscription : Dec 2008
Niveau d’avertissement :
0%
re,
je concois, juste que ça charge un bot qui pourrait faire autre chose xD mais super bon c'etait pour "simplifier" et pas utiliser le bot..
Cordialement.
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
Et tous les réseaux n'utilisent pas forcément des services, ou n'ont pas la possibilité de mettre un niveau d'autovoice à tous les utilisateurs.
Par contre, utiliser global exemptnick suivi de $exemptnick est peut-être moins optimisé que d'utiliser $::exemptnick.
Messages : 140
Sujets : 28
Inscription : Mar 2012
Niveau d’avertissement :
0%
Merci pour vos réponses 
Par contre concernant SETUDEF FLAG et CHANNEL GET j'ai regardé au niveau de tes sources MenzAgitat et j'avoue ne pas avoir compris grand chose même voir rien lol.
J'ai évidement recherché sur le wiki mais soit j'ai mal vue (ce qui est fort probable) soit il y a pas d'aide à se sujet lol.
Auriez vous un lien ou deux pour m'aiguiller avec des explications et si possible exemple simple ?
Je continue à mes recherches sur le wiki bien entendu.
Merci CrazyCat pour l'info j'ai modifié ma proc et du coup supprimé le global.
cestlemien les services utilisés n'ont pas la possibilité de mettre un autovoice à tous les utilisateurs.
Merci a vous pour vos réponses.
Messages : 921
Sujets : 93
Inscription : Jul 2007
Niveau d’avertissement :
0%
06/07/2018, 13:20
(Modification du message : 06/07/2018, 13:21 par MenzAgitat.)
http://www.lmgtfy.com/?q=%22setudef+flag%22
Et là, c'est magique Google, la réponse se trouve dans les résultats de la recherche !
Messages : 140
Sujets : 28
Inscription : Mar 2012
Niveau d’avertissement :
0%
D'apres se que j'ai pu trouver comme info ca doit etre dans un namespace.
Je ne suis pas encore à se niveau la codage lol.
je vais continuer a etudier la question
Merci a vous
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
(06/07/2018, 22:23)Alucard`68 a écrit : D'apres se que j'ai pu trouver comme info ca doit etre dans un namespace.
Je ne suis pas encore à se niveau la codage lol.
je vais continuer a etudier la question
Heu non, rien à voir avec les namespaces (si on parle bien des setudef).
cf https://wiki.eggdrop.fr/Tcl-commands#CHANNEL_COMMANDS :
Citation :setudef <flag/int/str> <name>
Description: initializes a user defined channel flag, string or integer
setting. You can use it like any other flag/setting. IMPORTANT: Don't
forget to reinitialize your flags/settings after a restart, or it'll be
lost.
Returns: nothing
Module: channels
Messages : 140
Sujets : 28
Inscription : Mar 2012
Niveau d’avertissement :
0%
Bonjour,
D'accord CrazyCat j'ai supposé ça car tout les setudef que j'ai pu voir sont dans un namespaces.
Donc j'ai continué à me renseigner chercher des exemples etc mais je galère vraiment.
J'ai donc fait ça:
TCL set exemptnick "nick nick1 nick2 nick3"
setupdef flag AutoVoice
bind join - "*" join:avjoin
proc join:avjoin { nick uhost hand chan } {
if { (![channel get $chan AutoVoice]) || ($nick == $::nick) || ($nick in $::exemptnick) } then {
return 0
} else {
pushmode $chan +v $nick
return 0
}
}
j'en ai aussi profité pour remplacer le putserv par un pushmode ça fait mieux lol.
Je n'ai pas tester le code j'aimerais savoir si je suis sur la bonne voix ou alors pas du tout.
De cette manière je validerais bien les salons en pl via la commande :
Code : .chanset #mon_chan +AutoVoice
Merci
Messages : 710
Sujets : 66
Inscription : Apr 2010
Niveau d’avertissement :
0%
09/07/2018, 12:22
(Modification du message : 09/07/2018, 12:24 par aliasangelius.)
Salut,
si c'est pour un salon, j'avais fait un truc pour quelqu'un ya un moment de ça.
Mais c'est par traitement de fichier, si ça peut t'aider tiens :
TCL #**********#
# Vip V1.0 #
#**********#
# Description du code TCL.
#***************************************#
# TCL en NameSpace. #
# Utilisation de msgcat. #
#***************************************#
namespace eval ::vip {
# Salon back ou va se situé l'autorise.
variable salons "#informatique"
# Nom du fichier ou seront les pseudos autorisé.
variable fichiers "vip.db"
# Procédure de création du fichier Vip.
if {![file exists $fichiers]} {
set load [open $fichiers w+]
close $load
putlog "\2Je crée le fichier $fichiers\2"
}
proc filtout {chan text} {
if [string match "*c*" [getchanmode $chan]] {
return [stripcodes abcgru $text]
} else {
return $text
}
}
# Procédure de join.
bind join - "$::vip::salons *" [namespace current]::joinauto
proc joinauto {nick host hand chan} {
variable salons
if [isbotnick $nick] return
if {[acceesalon $nick]} {
set msg [filtout $salons "\0031\[ \0033Mode Vip Automatique\0033 \0031\] Comportement exemplaire récompensé pour \002$nick\002 qui est automatiquement VIP ce mois ci sur \002$salons\002"]
putquick "PRIVMSG $salons :$msg"
putserv "MODE $salons +v $nick"
return 0
}
}
# Procédure d'ajout de pseudo Vip.
bind pub o ".+vip" [namespace current]::+ajout
proc +ajout { nick host hand chan arg } {
variable fichiers
variable salons
set temp [lindex $arg 0]
if {$temp == ""} {
putserv "NOTICE $nick :Utilisation: .+vip <pseudo>"
putserv "NOTICE $nick :Exemple .+vip $nick"
return 0
}
set lis "[fread $fichiers]"
if {[lsearch -exact "x $fichiers" "$temp"]!="0"} {
lappend lis $temp
fwrite $fichiers $temp
putserv "NOTICE $nick :\002$temp\002 \0034a été ajouté\0034"
putserv "NOTICE $nick :\002$temp\002 \0034est ajouté au pseudos vip\0034"
return 0
}
putserv "NOTICE $nick :\002Erreur:\002$temp\002 \0034est déjà vip\0034"
return 0
}
# Procédure de suppression de pseudo vip.
bind pub o ".-vip" [namespace current]::-ajout
proc -ajout { nick host hand chan arg } {
variable fichiers
variable salons
set temp [lindex $arg 0]
if {$temp == ""} {
putserv "NOTICE $nick :Utilisation: .-vip <pseudo>"
putserv "NOTICE $nick :Exemple: .-vip $nick"
return 0
}
set autoajout "[fread $fichiers]"
set tmp ""
foreach bb $autoajout {
if {![string match $temp $bb]} {lappend tmp $bb}
}
fdel $fichiers $tmp
putserv "NOTICE $nick :\002$temp\002 \0034supprimé des vip\0034"
putserv "NOTICE $nick :\002$temp\002 \0034est supprimé des pseudo vip\0034"
return 0
}
# Procédure pour voir la liste des vip.
bind pub o ".vip" [namespace current]::auto
proc auto { nick host hand chan arg } {
variable fichiers
variable salons
set fp [open $fichiers "r"]
set fc -1
putserv "notice $nick :\037\00300,01 -> Liste des vip. <-\037\003"
while {![eof $fp]} {
set data [gets $fp]
incr fc
if {$data !=""} {
putserv "notice $nick :\0031\[ \0034$data\0031\0031 ]\0031"
}
unset data
}
close $fp
putserv "notice $nick :\037\00300,01 -> Fin de la liste des vip. <-\037\003"
}
# Ne pas toucher Systeme Proc !!
proc acceesalon {nick} {
variable fichiers
set fa [open $fichiers r]
set access 0
while { ![eof $fa]} {
set ligne [gets $fa]
if {[string tolower $nick] == [string tolower $ligne]} {
set access 1
}
}
close $fa
return $access
}
# Procédure d'écriture de fichier.
proc fwrite {fi arg} {
set f [open $fi a]
puts $f $arg
close $f
}
# Procédure de suppression de fichier.
proc fdel {fi arg} {
set f [open $fi w]
puts $f $arg
close $f
}
# Procédure de lecture de fichier.
proc fread {fi} {
set f [open $fi r]
set t [gets $f]
close $f
return $t
}
}
putlog "\002\0034Chargement.. \002\037\0031Vip.tcl\037\0031"
EDIT : J'devais modifié pour faire passer les messages en msgcat, mais j'ai eut un poil la flemme, mais tu à de quoi faire pour ton exemple je suppose.
|