seperate into files
This commit is contained in:
parent
91c6f62f7e
commit
416093b089
88
main.rb
88
main.rb
@ -3,63 +3,10 @@ require 'video_info'
|
|||||||
require 'uri'
|
require 'uri'
|
||||||
require 'optparse'
|
require 'optparse'
|
||||||
require 'shellwords'
|
require 'shellwords'
|
||||||
|
require './mpc_shim'
|
||||||
|
require './util'
|
||||||
|
|
||||||
def sanity_check_video(url)
|
mpc = MpcShim.new
|
||||||
if !url.include?("youtube")
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
video = VideoInfo.new(url)
|
|
||||||
title = video.title
|
|
||||||
title.slice! " - YouTube Music"
|
|
||||||
if video.duration > 1200
|
|
||||||
puts "skipping #{url} since it's over 20 minutes"
|
|
||||||
return false
|
|
||||||
elsif File.exists?("tracks/#{title}.mp3") || File.exists?("spool/#{title}.mp3")
|
|
||||||
puts "#{url} already downloaded, not downloading again"
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def parse_songs_from_string(message)
|
|
||||||
urls = URI.extract(message)
|
|
||||||
if urls.length != 0
|
|
||||||
puts "Found #{urls}; downloading"
|
|
||||||
urls.each do |url|
|
|
||||||
if sanity_check_video(url)
|
|
||||||
res = `youtube-dl --ignore-errors --output \"spool/%(title)s.%(ext)s\" --extract-audio --audio-format mp3 #{url}`
|
|
||||||
if res
|
|
||||||
puts "Downloaded #{url}"
|
|
||||||
else
|
|
||||||
puts "error downloading #{url}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def update_mpd()
|
|
||||||
new_songs = Dir["spool/*.mp3"]
|
|
||||||
if new_songs.length <= 0
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
puts "telling mpd to refresh"
|
|
||||||
`mv spool/*.mp3 tracks/`
|
|
||||||
`mpc update`
|
|
||||||
new_songs.each do |song|
|
|
||||||
s = song.split("/")[1]
|
|
||||||
res = system("mpc add #{Shellwords.shellescape(s)}")
|
|
||||||
if res
|
|
||||||
puts "added #{s} to mpd"
|
|
||||||
else
|
|
||||||
puts "error adding #{s} to mpd"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
options = {}
|
options = {}
|
||||||
OptionParser.new do |opt|
|
OptionParser.new do |opt|
|
||||||
opt.on("-t", "--token DISCORD_BOT_TOKEN") {|o| options[:bot_token] = o}
|
opt.on("-t", "--token DISCORD_BOT_TOKEN") {|o| options[:bot_token] = o}
|
||||||
@ -73,7 +20,7 @@ end
|
|||||||
|
|
||||||
puts "creating spool and tracks directories"
|
puts "creating spool and tracks directories"
|
||||||
`mkdir -p spool`
|
`mkdir -p spool`
|
||||||
`"mkdir -p tracks`
|
`mkdir -p tracks`
|
||||||
|
|
||||||
if File.exists?("/usr/bin/mpd")
|
if File.exists?("/usr/bin/mpd")
|
||||||
if !File.exists?("/usr/bin/mpc")
|
if !File.exists?("/usr/bin/mpc")
|
||||||
@ -82,48 +29,45 @@ if File.exists?("/usr/bin/mpd")
|
|||||||
end
|
end
|
||||||
puts "starting mpd if not already running"
|
puts "starting mpd if not already running"
|
||||||
`systemctl start mpd` unless `ps aux | grep mpd` != ""
|
`systemctl start mpd` unless `ps aux | grep mpd` != ""
|
||||||
`mpc clear`
|
mpc.reset()
|
||||||
`mpc add /`
|
|
||||||
`mpc shuffle`
|
|
||||||
`mpc repeat`
|
|
||||||
end
|
end
|
||||||
|
|
||||||
bot = Discordrb::Commands::CommandBot.new token: options[:bot_token], prefix: '!radio '
|
bot = Discordrb::Commands::CommandBot.new token: options[:bot_token], prefix: '!radio '
|
||||||
|
|
||||||
bot.command :start do |event|
|
bot.command :start do |event|
|
||||||
`mpc play`
|
mpc.play
|
||||||
event.respond("starting radio")
|
event.respond("starting radio")
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.command :stop do |event|
|
bot.command :stop do |event|
|
||||||
`mpc stop`
|
mpc.stop
|
||||||
event.respond("stoping radio")
|
event.respond("stoping radio")
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.command :reload do |event|
|
bot.command :reload do |event|
|
||||||
event.respond("reloading queue")
|
event.respond("reloading queue")
|
||||||
`mpc stop`
|
mpc.stop
|
||||||
`mpc clear`
|
mpc.clear
|
||||||
`mpc update`
|
mpc.update
|
||||||
`mpc add /`
|
mpc.add
|
||||||
event.respond("queue reloaded")
|
event.respond("queue reloaded")
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.command :pause do |event|
|
bot.command :pause do |event|
|
||||||
event.respond("pausing playback")
|
event.respond("pausing playback")
|
||||||
`mpc toggle`
|
mpc.toggle
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.command :skip do |event|
|
bot.command :skip do |event|
|
||||||
event.respond("skipping")
|
event.respond("skipping")
|
||||||
`mpc next`
|
mpc.next()
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.command :shuffle do |event|
|
bot.command :shuffle do |event|
|
||||||
`mpc shuffle`
|
mpc.shuffle()
|
||||||
event.respond("shuffled queue")
|
event.respond("shuffled queue")
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
@ -135,14 +79,14 @@ bot.command :initialize do |event|
|
|||||||
messages.each do |msg|
|
messages.each do |msg|
|
||||||
parse_songs_from_string(msg.content)
|
parse_songs_from_string(msg.content)
|
||||||
end
|
end
|
||||||
update_mpd()
|
update_mpd(mpc)
|
||||||
event.respond("done loading")
|
event.respond("done loading")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
bot.message(in: options[:channel_id],contains: "youtube.com") do |event|
|
bot.message(in: options[:channel_id],contains: "youtube.com") do |event|
|
||||||
parse_songs_from_string(event.content)
|
parse_songs_from_string(event.content)
|
||||||
update_mpd()
|
update_mpd(mpc)
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.run
|
bot.run
|
||||||
|
50
mpc_shim.rb
Normal file
50
mpc_shim.rb
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
class MpcShim
|
||||||
|
def update()
|
||||||
|
`mpc update`
|
||||||
|
end
|
||||||
|
|
||||||
|
def clear()
|
||||||
|
`mpc clear`
|
||||||
|
end
|
||||||
|
|
||||||
|
def play()
|
||||||
|
`mpc play`
|
||||||
|
end
|
||||||
|
|
||||||
|
def stop()
|
||||||
|
`mpc stop`
|
||||||
|
end
|
||||||
|
|
||||||
|
def next()
|
||||||
|
`mpc next`
|
||||||
|
end
|
||||||
|
|
||||||
|
def reset()
|
||||||
|
`mpc clear`
|
||||||
|
`mpc add /`
|
||||||
|
`mpc shuffle`
|
||||||
|
`mpc repeat`
|
||||||
|
end
|
||||||
|
|
||||||
|
def update()
|
||||||
|
`mpc update`
|
||||||
|
end
|
||||||
|
|
||||||
|
def toggle()
|
||||||
|
`mpc toggle`
|
||||||
|
end
|
||||||
|
|
||||||
|
def add(filename = nil)
|
||||||
|
if filename == nil
|
||||||
|
`mpc add /`
|
||||||
|
else
|
||||||
|
`mpc add #{filename}`
|
||||||
|
end
|
||||||
|
return $?.success?
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize()
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
56
util.rb
Normal file
56
util.rb
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
def sanity_check_video(url)
|
||||||
|
if !url.include?("youtube")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
video = VideoInfo.new(url)
|
||||||
|
title = video.title
|
||||||
|
title.slice! " - YouTube Music"
|
||||||
|
if video.duration > 1200
|
||||||
|
puts "skipping #{url} since it's over 20 minutes"
|
||||||
|
return false
|
||||||
|
elsif File.exists?("tracks/#{title}.mp3") || File.exists?("spool/#{title}.mp3")
|
||||||
|
puts "#{url} already downloaded, not downloading again"
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def parse_songs_from_string(message)
|
||||||
|
urls = URI.extract(message)
|
||||||
|
if urls.length != 0
|
||||||
|
puts "Found #{urls}; downloading"
|
||||||
|
urls.each do |url|
|
||||||
|
if sanity_check_video(url)
|
||||||
|
res = `youtube-dl --ignore-errors --output \"spool/%(title)s.%(ext)s\" --extract-audio --audio-format mp3 #{url}`
|
||||||
|
if res
|
||||||
|
puts "Downloaded #{url}"
|
||||||
|
else
|
||||||
|
puts "error downloading #{url}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_mpd(mpc)
|
||||||
|
new_songs = Dir["spool/*.mp3"]
|
||||||
|
if new_songs.length <= 0
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
puts "telling mpd to refresh"
|
||||||
|
`mv spool/*.mp3 tracks/`
|
||||||
|
mpc.update
|
||||||
|
new_songs.each do |song|
|
||||||
|
s = song.split("/")[1]
|
||||||
|
res = mpc.add(Shellwords.shellescape(s))
|
||||||
|
if res
|
||||||
|
puts "added #{s} to mpd"
|
||||||
|
else
|
||||||
|
puts "error adding #{s} to mpd"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user