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
Répondre Avertir
#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.
Répondre
#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 ..."


Répondre Avertir
#4
Il faut que tu appelles la procédure avec les arguments qu'elle recevrait si elle était appelée par un bind pub.
Répondre
#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.
Répondre Avertir
#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 ""


Répondre
#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"
Répondre Avertir
#8
Essaye avec:
tcl
utimer 20 [list KAOS_Start $::botnick [getchanhost $::botnick $channel] $::botnick $channel ""]


Répondre
#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]
Répondre Avertir
#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.
Répondre
#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
Répondre Avertir
#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.
Répondre Avertir
#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.
Répondre
#14
Ok bin je vais faire ca en rentrant alors. Merci de ton eclaircissement.
Répondre Avertir


Atteindre :


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