Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2015
741
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 14.90 KB | None | 0 0
  1. ##############################[ TVmaze.com Eggdrop Script ]#############################
  2. #                                                                                      #
  3. # Version   : 1.23                                                                     #
  4. #                                                                                      #
  5. # Author    : x0x a.k.a. ericNL (with the help of many awesome digital friends)        #
  6. #                                                                                      #
  7. # Source    : http://forum.egghelp.org/viewtopic.php?t=20045                           #
  8. #                                                                                      #
  9. # Activate  : Party line command: .chanset #channel +tvmaze                            #
  10. #                                                                                      #
  11. # Commands  : !tv or !t <show>    !last or !l <show>    !next or !n <show>             #
  12. #                                                                                      #
  13. # Changelog : Available at http://forum.egghelp.org/viewtopic.php?t=20045              #
  14. #                                                                                      #
  15. # Issues    : You might need Tcl 8.6 or newer ;-)                                      #
  16. #                                                                                      #
  17. # Notes     : Tested with Eggdrop v1.8.0+infiniteinfo and Tcl 8.6                      #
  18. #                                                                                      #
  19. # Credits   : GaveUp, dlx, Znuff, speechles, nrt, Chokladkakan                         #
  20. #             Viper (Jan Milants), thommey, GPenguin                                   #
  21. #                                                                                      #
  22. # Greets    : Everyone over at http://forum.egghelp.org                                #
  23. #             The freenode #eggdrop crowd                                              #
  24. #             My friends in #<translate-shark-to-dutch> on EFnet ;)                    #
  25. #                                                                                      #
  26. ########################################################################################
  27.  
  28. package require http
  29. package require json
  30.  
  31. setudef flag tvmaze
  32.  
  33. bind pub - !tv tv
  34. bind pub - !t tv
  35.  
  36. bind pub - !last tvlast
  37. bind pub - !l tvlast
  38.  
  39. bind pub - !next tvnext
  40. bind pub - !n tvnext
  41.  
  42. proc tv { nick host hand chan arg } {
  43.  
  44.         regsub -nocase -all {(\.| )([[:digit:]]{4}(\.| )|)(S[[:digit:]]{2}E[[:digit:]]{2}(\.| )|)(INTERNAL|INT|1080p|720p|HDTV|x264|WEBRip|REPACK|REAL|PROPER)(\.| ).*} $arg "" arg
  45.         regsub -all "\\." $arg " " arg
  46.  
  47.         set url "http://api.tvmaze.com/singlesearch/shows?[::http::formatQuery q $arg embed\[\] nextepisode embed\[\] previousepisode]"
  48.         set timeout "5000"
  49.  
  50.         if {[catch { ::http::geturl $url -timeout $timeout } token]} {
  51.         putquick "privmsg $chan :$nick, there was a fatal error :$token."
  52.         return 0
  53.         }
  54.  
  55.         if {![string equal -nocase [::http::status $token] "ok"] || ![string equal [::http::ncode $token] 200]} {
  56.         putquick "privmsg $chan :$nick, there was an http error: ( [http::ncode $token] ) [::http::status $token]"
  57.         http::cleanup $token
  58.         return 0
  59.         }
  60.  
  61.         set tvmaze [::json::json2dict [::http::data $token]]
  62.         ::http::cleanup $token
  63.  
  64.         dict with tvmaze {
  65.  
  66.         if {[string equal "null" $webChannel]} { set network [dict get $tvmaze network name] } else { set network [dict get $tvmaze webChannel name] }
  67.  
  68.         if { [dict exists $tvmaze _embedded nextepisode url] } { set nextepurl [dict get $tvmaze _embedded nextepisode url] }
  69.         if { [dict exists $tvmaze _embedded nextepisode name] } { set nextepname [dict get $tvmaze _embedded nextepisode name] }
  70.         if { [dict exists $tvmaze _embedded nextepisode season] } { set nextepseason [dict get $tvmaze _embedded nextepisode season] }
  71.         if { [dict exists $tvmaze _embedded nextepisode number] } { set nextepnumber [dict get $tvmaze _embedded nextepisode number] }
  72.         if { [dict exists $tvmaze _embedded nextepisode airdate] } { set nextepairdate [dict get $tvmaze _embedded nextepisode airdate] }
  73.         if { [dict exists $tvmaze _embedded nextepisode airtime] } { set nextepairtime [dict get $tvmaze _embedded nextepisode airtime] }
  74.         if { [dict exists $tvmaze _embedded nextepisode runtime] } { set nextepruntime [dict get $tvmaze _embedded nextepisode runtime] }
  75.         if { [dict exists $tvmaze _embedded nextepisode summary] } { set nextepsummary [dict get $tvmaze _embedded nextepisode summary] }
  76.  
  77.         if { [dict exists $tvmaze _embedded previousepisode url] } { set prevepurl [dict get $tvmaze _embedded previousepisode url] }
  78.         if { [dict exists $tvmaze _embedded previousepisode name] } { set prevepname [dict get $tvmaze _embedded previousepisode name] }
  79.         if { [dict exists $tvmaze _embedded previousepisode season] } { set prevepseason [dict get $tvmaze _embedded previousepisode season] }
  80.         if { [dict exists $tvmaze _embedded previousepisode number] } { set prevepnumber [dict get $tvmaze _embedded previousepisode number] }
  81.         if { [dict exists $tvmaze _embedded previousepisode airdate] } { set prevepairdate [dict get $tvmaze _embedded previousepisode airdate] }
  82.         if { [dict exists $tvmaze _embedded previousepisode airtime] } { set prevepairtime [dict get $tvmaze _embedded previousepisode airtime] }
  83.         if { [dict exists $tvmaze _embedded previousepisode runtime] } { set prevepruntime [dict get $tvmaze _embedded previousepisode runtime] }
  84.         if { [dict exists $tvmaze _embedded previousepisode summary] } { set prevepsummary [dict get $tvmaze _embedded previousepisode summary] }
  85.  
  86.         if { ![info exists name] } {
  87.                 putquick "privmsg $chan :$nick, nothing happened, try something different? :)"
  88.                 return 0
  89.         }
  90.  
  91.         if { [info exists prevepseason] } { set prevepseason [format S%02d $prevepseason] }
  92.         if { [info exists prevepnumber] } { set prevepnumber [format E%02d $prevepnumber] }
  93.         if { [info exists nextepseason] } { set nextepseason [format S%02d $nextepseason] }
  94.         if { [info exists nextepnumber] } { set nextepnumber [format E%02d $nextepnumber] }
  95.  
  96.         if { [info exists nextepname] && [info exists prevepname] && ![llength $genres] == 1 } {
  97.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network"
  98.                 putquick "privmsg $chan :Premiered: $premiered \u2022 Status: $status \u2022 URL: $url"
  99.                 putquick "privmsg $chan :Previous: $prevepseason$prevepnumber aired $prevepairdate \u2022 Next: $nextepseason$nextepnumber airs $nextepairdate"
  100.         return 0
  101.                 }
  102.  
  103.         if { [info exists nextepname] && [info exists prevepname] } {
  104.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network \u2022 Genre: $genres"
  105.                 putquick "privmsg $chan :Premiered: $premiered \u2022 Status: $status \u2022 URL: $url"
  106.                 putquick "privmsg $chan :Previous: $prevepseason$prevepnumber aired $prevepairdate \u2022 Next: $nextepseason$nextepnumber airs $nextepairdate"
  107.                 return 0
  108.                 }
  109.  
  110.         if { ![info exists nextepname] && [info exists prevepname] && ![llength $genres] == 1 } {
  111.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network"
  112.                 putquick "privmsg $chan :Premiered: $premiered \u2022 Status: $status \u2022 URL: $url"
  113.                 putquick "privmsg $chan :Last: $prevepseason$prevepnumber aired $prevepairdate"
  114.                 return 0
  115.         }
  116.  
  117.         if { ![info exists nextepname] && [info exists prevepname] } {
  118.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network \u2022 Genre: $genres"
  119.                 putquick "privmsg $chan :Premiered: $premiered \u2022 Status: $status \u2022 URL: $url"
  120.                 putquick "privmsg $chan :Last: $prevepseason$prevepnumber aired $prevepairdate"
  121.                 return 0
  122.                 }
  123.  
  124.         if { [info exists nextepname] && ![info exists prevepname] && ![llength $genres] == 1 } {
  125.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network"
  126.                 putquick "privmsg $chan :Premiered: $premiered \u2022 Status: $status \u2022 URL: $url"
  127.                 putquick "privmsg $chan :Next episode: $prevepseason$prevepnumber airs $prevepairdate"
  128.                 return 0
  129.                 }
  130.  
  131.         if { [info exists nextepname] && ![info exists prevepname] } {
  132.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network \u2022 Genre: $genres"
  133.                 putquick "privmsg $chan :Premiered: $premiered \u2022 Status: $status \u2022 URL: $url"
  134.                 putquick "privmsg $chan :Next episode: $prevepseason$prevepnumber airs $prevepairdate"
  135.                 return 0
  136.                 }
  137.  
  138.         if { ![info exists nextepname] && ![info exists previousepname] && ![llength $genres] == 1 } {
  139.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network"
  140.                 putquick "privmsg $chan :Status: $status \u2022 URL: $url"
  141.                 return 0
  142.                 }
  143.  
  144.         if { ![info exists nextepname] && ![info exists previousepname] } {
  145.                 putquick "privmsg $chan :Show: \002$name\002 \u2022 Network: $network \u2022 Genre: $genres"
  146.                 putquick "privmsg $chan :Status: $status \u2022 URL: $url"
  147.                 return 0
  148.                 }
  149.  
  150.         }
  151.  
  152. }
  153.  
  154. proc tvnext { nick host hand chan arg } {
  155.  
  156.         set url "http://api.tvmaze.com/singlesearch/shows?[::http::formatQuery q $arg embed\[\] nextepisode embed\[\] previousepisode]"
  157.         set timeout "5000"
  158.  
  159.         if {[catch { ::http::geturl $url -timeout $timeout } token]} {
  160.         putquick "privmsg $chan :$nick, there was a fatal error :$token."
  161.         return 0
  162.         }
  163.  
  164.         if {![string equal -nocase [::http::status $token] "ok"] || ![string equal [::http::ncode $token] 200]} {
  165.         putquick "privmsg $chan :$nick, there was an http error: ( [http::ncode $token] ) [::http::status $token]"
  166.         http::cleanup $token
  167.         return 0
  168.         }
  169.  
  170.         set tvmaze [::json::json2dict [::http::data $token]]
  171.         ::http::cleanup $token
  172.  
  173.         dict with tvmaze {
  174.  
  175.         if {[string equal "null" $webChannel]} { set network [dict get $tvmaze network name] } else { set network [dict get $tvmaze webChannel name] }
  176.  
  177.         if { [dict exists $tvmaze _embedded nextepisode url] } { set nextepurl [dict get $tvmaze _embedded nextepisode url] }
  178.         if { [dict exists $tvmaze _embedded nextepisode name] } { set nextepname [dict get $tvmaze _embedded nextepisode name] }
  179.         if { [dict exists $tvmaze _embedded nextepisode season] } { set nextepseason [dict get $tvmaze _embedded nextepisode season] }
  180.         if { [dict exists $tvmaze _embedded nextepisode number] } { set nextepnumber [dict get $tvmaze _embedded nextepisode number] }
  181.         if { [dict exists $tvmaze _embedded nextepisode airdate] } { set nextepairdate [dict get $tvmaze _embedded nextepisode airdate] }
  182.         if { [dict exists $tvmaze _embedded nextepisode airtime] } { set nextepairtime [dict get $tvmaze _embedded nextepisode airtime] }
  183.         if { [dict exists $tvmaze _embedded nextepisode runtime] } { set nextepruntime [dict get $tvmaze _embedded nextepisode runtime] }
  184.         if { [dict exists $tvmaze _embedded nextepisode summary] } { set nextepsummary [dict get $tvmaze _embedded nextepisode summary] }
  185.  
  186.         if { ![info exists nextepname] } {
  187.                 putquick "privmsg $chan :$nick, no next episode information."
  188.                         return 0
  189.                 }
  190.  
  191.                 set nextepseason [format S%02d $nextepseason]
  192.                 set nextepnumber [format E%02d $nextepnumber]
  193.                 set show_date_time [chng_time [clock scan "$nextepairdate"]]
  194.                 set sec [clock seconds]
  195.                 set airing "[duration [expr {$show_date_time - $sec}]]"
  196.  
  197.         putquick "privmsg $chan :Show: \002$name\002 :: Next episode: $nextepseason$nextepnumber - \002$nextepname\002 airs \002$nextepairdate\002 (In: \002$airing\002) :: $url"
  198.  
  199.         }
  200.  
  201. }
  202.  
  203. proc tvlast { nick host hand chan arg } {
  204.  
  205.         set url "http://api.tvmaze.com/singlesearch/shows?[::http::formatQuery q $arg embed\[\] nextepisode embed\[\] previousepisode]"
  206.         set timeout "5000"
  207.  
  208.         if {[catch { ::http::geturl $url -timeout $timeout } token]} {
  209.         putquick "privmsg $chan :$nick, there was a fatal error :$token."
  210.         return 0
  211.         }
  212.  
  213.         if {![string equal -nocase [::http::status $token] "ok"] || ![string equal [::http::ncode $token] 200]} {
  214.         putquick "privmsg $chan :$nick, there was an http error: ( [http::ncode $token] ) [::http::status $token]"
  215.         http::cleanup $token
  216.         return 0
  217.         }
  218.  
  219.         set tvmaze [::json::json2dict [::http::data $token]]
  220.         ::http::cleanup $token
  221.  
  222.         dict with tvmaze {
  223.  
  224.         if {[string equal "null" $webChannel]} { set network [dict get $tvmaze network name] } else { set network [dict get $tvmaze webChannel name] }
  225.  
  226.         if { [dict exists $tvmaze _embedded previousepisode url] } { set prevepurl [dict get $tvmaze _embedded previousepisode url] }
  227.         if { [dict exists $tvmaze _embedded previousepisode name] } { set prevepname [dict get $tvmaze _embedded previousepisode name] }
  228.         if { [dict exists $tvmaze _embedded previousepisode season] } { set prevepseason [dict get $tvmaze _embedded previousepisode season] }
  229.         if { [dict exists $tvmaze _embedded previousepisode number] } { set prevepnumber [dict get $tvmaze _embedded previousepisode number] }
  230.         if { [dict exists $tvmaze _embedded previousepisode airdate] } { set prevepairdate [dict get $tvmaze _embedded previousepisode airdate] }
  231.         if { [dict exists $tvmaze _embedded previousepisode airtime] } { set prevepairtime [dict get $tvmaze _embedded previousepisode airtime] }
  232.         if { [dict exists $tvmaze _embedded previousepisode runtime] } { set prevepruntime [dict get $tvmaze _embedded previousepisode runtime] }
  233.         if { [dict exists $tvmaze _embedded previousepisode summary] } { set prevepsummary [dict get $tvmaze _embedded previousepisode summary] }
  234.  
  235.         if { ![info exists prevepname] } {
  236.                 putquick "privmsg $chan :$nick, no last episode information."
  237.                         return 0
  238.                 }
  239.  
  240.                 set prevepseason [format S%02d $prevepseason]
  241.                 set prevepnumber [format E%02d $prevepnumber]
  242.  
  243.                 putquick "privmsg $chan :Show: \002$name\002 :: Last episode: $prevepseason$prevepnumber - \002$prevepname\002 aired \002$prevepairdate\002 :: $url"
  244.  
  245.         }
  246.  
  247. }
  248.  
  249. #eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement