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


[Résolu] Aide sur un bout de code
#1
Bonsoir,

Voila un pote ma demandé de lui codé quelques commande pour son serveur,
voila le code en question (pas complet)

tcl
set vhostmodo2 {
 *@domain.tld
}
 
set vhostmodo1 {
 *@domain.tld
}
 
bind pub - !modo aidemodo
bind pub - !kr kick
 
proc kick { nick host hand channel arg } {
 global vhostmodo1 kick
 foreach vhost $vhostmodo1 {
   if [string match -nocase $vhost $host] {
     putserv "cs kick $channel $arg $arg-1"
     }
  }
}

Donc j'ai tenter de cette manière mais ne fonctionne pas et aucun message d'erreur en PL avec le bot.
Voila je voudrais qu'en tapant !kr pseudo bla bla bla bla
Ca kick l'utilisateur pour la raison bla bla bla bla
Mais je ne vois absolument pas comment mi prendre...

Merci pour votre aide future

Edit : j'ai édité le code car j'ai enfin réussie à faire comprendre à mon pote qu'un eggdrop IRCop c'est pas bon pour la sécurité.

Bien à vous.

Bye.
#2
Salut,

Nouvel réponse volontaire.

J'ai tenter aussi de faire de cette manière

tcl
bind pub - !kr kickraison
proc kickraison { nick host hand channel arg text } {
  global vhostmodo1 kickraison
  foreach vhost $vhostmodo1 {
    if [string match -nocase $vhost $host] {
      putserv "cs kick $channel $arg $text"
      putserv "PRIVMSG $::log :\0034$arg \00312à été kick de \0034$channel \00312par \0034$nick \00312Raison :\0037 $text"
      }
   }
}

Mais ne fonctionne pas mais la j'ai un message d'erreur en pl

Code:
[14:30:39] <Aragorn> [14:30:39] Tcl error [kickraison]: wrong # args: should be "kickraison nick host hand channel arg text"
J'avoue que je ne vois pas du tout comment faire

Merci d'avance.

Bye.
#3
Je pense que parfois, lire le wiki est utile.
Quote:PUB
Utilisé pour une commande donnée sur un canal. Le premier mot devient la commande, ceux qui suivent deviennent les arguments text.
Syntaxe: bind pub <flags> <command> <proc>
Procédure: procname <nick> <user@host> <handle> <channel> <text>

Donc, ta procédure reçoit obligatoirement 5 arguments, pas un de plus ou de moins.

tcl
proc kickraison { nick host hand channel text } {

En définissant ta procédure ainsi, tu obtiens dans $text le nick à kicker suivi du message de kick. Il faut donc couper $text.


tcl
set args [split $text] # on mets chaque élément de $text dans la liste $args
set victim [lindex $args 0] # le premier élément de $args est la victime
set reason [join [lrange $args 1 end]] # la suite est la raison du kick

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#4
Bonjour,

Donc si j'ai bien compris je reprend ma procédure en enlevant 'arg' pour le remplacer par 'text'
Concernant les set je les rajoute hors de la procédure et je fait appel à eux de la même façon que pour le salon de log ?
C'est bien ça ?

Bien à toi.

Bye.
#5
Il me semble qu'il te manque les bases du tcl...
Dans la déclaration de ta procédure, tu appelles le dernier élément "args", "text", "roger_rabbit", ça n'a pas la moindre importance, tout ce qui importe c'est que ta procédure ait 5 arguments dans sa déclaration, pas un de plus ou de moins vu que le bind en envoie 5.

Et NON. Les sets sont forcément dans la procédure, vu qu'il s'agit de la découpe du dernier argument de la procédure. En toute logique, ils devraient être soit après la ligne "global", soit après la ligne "if ..."
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#6
Merci pour ces précisions je me penche dessus après le boulot et dans tout les cas je fait un retour

Bien à toi.

Bye.
#7
Bonsoir,
Alors j'ai tenter de façon voici la première (je met juste la procédure)

tcl
proc kickraison { nick host hand channel text } {
  global vhostmodo1 kickraison
  set args [split $text] # on mets chaque élément de $text dans la liste $args
  set victim [lindex $args 0] # le premier élément de $args est la victime
  set reason [join [lrange $args 1 end]] # la suite est la raison du kick
  foreach vhost $vhostmodo1 {
    if [string match -nocase $vhost $host] {
      putserv "cs kick $channel $victim $reason"
      putserv "PRIVMSG $::log :\0034$victim \00312à été kick de \0034$channel \00312par \0034$nick \00312pour flood."
      }
   }
}

Ne fonctionne pas et j'ai se message d'erreur en pl

Code:
[00:59:10] <Aragorn> [00:59:10] Tcl error [kickraison]: can't read "args": no such variable
et de cette façon

tcl
proc kickraison { nick host hand channel text } {
  global vhostmodo1 kickraison
  foreach vhost $vhostmodo1 {
    if [string match -nocase $vhost $host] {
    set args [split $text] # on mets chaque élément de $text dans la liste $args
    set victim [lindex $args 0] # le premier élément de $args est la victime
    set reason [join [lrange $args 1 end]] # la suite est la raison du kick
      putserv "cs kick $channel $victim $reason"
      putserv "PRIVMSG $::log :\0034$victim \00312à été kick de \0034$channel \00312par \0034$nick \00312pour flood."
      }
   }
}

Ne fonctionne pas non plus et aucun message en pl
Ai-je mal inséré le code?

Bien à toi.

Bye.
#8
Essaye en retirant les commentaires... LE TCL essaye d'interpréter $args dans celui de la première ligne, or il n'est pas encore défini.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#9
Merci CrazyCat cela fonctionne parfaitement bien :D

Donc si j'ai bien compris les 3 ligne 'set' que j'ai rajouter servent a 'découper' le dernière argument de ma procédure, c'est bien ça ?

Bien à toi.

Bye.
#10
Le premier set sert à découper $text en une liste de mots
Le second sert à mettre le premier élément de cette liste dans la variable $victim
Le troisième mets tous les éléments suivants sous forme d'une seule chaîne dans la variable $reason.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#11
Merci pour ces explication Et merci pour ton aide :)

Bien à toi.

Bye.
#12

tcl
set victim [lindex $args 0]


0 ? Sa retourne pas le canal ça ?

J'aurais plutôt mis


tcl
set victim [lindex $args 1]

Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
#13
Non.
Le script est fait pour agir en commande publique, donc c'est le chan où elle est lancée qui est pris comme canal d'action.
Le premier argument est donc le nick de la victime.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Abandon] devoice auto au bout de X minutes Alucard`68 4 4,016 12/02/2017, 02:46
Last Post: Alucard`68

Forum Jump:


Users browsing this thread: 1 Guest(s)