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

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é !
Répondre Avertir
#4
Au pire zappeur détail nous ton problème encore une fois et sois plus pointilleux !
Répondre Avertir
#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
Répondre Avertir
#6
Reu
En fait c'est bien ce que je pensais donc Smile
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é !
Répondre Avertir
#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é)
Wink
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#8
Faut modifié la ligne :

tcl
if [validuser $hand] {



Pour que les users puisse entrée leur infoline
Répondre Avertir
#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
Répondre Avertir
#10
se serait effectivement possible si je codais encore Smile
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#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"


Répondre Avertir


Atteindre :


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