# Phone Usage Guide The phone module stores contacts, messages, and emails for each UID. It is a server-extension state module backed by SurrealDB. ## Storage Model ```json { "contacts": ["76561198000000000", "field_commander"], "messages": [ { "id": "phone-message:sender:receiver:1", "from": "sender", "to": "receiver", "message": "Text body", "timestamp": 123.45, "read": false } ], "emails": [ { "id": "phone-email:sender:receiver:2", "from": "sender", "to": "receiver", "subject": "Subject", "body": "Email body", "timestamp": 123.45, "read": false } ] } ``` Rules validated by the Rust service: - UID arguments cannot be empty. - Message and email bodies cannot be empty. - Empty email subjects become `No subject`. - Player messages and emails cannot target `field_commander`. - `field_commander` can send messages or emails to players. - Deleting a message or email removes it only from the requesting UID's index. ## Commands
| Command | Arguments | Returns |
|---|---|---|
phone:init
|
uid
|
Full phone payload. |
phone:contacts:list
|
uid
|
Contact UID array. |
phone:contacts:add
|
uid
,
contact_uid
|
true
or
false
.
|
phone:contacts:remove
|
uid
,
contact_uid
|
true
or
false
.
|
phone:messages:list
|
uid
|
Message array. |
phone:messages:thread
|
uid
,
other_uid
|
Message array for both participants. |
phone:messages:send
|
from_uid
,
to_uid
,
message
,
timestamp
|
Message JSON. |
phone:messages:mark_read
|
uid
,
message_id
|
true
or
false
.
|
phone:messages:delete
|
uid
,
message_id
|
true
or
false
.
|
phone:emails:list
|
uid
|
Email array. |
phone:emails:send
|
from_uid
,
to_uid
,
subject
,
body
,
timestamp
|
Email JSON. |
phone:emails:mark_read
|
uid
,
email_id
|
true
or
false
.
|
phone:emails:delete
|
uid
,
email_id
|
true
or
false
.
|
phone:remove
|
uid
|
OK
.
|