Class: UserRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/user_registry.rb

Overview

UserRegistry - Centralized user identity tracking

Resolves user identities across platforms (Discord, GitHub, Fizzy) and provides canonical names, aliases, and relationships.

Usage:

registry = UserRegistry.new
user = registry.find_by_discord_id('832331260088287242')
puts user['canonical_name']  # => "Adam Dalton"
puts user['identities']['github']['username']  # => "dalton"

Constant Summary collapse

USERS_FILE =
File.expand_path("~/.zillacore/users.json")

Instance Method Summary collapse

Constructor Details

#initializeUserRegistry

Returns a new instance of UserRegistry.



20
21
22
# File 'lib/user_registry.rb', line 20

def initialize
  @data = load_data
end

Instance Method Details

#agentsObject

Get all AI agents



69
70
71
# File 'lib/user_registry.rb', line 69

def agents
  @data["users"].select { |u| u["notes"]&.include?("AI agent") }
end

#allObject

Get all users



59
60
61
# File 'lib/user_registry.rb', line 59

def all
  @data["users"]
end

#find(identifier) ⇒ Object

Find user by any identifier (tries all platforms)



50
51
52
53
54
55
56
# File 'lib/user_registry.rb', line 50

def find(identifier)
  find_by_discord_id(identifier) ||
    find_by_discord_username(identifier) ||
    find_by_github_username(identifier) ||
    find_by_fizzy_username(identifier) ||
    find_by_canonical_name(identifier)
end

#find_by_canonical_name(name) ⇒ Object

Find user by canonical name



45
46
47
# File 'lib/user_registry.rb', line 45

def find_by_canonical_name(name)
  @data["users"].find { |u| u["canonical_name"].downcase == name.downcase }
end

#find_by_discord_id(user_id) ⇒ Object

Find user by Discord user ID



25
26
27
# File 'lib/user_registry.rb', line 25

def find_by_discord_id(user_id)
  @data["users"].find { |u| u.dig("identities", "discord", "user_id") == user_id.to_s }
end

#find_by_discord_username(username) ⇒ Object

Find user by Discord username



30
31
32
# File 'lib/user_registry.rb', line 30

def find_by_discord_username(username)
  @data["users"].find { |u| u.dig("identities", "discord", "username") == username.to_s }
end

#find_by_fizzy_username(username) ⇒ Object

Find user by Fizzy username



40
41
42
# File 'lib/user_registry.rb', line 40

def find_by_fizzy_username(username)
  @data["users"].find { |u| u.dig("identities", "fizzy", "username") == username.to_s }
end

#find_by_github_username(username) ⇒ Object

Find user by GitHub username



35
36
37
# File 'lib/user_registry.rb', line 35

def find_by_github_username(username)
  @data["users"].find { |u| u.dig("identities", "github", "username") == username.to_s }
end

#humansObject

Get all human users (exclude AI agents)



64
65
66
# File 'lib/user_registry.rb', line 64

def humans
  @data["users"].reject { |u| u["notes"]&.include?("AI agent") }
end

#reload!Object

Reload data from disk



74
75
76
# File 'lib/user_registry.rb', line 74

def reload!
  @data = load_data
end