Communauté Eggdrop
[Résolu] Aide sur une commande - Version imprimable

+- Communauté Eggdrop (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Sujet : [Résolu] Aide sur une commande (/showthread.php?tid=1639)

Pages : 1 2


Aide sur une commande - Alucard`68 - 06/11/2016

Bonsoir à tous,
J'ai téléchargé le script join.tcl disponible sur le site  pour pouvoir faire joindre ou partir mon bot sans entrer en PL avec lui.

voila mon problème j'ai fait un code avec système de vhost pour qu'il ni ai seulement un groupe de personne précise qui puisse le faire
voila le code:
tcl
set vhostjoinpart {
 *@domaine.tld
}
 
 
bind pubm - !vien vien
bind pubm - !oust oust
 
proc vien { nick host hand channel arg } {
 global vhostjoinpart vien
 foreach vhost $vhostjoinpart {
   if [string match -nocase $vhost $host] {
     putquick "MSG Thor :join $arg"
    }0
  }
}
 
proc oust { nick host hand channel arg } {
 global vhostjoinpart oust
 foreach vhost $vhostjoinpart {
   if [string match -nocase $vhost $host] {
     putquick "MSG Thor :part $channel"
     }0
  }
}


Mon problème c'est que quand je tape une de mes commande que ça soit
!vien #Test
ou
!oust
Rien ne se passe et j'ai aucun message d'erreur en PL avec le bot

Je ne serais pas contre un coup de main.

Merci d'avance.

Bye.


RE: Aide sur une commande - aliasangelius - 07/11/2016

Salut,

tcl
set vhostjoinpart {
 *@domaine.tld
}
 
 
bind pubm - !vien vien
bind pubm - !oust oust
 
proc vien { nick host hand chan arg } {
 global vhostjoinpart vien
 set chan [lindex $arg 0]
 foreach vhost $vhostjoinpart {
   if [string match -nocase $vhost $host] {
     putquick "MSG Thor :join $arg"
     channel add $chan
     savechannels
    }0
  }
}
 
proc oust { nick host hand chan arg } {
 global vhostjoinpart oust
 set chan [lindex $arg 0]
 foreach vhost $vhostjoinpart {
   if [string match -nocase $vhost $host] {
     putquick "MSG Thor :part $channel"
     channel remove $chan
     savechannels
     }0
  }
}



Tu ne faisait rien dans t'es procédures pour que le bot rejoingne un salon.
J'ai rajouter ce qu'ils manquer, par contre je pense tu doit avoir un soucis.
Tu fait un moment donner : }0
Ce qui sert ?

Cordialement


RE: Aide sur une commande - CrazyCat - 07/11/2016

Je rejoins ce que dit alias sur les "0" en trop.
Sinon, je pense surtout qu'il aurait mieux valu modifier le tcl initial plutôt que de faire en sorte que l'eggdrop se fasse un message.


RE: Aide sur une commande - Alucard`68 - 07/11/2016

Salut,
Merci d'avoir pris le temps pour mon problème Smile
J'ai testé ton code mais sa ne fonctionne pas hélas.
En se qui concerne le }0 oui c'était une erreur de ma part j'ai enlever le 0
j'ai aussi tenté de faire ainsi
tcl
proc vien { nick host hand chan arg } {
 global vhostjoinpart vien
 set chan [lindex $arg 0]
 foreach vhost $vhostjoinpart {
   if {[validchan $chan]} {
   if [string match -nocase $vhost $host] {
     channel add $chan
     putquick "PRIVMSG Thor :join $arg"
     putserv "PRIVMSG #LM-Staff :\00312Ok, \0037$nick \00312! je rejoins \0034$chan"
    return 1
  } else {
     putserv "PRIVMSG $chan :\00312Tu as picolé \0037$nick \00312? Je suis déjà sur \0034$chan"
   }
  }
 }
}


Mais ne fonctionne pas non plus...
Se que je voudrais c'est que quand je tape !vien #salon sur un salon ou se trouve le bot celui-ci rejoigne le salon en question
Et quand je tape !oust il parte du salon ou j'ai tapé la commande.
Franchement je suis perdu je ne sais pas comment faire pour i arriver...

Merci d'avance.

Oui CrazyCat je vais aussi tenter de modifier le code original Smile


RE: Aide sur une commande - aliasangelius - 07/11/2016

Salut, un exemple sur un code que j'avais fait à l'époque. Dedans ya le système que tu recherche :

tcl
namespace eval GB {
    # Salon de log #
	variable log "#LM-Staff"
    # Commande Prefix Permet de choisir la commande par défault soit "." ou "!" #
	set commande(choix) "!"
 
 
array set msg {
    "access" "Désolé $nick mais je ne trouve pas ton accès dans ma base de données !"
    "auth" "Avant d'utiliser la commande veuillez vous authentifier au préalable merci : ( /msg $::botnick auth <pseudo> <pass> )"
    "level" "Vous n'avez pas le level suffisant dans $::botnick pour utiliser cette commande $nick !"
    "nosalon" "Désolé $nick mais je suis absent du salon $chan !"
}
 
proc auth { nick host hand arg } {
	     set args [split $arg]
	     set chan [lindex $arg 0]
	     set pseudo [lindex $arg 0]
    if {[llength $args] != 2} {
         puthelp "notice $nick :\002Erreur :\002 ( /msg $::botnick auth <pseudo> <pass> )"
    return 0
    }
	     set password [lindex $args 1]
    if { [nick2hand $pseudo] eq "*" } {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(access)]"
    return 0
    }
    if {![passwdok $pseudo $password]} {
         puthelp "notice $nick :\002Erreur :\002 Votre mot de pass ou/et votre pseudo est/sont incorrect(s) !"
    return 0
    }
    if {![string match -nocase [lindex [getuser $pseudo HOSTS] 0] $nick!$host]} {
         puthelp "notice $nick :\002Erreur :\002 Votre host ne correspond pas avec votre access !"
    return 0
    }
    if {[getuser $pseudo XTRA AUTH] eq "ON"} {
         puthelp "notice $nick :\002Erreur :\002 Vous êtes déjà authentifier !"
    return 0
    }
    if {[getuser $hand XTRA SUSPEND] eq "ON"} {
         puthelp "notice $nick :\002Erreur :\002 Vous êtes suspendu !"
    return 0
    }      
         puthelp "notice $nick :\0031\[AUTHENTIFICATION REUSSIE\]\0031 Vous êtes maintenant authentifié !"
         putserv "privmsg $GB::log :\00314Commande \0036\[\0033Auth\0036\] \0031par : \0034$hand"
         putquick "invite $nick $::GB::log"
         setuser $pseudo XTRA AUTH ON;
         setuser $hand XTRA SEEN [clock format [clock seconds] -format "le %d/%m/%Y à %Hh%M"]
         save
    return
}
 
proc addchan { nick host hand text } {
		 set chan [lindex $text 0]
		 set channel [lindex $text 1]
	if { [nick2hand $nick] eq "*" } {
		 puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(access)]"
    return 0
   }
    if {![isauth $hand]} {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(auth)]"
    return 0
    }
    if {$text==""} {
         puthelp "notice $nick :Addchan incorrect ! Veuillez respecter la syntaxe suivante : ( /msg $::botnick addchan <#salon> ) !"
    }
    if ![matchattr $hand o [lindex $text 0]] {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(level)]"
    return 0
   } 
    if ![string match -nocase $chan] {
		 putserv "privmsg $::GB::log :\00314Commande \0036\[\0033Add-Chan\0036\] \0031par : \0034$hand"
		 putserv "notice $nick :$chan Rajouter au Addchan !"
		 channel add $chan
         savechannels
    return
    }
}
 
proc delchan { nick host hand text } {
		 set chan [lindex $text 0]
		 set channel [lindex $text 1]
	if { [nick2hand $nick] eq "*" } {
		 puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(access)]"
    return 0
   }
    if {![isauth $hand]} {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(auth)]"
    return 0
    }
    if {$text==""} {
         puthelp "notice $nick :Addchan incorrect ! Veuillez respecter la syntaxe suivante : ( /msg $::botnick delchan <#salon> ) !"
    }
    if ![matchattr $hand o [lindex $text 0]] {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(level)]"
    return 0
   } 
    if ![string match -nocase $chan] {
		 putserv "privmsg $::GB::log :\00314Commande \0036\[\0033Del-Chan\0036\] \0031par : \0034$hand"
		 putserv "notice $nick :$chan Retiré des Addchan !"
		 channel remove $chan
         savechannels
    return
    }
}
 
proc listchan { nick host hand text } {
		 set chan [lindex $text 0]
		 set chans [join [lrange [split $text] 0 0]]
	if { [nick2hand $nick] eq "*" } {
		 puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(access)]"
    return 0
    }
    if {![isauth $hand]} {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(auth)]"
    return 0
    }
    if ![matchattr $hand o| [lindex $text 0]] {
         puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(level)]"
    return 0
    }     
    if [string match -nocase $chans $chan] {
		 set voir 1
		 putquick "privmsg $nick :\0034\[Liste Salons\]"
    foreach liste [channels] {
         putquick "privmsg $nick :\0037=>\0032 $voir \0037<= \0033 $liste"
    incr voir 1
    }
         putquick "privmsg $nick :\0036\[Fin De Liste\]"
	     putserv "privmsg $GB::log :\00314Commande \0036\[\0033List-Chan\0036\] \0031par : \0034$hand"
    return 0
    }
    if {[lsearch [channels] $chans $chan]==-1} {
		 puthelp "notice $nick :[subst -nocommands -nobackslashes $::GB::msg(nosalon)]"
     return 
    }
}
 
bind msg - "auth" [namespace current]::auth
bind msg - "addchan" [namespace current]::addchan
bind msg - "delchan" [namespace current]::delchan
bind msg - "listchan" [namespace current]::listchan
}


Il te faut le flag +o en PL
à toi de voir pour certaines modifications à ta guise Smile


RE: Aide sur une commande - Alucard`68 - 07/11/2016

ok aliasangelius je vais me pencher sur ton code pour voir comment je peu faire Smile
Merci je fait un retour dans peu de temps Smile
Comme je suis l'owner de l'eggdrop j'ai pas besoin du flag +o je supose ?


RE: Aide sur une commande - aliasangelius - 07/11/2016

Le flag +o et celui de l'owner du bot Smile

Donc oui tu n'as pas besoin de le faire en PL l'ajout


RE: Aide sur une commande - Alucard`68 - 07/11/2016

bon étant pas super calé en tcl je doit avouer que je comprend pas ton code a 95%
Donc du coup je suis completement perdu mais je vais quand même tenter quelque chose
Je suppose que les parties dont j'ai besoin sont les suivantes :
tcl
if ![string match -nocase $chan] {
		 putserv "privmsg $::GB::log :\00314Commande \0036\[\0033Add-Chan\0036\] \0031par : \0034$hand"
		 putserv "notice $nick :$chan Rajouter au Addchan !"
		 channel add $chan
         savechannels
    return
    }
et
    if ![string match -nocase $chan] {
		 putserv "privmsg $::GB::log :\00314Commande \0036\[\0033Del-Chan\0036\] \0031par : \0034$hand"
		 putserv "notice $nick :$chan Retiré des Addchan !"
		 channel remove $chan
         savechannels
    return
    }





RE: Aide sur une commande - aliasangelius - 07/11/2016

Oui, Mais faut inclure les procédures avec.

Juste cette partie seul, ne te servira pas énorme.
Après faut me recolle dedans, car ya un bail j'ai pas toucher au Eggdrop.

Fait des test et aux pire fournis les erreurs présent en PL, lorsque l'eggdrop va tant donnez une.

Mais il et vrai que nous pouvons partir sur un code TCL beaucoup plus simple.
Fait des test ensuite si tu préfère partir sur du code plus basique, ont changera le code autrement Smile

A chaque problème une solution existe


RE: Aide sur une commande - Alucard`68 - 07/11/2016

Alors voila j'ai fait des test différent mais rien ne fonctionne et aucun message d'erreur en PL
Je préférais partir sur un code plus simple parce que la je suis complètement perdu dans se que je fait...
Et pour être honnête je ne sais absolument pas par ou commencé...
Dans l'idéal je souhaiterais partir du code que j'ai posté au début.

Merci à toi pour ta patiente et ton aide Smile


RE: Aide sur une commande - aliasangelius - 07/11/2016

Anciens code plus ou moins refait :

tcl
set vhostjoinpart {
 *@domaine.tld
}
 
 
bind pubm - !vien vien
bind pubm - !oust oust
 
proc vien { nick host hand channel arg } {
 global vhostjoinpart vien
 set chan [lindex $arg 0]
 foreach vhost [array names $::vhostjoinpart] {
   if {[string match -nocase $vhost $host]} {
     putquick "privmsg #LM-Staff :\00312Ok, \0037$nick \00312! je rejoins \0034$chan"
     channel add $chan
     savechannels
    }
  }
  return
}
 
proc oust { nick host hand channel arg } {
 global vhostjoinpart oust
 set chan [lindex $arg 0]
 foreach vhost [array names $::vhostjoinpart] {
   if [string match -nocase $vhost $host] {
     putquick "privmsg #LM-Staff :\00312Ok, \0037$nick \00312! je part de \0034$chan"
     channel remove $chan
     savechannels
     }
  }
  return
}



Essaye comme ça voir ce que sa donne.


RE: Aide sur une commande - Alucard`68 - 07/11/2016

j'ai testé le code tel quel mais ne fonctionne pas et aucun message d'erreur en PL
Par contre dans le code il y a pas de ligne du genre
Code :
putquick "MSG Thor :join $arg"
je me plante completement peu être


RE: Aide sur une commande - aliasangelius - 07/11/2016

Tu as bien remplacé

Citation :*@domaine.tld

Par ton domaine ?

Exemple :

Citation :*@Staff.net

tcl
putquick "MSG Thor :join $arg"



Je ne l'ai pas mis, car c'était inutile.
Sa renvoyé un message au bot, donc pas utile que le bot se parle à lui même


RE: Aide sur une commande - Alucard`68 - 07/11/2016

voila se que j'ai exactement
tcl
set vhostjoinpart {
  *@Faucheur.EnjOy-Tchat.fr
}
 
 
bind pubm - !vien vien
bind pubm - !oust oust
 
proc vien { nick host hand channel arg } {
 global vhostjoinpart vien
 set chan [lindex $arg 0]
 foreach vhost [array names $::vhostjoinpart] {
   if {[string match -nocase $vhost $host]} {
     putquick "privmsg #LM-Staff :\00312Ok, \0037$nick \00312! je rejoins \0034$chan"
     channel add $chan
     savechannels
    }
  }
  return
}
 
proc oust { nick host hand channel arg } {
 global vhostjoinpart oust
 set chan [lindex $arg 0]
 foreach vhost [array names $::vhostjoinpart] {
   if [string match -nocase $vhost $host] {
     putquick "privmsg #LM-Staff :\00312Ok, \0037$nick \00312! je part de \0034$chan"
     channel remove $chan
     savechannels
     }
  }
  return
}





RE: Aide sur une commande - CrazyCat - 07/11/2016

Premier point: met ton vhost tout en minuscules. Comme de toutes manières tu utilises l'option -nocase sur ton string match, autant ne pas rajouter de sources d'erreurs.

Ensuite, as-tu une erreur ? Passes-tu dans tes conditions ? Mets des putlogs pour voir ce qui se passe.

Dernier point, très important: tu fais un bind pubm. Donc pour ta procédure, $arg reçoit toute la ligne qui contient "!vien" ou "!oust", et pas ce qui suit la commande.