Chat API
The Messaging System provides a comprehensive set of endpoints for managing chat rooms and messages within your game. All endpoints require user authentication to ensure proper access control. The system supports real-time communication through WebSocket connections, allowing for instant message delivery and presence updates.
Features
Chat Rooms
- Create new chat rooms
- List available chat rooms
- Get specific chat room details
- Join/leave chat rooms
Messages
- Send messages to chat rooms
- Retrieve message history for a room
- Receive real-time message updates via WebSocket
API Structure
The API is organized into two main sections:
Chat Rooms (
/rooms/*
)- GET
/rooms
- List all available chat rooms - POST
/rooms
- Create a new chat room - GET
/rooms/:roomId
- Get specific chat room details - POST
/rooms/:roomId/join
- Join a chat room - POST
/rooms/:roomId/leave
- Leave a chat room
- GET
Messages (
/rooms/:roomId/messages/*
)- GET
/rooms/:roomId/messages
- Get message history for a room - POST
/rooms/:roomId/messages
- Send a new message to the room
- GET
WebSocket Events
When connected to the WebSocket server, clients will receive the following events:
message.new
- Emitted when a new message is sent to a roommessage.edit
- Emitted when a message is editedmessage.delete
- Emitted when a message is deleteduser.join
- Emitted when a user joins a roomuser.leave
- Emitted when a user leaves a room
Authentication
All endpoints require:
- User authentication (
userAuthentication
middleware) - Game validation (
socialGameValidation
middleware) for most endpoints
Usage
To use the messaging system, first create a chat room using the POST /rooms
endpoint. Once created, users can join the room using the POST /rooms/:roomId/join
endpoint. Messages can then be sent and retrieved using the message endpoints. For real-time updates, connect to the WebSocket server to receive message events.
Example flow:
- Connect to WebSocket server
- Create a chat room
- Join the chat room
- Send messages
- Receive real-time message updates
- Retrieve message history
- Leave the chat room when done
Socket Connection Guide
Overview
This guide explains how to establish and maintain a real-time connection with the chat service using WebSockets. The chat service uses Socket.IO for real-time communication.
Connection Setup
1. Initial Connection
To establish a connection with the chat service, you need to:
- Connect to the WebSocket server
- Subscribe to chat rooms using your authentication token
2. Authentication
Before subscribing to rooms, you need to provide your authentication token. This token is used to identify your user session and authorize your connection.
3. Room Subscription
After establishing the connection, you need to emit a 'subscribe-rooms' event with your authentication token to receive real-time updates for your chat rooms.
Implementation Examples
JavaScript/TypeScript (Socket.IO)
// Initialize socket connection
const socket = io('https://socket-svr.openloot.com');
// Subscribe to rooms with authentication token
socket.emit('subscribe-rooms', { token: 'USER_AUTH_TOKEN' });
// Listen for events
socket.on('event-name', (data) => {
// Handle incoming data
});
Python
import socketio
# Initialize socket client
sio = socketio.Client()
# Connect to server
sio.connect('https://socket-svr.openloot.com')
# Subscribe to rooms
sio.emit('subscribe-rooms', {'token': 'YOUR_AUTH_TOKEN'})
# Listen for events
@sio.on('event-name')
def on_event(data):
# Handle incoming data
pass
Unreal Engine (C++)
// Initialize socket connection
FSocketIOClient SocketClient;
SocketClient.Connect("https://socket-svr.openloot.com");
// Subscribe to rooms
TSharedPtr<FJsonObject> AuthData = MakeShared<FJsonObject>();
AuthData->SetStringField("token", "YOUR_AUTH_TOKEN");
SocketClient.Emit("subscribe-rooms", AuthData);
// Listen for events
SocketClient.On("event-name", [](const TSharedPtr<FJsonObject>& Data) {
// Handle incoming data
});
Events
The chat service may emit various events that your client should handle:
Socket Events Specification
Chat Events
chat.room.created
Emitted when a new chat room is created.
{
room: {
id: string; // UUID of the created room
type: string; // Room type (PRIVATE, GROUP, PUBLIC)
name?: string; // Room name (for GROUP and PUBLIC rooms)
members: string[]; // Array of user IDs in the room
createdAt: string; // ISO timestamp
}
}
chat.user.joined
Emitted when a user joins a chat room.
{
roomId: string; // UUID of the room
userId: string; // UUID of the user who joined
username: string; // Username of the user who joined
joinedAt: string; // ISO timestamp
}
chat.message.created
Emitted when a new message is created in a chat room.
{
roomId: string; // UUID of the room
message: {
id: string; // UUID of the message
body: string; // Message content
userId: string; // UUID of the sender
username: string; // Username of the sender
createdAt: string; // ISO timestamp
metadata?: object; // Optional message metadata
}
}
chat.user.left
Emitted when a user leaves a chat room.
{
roomId: string; // UUID of the room
userId: string; // UUID of the user who left
username: string; // Username of the user who left
leftAt: string; // ISO timestamp
}
chat.room.closed
Emitted when a chat room is closed.
{
roomId: string; // UUID of the closed room
closedAt: string; // ISO timestamp
}
Friend Events
social.friend.received
Emitted when a friend request is received.
{
requestId: string; // UUID of the friend request
fromUserId: string; // UUID of the sender
fromUsername: string; // Username of the sender
createdAt: string; // ISO timestamp
}
social.friend.accepted
Emitted when a friend request is accepted.
{
requestId: string; // UUID of the friend request
userId: string; // UUID of the user who accepted
username: string; // Username of the user who accepted
acceptedAt: string; // ISO timestamp
}
social.friend.removed
Emitted when a friend is removed.
{
userId: string; // UUID of the removed friend
username: string; // Username of the removed friend
removedAt: string; // ISO timestamp
}
Guild Events
social.guild.create
Emitted when a new guild is created.
{
guild: {
id: string; // UUID of the guild
name: string; // Guild name
leader: string; // UUID of the guild leader
createdAt: string; // ISO timestamp
}
}
social.guild.update
Emitted when guild information is updated.
{
guildId: string; // UUID of the guild
updates: {
name?: string; // Updated guild name
description?: string;// Updated guild description
image?: string; // Updated guild image URL
dailyMessage?: string;// Updated guild daily message
}
}
social.guild.disband
Emitted when a guild is disbanded.
{
guildId: string; // UUID of the disbanded guild
disbandedAt: string; // ISO timestamp
}
social.guild.member.update
Emitted when a guild member's information is updated.
{
guildId: string; // UUID of the guild
userId: string; // UUID of the updated member
updates: {
rank?: string; // Updated rank
permissions?: string[];// Updated permissions
}
}
social.guild.member.joined
Emitted when a user joins a guild.
{
guildId: string; // UUID of the guild
userId: string; // UUID of the new member
username: string; // Username of the new member
joinedAt: string; // ISO timestamp
}
social.guild.member.left
Emitted when a user leaves a guild.
{
guildId: string; // UUID of the guild
userId: string; // UUID of the member who left
username: string; // Username of the member who left
leftAt: string; // ISO timestamp
}
social.guild.member.invite
Emitted when a user is invited to a guild.
{
guildId: string; // UUID of the guild
userId: string; // UUID of the invited user
username: string; // Username of the invited user
invitedBy: string; // UUID of the user who sent the invite
invitedAt: string; // ISO timestamp
}
social.guild.member.decline
Emitted when a guild invite is declined.
{
guildId: string; // UUID of the guild
userId: string; // UUID of the user who declined
username: string; // Username of the user who declined
declinedAt: string; // ISO timestamp
}
social.guild.member.cancel
Emitted when a guild invite is canceled.
{
guildId: string; // UUID of the guild
userId: string; // UUID of the user whose invite was canceled
username: string; // Username of the user whose invite was canceled
canceledAt: string; // ISO timestamp
}
Party Events
social.party.create
Emitted when a new party is created.
{
party: {
id: string; // UUID of the party
leader: string; // UUID of the party leader
createdAt: string; // ISO timestamp
}
}
social.party.join
Emitted when a user joins a party.
{
partyId: string; // UUID of the party
userId: string; // UUID of the new member
username: string; // Username of the new member
joinedAt: string; // ISO timestamp
}
social.party.leave
Emitted when a user leaves a party.
{
partyId: string; // UUID of the party
userId: string; // UUID of the member who left
username: string; // Username of the member who left
leftAt: string; // ISO timestamp
}
social.party.invite
Emitted when a user is invited to a party.
{
partyId: string; // UUID of the party
userId: string; // UUID of the invited user
username: string; // Username of the invited user
invitedBy: string; // UUID of the user who sent the invite
invitedAt: string; // ISO timestamp
}
social.party.decline
Emitted when a party invite is declined.
{
partyId: string; // UUID of the party
userId: string; // UUID of the user who declined
username: string; // Username of the user who declined
declinedAt: string; // ISO timestamp
}
social.party.cancel
Emitted when a party invite is canceled.
{
partyId: string; // UUID of the party
userId: string; // UUID of the user whose invite was canceled
username: string; // Username of the user whose invite was canceled
canceledAt: string; // ISO timestamp
}
social.party.update
Emitted when party information is updated.
{
partyId: string; // UUID of the party
updates: {
status?: string; // Updated party status
// Other party-specific updates
}
}
social.party.disband
Emitted when a party is disbanded.
{
partyId: string; // UUID of the disbanded party
disbandedAt: string; // ISO timestamp
}
Notes
- All timestamps are in ISO 8601 format
- All IDs are UUIDs
- All events are emitted in real-time as they occur
- Events may include additional metadata specific to the game or application
- Some fields may be optional depending on the context