Autosajoin en fonction des pseudos et vhost.
#1
Je vous explique brièvment le tcl.

!addsaj pseudo #salon
-> Ajoute un sajoin à pseudo sur #salon

!delsaj pseudo #salon
-> retire le sajoin de #salon à pseudo.

!flushsaj pseudo
-> retire tout les saj de pseudo

!showsaj pseudo
-> montres tout les saj de pseudo.

Voila pour l'application.

J'ai trouvé un tcl qui semble être fait pour ça.
Mais le souci c'est qu'il ne fonctionne absolument pas et me donne des erreurs à tout bout de champ.

TCL
set vhostniv0 {
	*@NetAdmin.Best-Friend-Chat.fr
	*@ChanAdmin.Best-Friend-Chat.fr
	*@ChanOp.Best-Friend-Chat.fr
	*@Op.Best-Friend-Chat.fr
	*@AnimPlus.Best-Friend-Chat.fr
	*@StaffPlus.Best-Friend-Chat.fr
	*@TechAdmin.Best-Friend-Chat.fr
	*@IrcOp.Best-Friend-Chat.fr
	*@global.Best-Friend-Chat.fr
	*@anim.Best-Friend-Chat.fr
}
 
set vhostplus {
	*@NetAdmin.Best-Friend-Chat.fr
	*@ChanAdmin.Best-Friend-Chat.fr
	*@ChanOp.Best-Friend-Chat.fr
	*@StaffPlus.Best-Friend-Chat.fr
	*@TechAdmin.Best-Friend-Chat.fr
	*@IrcOp.Best-Friend-Chat.fr
	*@global.Best-Friend-Chat.fr
}
 
set salonstaff {
"#Spam"
"#casino"
"#WyLo-Le-pReCiEuX"
"#AER354sdfgERFG574gGD"
"#KamiLLia"
"#1000bornes"
"#quizz"
"#Welcome"
"#Uno"
"#sexe"
"#scrabble"
"#Radio"
"#maghreb"
"#Aide"
"#Staff+"
"#plaintes"
"#bureau"
"#Services"
"#staff"
"#accueil"
}
 
bind pub *|* !showsaj show_saj
bind pub *|* !delsajall flush_saj
bind pub *|* !addsaj add_saj
bind join * * autosaj_pseudo
 
proc autosaj_pseudo { nick host chan text } {
    global vhostniv0 npct
    foreach vhost $vhostniv0 {
        if {[string match -nocase $vhost $host]}  {
		set npct [lindex $text 0]
    set ynick $nick
    set thereis [file exists [file join ./ saj_$ynick.txt]]
    if {$thereis == 0} {
        return 1
    }
    set nbrsaj [lindex [exec wc -l saj_$ynick.txt] 0]
    set newsfile [open "| tail -n $npct saj_$ynick.txt" "r+"]
    if {[eof $newsfile]} {
        close $newsfile
    } else {
        set yes 0
	set nbrsaj [lindex [exec wc -l saj_$ynick.txt] 0]
	if {[llength $text] == 0 } {
	    set numsaj 0
	} else {
	    set numsaj [expr {$nbrsaj - $npct}]
	}
        while {[eof $newsfile] == 0} {
            set line [gets $newsfile]
	    incr numsaj
            set delimn [string last "(+++" $line]
            set delimt [string last "(+-+" $line]
            set msg [string range $line 2 [expr {$delimn} - 2]]
            set stlen [string length $line]
            set adder [string range $line [expr {$delimn} + 4] [expr {$delimt} - 3]]
            set adtim [string range $line [expr {$delimt} + 4] [expr {$stlen} - 2]]
            if { $msg != "" } {
                putquick "SAJOIN $ynick $msg"
            }
            set yes 1
        }
       close $newsfile
        unset numsaj
   }
          }
        }
      }
 
proc flush_saj { nick uhost hand chan text } {
 global salonstaff vhostplus npct
    set ynick [lindex $text 0]
    foreach salonst $salonstaff {
        if {[string match -nocase $salonst $chan]} {
        foreach vhost $vhostplus {
        if {[string match -nocase $vhost $uhost]}  {
            putserv "NOTICE $nick :Suppression de tous les saj de $ynick"
            eval "exec rm -f ./saj_$ynick.txt"
            return 1
              }
           }
        }
    }
}
 
 
proc add_saj { nick uhost hand chan text } {
  global salonstaff vhostplus npct
foreach salonst $salonstaff {
if {[string match -nocase $salonst $chan]} {
    foreach vhost $vhostplus {
        if {[string match -nocase $vhost $uhost]}  {
if {$text == ""} {
    putserv "NOTICE $nick :\00312- Syntax !addsaj pseudo #salon -"
    return 0
}
  set ynick [lindex $text 0]
  set msg [lindex $text 1]
  set thereis [file exists [file join ./ saj_$ynick.txt]]
  set cmp [expr {$thereis} == 1]
  if {$cmp} {
    set newsfile [open [file join ./ saj_$ynick.txt] "a+"]
  } else {
    set newsfile [open [file join ./ saj_$ynick.txt] "w+"]
  }
  puts $newsfile "+ $msg (+++) (+-+[strftime "%H:%M %d.%m.%Y"])"
  putserv "NOTICE $nick :\00312- Le saj à été ajouté -"
  close $newsfile
  set newstamp [strftime "%Y%m%d%H%M"]
  return 1
}
}
}
}
}
 
proc show_saj { nick uhost hand chan text } {
  global salonstaff vhostplus npct
    foreach nickok $vhostplus {
    if {[string match -nocase $nickok $uhost]} {
    foreach salonst $salonstaff {
    if {[string match -nocase $salonst $chan]} {
    if {[lindex $text 0]!=""} {
    set npct [lindex $text 0]
    set ynick [lindex $text 0]
    set thereis [file exists [file join ./ saj_$ynick.txt]]
    if {$thereis == 0} {
        putserv "NOTICE $nick :Pas de saj pour $ynick en ce moment."
        return 1
    }
    set nbrsaj [lindex [exec wc -l saj_$ynick.txt] 0]
    set newsfile [open "| tail -n $npct saj_$ynick.txt" "r+"]
    if {[eof $newsfile]} {
        putserv "NOTICE $nick :Pas de saj presents."
        close $newsfile
    } else {
        set yes 0
	set nbrsaj [lindex [exec wc -l saj_$ynick.txt] 0]
	if {[llength $text] == 0 } {
	    set numsaj 0
	} else {
	    set numsaj [expr {$nbrsaj - $npct}]
	}
        while {[eof $newsfile] == 0} {
            set line [gets $newsfile]
	    incr numsaj
            set delimn [string last "(+++" $line]
            set delimt [string last "(+-+" $line]
            set msg [string range $line 2 [expr {$delimn} - 2]]
            set stlen [string length $line]
            set adder [string range $line [expr {$delimn} + 4] [expr {$delimt} - 3]]
            set adtim [string range $line [expr {$delimt} + 4] [expr {$stlen} - 2]]
            if { $msg != "" } {
                putquick "NOTICE $nick :-\00305 $numsaj\003 - (\0033 $adtim \017): \00312$msg (\0034$adder\017)"
            }
            set yes 1
        }
        if { $yes==0 } {
            putserv "NOTICE $nick :Pas de saj."
       }
       close $newsfile
        unset numsaj
   }
          }
        }
      }
    }
  }
}



Voici le genre d'erreur que je rencontre:

Code :
<Atlantis> [15:29] Tcl error [show_saj]: can't use non-numeric string as operand of "-"
ici j'ai modifié le expr en enlevant le - , et j'ai eu cette erreur
Code :
<Atlantis> [15:31] Tcl error [show_saj]: syntax error in expression "$nbrsaj  $npct": extra tokens at end of expression

j'ai essayé de remplacer par un +
Code :
<Atlantis> [15:33] Tcl error [show_saj]: can't use non-numeric string as operand of "+"

j'ai ensuite rencontré un autre souci:
Code :
<Atlantis> [15:41] Tcl error [autosaj_pseudo]: can't read "npct": no such variable

j'ai donc essayer d'apporter certaines modifications, ayant vu "npct" set vers la fin du code, en le mettant dans le global ...

Bref, ce tcl est sensé faire ce que je voulais, mais au final il ne fonctionne pas du tout.
J'ai eu l'envie de le recoder, mais ca n'est pas de mon niveau malheureusement.

Pourriez vous m'aider s'il vous plait ?
Répondre Avertir
#2
Heretoc, je vais essayer de faire ça à partir d'un de tes scripts si cela ne te derange pas.
juste si tu pouvais me dire à quoi corresponde les binds, j'ai que ce bout de tcl moi.


script supprimé par un modérateur, vous ne devez pas publier de code source ne vous appartenant pas sans autorisation de l'auteur, sauf si la license d'utilisation fournie avec inclut cette autorisation

ps: merci à Alsyx pour son aide in irc.
Répondre Avertir
#3
Oui sa me derange je tes pas donner sa ... et je voit pas pourquoi tu l'ajoute comme sa ...
Répondre
#4
Désolé encore, je comptait l'enlever des que j'ai eu tes messages, mais on s'en est deja occupé.

Toutes mes excuses.
Répondre Avertir
#5
bon, je me lance dans le recodage d'une chose qu'on m'a transmise.
Je vous en ferai part si je m'en sort.

A moins que l'un d'entre vous en connaisse un qui FONCTIONNE, de ces système d'autosaj sur les pseudos. enfin voila ...

J'aurai surement fini dans 2 ans ...
Répondre Avertir
#6
Bon, après des heures de casse tête, et de travail, et surtout quelques poignées de cheveux en moins, j'ai réussi a faire ça:

TCL
#################################################
######### AUTOSAJ TCL PAR BLACKNIGHT ############
#################################################

 
# Les binds
bind pub - !addsaj add_saj
bind pub - !delsaj del_saj
bind pub - !listsaj list_saj
bind join - "*" auto_saj

 
# configuration NE PAS EDITER
 
set sajdb "sajoin.db"
set sajuse ""

 
# Les Procs
 
proc add_saj {nick host hand chan text} {
global vhostkill sajdb sajuse
 foreach vhostaddautosaj $vhostkill {
  if [string match -nocase $vhostaddautosaj $host]  {
set 3 [lindex $text 0]
set 4 [lindex $text 1]
set sajt [del_sajuse $nick]
set sajuse "[lrange $sajuse 0 end] $3@$4"
set f [open "$sajdb" "a"]
puts $f "$sajuse"
close $f
putquick "PRIVMSG $chan : \002\00303OK.\002\00312 AutoJoin vers $4 ajouté pour $3.\003"
}
}
}
 
proc del_saj {nick host hand chan text} {
global vhostkill sajdb sajuse
 foreach vhostdelautosaj $vhostkill {
  if [string match -nocase $vhostdelautosaj $host]  {
set sajuse [del_sajuse [lindex $text 0]]
set f [open "$sajdb" "a"]
puts $f "$sajuse"
close $f
putquick "PRIVMSG $chan : \002\00303OK.\002\00312 [lindex $text 0] n'a plus d'AutoJoin.\003"
}
}
}
 
proc list_saj {nick host hand chan text} {
global vhostkill sajdb sajuse
 foreach vhostshowautosaj $vhostkill {
  if [string match -nocase $vhostshowautosaj $host]  {
set saju [llength $sajuse]
set listsaj ""
set i "0"
putquick "PRIVMSG $chan :\002\00306L\002\00312iste \002D\002es \002\00304A\002uto-\002J\002oin \:"
while { $i <= $saju } {
set saj [lindex $sajuse $i]
set saj [split $saj "@"]
set sajn [lindex $saj 0]
set sajc [lindex $saj 1]
if { $sajn != "" } {
set listsaj "[lrange $listsaj 0 end] \00304$sajn \00312(\00303$sajc\00312), "
}
if { [llength $listsaj] >= "6" } {
putquick "PRIVMSG $chan :$listsaj"
set listsaj ""
}
incr i
}
if { $listsaj != "" } {
putquick "PRIVMSG $chan :$listsaj"
set listsaj ""
}
putquick "PRIVMSG $chan :\002\00306F\002\00312in \002D\002e \002L\002a \002L\002iste."
return
}
}
}
 
proc del_sajuse { nick } {
global sajuse
set saju [llength $sajuse]
set listsaj ""
set sajx "0"
set i "0"
while { $i <= $saju } {
set sajc [lindex $sajuse $i]
set sajt [split $sajc "@"]
set sajy [lindex $sajt 0]
if {![string match -nocase $nick $sajy]} {
set listsaj "[lrange $listsaj 0 end] $sajc"
} else { set sajx 1 }
incr i
}
return $listsaj
}
 
proc auto_saj {nick host hand chan} {
global sajuse
set saju [llength $sajuse]
set listsaj ""
set i "0"
while { $i <= $saju } {
set saj [lindex $sajuse $i]
set saj [split $saj "@"]
set sajn [lindex $saj 0]
set sajc [lindex $saj 1]
if {[string match -nocase $nick $sajn]} {
set ::timernick $nick
set ::timerchan $sajc
utimer 5 { 
putquick "SAJOIN $::timernick $::timerchan"
set ::timernick ""
set ::timerchan ""
 }
}
incr i
}
return
}


a savoir "sajoin.db" doit être créer a la racine de l'eggdrop.

donc une fois le tcl chargé, tout fonctionne impeccable.

Mon Salon Irc a écrit :-12:59:29- ‹~BlackNight14› !addsaj BlackNight #salon1,#salon2,#salon3
-12:59:30- ‹~Merlin› OK. AutoJoin vers #salon1,#salon2,#salon3 ajouté pour BlackNight.
-12:59:43- ‹~BlackNight› !listsaj
-12:59:43- ‹~Merlin›Liste Des Auto-Join :
-12:59:43- ‹~Merlin›BlackNight (#salon1,#salon2,#salon3),
-12:59:43- ‹~Merlin› Fin De La Liste.
-13:00:06- ‹~BlackNight› !delsaj BlackNight
-13:00:06- ‹~Merlin› OK. BlackNight n'a plus d'AutoJoin.
-13:00:11- ‹~BlackNight› !listsaj
-13:00:11- ‹~Merlin›Liste Des Auto-Join :
-13:00:11- ‹~Merlin› Fin De La Liste.
apres quelques test il saj comme il faut.

le seul souci, c'est que si j'ai le malheur de redémarrer l'eggdrop ou de le rehash, il ne prends plus en compte les sajoin, il ne saj plus, il ne les liste plus non plus, enfin, plus rien ne va.

Vous auriez une solution s'il vous plait ? là je sèche totalement.
Répondre Avertir
#7
Alors pour un débutant, je trouve que tu code bien BlackNight !
Mes félicitations. Smile
Répondre Avertir
#8
bah pour ça là, j'ai eu âs mal d'aide, j'ai récupérer des morceaux de codes qui faisaient les choses que j'avais besoin, et j'ai essayer de les modifier a ma sauce pour comprendre un peu.

Mais je ne l'ai pas codé entièrement moi même c'est vrai.
(ps: j'ai l'autorisation de l'auteur pour les quelques lignes sur lesquelles je me suis basé)
Répondre Avertir
#9
Bon, j'ai fini par trouver la solution en faisant une initialisation des variables.
C'est un code que je vous donnerai sur demande si vous le désirez.

Je laisse celui posté plus haut public, il est fonctionel, avec des bugs certes.
Répondre Avertir
#10
Tu devrais envisager d'écrire tes listes dans un fichier à chaque modification, et de relire ce fichier au démarrage du script pour les recharger.
Répondre Avertir
#11
TON CODE MARCHE PAS.
Répondre Avertir
#12
Smilx3 a écrit :TON CODE MARCHE PAS.

peut tu nous indiquer si tu as des erreurs en party line ect .. ?



cordialement
[font=Times New Roman]La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.[/font]
Répondre Avertir
#13
Y'en a pas :/
Répondre Avertir
#14
Ton bot est ircop avec possibilité de sajoin les gens ?
Répondre
#15
Bonjour,

Comment mettre le eggdrop en ircop comme le dit " heteroc " s'il vous plait ?

merci
Répondre Avertir


Atteindre :


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