Friday, September 20, 2024 12:07:16 AM
> settings

Customize


Authenticate

> server.rb
# frozen_string_literal: true

class Server < ApplicationRecord
  before_validation(on: :create) { self.public_id ||= SecureRandom.uuid }
  before_create :generate_key

  attribute :public_id, :string
  attribute :server_id, :string
  attribute :community_id, :integer
  attribute :server_name, :text
  attribute :server_key, :text
  attribute :server_ip, :string
  attribute :server_port, :string
  attribute :server_start_time, :datetime
  attribute :server_version, :string
  enum server_visibility: {private: 0, public: 1}, _default: :public, _suffix: :visibility
  attribute :disconnected_at, :datetime
  attribute :created_at, :datetime
  attribute :updated_at, :datetime

  belongs_to :community

  has_many :cooldowns, dependent: :destroy
  has_many :logs, dependent: :destroy
  has_many :server_mods, dependent: :destroy
  has_many :server_rewards, dependent: :destroy
  has_one :server_setting, dependent: :destroy
  has_many :territories, dependent: :destroy
  has_many :user_gamble_stats, dependent: :destroy
  has_many :user_notification_preferences, dependent: :destroy
  has_many :user_notification_routes, dependent: :destroy, foreign_key: :source_server_id

  validates :public_id, uniqueness: true, presence: true

  def self.find_by_server_id(id)
    order(:server_id).where("server_id ilike ?", id).first
  end

  def self.clientize
    all.map(&:clientize)
  end

  def recently_created?(time: 30.seconds.ago)
    created_at.between?(time, Time.current)
  end

  # Idk how to store random bytes in redis (Dang you NULL!)
  KEY_CHARS = [
    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "", "/", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "@", "[", "\\", "]", "^", "_", "`", "{", "|", "}", "~"
  ].shuffle.freeze

  def generate_key
    return if server_key.present?

    self.server_key = Array.new(64).map { KEY_CHARS.sample }.join
  end

  def clientize
    {
      id: server_id,
      name: "[#{server_id}] #{server_name.presence || "Server name not provided"}"
    }
  end
end
All opinions represented herein are my own
- © 2024 itsthedevman
- build 3c15a1b