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


Probleme de commande quizz
#1
Bonjour, je viens car j'ai un petit soucis avec un tcl de quizz.

voici la procedure de lancement du jeux


tcl
bind pub -|b !bac KAOS_Start
 
# Global Variables
set KAOSRunning 0
set KAOSAllAnswered 0
set KAOSRoundOver 0
set KAOSQNumber 0
set KAOSQuestion ""
set KAOSQuestions(0) ""
set KAOSAsked ""
set KAOSMonthFileName ""
set KAOSQCount 0
set KAOSAnswerCount 0
set KAOSDisplayNum 0
set KAOSNumAnswered 0
set KAOSForced 0
set KAOSForcedQuestion ""
set KAOSAutoStart 0
 
# Scores And Ads
set KAOSAdNumber 0
set KAOSAd(0) "$botnick"
set KAOSAd(1) "$botnick"
set KAOSAd(2) "$botnick"
set KAOSAd(3) "$botnick"
set KAOSLastMonthScores(0) "Vide 0"
set KAOSLastMonthScores(1) "Vide 0"
set KAOSLastMonthScores(2) "Vide 0"
 
# Timers
set KAOSAdTimer ""
set KAOSQuestionTimer ""
 
# Version
set KDebug 0
set KAOSVersion "0.91.0"
 
#
# Start KAOS
#
proc KAOS_Start {nick uhost hand chan args} {
 global KAOSChannel KAOSRunning KAOSQCount KAOSQNumber chanban KAOSAdNumber KAOSVersion KDebug
 global botnick
 set args [stripcodes bcruag $args]
 
 if {($chan != $KAOSChannel)||($KAOSRunning != 0)} {return}
 if {![isop $nick $chan]} {return}
 if {![$botnick]} {return}
 
 set KAOSQCount 0
 set KAOSAdNumber 0
 
 KAOS_ReadCFG
 
 if {![file exist $chanban]} {
   putcmdlog "\[KAOS\] Question File: $chanban Unreadable Or Does Not Exist"
   return 0
 }
 
 set KAOSQCount [KAOS_ReadQuestionFile]
 
 if {$KAOSQCount < 2} {
   putcmdlog "\[KAOS\] Not Enough Questions in Question File $chanban"
   return 0
 }
 
 set KAOSAskedFileLen [KAOS_ReadAskedFile]
 
 if {$KAOSAskedFileLen >= $KAOSQCount} {
   kaosmsg "[kaos] [kcr] Mise à jour de la base de donnée tapez !bac \003"
   KAOS_ResetAsked
   return 0
 }
 
 set KAOSRunning 1
 
 kaosmsg "[kaos] [kcm]Jeu du KAOS\[$KAOSQCount Questions\] \003"
 
 bind pubm - "*" KAOSCheckGuess
 
 KAOSAskQuestion
 
 return 1
}


mon soucis est que j'ai rajouté une commande pour que toutes les deux heures la base de données des questions change et qu'ensuite le bot tape !bac sur le saln pour RElancer le jeu, mais apparement quand c'est lui meme qui tape !bac ca ne prend pas en compte la commande et le jeu ne se lance pas.

j'ai bien rajouté dans la procedure de lancement un flag pour le bot comme ca
tcl
bind pub -|b !bac KAOS_Start


et cette ligne de façon a ce qu'il n'y ai que les op qui puisse lancer le quizz et aussi le bot
comme ceci
tcl
proc KAOS_Start {nick uhost hand chan args} {
 global KAOSChannel KAOSRunning KAOSQCount KAOSQNumber chanban KAOSAdNumber KAOSVersion KDebug
 global botnick
 set args [stripcodes bcruag $args]
 
 if {($chan != $KAOSChannel)||($KAOSRunning != 0)} {return}
 if {![isop $nick $chan]} {return}
 if {![$botnick]} {return}


mais je pense qu'il doit y avoir une erreur quelque part.

Si quelqu'un peu m'aider.

Merci
#2
Un eggdrop ne réagit pas à ce qu'il dit en canal.
Donc si ton eggdrop dit "!bac", le bind pub ne réagit pas.

Il serait plus simple que la procédure qui change la base de données appelle directement la procédure KAOS_Start. C'est d'ailleurs la seule méthode logique (pour ne pas dire intelligente) à utiliser.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#3
Bonjour,

Meilleurs voeux à toutes et tous.

J'ai deja essayé de faire en sorte que la procédure appelle KAOS_Start, mais j'ai cette erreur en PL
tcl
[02:56:20] wrong # args: should be "KAOS_Start nick uhost hand chan ..."

#4
Il faut que tu appelles la procédure avec les arguments qu'elle recevrait si elle était appelée par un bind pub.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#5
en fait pour faire le systeme de rotation de base de donnée, j'ai repris une partie d'un code qui se trouve de fun.tcl et j'ai fait comme ceci


tcl
## Systeme de rotation des bases de données #########################
#####################################################################
 
# Channels où seront envoyés les blagues :
set rotation(chans) "#accueil"
 
# Intervalle de temps entre chaque blague en minutes (0=désactivé) :
set rotation(time) 120
 
# Editer ici les blagues :
set rotation(msgs) {
   "1.db"
   "2.db"
   "3.db"
   "4.db"
   "5.db"
   "6.db"
   "7.db"
   "8.db"
   "9.db"
   "10.db"
   "11.db"
   "12.db"
   "13.db"
   "14.db"
}
 
#####################################################################
#####################################################################
#####################################################################
 
#nom du fichier texte à lire 
set fname "scripts/quizz.cfg"
 
proc rot:pub:bot {nick uhost hand channel arg} {
global rot bot botnick
if ![matchattr $nick $rot(ignflags) $channel] {
   if {[rot:flood $nick $uhost]} {
      return 0
   }
}
if {(([lsearch -exact [string tolower $bot(chans)] [string tolower $channel]] != -1) || ($bot(chans) == "*")) && (![matchattr $hand b]) && ($nick != $botnick)} {
   putserv "PRIVMSG $channel :[lindex $bot(msgs) [rand [llength $bot(msgs)]]]"
   return 1
}
}
if {(($rotation(time) != 0) && (![string match "*rot:rotation*" [timers]]))} {
 timer $rotation(time) rot:rotation
}
 
proc rot:rotation {} {
global rotation
global fname
set f [open "$fname" "a"] 
puts $f "KAOSFile=scripts/[lindex $rotation(msgs) [rand [llength $rotation(msgs)]]]" 
close $f
foreach channel $rotation(chans) {
   rehash
   puthelp "PRIVMSG $channel :Rotation de la base de donnée"
   puthelp "privmsg $channel :Mise à jour du quizz Veuillez patienter. Redemarrage en cours."
   utimer 20 KAOS_Start
}
 
if {(($rotation(time) != 0) && (![string match "*rot:rotation*" [timers]]))} {
   timer $rotation(time) rot:rotation
}
return 1
}



j'ai mis un utimer de façon a ce que apres le rehash tout ai le temps de se mettre en place et appelé KAOS_Start mais j'ai donc l'erreur en PL que j'ai montré avant.
#6
Oui, c'est ce que je t'ai dit, tu n'envoies aucun argument alors que la procédure attends nick, host, handle, chan et args.
Donc:

tcl
utimer 20 KAOS_Start $::botnick [getchanhost $::botnick $channel] $::botnick $channel ""

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#7
j'ai bien ajouté comme ceci


tcl
proc rot:rotation {} {
global rotation
global fname
set f [open "$fname" "a"] 
puts $f "KAOSFile=scripts/[lindex $rotation(msgs) [rand [llength $rotation(msgs)]]]" 
close $f
foreach channel $rotation(chans) {
   rehash
   puthelp "PRIVMSG $channel :Rotation de la base de donnée"
   puthelp "privmsg $channel :Mise à jour du quizz Veuillez patienter. Redemarrage en cours :)."
   utimer 20 KAOS_Start $::botnick [getchanhost $::botnick $channel] $::botnick $channel ""
}
 
if {(($rotation(time) != 0) && (![string match "*rot:rotation*" [timers]]))} {
   timer $rotation(time) rot:rotation
}
return 1
}


toujours une erreur en PL
Code:
[22:36:00] Tcl error in script for 'timer101358':
[22:36:00] wrong # args: should be "utimer seconds command"
#8
Essaye avec:

tcl
utimer 20 [list KAOS_Start $::botnick [getchanhost $::botnick $channel] $::botnick $channel ""]

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

J'ai procédé comme ceci

tcl
proc rot:rotation {} {
global rotation
global fname
set f [open "$fname" "a"]
puts $f "KAOSFile=scripts/[lindex $rotation(msgs) [rand [llength $rotation(msgs)]]]"
close $f
foreach channel $rotation(chans) {
   rehash
   puthelp "PRIVMSG $channel :Rotation de la base de donnée"
   puthelp "privmsg $channel :Mise à jour du quizz Veuillez patienter. Redemarrage en cours :)."
   utimer 20 [list KAOS_Start $::botnick [getchanhost $::botnick $channel] $::botnick $channel ""]
}
 
if {(($rotation(time) != 0) && (![string match "*rot:rotation*" [timers]]))} {
   timer $rotation(time) rot:rotation
}
return 1
}


Je n'ai plus d'erreur en PL mais par contre ca ne relance pas le quizz.

Je joint le TCL entier en piece jointe ce sera peut etre plus comprehensible.

[attachment=242]
#10
Est-ce que ton egg est op sur le canal ? Est-ce que tu as mis des putlog de debug dans la procédure KAOS_Start ?
On ne va pas tout te faire.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#11
Oui mon egg est op sur le canal.
Pour les putlog de debug sur la procedure KAOS_Start je n'ai rien fait car je ne sais pas pour putlog de debug.
Desole. Merci quand meme
#12
Si par hasard quelqu'un passe par ici et qu'il pourrais m'expliquer l'histoire des putlog de debug je suis preneur. Merci d'avance.
#13
En gros, tu reprends ton code pour afficher du debug et savoir où tu passes et ce qui déconne:

tcl
proc KAOS_Start {nick uhost hand chan args} {
global KAOSChannel KAOSRunning KAOSQCount KAOSQNumber chanban KAOSAdNumber KAOSVersion KDebug
global botnick
set args [stripcodes bcruag $args]
 
if {($chan != $KAOSChannel)||($KAOSRunning != 0)} {putlog "Pas le bon chan ou Kaos ne tourne pas"; return;}
if {![isop $nick $chan]} {putlog "Ah ben je ($nick)ne suis pas op sur $chan"; return;}
if {![$botnick]} {putlog "$botnick n'est pas moi (truc inutile)"; return;}
putlog "En fait, c'est après que ça déconne"

Et en fonction du message affiché en party-line, tu sauras ce qui foire.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#14
Ok bin je vais faire ca en rentrant alors. Merci de ton eclaircissement.


Possibly Related Threads…
Thread Author Replies Views Last Post
  probleme de commande sur KAOS loulou7593 43 26,283 30/03/2016, 23:44
Last Post: ShowDowN
  Problème commande JService Alucard`68 4 4,749 07/06/2012, 22:41
Last Post: ZarTek
Sad problème sur certaine commande Alucard`68 12 6,689 22/05/2012, 12:13
Last Post: Alucard`68
  Probleme avec commande AJOUT d'users loulou7593 13 8,411 10/07/2010, 18:57
Last Post: CrazyCat
  Probleme sur une !commande heretoc 3 4,639 22/06/2009, 15:54
Last Post: heretoc

Forum Jump:


Users browsing this thread: 1 Guest(s)