Skip to content

Social & guild chat

The Social tab (/launcher/friends) hosts the account-level friend graph, direct messages, and a bridge into every guild the user's characters belong to. Independent of the in-game character friend list — these friendships outlive character deletion and follow the user across launcher, browser portal, and game.

Schema

  • social.account_friendship — bidirectional account graph. Two rows per accepted friendship so each side carries its own per-pair flags (show_real_name, note, blocked state).
  • social.account_chat_message — DM history with source tag (launcher, web, game).
  • social.account_presence — last-seen state per account, written by the WebSocket on connect / disconnect and by the auth server on login.
  • social.guild_chat_message — persisted G + Officer chat. Mirrored from in-game by splintertree-social on every /g and /o line.

Endpoints

/api/v1/social/*:

  • GET /friends — list with status (pending / accepted), online flag, presence source, real-name resolution (only when both sides opted in).
  • POST /friends/request { splintertag } — auto-promotes both edges to accepted if the recipient already requested us.
  • POST /friends/:id/accept, DELETE /friends/:id, PATCH /friends/:id for accept, decline / cancel / remove, and toggling real-name visibility.
  • GET / POST /messages/:id — DM history with friendship gate.
  • GET /guilds, GET / POST /guilds/:id/messages?channel=G|O — guild channel history; officer rank checked at read + write time.
  • GET /social/ws?token= — JSON-line WebSocket. Server pushes message, guild_message, friend_request, presence. Connect / disconnect updates account_presence.

Cross-service bridges

Direction Subject
Game → web/launcher wow.social.guildchat (every /g and /o line lands here)
Web/launcher → game wow.social.guildchat.relay
Web/launcher → game (DM) wow.social.acct_dm.relay
Web/launcher → game (friend request) wow.social.acct_friend.relay

splintertree-social subscribes to the relay subjects and pushes SMSG_MESSAGECHAT addon-message frames (prefix STAIO) to every online character of the recipient. The Splintertree AIO addon's social channel handler renders the events into a system frame + chat line.

Live updates

The Vue store (stores/social.ts) opens the WebSocket once per session. The launcher layout reconnects on refreshAuth, so DMs land even when the player is on the home page. Friend list refreshes are pushed alongside friend-request events so /splintertag list in the addon stays current without a re-login.