egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

YouTUBE TCL Script [using YouTube Data API (v3)]

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Support & Releases
View previous topic :: View next topic  
Author Message
Madalin
Master


Joined: 24 Jun 2005
Posts: 310
Location: Constanta, Romania

PostPosted: Mon Aug 08, 2016 6:25 am    Post subject: YouTUBE TCL Script [using YouTube Data API (v3)] Reply with quote

Code:

# +-------------------------------------------------------------------------------------+
# |                                                                                     |
# |                         YouTUBE Script v1.0.0                                       |
# |                                                                                     |
# +-------------------------------------------------------------------------------------+
# |                                                                                     |
# | *** Website             @  http://www.EggdropTCL.com                                |
# | *** GitHub              @  http://github.com/MadaliNTCL/eggdrop-tcl                 |
# |                                                                                     |
# +-------------------------------------------------------------------------------------+
# | *** IRC Support:                                                                    |
# |                    #EggdropTCL     @ QuakeNET                                       |
# |                    #EggdropTCL     @ UnderNET                                       |
# |                    #EggdropTCL     @ EfNET                                          |
# |                                                                                     |
# | *** Contact:                                                                        |
# |                    Yahoo Messenger/Mail: madalinmen28@yahoo.com                     |
# |                    Google Mail         : madalinmen28@gmail.com                     |
# |                    Skype Messenger     : madalinmen28                               |
# |                                                                                     |
# +-------------------------------------------------------------------------------------+
# + *** Commands ***                                                                    |
# |     +---------------+                                                               |
# |     [ OP - PUBLIC]                                                                  |
# |     +---------------+                                                               |
# |                                                                                     |
# |     +++ !youtube on                                                                 |
# |     +++ !youtube off                                                                |
# |                                                                                     |
# +-------------------------------------------------------------------------------------+

bind PUBM - * youtube
bind PUBM - * youtube:pubm

package require json
package require http
package require tls

set youtube(api) "key goes here"

setudef flag youtube

proc youtube:pubm {nick uhost hand chan arg} {
   global temp

   if {[string index $arg 0] in {! . `}} {
      set temp(cmd) [string range $arg 1 end]
      set temp(cmd) [lindex [split $temp(cmd)] 0]
      set arg [join [lrange [split $arg] 1 end]]
   } elseif {[isbotnick [lindex [split $arg] 0]]} {
      set temp(cmd) [lindex [split $arg] 1]
      set arg [join [lrange [split $arg] 2 end]]
   } else { return 0 }

   if {[info commands ytpubm:$temp(cmd)] ne ""} { ytpubm:$temp(cmd) $nick $uhost $hand $chan $arg }
}

proc ytpubm:youtube {nick uhost hand chan arg} {

   switch -exact -- [lindex [split $arg] 0] {
      on {
         if {[isop $nick $chan]} {
            channel set $chan +youtube
            
            putserv "PRIVMSG $chan :\002$nick\002 - \00302Set channel mode \00306+youtube\0032 on \00304$chan"
         }
      }
      off {
         if {[isop $nick $chan]} {
            channel set $chan -youtube
            
            putserv "PRIVMSG $chan :\002$nick\002 - \00302Set channel mode \00306-youtube\0032 on \00304$chan"
         }
      }      
   }
}
proc youtube {nick uhost hand chan arg} {
   global ytignore youtube

   if {![channel get $chan youtube]} { return 0 }   
   if {![string match -nocase *yout* $arg]} { return 0 }

   ## ++
   set floodtime 10

   ## ++
   if {![info exists ytignore($nick)]} {
      set ytignore($nick) [unixtime]
      utimer $floodtime [list unset -nocomplain ytignore($nick)]
   }

   ## ++
   if {[expr [unixtime]-$ytignore($nick)]>$floodtime} { putlog "ignoram"; return 0 }

   set youtubecheck [regexp -all -nocase {(?:\/watch\?v=|youtu\.be\/)([\d\w-]{11})} $arg match youtubeid]
   
   ::http::register https 443 [list ::tls::socket -tls1 1]

   if {[catch {http::geturl "https://www.googleapis.com/youtube/v3/videos?[http::formatQuery id $youtubeid key $youtube(api) part snippet,contentDetails,statistics,status]"} tok]} {
      putlog "Socket error: $tok"
      return 0
   }
   if {[http::status $tok] ne "ok"} {
      set status [http::status $tok]
      
      putlog "TCP error: $status"
      return 0
   }
   if {[http::ncode $tok] != 200} {
      set code [http::code $tok]
      http::cleanup $tok

      putlog "HTTP Error: $code"
      return 0
   }

   set data [http::data $tok]

   set parse [::json::json2dict $data]
   
   set playtime [lindex [dict get [lindex [dict get $parse items] 0] snippet] 1]
   set title [lindex [dict get [lindex [dict get $parse items] 0] snippet] 5]
   set viewCount [lindex [dict get [lindex [dict get $parse items] 0] statistics] 1]
   set likeCount [lindex [dict get [lindex [dict get $parse items] 0] statistics] 3]
   set dislikeCount [lindex [dict get [lindex [dict get $parse items] 0] statistics] 5]
   set commentCount [lindex [dict get [lindex [dict get $parse items] 0] statistics] 9]
   set publishedAt [lindex [dict get [lindex [dict get $parse items] 0] snippet] 1]
   set publishedAt [string map [list "T" " " ".000Z" ""] $publishedAt]
   set duration [lindex [dict get [lindex [dict get $parse items] 0] contentDetails] 1]
   set duration [string map [list "PT" "" "M" "m " "S" "s"] $duration]
   set definition [string toupper [lindex [dict get [lindex [dict get $parse items] 0] contentDetails] 5]]
   
   putserv "PRIVMSG $chan :\002\00301,00You\00300,04Tube\002\017 \00312$title\003 \002\00304$definition\003\002 \037\002/\002\037 \00302Views\003: \00303[youtube:convert $viewCount]\003 \037\002/\002\037 \00302Likes\003: \00310[youtube:convert $likeCount]\003 \037\002/\002\037 \00302Dislikes\003: \00304[youtube:convert $dislikeCount]\003 \037\002/\002\037 \00302Comments\003: \00304[youtube:convert $commentCount]\003 \037\002/\002\037 \00302Duration: \00304$duration\003 \037\002/\002\037 \00302Published at: \00304$publishedAt"
}

proc youtube:convert {num} { while {[regsub {^([-+]?\d+)(\d\d\d)} $num "\\1.\\2" num]} {}; return $num }

putlog "Succesfully loaded: \00303YouTUBE TCL Script"

_________________
https://github.com/MadaliNTCL - To chat with me: https://tawk.to/MadaliNTCL
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Support & Releases All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber