ajout d'une fonction sur un auto voice on join
#1
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.
Répondre Avertir
#2
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.
Répondre Avertir
#3
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.
Répondre Avertir
#4
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à Very Happy

Les exemples d'utilisation ne manquent pas dans mes scripts.
Répondre Avertir
#5
salut,,
pourquoi ne pas utiliser les services pour faire ceci ??
Code :
/cs levels #chan set autovoice -1

Cordialement.
Répondre Avertir
#6
@cestlemien:
Oui, aussi, mais c'est pas comme ça qu'on apprend le Tcl Wink
Répondre Avertir
#7
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.
Répondre Avertir
#8
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.
Répondre
#9
Merci pour vos réponses Smile
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.
Répondre Avertir
#10
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 !
Répondre Avertir
#11
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 Smile
Répondre Avertir
#12
(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
Répondre
#13
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 Smile
Répondre Avertir
#14
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.
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
Répondre Avertir


Atteindre :


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