diff --git a/Gemfile b/Gemfile index 0b7abcf3838972155ab932d33833de2990f904fc..d75d9699af021626e4bea86d4e37273a1cc6ffaf 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,9 @@ source "http://rubygems.org" +gem "rake" gem "net-yail" gem "rspec" +gem "activerecord" +gem "sqlite3" + gem "youtube_it" gem "soundcloud" diff --git a/Gemfile.lock b/Gemfile.lock index c531c057f572e14cd02425032ec43f2089197c1e..f018815b4394de05a60dd3b6c8e198be20c309f8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,9 @@ GEM remote: http://rubygems.org/ specs: + activerecord (2.3.14) + activesupport (= 2.3.14) + activesupport (2.3.14) builder (3.1.4) diff-lcs (1.1.3) faraday (0.8.4) @@ -28,6 +31,7 @@ GEM multi_json (~> 1.0) rack (~> 1.2) rack (1.4.1) + rake (0.9.2.2) rspec (2.12.0) rspec-core (~> 2.12.0) rspec-expectations (~> 2.12.0) @@ -41,6 +45,7 @@ GEM hashie httmultiparty (>= 0.3) httparty (>= 0.7.3) + sqlite3 (1.3.6) youtube_it (2.1.8) builder faraday (~> 0.8) @@ -53,7 +58,10 @@ PLATFORMS ruby DEPENDENCIES + activerecord net-yail + rake rspec soundcloud + sqlite3 youtube_it diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000000000000000000000000000000000000..18969aba14795ef6941e9680ae8b5631bfdc9750 --- /dev/null +++ b/Rakefile @@ -0,0 +1,17 @@ +require 'active_record' +require 'logger' + +require_relative 'lib/options.rb' + +task :default => :migrate + +desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x" +task :migrate => :environment do + ActiveRecord::Migrator.migrate('lib/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil ) +end + +task :environment do + config = Options.new.read_file + ActiveRecord::Base.establish_connection(config[:database]) + ActiveRecord::Base.logger = Logger.new(File.open('log/database.log', 'a')) +end diff --git a/lib/migrate/001_create_musics.rb b/lib/migrate/001_create_musics.rb new file mode 100644 index 0000000000000000000000000000000000000000..10aa16eb8e4804b91de3aa11414ab44d9abc6257 --- /dev/null +++ b/lib/migrate/001_create_musics.rb @@ -0,0 +1,20 @@ +require 'rubygems' +require 'bundler/setup' + +class CreateMusics < ActiveRecord::Migration + def self.up + create_table :musics do |t| + t.string :title, :null => false + t.string :author, :null => false + t.string :sender, :null => false + t.string :url, :null => false + t.string :file + end + + add_index :musics, :url, :unique + end + + def self.down + drop_table :musics + end +end diff --git a/lib/music.rb b/lib/music.rb new file mode 100644 index 0000000000000000000000000000000000000000..bf9f6d80a71a9754aeb6df1a12c70c51251c3d68 --- /dev/null +++ b/lib/music.rb @@ -0,0 +1,6 @@ +require 'rubygems' +require 'bundler/setup' +require 'active_record' + +class Music < ActiveRecord::Base +end diff --git a/lib/options.rb b/lib/options.rb index 2185f8507bda0c7ec588c2ad8f16a3f77de6903e..b942763dd9ef25379a2ed6197186cd081645d7cf 100644 --- a/lib/options.rb +++ b/lib/options.rb @@ -3,7 +3,7 @@ require 'yaml' # Allow us to get options, set by user or default ones. class Options - def initialize(file = "#{ENV['HOME']}/.playbot") + def initialize(file = "#{ENV['HOME']}/.playbot/config") @options = {} @file = file end diff --git a/lib/playbot.rb b/lib/playbot.rb index d49ea3a94684e610bcd797dea7213e7c0d8a8740..96343bea514844322b12f61d687f29b29d6d977e 100644 --- a/lib/playbot.rb +++ b/lib/playbot.rb @@ -5,6 +5,7 @@ require 'bundler/setup' require 'net/yail/irc_bot' require_relative 'site_plugin.rb' +require_relative 'music.rb' # -- @@ -79,7 +80,13 @@ class PlayBot < IRCBot return if handler.nil? content = handler.new(@options).get(url) - - msg(event.channel, "#{content[:title]} | #{content[:author]}") + music = Music.create( + :title => content[:title], + :author => content[:author], + :sender => event.nick, + :url => content[:url], + :file => nil) + + msg(event.channel, "#{music.title} | #{music.author}") end end diff --git a/plugins/soundcloud_plugin.rb b/plugins/soundcloud_plugin.rb index aa2e7e10bb503f467fd987598a43a052a05df64d..ee82eb532ecc0ac52297c66af0b0717eb67fde03 100644 --- a/plugins/soundcloud_plugin.rb +++ b/plugins/soundcloud_plugin.rb @@ -19,7 +19,8 @@ class SoundcloudPlugin < SitePlugin def get(url) track = @client.get('/resolve', :url => url) + url.gsub(/http:\/\//, 'https://') - {:title => track.title, :author => track.user.username} + {:title => track.title, :author => track.user.username, :url => url} end end diff --git a/plugins/youtube_plugin.rb b/plugins/youtube_plugin.rb index 1bbfa3c0400768199c75dbb53776108e029fe202..bf0bdf07ace3a2f0fae8ee0890af1b00c707f1ef 100644 --- a/plugins/youtube_plugin.rb +++ b/plugins/youtube_plugin.rb @@ -17,6 +17,7 @@ class YoutubePlugin < SitePlugin def get(url) video = @client.video_by(url) - {:title => video.title, :author => video.author.name} + url.gsub(/https?:\/\/(www.)?youtube.(fr|com)\/watch\?v=|youtu\.be/, 'https://www.youtube.com') + {:title => video.title, :author => video.author.name, :url => url} end end diff --git a/run.rb b/run.rb index 0a0b221e4f7d9ca1ea2169a897970bf25ed906d5..c98fbab72afe068f9622aeda3a7733bccc1291ef 100755 --- a/run.rb +++ b/run.rb @@ -1,5 +1,6 @@ #!/usr/bin/ruby +require 'active_record' require 'logger' require_relative 'lib/playbot' @@ -8,7 +9,8 @@ require_relative 'lib/options' # This code start the PlayBot with somes options. options = Options.new.read_all -puts options + +ActiveRecord::Base.establish_connection(options[:database]) bot = PlayBot.new(options) bot.irc_loop