require './app/commands/base_command.rb' class LandmarkCommand < BaseCommand def self.opts { # Nav consists of reaction sections and descriptions nav: { history: [ Emoji::BOOKS, "Learn about the history and folklore" ], warning: [ Emoji::SKULL, "Learn about the areas dangers" ], map: [ Emoji::MAP, "See the area on the map of Zaplana" ], layout: [ Emoji::HOUSES, "View a local map of the area" ], npc: [ Emoji::PEOPLE, "See the NPC residents you might meet" ] }, # Usage has each option, in order with instructions, and a real example usage: { name: "Searches landmarks for the specified name. " + "If no name is given, R0ry will show a list of all landmarks", section: "Skips to the specified section, can use any section listed in " + "navigation. If no section is given, R0ry will default to history" } } end def self.cmd desc = "Learn all about the various places in Zaplana!" @cmd ||= Command.new(:landmark, desc, opts) do |event, name, section| if name # Find landmark, case insensitive landmark = Landmark.find_by!('name ilike ?', name) # Reply with landmark display BotResponse.new( embed: landmark_embed(lm: landmark, section: section, event: event), carousel: landmark, reactions: LandmarkCarousel.sections.map{ |k,v| k }.push(Emoji::CROSS) ) else # Reply with landmark list display landmark_list end rescue ActiveRecord::RecordNotFound => e error_embed("Record Not Found!", e.message) rescue StandardError => e error_embed(e.message) end end def self.example_command(event=nil) case ['', 'name', 'section'].sample when '' [] when 'name' [Landmark.order('RANDOM()').first.name] when 'section' [Landmark.order('RANDOM()').first.name, ['history', 'warning', 'map', 'layout', 'npc'].sample] end end end