فهرست منبع

solved issue related to latest eggdrop 1.9.2

BLaCkShaDoW 4 سال پیش
والد
کامیت
93750b650e
1فایلهای تغییر یافته به همراه98 افزوده شده و 0 حذف شده
  1. 98 0
      BlackTools/Addons/github.tcl

+ 98 - 0
BlackTools/Addons/github.tcl

@@ -0,0 +1,98 @@
+#!/usr/bin/env tclsh
+# file github/github.tcl
+#https://wiki.tcl-lang.org/page/github%3A%3Agithub
+#
+#Version 1.1 - added a timer in seconds between files & folders
+
+# chicken and egg problem we need non-standard packages tls and json ...
+package require tls
+package require http
+::http::register https 443 ::tls::socket
+
+namespace eval ::github {
+    variable libdir [file normalize [file join [file dirname [info script]] ..]]
+    if {[lsearch $::auto_path $libdir] == -1} {
+        lappend auto_path $libdir
+    }
+} 
+
+# I already placed the json folder below of the github folder
+package require json
+package provide github::github 0.2
+package provide github 0.2
+
+# Tcl package download
+proc ::github::github {cmd owner repo folder} {
+    variable libdir
+    set url https://api.github.com/repos/$owner/$repo/contents/
+    download $url $folder
+}
+
+# Folder download
+proc ::github::download {url folder {debug true}} {
+    if {![file exists $folder]} {
+        file mkdir $folder
+    }
+    set sfiles ""
+    set dfiles ""
+    set data [http::data [http::geturl $url]]
+    set d [json::json2dict $data]
+    set l [llength $d]
+    set files [list]
+for {set i 0} {$i < $l} {incr i 1} {
+    set dic [dict create {*}[lindex $d $i]]
+    set file [dict get $dic download_url]
+    set type [dict get $dic type]
+if {$file eq "null" &&  $type eq "dir"} {
+    set file [dict get $dic url]
+    set file [regsub {.ref=master} $file ""]
+}
+if {$type eq "file"} {
+    lappend sfiles $file
+} else {
+    lappend dfiles $file
+    }
+}
+if {$sfiles != ""} {
+    files $sfiles $folder 0 $dfiles
+    return
+    }
+if {$dfiles != ""} {
+    dirs $dfiles $folder 0
+    }
+}
+
+# Folders make
+proc ::github::dirs {dirs dir num} {
+    set file [lindex $dirs $num]
+    set nfolder [file join $dir [file tail $file]]
+     download $file $nfolder
+    set counter [expr $num + 1]
+if {[lindex $dirs $counter] != ""} {
+    utimer 2 [list ::github::dirs $dirs $dir $counter]
+    }
+}
+
+# Files make
+proc ::github::files {files dir num dirs} {
+    set item [lindex $files $num]
+    set file [lindex $item 0]
+    set fname [file tail $file]
+    set fname [file join $dir $fname]
+    set f [open $fname w]
+    fconfigure $f -translation binary
+    set tok [http::geturl $file -channel $f]
+    set Stat [::http::status $tok]
+    flush $f
+    close $f
+    http::cleanup $tok
+    set counter [expr $num + 1]
+if {[lindex $files $counter] != ""} {
+    utimer 2 [list ::github::files $files $dir $counter $dirs]
+    } else {
+if {$dirs != ""} {
+    dirs $dirs $dir 0
+        }
+    }
+}
+