OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-tps / autoloads / contacts.gd

56 lines · gd ref:
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