extends Node
## Contact book — persists known peers across sessions.
const SAVE_PATH := "user://contacts.json"
var contacts: Dictionary = {} # publicKey → {name, memberId, lastSeen}
func _ready() -> void:
_load()
func save_contact(public_key: String, player_name: String, member_id: String = "") -> void:
contacts[public_key] = {
"name": player_name,
"memberId": member_id,
"lastSeen": Time.get_unix_time_from_system()
}
_save()
func remove_contact(public_key: String) -> void:
contacts.erase(public_key)
_save()
func is_contact(public_key: String) -> bool:
return contacts.has(public_key)
func get_contact_name(public_key: String) -> String:
if contacts.has(public_key):
return contacts[public_key].get("name", "Unknown")
return ""
func get_all() -> Dictionary:
return contacts
func _save() -> void:
var file := FileAccess.open(SAVE_PATH, FileAccess.WRITE)
if file:
file.store_string(JSON.stringify(contacts, "\t"))
func _load() -> void:
if not FileAccess.file_exists(SAVE_PATH):
return
var file := FileAccess.open(SAVE_PATH, FileAccess.READ)
if file:
var parsed = JSON.parse_string(file.get_as_text())
if parsed is Dictionary:
contacts = parsed