Sha256: 6165f703afa8183c7fbd15db5394b6c7b1ab48f8829eda25041ca52095410b03

Contents?: true

Size: 1.71 KB

Versions: 2

Compression:

Stored size: 1.71 KB

Contents

require 'ruboty'
require 'open-uri'
require 'json'

module Ruboty
  module Handlers
    class Mtgcard < Base
      API_URL = 'https://api.magicthegathering.io/v1/cards?'
      DEFAULT_MTGCARD_LANGUAGE = 'english'
      DEFAULT_MTGCARD_MESSAGE_WHEN_NOT_FOUND = 'No cards found.'

      env :MTGCARD_LANGUAGE, 'MTG card language (default: english)', optional: true
      env :MTGCARD_MESSAGE_WHEN_NOT_FOUND, 'Message when not found (default: No cards found.)', optional: true

      LANGUAGE = ENV['MTGCARD_LANGUAGE'] || DEFAULT_MTGCARD_LANGUAGE
      MESSAGE_WHEN_NOT_FOUND = ENV['MTGCARD_MESSAGE_WHEN_NOT_FOUND'] || DEFAULT_MTGCARD_MESSAGE_WHEN_NOT_FOUND

      on(
        /(mtgcard) (?<keyword>.+)/,
        name: 'mtgcard',
        description: 'Returns MTG card illustration url that matches the keyword'
      )

      def mtgcard(message)
        image_url = nil

        begin
          res = open "#{api_url}&name=#{URI.escape(message[:keyword])}"
        rescue => e
          return message.reply e
        end

        cards = JSON.parse(res.read)['cards']
        return message.reply MESSAGE_WHEN_NOT_FOUND if cards.length == 0

        if LANGUAGE == 'english'
          while image_url.nil? || image_url.length == 0
            image_url = cards.sample['imageUrl']
          end
        else
          while image_url.nil? || image_url.length == 0
            card = cards.sample['foreignNames'].find { |foreig_name| foreig_name['language'] == LANGUAGE.capitalize }
            image_url = card['imageUrl']
          end
        end

        message.reply image_url
      end

      private

      def api_url
        url = API_URL
        url += "language=#{LANGUAGE}" if LANGUAGE != 'english'
        url
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruboty-mtgcard-0.1.1 lib/ruboty/handlers/mtgcard.rb
ruboty-mtgcard-0.1.0 lib/ruboty/handlers/mtgcard.rb