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


User-Info by dj Kenny
#1
Bonsoir a tous

je souhaiterais savoir comment je pourrais modifier cette tcl afin que chaque user puisse mettre leur info line sans etre obligatoirement inscrit dans le bot voir même si cela est possible que ce soit un owner ou un coach d'un salon qui puisse le faire

Voici la tcl en question

tcl
set ::uinfo(db) "scripts/userinfo.db"
 
bind msg -|- info uinfo:set
bind join - * uinfo:join
 
proc putinfo {arg} {
  putlog "\002\[User-Info\]\002 $arg."
}
 
if ![file exists $::uinfo(db)] {
  catch {open $::uinfo(db) w} pl
  catch {close $pl}
  putinfo "Création de la base de donnée ([pwd]/$::uinfo(db))"
}
 
proc uinfo:set {nick host hand arg} {
 global uinfo
  set arg [charfilter $arg]
  set chan [string tolower [lindex $arg 0]]
  set info [lrange $arg 1 end]
  if {[string index $chan 0]!="#" && $chan!="*"} {
    putserv "NOTICE $nick :\002Syntaxe :\002 /msg $::botnick INFO <#salon> ?votre info?"
    putserv "NOTICE $nick :Mettre * à la place du salon pour une info global. Pour supprimer l'info laisser la vide."
    return 0
  }
  set x 0
  set find 0
  catch {open $uinfo(db) r} pl
  while {![eof $pl]} {
    gets $pl data
    incr x
    set data [charfilter $data]
    if {$data!=""} {
      set h [lindex $data 0]
      set c [lindex $data 1]
      if {$h==$hand && $c==$chan} {
        set find 1
        del $uinfo(db) $x
      }
    }
  }
  catch {close $pl}
  if {$info!=""} {add $uinfo(db) "$hand $chan $info"} else {set find 2}
  set c [isglobalinfo $chan]
  if {$find==0} {
    set r "a été crée" 
  } elseif {$find==1} {
    set r "a été modifiée" 
  } elseif {$find==2} {
    set r "a été supprimée" 
  }
  putserv "NOTICE $nick :Votre info $c $r."
  putinfo "\002$hand\002 ($nick) vient de [lindex $r end] son info $c"
}
 
proc uinfo:join {nick host hand chan} {
 global uinfo
  set find 0
  catch {open $uinfo(db) r} pl
  while {![eof $pl]} {
    gets $pl data
    set data [charfilter $data]
    if {$data!=""} {
      set h [lindex $data 0]
      set c [lindex $data 1]
      if {$h==$hand && ([string tolower $c]==[string tolower $chan] || $c=="*")} {
        putquick "PRIVMSG $chan :\002\[[join $h]\]\002 [join [lrange $data 2 end]]"
        set find 1
      }
    }
  }
  catch {close $pl}
  if [validuser $hand] {
    if {$find==0} {putquick "PRIVMSG $chan :\002\[[join $hand]\]\002"}
    putquick "MODE $chan -v $nick"
  }
}
 
proc isglobalinfo {chan} {
  if {$chan=="*"} {return "global"} 
  return "sur $chan"
}
 
proc del {file line} {
  set i 0
  catch {open $file r+} p
  while {![eof $p]} {
    gets $p data
    incr i
    set data [charfilter $data]
    set vecteur($i) $data
  }
  catch {close $p}
  catch {open $file w+} p
  catch {close $p}
  catch {open $file a+} p
  set u 0
  while {$u <= $i} {
    incr u
    if {$u != $line} {
      if {[info exists vecteur($u)] && $vecteur($u) != ""} {
        puts $p [join $vecteur($u)]
      }
    }
  }
  catch {close $p}
}
 
proc add {file arg} {
  set arg [charfilter [join $arg]]
  catch {open $file a+} p
  puts $p [join $arg]
  catch {close $p}
}
 
proc charfilter {arg} {
  string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg
}
 
putinfo "Info-User loaded"


Merci a vous bonne soirée
#2
Il faudrait refaire le script en lui-même

Operation:
bind pub (sur salon)
<pseudo> !info <text>

(eggdrop)
- va chercher dans l'annuaire du site orange
- si pseudo == op ou coach
- on enregistre sinon on refuse.

bind join (a l'arrivé de salon)
lecture du fichier d'infoline et si <pseudo> figure dans fichier alors on envoie sur salon

Je ne vois que sa comme procédure simple personnelement
#3
Bonjour

Je pense que sa demande est pour mettre une info line (celel que l'utilisateur voudrait mettre) sans que ce dernier ait obligatoirement un flag +v sur son bot ..

Enfin c'est comme ça que j'ai compris le message :)

Dslé je suis pas assez grand codeur pour trouver la soluce (pourtant elle doit crever les yeux) tu as essayé le flag -|- ??
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
#4
Au pire zappeur détail nous ton problème encore une fois et sois plus pointilleux !
#5
Bonsoir,

Alors pour être clair avec vous c'est un peu des deux c'est a dire que avec l'accord de la personne qui soit coach ou opé d'un salon que sur accueil sa apparaissent sous cette forme.

Exemple : [zappeur78] Coach du ou des salons #chan

et pour ceux qui ont des pseudos gratuit et qui désirerais mettre une info line avoir la possibilité de le faire sans être voice ni avoir d’accès sur le bot.

Voila est ce que c'est plus clair pour vous ?

Bonne soirée a tous
#6
Reu
En fait c'est bien ce que je pensais donc :)
Suffit juste de modifier le flag (sans pour autant aller rechercher si le pseudo est membre d'une communauté, ou coach de X ou Y salon, vu que de toutes façons sur ce tchat pourrave d'orange -désolé mais bon hein !- ça change tous les 4 matins !) v.
Donc l'utilisateur ou l'owner du bot pourra lui même rentrer les infos (oui je sais cela fait plus de taff lol).

Pour moi il s'agit bien du flag +v qui fait un barrage quelque part mais bon ça doit être facilement résolvable ...

Cordialement
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
#7
salut,

en fait c'est plus subtile que ça, dans ce tcl je n'ai pas utilisé de flags, mais le hand pour reconnaitre les gens. donc un utilisateur qui n'est pas enregistré (et identifié) sur le bot ne pourra pas ajouter d'info line.
il faut donc revoir l’intégralité du code (qui de toute façon est vieux et très mal codé)
;)
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#8
Faut modifié la ligne :


tcl
if [validuser $hand] {


Pour que les users puisse entrée leur infoline
#9
DJ KEnny est il possible si tu a un peu de temp
que tu refasse toute le code ou que tu me donne des pistes ?
Pour la refaire

merci a tous pour vos réponse
#10
se serait effectivement possible si je codais encore :)
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#11
Salut,

Test comme sa voir


tcl
set ::uinfo(db) "scripts/userinfo.db"
 
bind msg - info uinfo:set
bind join - * uinfo:join
 
proc putinfo {arg} {
  putlog "\002\[User-Info\]\002 $arg."
}
 
if ![file exists $::uinfo(db)] {
  catch {open $::uinfo(db) w} pl
  catch {close $pl}
  putinfo "Création de la base de donnée ([pwd]/$::uinfo(db))"
}
 
proc uinfo:set {nick host hand arg} {
 global uinfo
  set arg [charfilter $arg]
  set chan [string tolower [lindex $arg 0]]
  set info [lrange $arg 1 end]
  if {[string index $chan 0]!="#" && $chan!="*"} {
    putserv "NOTICE $nick :\002Syntaxe :\002 /msg $::botnick INFO <#salon> ?votre info?"
    putserv "NOTICE $nick :Mettre * à la place du salon pour une info global. Pour supprimer l'info laisser la vide."
    return 0
  }
  set x 0
  set find 0
  catch {open $uinfo(db) r} pl
  while {![eof $pl]} {
    gets $pl data
    incr x
    set data [charfilter $data]
    if {$data!=""} {
      set h [lindex $data 0]
      set c [lindex $data 1]
      if {$h==$nick && $c==$chan} {
        set find 1
        del $uinfo(db) $x
      }
    }
  }
  catch {close $pl}
  if {$info!=""} {add $uinfo(db) "$hand $chan $info"} else {set find 2}
  set c [isglobalinfo $chan]
  if {$find==0} {
    set r "a été crée" 
  } elseif {$find==1} {
    set r "a été modifiée" 
  } elseif {$find==2} {
    set r "a été supprimée" 
  }
  putserv "NOTICE $nick :Votre info $c $r."
  putinfo "\002$nick\002 ($nick) vien de [lindex $r end] son info $c"
}
 
proc uinfo:join {nick host hand chan} {
 global uinfo
  set find 0
  catch {open $uinfo(db) r} pl
  while {![eof $pl]} {
    gets $pl data
    set data [charfilter $data]
    if {$data!=""} {
      set h [lindex $data 0]
      set c [lindex $data 1]
      if {$h==$hand && ([string tolower $c]==[string tolower $chan] || $c=="*")} {
        putquick "PRIVMSG $chan :\002\[[join $nick]\]\002 [join [lrange $data 2 end]]"
        set find 1
      }
    }
  }
  catch {close $pl}
  if [matchattr $nick ""] {
    if {$find==0} {putquick "PRIVMSG $chan :\002\[[join $nick]\]\002"}
    putquick "MODE $chan -v $nick"
  }
}
 
proc isglobalinfo {chan} {
  if {$chan=="*"} {return "global"} 
  return "sur $chan"
}
 
proc del {file line} {
  set i 0
  catch {open $file r+} p
  while {![eof $p]} {
    gets $p data
    incr i
    set data [charfilter $data]
    set vecteur($i) $data
  }
  catch {close $p}
  catch {open $file w+} p
  catch {close $p}
  catch {open $file a+} p
  set u 0
  while {$u <= $i} {
    incr u
    if {$u != $line} {
      if {[info exists vecteur($u)] && $vecteur($u) != ""} {
        puts $p [join $vecteur($u)]
      }
    }
  }
  catch {close $p}
}
 
proc add {file arg} {
  set arg [charfilter [join $arg]]
  catch {open $file a+} p
  puts $p [join $arg]
  catch {close $p}
}
 
proc charfilter {arg} {
  string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg
}
 
putinfo "Par Dj_KennY"



Possibly Related Threads…
Thread Author Replies Views Last Post
  info tcl haddock 4 3,114 08/03/2011, 02:53
Last Post: haddock

Forum Jump:


Users browsing this thread: 1 Guest(s)