Sha256: f908e7043624c449aed7a71890c953ddcc38b91fe0979137ba7ab83b03c4ebbf

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

class QstatRequest
  def initialize(endpoint)
    @endpoint = endpoint
    @data = fetch_data
  end

  def teams
    @teams ||= begin
                 roster = {}
                 teams = players.map(&:team).uniq
                 teams.each { |team| roster[team] = [] }

                 players.each do |player|
                   roster[player.team] << player
                 end
                 roster
               end
  end

  def output
    return server_summary unless has_players?
    [server_summary, player_table].join("\n")
  end

  def to_embed
    embed = Discordrb::Webhooks::Embed.new
    teams.each do |team, players|
      player_list = players.map(&:to_row).join('\n')
      score = players.first.score
      field_name = "#{team} #{score}"
      embed.add_field(Discordrb::Webhooks::EmbedField.new(inline: true, name: field_name, value: player_list))
    end

    embed
  end

  def server_summary
    "#{@endpoint} | #{game_map} | #{numplayers}/#{maxplayers}"
  end

  def has_players?
    @data["players"] || false
  end

  def player_names
    players.map(&:name)
  end

  private

    def fetch_data
      JSON.parse(%x[qstat -json -P -qws #{@endpoint}]).first
    end

    def player_table
      players.sort_by { |player| player.team.number }.map(&:to_row).join("\n")
    end

    def address
      @data["address"]
    end

    def game_map
      @data["map"]
    end

    def numplayers
      @data["numplayers"]
    end

    def maxplayers
      @data["maxplayers"]
    end

    def players
      @data["players"].map do |player_data|
        Player.new(player_data)
      end
    end

    def players_from_team(team)
      players.select { |player| player.team_name == team }.map(&:player_name)
    end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
qwtf_discord_bot-0.5.1 lib/qstat_request.rb
qwtf_discord_bot-0.5.0 lib/qstat_request.rb