Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ##############################################################################################
- ## ## autotrans.tcl for eggdrop by Ford_Lawnmower irc.geekshed.net #Script-Help ## ##
- ##############################################################################################
- ## .rss in the party line for commands and syntax. Example Feed Add Below: ##
- ##.rss add #Hawkee hawkee Hawkee http://www.hawkee.com/comment.rss.php?tool_type=snippet_id ##
- ##############################################################################################
- ## ____ __ ########################################### ##
- ## / __/___ _ ___ _ ___/ /____ ___ ___ ########################################### ##
- ## / _/ / _ `// _ `// _ // __// _ \ / _ \ ########################################### ##
- ## /___/ \_, / \_, / \_,_//_/ \___// .__/ ########################################### ##
- ## /___/ /___/ /_/ ########################################### ##
- ## ########################################### ##
- ##############################################################################################
- ## ## Start Setup. ## ##
- ##############################################################################################
- namespace eval autotrans {
- variable cmdchar "!"
- ## Edit textf to change the color/state of the text shown ## ##
- variable textf "\017\00304"
- ## Edit tagf to the color/state for language tags. ## ##
- variable tagf "\017\002"
- ## Edit flooddelay to reflect the amount of seconds between querys per user. ## ##
- variable flooddelay 2
- ##############################################################################################
- ## ## End Setup. ## ##
- ##############################################################################################
- bind pubm -|- * autotrans::main
- setudef flag trans
- bind dcc - trans autotrans::settings
- bind evnt -|- init-server autotrans::loadhash
- bind evnt -|- prerehash autotrans::loadhash
- proc main {nick host hand chan text} {
- if {[set idx [lsearch -glob [utimers] "*autotrans::noop $nick $chan*"]] != -1} {
- return
- } else {
- utimer $autotrans::flooddelay "autotrans::noop $nick $chan"
- if {[strip [lindex $text 0]] == "${autotrans::cmdchar}trans"} {
- if {[lindex $text 2] != "" && [lsearch -exact [channel info $chan] +trans] != -1} {
- set lang [lindex $text 1]; set transtext [lrange $text 2 end]
- if {[string match -nocase "*linux*" $::tcl_platform(os)] || $::tcl_platform(os) == "CYGWIN_NT-5.1"} {
- set translation [bingtrans $lang [strip $transtext]]
- } else {
- set translation [encoding convertfrom utf-8 [bingtrans $lang [strip $transtext]]]
- }
- putserv "PRIVMSG $chan :${autotrans::tagf}[lindex $translation 0] ${autotrans::textf}[lrange $translation 1 end]"
- }
- } else {
- set chan [string tolower $chan]; set counter [hfind "autotrans" "${chan}*" 0]; set count 1
- set text [strip $text]
- while {$count <= $counter} {
- set current [hfind "autotrans" "${chan}*" $count]
- regexp -- {^(.+)-\|\|-(.+)$} $current wholematch channel language
- if {[string match -nocase "*linux*" $::tcl_platform(os)] || $::tcl_platform(os) == "CYGWIN_NT-5.1"} {
- set translation [bingtrans $language $text]
- } else {
- set translation [encoding convertfrom utf-8 [bingtrans $language $text]]
- }
- if {![string match -nocase "*${text}" $translation] && [string map {" " ""} $translation] != ""} {
- if {[hget "autotrans" $current] == "log"} {
- putlog "${autotrans::textf}${translation}"
- } else {
- if {[string match "*|*" [lindex $translation 0]]} {
- putserv "PRIVMSG $chan :${autotrans::tagf}[lindex $translation 0] ${autotrans::textf}[lrange $translation 1 end]"
- }
- }
- }
- incr count
- }
- }
- }
- }
- proc settings {hand idx text} {
- set choice [lindex $text 0]; set channel [lindex $text 1]
- set lang [lindex $text 2]; set type [lindex $text 3]
- if {[string equal -nocase "add" $choice] && $lang != ""} {
- if {$type == ""} { set type msg }
- hadd "autotrans" "[string tolower ${channel}-||-${lang}]" "[string tolower $type]"
- savehash
- putlog "Added translator ${channel}-||-${lang} $type"
- } elseif {[string equal -nocase "list" $choice]} {
- putlog "\[Translator list\]"
- set count [hfind "autotrans" "*" 0]; set counter 1
- while {$count >= $counter} {
- putlog "[hfind "autotrans" "*" $counter]"
- incr counter
- }
- } elseif {[string equal -nocase "info" $choice] && $channel != ""} {
- putlog "[hget "autotrans" [string tolower ${channel}]]"
- } elseif {[string equal -nocase "delete" $choice] && $channel != ""} {
- hdel "autotrans" [string tolower ${channel}]
- savehash
- } else {
- putlog "\[RSS Syntax\]"
- putlog "Add Translator: .trans add <#chan> <langcode> <?type?>"
- putlog "<langcode>'s are listed here: http://msdn.microsoft.com/en-us/library/hh456380.aspx"
- putlog "<type> is \"msg\" for channel message or \"log\" for partyline output.(Optional)"
- putlog "Delete Translator: .trans delete <name>"
- putlog "Info Translator: .trans info <name>"
- putlog "List Translators: .trans list"
- putlog "Help Translator: .trans"
- }
- }
- proc bingtrans {destinationlanguage text} {
- set bingtranssite "api.microsofttranslator.com"
- set bingtransappkey [hget "bingtrans" "appkey"]
- set bingtransurl "/v2/ajax.svc/TranslateArray?appId=%22${bingtransappkey}%22&texts=\[%22[urlencode $text]%22\]&from=%22%22&to=%22${destinationlanguage}%22"
- if {[catch {set bingtranssock [socket -async $bingtranssite 80]} sockerr]} {
- return 0
- } else {
- puts $bingtranssock "GET $bingtransurl HTTP/1.0"
- puts $bingtranssock "Host: $bingtranssite"
- puts $bingtranssock "User-Agent: Opera 9.6"
- puts $bingtranssock ""
- flush $bingtranssock
- while {![eof $bingtranssock]} {
- set bingtransvar " [string map {\$ \002\$\002 \[ \( \] \)} [gets $bingtranssock]] "
- if {[regexp {The\stoken\shas\sexpired.*appId} $bingtransvar]} {
- putlog "token expired script needed to generate new one"
- if {$bingtransappkey == ""} {
- close $bingtranssock
- return ""
- } else {
- hadd "bingtrans" "appkey" [getbingtransappkey]
- close $bingtranssock
- return [bingtrans $destinationlanguage $text]
- }
- } elseif {[regexp -- {"From":"(.*)"\,.*\,"TranslatedText":"(.*?)"\,"} $bingtransvar wholematch language translation]} {
- if {[string equal -nocase $language $destinationlanguage]} {
- set result $text
- } else {
- set result "\[[string tolower $language]|${destinationlanguage}\] $translation"
- }
- close $bingtranssock
- return $result
- }
- }
- close $bingtranssock
- }
- }
- proc getbingtransappkey {} {
- set getbingtransappkeysite "www.bing.com"
- set getbingtransappkeyurl "/translator"
- #putlog "http://${getbingtransappkeysite}${getbingtransappkeyurl}"
- if {[catch {set getbingtransappkeysock [socket -async $getbingtransappkeysite 80]} sockerr]} {
- return 0
- } else {
- puts $getbingtransappkeysock "GET $getbingtransappkeyurl HTTP/1.0"
- puts $getbingtransappkeysock "Host: $getbingtransappkeysite"
- puts $getbingtransappkeysock "User-Agent: Opera 9.6"
- puts $getbingtransappkeysock ""
- flush $getbingtransappkeysock
- while {![eof $getbingtransappkeysock]} {
- set getbingtransappkeyvar " [string map {\$ \002\$\002 \[ \( \] \)} [gets $getbingtransappkeysock]] "
- #putlog $getbingtransappkeyvar
- if {[regexp -- {AjaxApiAppId\s=\s\'(.*?)\';} $getbingtransappkeyvar match result]} {
- close $getbingtransappkeysock
- hadd "bingtrans" "appkey" $result
- return $result
- }
- }
- close $getbingtransappkeysock
- return ""
- }
- }
- proc noop {$nick $chan} {
- return ""
- }
- proc strip {text} {
- regsub -all {\002|\031|\015|\037|\017|\003(\d{1,2})?(,\d{1,2})?} $text "" text
- return $text
- }
- proc hex {decimal} { return [format %x $decimal] }
- proc decimal {hex} { return [expr 0x$hex] }
- proc dehex {string} {
- regsub -all {^\{|\}$} $string "" string
- set string [subst [regsub -nocase -all {\\u([a-f0-9]{4})} $string {[format %c [decimal \1]]}]]
- set string [subst [regsub -nocase -all {\%([a-f0-9]{2})} $string {[format %c [decimal \1]]}]]
- set string [subst [regsub -nocase -all {\&#([0-9]{2});} $string {[format %c \1]}]]
- set string [subst [regsub -nocase -all {\&#x([0-9]{2});} $string {[format %c [decimal \1]]}]]
- set string [string map {" \" · · & & <b> \002 </b> \002 – – » \
- » « « Ü Ü ü ü Á Á á á É É é é Í Í í \
- í Ó Ó ó ó Ñ Ñ ñ ñ Ú Ú ú ú æ æ " " ' \' \
- \( \002\(\002 \) \002\)\002 \{ \002\{\002 \} \002\}\002} $string]
- return $string
- }
- proc urlencode {string} {
- #regsub -all {^\{|\}$} $string "" string
- return [subst [regsub -nocase -all {([^a-z0-9\+])} [encoding convertto utf-8 $string] {%[format %x [scan "\\&" %c]]}]]
- #[encoding convertto utf-8 ${topic}]
- #return [string map {" " +} [encoding convertto utf-8 $string]]
- }
- proc hadd {hashname hashitem hashdata } {
- global $hashname
- set ${hashname}($hashitem) $hashdata
- }
- proc hget {hashname hashitem} {
- upvar #0 $hashname hgethashname
- if {[info exists hgethashname($hashitem)]} {
- return $hgethashname($hashitem)
- } else {
- return ""
- }
- }
- proc hfind {hashname search matchno {type "w"}} {
- upvar #0 $hashname hfindhashname
- if {$type == "w"} {
- if {[array exists hfindhashname]} {
- if {$matchno == 0} {
- return [llength [array names hfindhashname $search]]
- } else {
- set matchno [expr $matchno - 1]
- return [lindex [array names hfindhashname $search] $matchno]
- }
- }
- } elseif {$type == "W"} {
- set count 0
- foreach {item value} [array get hfindhashname] {
- if {[string match $search $value]} {
- incr count
- if {$count == $matchno} { return $item }
- }
- }
- if {$matchno == 0} {
- return $count
- } else {
- return ""
- }
- }
- }
- proc hfindexact {hashname search value} {
- upvar #0 $hashname hfindhashname
- if {[array exists hfindhashname]} {
- if {$value == 0} {
- return [llength [array names hfindhashname -exact $search]]
- } else {
- set value [expr $value - 1]
- return [lindex [array names hfindhashname -exact $search] $value]
- }
- }
- }
- proc hsave {hashname filename} {
- upvar #0 $hashname hsavehashname
- if {[array exists hsavehashname]} {
- set hsavefile [open $filename w]
- foreach {key value} [array get hsavehashname] {
- puts $hsavefile "${key}=${value}"
- }
- close $hsavefile
- }
- }
- proc hload {hashname filename} {
- upvar #0 $hashname hloadhashname
- hfree $hashname
- set hloadfile [open $filename]
- set linenum 0
- while {[gets $hloadfile line] >= 0} {
- if {[regexp -- {([^\s]+)=(.*)$} $line wholematch item data]} {
- set hloadhashname($item) $data
- }
- }
- close $hloadfile
- }
- proc hfree {hashname} {
- upvar #0 $hashname hfreehashname
- if {[array exists hfreehashname]} {
- foreach key [array names hfreehashname] {
- unset hfreehashname($key)
- }
- }
- }
- proc hdel {hashname hashitem} {
- upvar #0 $hashname hdelhashname
- if {[info exists hdelhashname($hashitem)]} {
- unset hdelhashname($hashitem)
- }
- }
- proc hcopy {hashfrom hashto} {
- upvar #0 $hashfrom hashfromlocal $hashto hashtolocal
- array set hashtolocal [array get hashfromlocal]
- }
- proc savehash {} {
- hsave "autotrans" "${::network}autotrans.hsh"
- }
- proc loadhash {type} {
- if {[file exists "${::network}autotrans.hsh"]} {
- autotrans::hload "autotrans" "${::network}autotrans.hsh"
- }
- }
- }
- autotrans::hadd "bingtrans" "appkey" [autotrans::getbingtransappkey]
- putlog "\002*Loaded* \017\00304\002Autrans\017 \002by \
- Ford_Lawnmower irc.GeekShed.net #Script-Help .trans for help"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement