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


[Bug] publicte.tcl
#1

tcl
[/b][19:16:35] Tcl error in file 'eggdrop.conf':
[19:16:35] unmatched open quote in list
    while executing
"llength $::pub_m"
    (procedure "pub_s" line 4)
    invoked from within
"pub_s"
    (file "scripts/publicite.tcl" line 75)
    invoked from within
"source scripts/publicite.tcl"
    (file "eggdrop.conf" line 272)
[19:16:35] * FICHIER DE CONFIGURATION NON CHARGE (INTROUVABLE OU ERREUR)
If there's no errors above, your bot should show up on IRC soon.
Check http://windrop.sourceforge.net/windropfaq.html for help with any errors or
if bot doesn't show up on IRC.
 
[b]



comment résoudre se probleme
  Reply
#2
Bonsoir,

sans le script tcl que tu utilises, ça va être difficile de faire un diagnostic.

Concernant l'erreur sur ta quote , après une recherche google :

Tu essayes d'utiliser des chaînes sous forme de listes à un ou plusieurs endroits. L'une des choses importantes à retenir à propos de tcl est que toutes les listes peuvent être des chaînes, mais toutes les chaînes ne peuvent pas être des listes.

Il ne faut pas mélanger les deux sauf si vous avez une raison explicite de le faire.

Avec ton code, on pourra mieux voir le pourquoi du comment.
  Reply
#3
voici le sricpt


tcl
#############################################################
#  ____        _    _ _      _ _              _      _  #
#  |  _ \ _  _| |__ | (_) ___(_) |_ ___      | |_ ___| |  #
#  | |_) | | | | '_ \| | |/ __| | __/ _ \      | __/ __| |  #
#  |  __/| |_| | |_) | | | (__| | ||  __/  _  | || (__| |  #
#  |_|    \__,_|_.__/|_|_|\___|_|\__\___| (_)  \__\___|_|  #                          
#############################################################
 
#################
# Configuration #
#################
 
# -> Voulez vous ou non activer la publicité ? (1 = OUI | 0 = NON)
set pub_a 1
 
# -> Tout les combiens de minutes voulez vous que la publicité soit envoyé ?
set pub_d 10
 
# -> Liste des chans dans lesquels il faut faire de la pub (mettez * pour faire de la pub dans tout les salons)
#> Vous pouvez mettre autant de salons que vous voulez
set pub_c " #pulsradiotrance "
 
# -> Message à envoyer sur tout les salons
#> Un seul méssage sera tirer au sort et sera envoyer sur tout les salons
#> Vous pouvez mettre qu'un seul méssage et se sera dans tout les cas lui qui sera tirer au sort.
set pub_m {
  "'12,12puls0,0radio4,4trance 11,1Bienvenue Sur le salon 4,1#pulsradiotrance 11,1Chez nous , 11,1vous pouvez entrer , prendre un café , papoter , philosopher et danser , ecoutez notre radio a cette adresse :4,1 http://pulsradiotrance.radio12345.com/ 11,1ou 4,1 http://78.129.139.48:8389/ La Team 4,1 #Digital-Impulse-Radio'"
  " Le cinéma c'est l'art de bien faire les choses Bienvenues sur salon #netflix ?? "
  " 12nous demandons à tous de respecter 1.4les règles. 2Le non-respect des règles établies pourra être sanctionné par un 1.4Kick voire un 1.4Ban. 2Merci de votre compréhension.4nous signalons que ceux qui ne respectent pas 4les règles iront faire un tour ailleurs,2c'est à dire dans 4les couloirs du t'Chat. Merci. Bon t'Chat."
  
}
 
###################
# Debut du script #
###################
 
# Vérifications
 
if {![info exist pub_c]} {
  set pub_c "*"
}
if {![info exist pub_d]} {
  set pub_d 1
}
if {![info exist pub_m]} {
  set pub_m "Vous devez définir un méssage qui sera envoyé toute les $pub_d minutes."
}
 
# Envoie de la publicité
proc pub_s {} {
  
  # On tire aléatoirement la phrase qui va être dite
  set msg_s [lindex $::pub_m [expr {int(rand() * [llength $::pub_m])}]]
  
  if {$::pub_c eq "*"} {
      foreach a [channels] {
        puthelp "PRIVMSG $a :$msg_s"
      }
  } else {
      foreach a $::pub_c {
        if {[string index $a 0] ne "#"} { continue }
        if {![botonchan $a]} { continue }
        puthelp "PRIVMSG $a :$msg_s"
      }
  }
  
  timer $::pub_d pub_s
  
}
 
# Initialisation
 
if {$pub_a} {
  
  pub_s
  
}
 
putlog "Publicite.tcl by DaV34"



script original sans modification


tcl
#############################################################
#  ____        _    _ _      _ _              _      _  #
#  |  _ \ _  _| |__ | (_) ___(_) |_ ___      | |_ ___| |  #
#  | |_) | | | | '_ \| | |/ __| | __/ _ \      | __/ __| |  #
#  |  __/| |_| | |_) | | | (__| | ||  __/  _  | || (__| |  #
#  |_|    \__,_|_.__/|_|_|\___|_|\__\___| (_)  \__\___|_|  #                          
#############################################################
 
#################
# Configuration #
#################
 
# -> Voulez vous ou non activer la publicité ? (1 = OUI | 0 = NON)
set pub_a 1
 
# -> Tout les combiens de minutes voulez vous que la publicité soit envoyé ?
set pub_d 2
 
# -> Liste des chans dans lesquels il faut faire de la pub (mettez * pour faire de la pub dans tout les salons)
#> Vous pouvez mettre autant de salons que vous voulez
set pub_c "#salon1 #salon2 #salon3 #salon4 #salon5 #salon6"
 
# -> Message à envoyer sur tout les salons
#> Un seul méssage sera tirer au sort et sera envoyer sur tout les salons
#> Vous pouvez mettre qu'un seul méssage et se sera dans tout les cas lui qui sera tirer au sort.
set pub_m {
  "Message .... 1"
  "Message .... 2"
  "Message .... 3"
  "Message .... 4"
}
 
###################
# Debut du script #
###################
 
# Vérifications
 
if {![info exist pub_c]} {
  set pub_c "*"
}
if {![info exist pub_d]} {
  set pub_d 1
}
if {![info exist pub_m]} {
  set pub_m "Vous devez définir un méssage qui sera envoyé toute les $pub_d minutes."
}
 
# Envoie de la publicité
proc pub_s {} {
  
  # On tire aléatoirement la phrase qui va être dite
  set msg_s [lindex $::pub_m [expr {int(rand() * [llength $::pub_m])}]]
  
  if {$::pub_c eq "*"} {
      foreach a [channels] {
        puthelp "PRIVMSG $a :$msg_s"
      }
  } else {
      foreach a $::pub_c {
        if {[string index $a 0] ne "#"} { continue }
        if {![botonchan $a]} { continue }
        puthelp "PRIVMSG $a :$msg_s"
      }
  }
  
  timer $::pub_d pub_s
  
}
 
# Initialisation
 
if {$pub_a} {
  
  pub_s
  
}
 
putlog "Publicite.tcl by DaV34"

  Reply
#4
Je ne suis pas devant mon ordinateur pour faire des tests, en ayant survolé rapidement le code, essaye de retirer les espaces de ta variable pub_c


tcl
set pub_c " #pulsradiotrance "


devient


tcl
set pub_c "#pulsradiotrance"

  Reply
#5
j ai deja fait
  Reply
#6
Sans trop regarder, en voici un fonctionnel :


tcl
#####################################################################
## Configuration du Script ##########################################
#####################################################################
 
# Anti flood sur les commandes du Bot x:y (x=nombre de fois, y=secondes) :
set fun(flood) 5:10
 
# Ignorer l'utilisateur après son flood (0=non, 1=oui) :
set fun(ignore) 0
 
# Si oui, combien de temps (en minutes) :
set fun(ignoretime) 1
 
# Laisser faire les utilisateurs ayant certains flags :
set fun(ignflags) "fmnov|fmnov"
 
 
## Pub ##########################################################
#####################################################################
 
# Channels où seront envoyés la Pub :
set publicite(chans) "#tonsalon"
 
# Intervalle de temps entre chaque Pub en minutes (0=désactivé) :
set publicite(time) 120
 
# Editer ici les publicite :
set publicite(msgs) {
 
 
"ce que tu veux ici"
 
 
 
 
 
 
}
 
 
#####################################################################
#####################################################################
#####################################################################
 
proc fun:flood:init {} {
global fun funflood
set fun(floodnum) [lindex [split $fun(flood) :] 0]
set fun(floodtime) [lindex [split $fun(flood) :] 1]
set i [expr $fun(floodnum) - 1]
while {$i >= 0} {
   set funflood($i) 0
   incr i -1
}
}
fun:flood:init
 
proc fun:flood {nick uhost} {
global fun funflood botnick
if {$fun(floodnum) == 0} {
   return 0
}
set i [expr $fun(floodnum) - 1]
while {$i >= 1} {
   set funflood($i) $funflood([expr $i - 1])
   incr i -1
}
set funflood(0) [unixtime]
if {[expr [unixtime] - $funflood([expr $fun(floodnum) - 1])] <= $fun(floodtime)} {
   if {$fun(ignore)} {
      newignore [join [maskhost *!*[string trimleft $uhost ~]]] $botnick "Flood" $fun(ignoretime)
   }
   return 1
} {
   return 0
}
}
 
if {(($publicite(time) != 0) && (![string match "*fun:publicite*" [timers]]))} {
 timer $publicite(time) fun:publicite
}
 
proc fun:publicite {} {
global publicite
foreach channel $publicite(chans) {
   puthelp "PRIVMSG $channel : [lindex $publicite(msgs) [rand [llength $publicite(msgs)]]]"
}
if {(($publicite(time) != 0) && (![string match "*fun:publicite*" [timers]]))} {
   timer $publicite(time) fun:publicite
}
return 1
}
 
 
putlog "auto joke sur $publicite(chans) aux $publicite(time) minutes!"

  Reply
#7
ne se charge pas
  Reply
#8
Question bête: le script original fonctionne ?
Tes codes couleurs dans les messages ne peuvent pas fonctionner, tu ajoutes un ´ entre les «  de la première pub. C’est voulu ? Tu sais pourquoi tu fais ça ?
  Reply
#9
j ai modifie c'est idem
  Reply
#10
Et la réponse à la première question ?
  Reply
#11
(14/03/2022, 21:40)kipof Wrote: Sans trop regarder, en voici un fonctionnel :


tcl
#####################################################################
## Configuration du Script ##########################################
#####################################################################
 
# Anti flood sur les commandes du Bot x:y (x=nombre de fois, y=secondes) :
set fun(flood) 5:10
 
# Ignorer l'utilisateur après son flood (0=non, 1=oui) :
set fun(ignore) 0
 
# Si oui, combien de temps (en minutes) :
set fun(ignoretime) 1
 
# Laisser faire les utilisateurs ayant certains flags :
set fun(ignflags) "fmnov|fmnov"
 
 
## Pub ##########################################################
#####################################################################
 
# Channels où seront envoyés la Pub :
set publicite(chans) "#tonsalon"
 
# Intervalle de temps entre chaque Pub en minutes (0=désactivé) :
set publicite(time) 120
 
# Editer ici les publicite :
set publicite(msgs) {
 
 
"ce que tu veux ici"
 
 
 
 
 
 
}
 
 
#####################################################################
#####################################################################
#####################################################################
 
proc fun:flood:init {} {
global fun funflood
set fun(floodnum) [lindex [split $fun(flood) :] 0]
set fun(floodtime) [lindex [split $fun(flood) :] 1]
set i [expr $fun(floodnum) - 1]
while {$i >= 0} {
  set funflood($i) 0
  incr i -1
}
}
fun:flood:init
 
proc fun:flood {nick uhost} {
global fun funflood botnick
if {$fun(floodnum) == 0} {
  return 0
}
set i [expr $fun(floodnum) - 1]
while {$i >= 1} {
  set funflood($i) $funflood([expr $i - 1])
  incr i -1
}
set funflood(0) [unixtime]
if {[expr [unixtime] - $funflood([expr $fun(floodnum) - 1])] <= $fun(floodtime)} {
  if {$fun(ignore)} {
      newignore [join [maskhost *!*[string trimleft $uhost ~]]] $botnick "Flood" $fun(ignoretime)
  }
  return 1
} {
  return 0
}
}
 
if {(($publicite(time) != 0) && (![string match "*fun:publicite*" [timers]]))} {
 timer $publicite(time) fun:publicite
}
 
proc fun:publicite {} {
global publicite
foreach channel $publicite(chans) {
  puthelp "PRIVMSG $channel : [lindex $publicite(msgs) [rand [llength $publicite(msgs)]]]"
}
if {(($publicite(time) != 0) && (![string match "*fun:publicite*" [timers]]))} {
  timer $publicite(time) fun:publicite
}
return 1
}
 
 
putlog "auto joke sur $publicite(chans) aux $publicite(time) minutes!"

(14/03/2022, 23:01)BdS Wrote: Et la réponse à la première question ?

c'est pour les code couleur sinon sa ne fonctionne pas les couleurs
  Reply
#12
Respires un bon coup et mets tes neurones en connexion stp.
Tu postes deux script. Un modifié, l’autre non. Celui non modifié fonctionne-t-il ?
Elle est pas si dure que ça ma question.
Et quand je te parle de quotes ou de codes couleurs, je te dis pas de les enlever … mais de savoir si tu sais ce que tu fais ?
Relis moi 4 fois avant de répondre stp.
  Reply
#13
même l original ne fonctionne pas même erreur
  Reply
#14
Tu dois mal faire les choses car je viens de tester les deux scripts (le modifié et l'original) et il fonctionne. Par contre si tu lances l'eggdrop tu auras un plantage car il essaye d'envoyer directement la pub alors qu'il n'est pas connecté.
Suffit d'ajouter un timer à l'initialisation de la commande pub_s.

Cherches tes erreurs et ça devrait fonctionner.
  Reply
#15
sa plante quand je fait rehash
  Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)