#!/usr/bin/ruby #require 'bundler/setup' require 'discordrb' require 'yaml' require 'mimemagic' require 'down' require 'fileutils' require 'time' require 'logger' require 'astro/moon' require './folder.rb' logger = Logger.new(STDOUT) logger.level = Logger::INFO prefix = ENV["STEVEFOLDER_PREFIX"] if prefix == "" prefix = "./" end logger.info("starting with prefix #{prefix}") config_obj = YAML::load_file( "#{prefix}config.yaml" ) logger.info("loaded config") bot = Discordrb::Commands::CommandBot.new token: config_obj["bot_token"], prefix: "!folder" folder = Folder.new def shut_down(bot,folder) if bot.connected? bot.stop end folder.close end config_obj['steves'].each do |steve| folder.add_steve(steve) end bot.message(private: true,contains: "!folder fall") do |event| if folder.steve?(event.user) folder.curse(event.user) mem = bot.member(config_obj['server_id'],event.user.id) mem.set_nick("Geoff","This Steve has seperated himself from the Ideal Steve") event.respond("May Snen have Mercy on your Soul") else event.respond("Oh that you could be so blessed as to have that option") end end bot.message(private: true,contains: "!folder rise") do |event| if folder.steve?(event.user) folder.bless(event.user) mem = bot.member(config_obj['server_id'],event.user.id) mem.set_nick("","Steve-ness restored") event.respond("Welcome back to the winning team") else event.respond("Fat chance, non-Steve") end end bot.message(private: true, contains: "!folder help") do |event| event.respond("Commands: rise,fall,help,status") end bot.message(private: true, contains: "!folder status") do |event| event.respond("Stevefolder has #{folder.num_subs} submissions") end bot.message(private: true) do |event| sender = event.author.id i = 1 updated = false event.message.attachments.each do |file| res = MimeMagic.by_path(file.filename) updated = true if res != nil if res.image? or res.video? download = Down.download(file.url) FileUtils.mv(download.path, "#{prefix}spool/#{download.original_filename}") folder.submit(Submission.new("#{prefix}spool/#{download.original_filename}",true,sender)) event.respond("Submission #{i} accepted") i = i + 1 else event.respond("File type #{res} not supported yet") end else event.respond("Submission denied; attached file but I can't figure out the file type") end end urls = URI.extract(event.content) urls.each do |url| mime_guess = MimeMagic.by_extension(url) if mime_guess != nil if mime_guess.image? or mime_guess.video? download = Down.download(file.url) FileUtils.mv(download.path, "#{prefix}spool/#{download.original_filename}") folder.submit(Submission.new("#{prefix}spool/#{download.original_filename}",true,sender)) event.respond("Submission #{i} accepted") updated = true else event.respond("Submission denied; link goes to a piece of media but I can't figure out what it is") end else folder.submit(Submission.new(url,false,sender)) event.respond("Submission #{i} accepted") updated = true end i= i+1 end if updated folder.update() else event.respond("Submission denied: I don't know what this is") end end #set up signals Signal.trap("INT") { shut_down(bot,folder) exit } # Trap `Kill ` Signal.trap("TERM") { shut_down(bot,folder) exit } logger.info("Logging into discord") bot.run(true) logger.info("Starting bot main loop") loop do timer = Astro::Moon.phase.phase * (3600 * (1 + rand(3))) if timer < 900 #lower limit of 15 minutes timer = 900 end logger.info("sleeping for #{timer} seconds") sleep timer t = Time.new if t.hour < 9 and t.hour > 2 logger.info("skipping send cuz it's late") next end sid,msg = folder.harass_steve() if msg == nil logger.info("no submissions ready") next end steve = bot.user(sid) if steve == nil logger.warn("Tried to get Steve #{sid} but failed, skipping") next end logger.info("sending submission #{msg.id}") if msg.local steve.send_file(File.open(msg.content,'r')) File.delete(msg.content) else steve.pm(msg.content) end folder.update() end