r00t-err0r

pic2fb (old-non-working) - tcl84

May 3rd, 2012
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 7.47 KB | None | 0 0
  1. # Usage example: http://a7.sphotos.ak.fbcdn.net/hphotos-ak-snc7/417229_270923126316188_216952361713265_609445_1510413814_n.jpg
  2.  
  3. # Export: Facebook -=> http://www.facebook.com/phone.use.flashlight -=> I use my phone as a flashlight, and hit random buttons to keep it lit | Facebook
  4.  
  5. # Coded by tik-tak & munZe
  6.     proc _dict_update {dvar args} {
  7.         set name [string map {: {} ( {} ) {}} $dvar]
  8.         upvar 1 $dvar dv
  9.         upvar 1 _my_dict_array$name local
  10.  
  11.         array set local $dv
  12.         foreach {k v} [lrange $args 0 end-1] {
  13.             if {[info exists local($k)]} {
  14.                 if {![uplevel 1 [list info exists $v]]} {
  15.                     uplevel 1 [list upvar 0 _my_dict_array${name}($k) $v]
  16.                 } else {
  17.                     uplevel 1 [list set $v $local($k)]
  18.                 }
  19.             }
  20.         }
  21.         set code [catch {uplevel 1 [lindex $args end]} res]
  22.  
  23.         foreach {k v} [lrange $args 0 end-1] {
  24.             if {[uplevel 1 [list info exists $v]]} {
  25.                 set local($k) [uplevel 1 [list set $v]]
  26.             } else {
  27.                 unset -nocomplain local($k)
  28.             }
  29.         }
  30.         set dv [array get local]
  31.         unset local
  32.  
  33.         return -code $code $res
  34.     }
  35.    # Poor man's dict -- a pure tcl [dict] emulation
  36.     # Very slow, but complete.
  37.     #
  38.     # Not all error checks are implemented!
  39.     # e.g. [dict create odd arguments here] will work
  40.     #
  41.     # Implementation is based on lists, [array set/get]
  42.     # and recursion
  43.  
  44.     if {![llength [info commands dict]]} {
  45.         proc dict {cmd args} {
  46.             uplevel 1 [linsert $args 0 _dict_$cmd]
  47.         }
  48.         proc _dict_get {dv args} {
  49.             if {![llength $args]} {return $dv} else {
  50.                 array set dvx $dv
  51.                 set key [lindex $args 0]
  52.                 set dv $dvx($key)
  53.                 set args [lrange $args 1 end]
  54.                 return [eval [linsert $args 0 _dict_get $dv]]
  55.             }
  56.         }
  57.         proc _dict_exists {dv key args} {
  58.             array set dvx $dv
  59.             set r [info exists dvx($key)]
  60.             if {!$r} {return 0}
  61.             if {[llength $args]} {
  62.                 return [eval [linsert $args 0 _dict_exists $dvx($key) ]]
  63.             } else {return 1}
  64.         }
  65.         proc _dict_set {dvar key value args } {
  66.             upvar 1 $dvar dv
  67.             if {![info exists dv]} {set dv [list]}
  68.             array set dvx $dv
  69.             if {![llength $args]} {
  70.                 set dvx($key) $value
  71.             } else {
  72.                 eval [linsert $args 0 _dict_set dvx($key) $value]
  73.             }
  74.             set dv [array get dvx]
  75.         }
  76.         proc _dict_unset {dvar key args} {
  77.             upvar 1 $dvar mydvar
  78.             if {![info exists mydvar]} {return}
  79.             array set dv $mydvar
  80.             if {![llength $args]} {
  81.                 if {[info exists dv($key)]} {
  82.                     unset dv($key)
  83.                 }
  84.             } else {
  85.                 eval [linsert $args 0 _dict_unset dv($key) ]
  86.             }
  87.             set mydvar [array get dv]
  88.             return {}
  89.         }
  90.         proc _dict_keys {dv {pat *}} {
  91.             array set dvx $dv
  92.             return [array names dvx $pat]
  93.         }
  94.         proc _dict_append {dvar key {args}} {
  95.             upvar 1 $dvar dv
  96.             if {![info exists dv]} {set dv [list]}
  97.             array set dvx $dv
  98.             eval [linsert $args 0 append dvx($key) ]
  99.             set dv [array get dvx]
  100.         }
  101.         proc _dict_create {args} {
  102.             return $args
  103.         }
  104.         proc _dict_filter {dv ftype args} {
  105.             set r [list]
  106.             foreach {globpattern} $args {break}
  107.             foreach {varlist script} $args {break}
  108.  
  109.             switch $ftype {
  110.                 key {
  111.                     foreach {key value} $dv {
  112.                         if {[string match $globpattern $key]} {
  113.                             lappend r $key $value
  114.                         }
  115.                     }
  116.                 }
  117.                 value {
  118.                     foreach {key value} $dv {
  119.                         if {[string match $globpattern $value]} {
  120.                             lappend r $key $value
  121.                         }
  122.                     }
  123.                 }
  124.                 script {
  125.                     foreach {Pkey Pval} $varlist {break}
  126.                     upvar 1 $Pkey key $Pval value
  127.                     foreach {key value} $dv {
  128.                         if {[uplevel 1 $script]} {
  129.                             lappend r $key $value
  130.                         }
  131.                     }
  132.                 }
  133.                 default {
  134.                     error "Wrong filter type"
  135.                 }
  136.             }
  137.             return $r
  138.         }
  139.         proc _dict_for {kv dict body} {
  140.             uplevel 1 [list foreach $kv $dict $body]
  141.         }
  142.         proc _dict_incr {dvar key {incr 1}} {
  143.             upvar 1 $dvar dv
  144.             if {![info exists dv]} {set dv [list]}
  145.             array set dvx $dv
  146.             if {![info exists dvx($key)]} {set dvx($key) 0}
  147.             incr dvx($key) $incr
  148.             set dv [array get dvx]
  149.         }
  150.         proc _dict_info {dv} {
  151.             return "Dictionary is represented as plain list"
  152.         }
  153.         proc _dict_lappend {dvar key args} {
  154.             upvar 1 $dvar dv
  155.             if {![info exists dv]} {set dv [list]}
  156.             array set dvx $dv
  157.             eval [linsert $args 0 lappend dvx($key)]
  158.             set dv [array get dvx]
  159.         }
  160.         proc _dict_merge {args} {
  161.             foreach dv $args {
  162.                 array set dvx $dv
  163.             }
  164.             array get dvx
  165.         }
  166.         proc _dict_replace {dv args} {
  167.             foreach {k v} $args {
  168.                 _dict_set dv $k $v
  169.             }
  170.             return $dv
  171.         }
  172.         proc _dict_remove {dv args} {
  173.             foreach k $args {
  174.                 _dict_unset dv $k
  175.             }
  176.             return $dv
  177.         }
  178.         proc _dict_size {dv} {
  179.             return [expr {[llength $dv]/2}]
  180.         }
  181.         proc _dict_values {dv {gp *}} {
  182.             set r [list]
  183.             foreach {k v} $dv {
  184.                 if {[string match $gp $v]} {
  185.                     lappend r $v
  186.                 }
  187.             }
  188.             return $r
  189.         }
  190.     }
  191.  
  192. bind pubm - *fbcdn* pub_gfb
  193.  
  194. package require http
  195.  
  196. proc pub_gfb {nick mask hand chan url} {
  197.     regsub {^(?:http://)*} $url {http://} url
  198.     if { ![regexp {.+fbcdn.+} $url] } {
  199.     set fburl $url
  200.     set titletxt "Title"
  201.     set page [ ::http::geturl $fburl ]
  202.     set page [ ::http::data [ ::http::geturl $fburl -headers 0 ] ]
  203.     regexp {<title>(.*)</title>} $page match title
  204.     set title [ encoding convertto utf-8 $title]
  205.     } else {
  206.     set id [lindex [split $url _] end-3 ]
  207.        set fbid "http://www.facebook.com/profile.php?id=$id"
  208.     set titletxt "Facebook"
  209.     set page [ ::http::geturl $fbid ]
  210.     if { [ dict exists [array get $page] meta Location ] == 1  } {
  211.         set fburl [dict get [array get $page] meta Location]    
  212.         set page [ ::http::data [ ::http::geturl $fburl -headers 0 ] ]
  213.     }
  214.     regexp {<title>(.*)</title>} $page match title
  215.     if { [ info exists title ] == 0 } {
  216.         puthelp "PRIVMSG $chan Can't read page title."
  217.     } else {
  218.         set title [ encoding convertto utf-8 $title]
  219.         set fburl [ encoding convertto utf-8 $fburl] }
  220.  
  221.         puthelp "PRIVMSG $chan \002$titletxt -=>\002 \037$fburl\037 -=> \002$title\002"
  222.     }
  223.  
  224. }
  225.  
  226.     putlog "Picture 2 Facebook is loaded nad coded by tik-tak & munZe"
Advertisement
Add Comment
Please, Sign In to add comment