19/03/2014, 20:33
Bonsoir, :D
J'ai codé ce petit code aujourd'hui et j'aimerais avoir votre avis de ce que je pourrais rajouté ou enlever merci !
Code :
J'ai codé ce petit code aujourd'hui et j'aimerais avoir votre avis de ce que je pourrais rajouté ou enlever merci !
Code :
tcl
####################################
# Aurel-Tchat Network #
# Server irc://irc.aurel-tchat.fr#
# Site-Web http://aurel-tchat.fr #
# Forum http://forum.aurel-tchat.fr#
####################################
#####################################################################################
# Attention Si vous toucher le code vous risquer de le faire planter #
# Merci de pas toucher si vous avez aucune connaissance dans le domaine du TCL#
#####################################################################################
#********************#
# Configuration Link #
#********************#
set laura(link) "Laura.*******.fr"
set laura(info) "Service Moderation"
set laura(host) "Laura.****.fr"
set laura(ip) "IP"
set laura(port) "PORT"
set laura(pass) "12345678"
set laura(pseudo) "Laura"
set laura(real) "Laura Service Moderation"
set laura(ident) "Laura"
set laura(salon) "#salon"
set laura(accueil) "#salon"
set laura(mode) "+oOSqsw"
#***********#
# Connexion #
#***********#
proc connexion {} {
global laura
if {![catch "connect $laura(ip) $laura(port)" laura(idx)]} {
putdcc $laura(idx) "PASS $laura(pass)"
putdcc $laura(idx) "SERVER $laura(link) 1 :$laura(info)"
putdcc $laura(idx) ":$laura(link) NICK $laura(pseudo) 1 [unixtime] $laura(ident) $laura(host) $laura(link) :$laura(real)"
putdcc $laura(idx) ":$laura(pseudo) MODE $laura(pseudo) $laura(mode)"
putdcc $laura(idx) ":$laura(pseudo) JOIN $laura(salon)"
putdcc $laura(idx) ":$laura(pseudo) JOIN $laura(accueil)"
control $laura(idx) event; utimer 30 verification
}
}
#**************#
# Verification #
#**************#
if {![info exists laura(idx)]} { connexion }
proc verification {} {
global laura
if {[valididx $laura(idx)]} { utimer 30 verification } else { connexion }
}
#***********#
# Evenement #
#***********#
proc event {idx arg} {
global laura
set arg [split $arg]
if {[lindex $arg 0]=="PING"} { putdcc $idx "PONG [lindex $arg 1]" }
}
#**********************#
# Xvoice pour anim #
#**********************#
bind pub n "!xvoice" pub:xvoice
proc pub:xvoice { nick handle uhost chan text } {
putserv "MODE $chan +v $nick"
putquick "SAJOIN $nick #Staff"
puthelp "NOTICE $nick Bonne Moderation !"
puthelp "NOTICE $nick Pour savoir mais commandes de modération tape !modere"
putserv "NOTICE $nick Pence Bien a te devoice quand tu anim plus ! => !xdevoice Merci"
}
#********************#
# Xdevoice pour anim #
#********************#
bind pub n "!xdevoice" pub:xdevoice
proc pub:xdevoice { nick handle uhost chan text } {
putserv "MODE $chan -v $nick"
puthelp "NOTICE $nick Merci d'avoir animé $nick"
}
#*************#
# Kick Pseudo #
#*************#
bind pub n "!kick" pub:kick
proc pub:kick { nick handle uhost chan arg } {
set nick [lindex $arg 0]
putquick "KICK $chan $arg Merci de rester calme !"
return 1
}
#************#
# Ban Pseudo #
#************#
bind pub n "!kb" pub:kb
proc pub:kb { nick handle uhost chan arg } {
set nick [lindex $uhost 0]
putquick "MODE $chan +b $arg"
putquick "KICK $chan $arg Reste Cool !"
}
#*************#
# Appel IRCop #
#*************#
bind pub n "!appel" pub:appel
proc pub:appel { nick uhost handle chan arg } {
puthelp "PRIVMSG #Staff $nick Appel un IRCop sur $chan"
putserv "NOTICE $nick Les IRCops on ete appelé"
}
#***********#
# Shun Nick #
#***********#
set ShunTime "3m";
bind pub ! "!chut" pub:chut
proc pub:chut { nick uhost handle chan arg } {
set nick [lindex $uhost 0]
putquick "SHUN $arg $::ShunTime Ferme La Un Peux Tu SOul !!! :)"
}
#***************#
# Help Commande #
#***************#
bind pub X "!modere" pub:help
proc pub:help { nick uhost handle chan arg } {
putserv "NOTICE $nick Commande De Mderation !"
putserv "NOTICE $nick La commande !xvoice a utilisé que quand vous moderé sous peine de sanction!"
putserv "NOTICE $nick La Commande !xdevoice a faire quand vous avez fini de moderé !"
putserv "NOTICE $nick La commande !kick sert a kické un user du salon !"
putserv "NOTICE $nick La Commande !kb Sert a kick/ban un user du salon !"
putserv "NOTICE $nick La commande !appel sert a appelé les IRCop en cas de grosse perturbation sur le salon !"
putserv "NOTICE $nick La commande !chut sert a coupé la parole a un user pendant 3minute !"
putserv "NOTICE $nick Fin Des De Moderation !"
}
#*********************#
# Services Moderation #
#*********************#
#*************************#
# CONFIG BADWORD #
#*************************#
# prevenir 1 fois avant kick pour les badword? 1/0
set Mod(Warn) 1
# si on previent kel est le message a envoyer?
set Mod(WarnMsg) "4Attention! surveillez votre langage! La prochaine fois vous serez expulsé!"
# bannir pour badword? 1/0
set Mod(Ban) 1
# bannir combien de temps? (en minute)
set Mod(BanTime) 10
# kicker pour badword? 1/0
set Mod(Kick) 1
# kel raison pour le kick?
set Mod(KickReason) "Exclu 10 minutes !"
#*************************#
# CONFIG REPEAT #
#*************************#
# combien de repetion maxi?
set Mod(RptMax) 3
# raisons de kick random pour les repetions
set Mod(Reason) {
"pas besoin de répéter"
"on ne répète pas"
"tu nous dérange en répétant"
}
# bannir pour repetition? 1/0
set Mod(BanRep) 1
# combien de temps? (en minute)
set Mod(BanRepTime) 10
#*************************#
# CONFIG CAPS #
#*************************#
# Max de Caps ?
set Mod(MaxCaps) 10
# prevenir la personne en notice ? 1/0
set Mod(CapsWarn) 1
# quel message?
set Mod(CapsWarnMsg) "4Attention! Merci de ne pas ecrire en MAJUSCULE"
# kicker les CAPS ? 1/0
set Mod(KCaps) 1
# quel raison pour le kick?
set Mod(KCapsReason) "pas de MAJUSCULE"
#*************************#
# CONFIG LONG MOT #
#*************************#
# kicker les longs mots? 1/0
set Mod(MaxMot) 1
# taille maxi d'un mot? 1/0
set Mod(MaxMotSize) 20
# raison du kick ?
set Mod(MaxMotReason) "Flood"
#************************#
# A ne pas toucher merci #
#************************#
proc KReason {} {
global Mod
return [lindex $Mod(Reason) [rand [llength $Mod(Reason)]]]
}
#on set les listes au demarrage en lisant les fichiers
set BWC ""
foreach c [channels] {
if {[file exists "Moderator.[string tolower $c].list"]} {
set f [open Moderator.[string tolower $c].list r]
set BWL([string tolower $c]) "[string tolower [gets $f]]"
close $f
lappend BWC [string tolower $c]
}
}
#proc pour checker si le channel est a surveiller
proc ChkWbBwVar {cha} {
global BWC
foreach c $BWC {
if {$c == "$cha"} {return 1; break}
}
return 0
}
#check les NOTICE PRIVMSG ACTION SOUND
bind raw - NOTICE PubChkNOT
proc PubChkNOT {from keyword arg} {
set from [split $from !]
PubChk [lindex $from 0] [lindex $from 1] * [lindex $arg 0] [lrange $arg 1 end]
}
bind ctcp - ACTION PubChkACTSND
bind ctcp - SOUND PubChkACTSND
proc PubChkACTSND {nick uhost hand dest keyword text} {
if {[string match &* $dest] || [string match #* $dest]} {
PubChk $nick $uhost $hand $dest $text
}
}
bind pubm - * PubChk
proc PubChk {nick userhost handle channel text} {
global BWN BWL BWC RPT Mod
# anti bad word
if {[ChkWbBwVar [string tolower $channel]]} {
set hostban [lindex [split $userhost @] 1]
set templist [split [string tolower $text] "!&\"'(-_)=~\{\[|`\\^@\]\}\$%µ?,;:/§"]]
foreach wdt $BWL([string tolower $channel]) {
if {[lsearch -exact "$templist" $wdt] != -1} {
if {$Mod(Warn)} {
if {![info exists BWN([string tolower $userhost])]} {
putserv "NOTICE $nick :$Mod(WarnMsg)"
set BWN([string tolower $userhost]) [expr [clock seconds] + 1800]
} else {
if {$Mod(Ban)} {newchanban $channel *!*@$hostban Moderator "$Mod(KickReason)" $Mod(BanTime)}
if {$Mod(Kick)} {putserv "KICK $channel $nick :$Mod(KickReason)"}
}
return 1
} else {
if {$Mod(Ban)} {newchanban $channel *!*@$hostban Moderator "$Mod(KickReason)" $Mod(BanTime)}
if {$Mod(Kick)} {putserv "KICK $channel $nick :$Mod(KickReason)"}
return 1
}
}
}
# anti repetitions
regsub -all {\\} $text {\\\\} text
regsub -all {\{} $text {\{} text
regsub -all {\}} $text {\}} text
regsub -all {\]} $text {\]} text
regsub -all {\[} $text {\[} text
regsub -all {\"} $text {\"} text
if {[info exists RPT($nick)]} {
if {[lrange $RPT($nick) 2 end] == "$text"} {
set cnt [lindex $RPT($nick) 1]; incr cnt
set RPT($nick) "[lindex $RPT($nick) 0] $cnt [lrange $RPT($nick) 2 end]"
if {[lindex $RPT($nick) 1] > $Mod(RptMax)} {
putserv "KICK $channel $nick :[KReason]"
if {$Mod(BanRep)} {newchanban $channel *!*@$hostban Moderator "Repeat" 10}
unset RPT($nick)
}
} else {set RPT($nick) "[expr [clock seconds] + 10] 1 $text"}
} else {set RPT($nick) "[expr [clock seconds] + 10] 1 $text"}
# anti majuscule / longue chaine
set upper 0
set space 0
foreach i [split $text {}] {
if [string match \[A-Z\] $i] {incr upper}
if {$i == " "} {incr space}
}
if {$upper > $Mod(MaxCaps)} {
if {$Mod(CapsWarn)} {putserv "NOTICE $nick :$Mod(CapsWarnMsg)"}
if {$Mod(KCaps)} {putserv "KICK $channel $nick :$Mod(KCapsReason)"}
}
if {$space == 0 && [string length $text] > $Mod(MaxMotSize) && $Mod(MaxMot)} {
putserv "KICK $channel $nick :$Mod(MaxMotReason)"
}
}
}
proc UnsetRepeat {} {
global RPT
foreach nick [array names RPT] {
if {[lindex $RPT($nick) 0] < [clock seconds]} {unset RPT($nick)}
}
utimer 5 UnsetRepeat
}
foreach t [utimers] {
if {[lindex $t 1] == "UnsetRepeat"} {killutimer [lindex $t 2]}
}
UnsetRepeat
#toute les minute on check pour unseter les var des nick qui sont en avertissement
bind time - "* * * * *" UnsetTmpVar
proc UnsetTmpVar {min hour day month year} {
global BWN RPT
foreach nt [array names BWN] {
if {$BWN($nt) < [clock seconds]} {unset BWN($nt)}
}
}
#procs pour ajouter, enlever, lister les mots a bannir
bind dcc o|o addword AddBadWord
proc AddBadWord {hand idx args} {
global BWL
set chan [string tolower [lindex [console $idx] 0]]
if {![validchan $chan]} {putdcc $idx "Console invalide ($chan)"; return 0}
if {![matchattr [idx2hand $idx] o|o $chan]} {putdcc $idx "Acces refusé pour $chan"; return 0}
set word [string tolower [lindex $args 0]]
if {$word == ""} {putdcc $idx ".addword <mot> (ajoute un mot)"; return 0}
if {![info exists BWL($chan)]} {set BWL($chan) ""}
if {[lsearch -exact "x $BWL($chan)" "$word"] == -1} {
lappend BWL($chan) $word
set f [open Moderator.$chan.list w]
puts $f "$BWL($chan)"
close $f
putdcc $idx "$word ajouté."
return 1
} else {putdcc $idx "$word est deja dans la liste! (taper .listword pour voir la liste)"; return 0}
}
bind dcc o|o delword DelBadWord
proc DelBadWord {hand idx args} {
global BWL
set chan [string tolower [lindex [console $idx] 0]]
if {![validchan $chan]} {putdcc $idx "Console invalide ($chan)"; return 0}
if {![matchattr [idx2hand $idx] o|o $chan]} {putdcc $idx "Acces refusé pour $chan"; return 0}
if {![info exists BWL($chan)]} {putdcc $idx "Aucun mot pour $chan"; return 0}
set word [string tolower [lindex $args 0]]
if {$word == ""} {putdcc $idx ".delword <mot> (efface un mot)"; return 0}
if {[lsearch -exact "$BWL($chan)" "$word"] != -1} {
set f [open Moderator.$chan.list r]
gets $f tmpl
close $f
set newlist ""
foreach t $tmpl {
if {$t != "$word"} {lappend newlist $t}
}
set f [open Moderator.$chan.list w]
puts $f "$newlist"
set BWL($chan) $newlist
close $f
putdcc $idx "$word éffacé."
return 1
} else {putdcc $idx "$word est pas dans la liste! (taper .listword pour voir la liste)"; return 0}
}
bind dcc o|o listword ListBadWord
proc ListBadWord {hand idx args} {
global BWL
set chan [string tolower [lindex [console $idx] 0]]
if {![validchan $chan]} {putdcc $idx "Console invalide ($chan)"; return 0}
if {![matchattr [idx2hand $idx] o|o $chan]} {putdcc $idx "Acces refusé pour $chan"; return 0}
if {![info exists BWL($chan)]} {putdcc $idx "Aucun mot pour $chan"; return 0}
putdcc $idx "Liste des Badwords: $BWL($chan)"
return 1
}
#procs pour ajouter enlever lister les chans a checker
bind dcc o|o +modchan AddChan
proc AddChan {hand idx args} {
global BWC BWL
set tchan [string tolower [lindex $args 0]]
if {$tchan == ""} {putdcc $idx ".+modchan <#channel> (ajoute un canal a surveiller)"; return 0}
if {![validchan $tchan]} {putdcc $idx "Channel invalide ($tchan)"; return 0}
if {![matchattr [idx2hand $idx] o|o $tchan]} {putdcc $idx "Acces refusé pour $tchan"; return 0}
if {[lsearch -exact "x $BWC" "$tchan"] == -1} {
set f [open Moderator.$tchan.list w]
close $f
set BWL($tchan) ""
set f [open Moderator.chan w]
puts $f [lappend BWC $tchan]
close $f
putdcc $idx "$tchan ajouté."
return 1
} else {putdcc $idx "$tchan est deja dans la liste! (taper .modchan pour voir la liste)";return 0}
}
bind dcc o|o -modchan DelChan
proc DelChan {hand idx args} {
global BWC
set tchan [string tolower [lindex $args 0]]
if {$tchan == ""} {putdcc $idx ".-modchan <#channel> (efface un canal surveillé)"; return 0}
if {![validchan $tchan]} {putdcc $idx "Channel invalide ($tchan)"; return 0}
if {![matchattr [idx2hand $idx] o|o $tchan]} {putdcc $idx "Acces refusé pour $tchan"; return 0}
if {[lsearch -exact "x $BWC" "$tchan"] != -1} {
set f [open Moderator.chan r]
set tmpl [gets $f]
close $f
set newlist ""
foreach t $tmpl {
if {$t != "$tchan"} {lappend newlist $t}
}
set f [open Moderator.chan w]
puts $f "$newlist"
close $f
set BWC $newlist
putdcc $idx "$tchan éffacé."
return 1
} else {putdcc $idx "$tchan est pas dans la liste! (taper .modchan pour voir la liste)";return 0}
}
bind dcc - modchan ListChan
proc ListChan {hand idx args} {
global BWC
putdcc $idx "Liste des canaux: $BWC"
return 1
}
bind dcc - Moderator Moderator
proc Moderator {hand idx args} {
global Mod
putdcc $idx " Moderator "
putdcc $idx ""
putdcc $idx "ce script comprend un anti badword, un anti"
putdcc $idx "repetition, un anti caps et un anti long mot."
putdcc $idx "il agit sur les msgs/notices/actions/sounds"
putdcc $idx ""
putdcc $idx "commandes pour les Badword"
putdcc $idx "addword <mot> 14(ajoute un mot)"
putdcc $idx "delword <mot> 14(efface un mot)"
putdcc $idx "listword 14(liste les mots)"
putdcc $idx ""
putdcc $idx "commandes pour les canaux"
putdcc $idx "+modchan 14<#channel> (ajoute un canal a surveiller)"
putdcc $idx "-modchan 14<#channel> (efface un canal surveillé)"
putdcc $idx "modchan 14(liste les canaux)"
putdcc $idx ""
return 1
}
#*********#
# Fin #
#*********#