syntax = "proto2";

import "steammessages_base.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

message CMsgClientFriendMsg {
  optional fixed64 steamid = 1;
  optional int32 chat_entry_type = 2;
  optional bytes message = 3;
  optional fixed32 rtime32_server_timestamp = 4;
  optional bool echo_to_sender = 5;
}

message CMsgClientFriendMsgIncoming {
  optional fixed64 steamid_from = 1;
  optional int32 chat_entry_type = 2;
  optional bool from_limited_account = 3;
  optional bytes message = 4;
  optional fixed32 rtime32_server_timestamp = 5;
}

message CMsgClientAddFriend {
  optional fixed64 steamid_to_add = 1;
  optional string accountname_or_email_to_add = 2;
}

message CMsgClientAddFriendResponse {
  optional int32 eresult = 1 [default = 2];
  optional fixed64 steam_id_added = 2;
  optional string persona_name_added = 3;
}

message CMsgClientRemoveFriend {
  optional fixed64 friendid = 1;
}

message CMsgClientHideFriend {
  optional fixed64 friendid = 1;
  optional bool hide = 2;
}

message CMsgClientFriendsList {
  message Friend {
    optional fixed64 ulfriendid = 1;
    optional uint32 efriendrelationship = 2;
  }
  optional bool bincremental = 1;
  repeated CMsgClientFriendsList.Friend friends = 2;
  optional uint32 max_friend_count = 3;
  optional uint32 active_friend_count = 4;
  optional bool friends_limit_hit = 5;
}

message CMsgClientFriendsGroupsList {
  message FriendGroup {
    optional int32 nGroupID = 1;
    optional string strGroupName = 2;
  }
  message FriendGroupsMembership {
    optional fixed64 ulSteamID = 1;
    optional int32 nGroupID = 2;
  }
  optional bool bremoval = 1;
  optional bool bincremental = 2;
  repeated CMsgClientFriendsGroupsList.FriendGroup friendGroups = 3;
  repeated CMsgClientFriendsGroupsList.FriendGroupsMembership memberships = 4;
}

message CMsgClientPlayerNicknameList {
  message PlayerNickname {
    optional fixed64 steamid = 1;
    optional string nickname = 3;
  }
  optional bool removal = 1;
  optional bool incremental = 2;
  repeated CMsgClientPlayerNicknameList.PlayerNickname nicknames = 3;
}

message CMsgClientSetPlayerNickname {
  optional fixed64 steamid = 1;
  optional string nickname = 2;
}

message CMsgClientSetPlayerNicknameResponse {
  optional uint32 eresult = 1;
}

message CMsgClientRequestFriendData {
  optional uint32 persona_state_requested = 1;
  repeated fixed64 friends = 2;
}

message CMsgClientChangeStatus {
  optional uint32 persona_state = 1;
  optional string player_name = 2;
  optional bool is_auto_generated_name = 3;
  optional bool high_priority = 4;
  optional bool persona_set_by_user = 5;
  optional uint32 persona_state_flags = 6 [default = 0];
  optional bool need_persona_response = 7;
  optional bool is_client_idle = 8;
}

message CMsgPersonaChangeResponse {
  optional uint32 result = 1;
  optional string player_name = 2;
}

message CMsgClientPersonaState {
  message Friend {
    message ClanData {
      optional uint32 ogg_app_id = 1;
      optional uint64 chat_group_id = 2;
    }
    message KV {
      optional string key = 1;
      optional string value = 2;
    }
    message OtherGameData {
      optional uint64 gameid = 1;
      repeated CMsgClientPersonaState.Friend.KV rich_presence = 2;
    }
    optional fixed64 friendid = 1;
    optional uint32 persona_state = 2;
    optional uint32 game_played_app_id = 3;
    optional uint32 game_server_ip = 4;
    optional uint32 game_server_port = 5;
    optional uint32 persona_state_flags = 6;
    optional uint32 online_session_instances = 7;
    optional bool persona_set_by_user = 10;
    optional string player_name = 15;
    optional uint32 query_port = 20;
    optional fixed64 steamid_source = 25;
    optional bytes avatar_hash = 31;
    optional uint32 last_logoff = 45;
    optional uint32 last_logon = 46;
    optional uint32 last_seen_online = 47;
    optional uint32 clan_rank = 50;
    optional string game_name = 55;
    optional fixed64 gameid = 56;
    optional bytes game_data_blob = 60;
    optional CMsgClientPersonaState.Friend.ClanData clan_data = 64;
    optional string clan_tag = 65;
    repeated CMsgClientPersonaState.Friend.KV rich_presence = 71;
    optional fixed64 broadcast_id = 72;
    optional fixed64 game_lobby_id = 73;
    optional uint32 watching_broadcast_accountid = 74;
    optional uint32 watching_broadcast_appid = 75;
    optional uint32 watching_broadcast_viewers = 76;
    optional string watching_broadcast_title = 77;
    optional bool is_community_banned = 78;
    optional bool player_name_pending_review = 79;
    optional bool avatar_pending_review = 80;
    optional bool on_steam_deck = 81;
    repeated CMsgClientPersonaState.Friend.OtherGameData other_game_data = 82;
    optional uint32 gaming_device_type = 83;
  }
  optional uint32 status_flags = 1;
  repeated CMsgClientPersonaState.Friend friends = 2;
}

message CMsgClientFriendProfileInfo {
  optional fixed64 steamid_friend = 1;
}

message CMsgClientFriendProfileInfoResponse {
  optional int32 eresult = 1 [default = 2];
  optional fixed64 steamid_friend = 2;
  optional uint32 time_created = 3;
  optional string real_name = 4;
  optional string city_name = 5;
  optional string state_name = 6;
  optional string country_name = 7;
  optional string headline = 8;
  optional string summary = 9;
}

message CMsgClientCreateFriendsGroup {
  optional fixed64 steamid = 1;
  optional string groupname = 2;
  repeated fixed64 steamid_friends = 3;
}

message CMsgClientCreateFriendsGroupResponse {
  optional uint32 eresult = 1;
  optional int32 groupid = 2;
}

message CMsgClientDeleteFriendsGroup {
  optional fixed64 steamid = 1;
  optional int32 groupid = 2;
}

message CMsgClientDeleteFriendsGroupResponse {
  optional uint32 eresult = 1;
}

message CMsgClientManageFriendsGroup {
  optional int32 groupid = 1;
  optional string groupname = 2;
  repeated fixed64 steamid_friends_added = 3;
  repeated fixed64 steamid_friends_removed = 4;
}

message CMsgClientManageFriendsGroupResponse {
  optional uint32 eresult = 1;
}

message CMsgClientAddFriendToGroup {
  optional int32 groupid = 1;
  optional fixed64 steamiduser = 2;
}

message CMsgClientAddFriendToGroupResponse {
  optional uint32 eresult = 1;
}

message CMsgClientRemoveFriendFromGroup {
  optional int32 groupid = 1;
  optional fixed64 steamiduser = 2;
}

message CMsgClientRemoveFriendFromGroupResponse {
  optional uint32 eresult = 1;
}

message CMsgClientGetEmoticonList {
}

message CMsgClientEmoticonList {
  message Emoticon {
    optional string name = 1;
    optional int32 count = 2;
    optional uint32 time_last_used = 3;
    optional uint32 use_count = 4;
    optional uint32 time_received = 5;
    optional uint32 appid = 6;
  }
  message Sticker {
    optional string name = 1;
    optional int32 count = 2;
    optional uint32 time_received = 3;
    optional uint32 appid = 4;
    optional uint32 time_last_used = 5;
    optional uint32 use_count = 6;
  }
  message Effect {
    optional string name = 1;
    optional int32 count = 2;
    optional uint32 time_received = 3;
    optional bool infinite_use = 4;
    optional uint32 appid = 5;
  }
  repeated CMsgClientEmoticonList.Emoticon emoticons = 1;
  repeated CMsgClientEmoticonList.Sticker stickers = 2;
  repeated CMsgClientEmoticonList.Effect effects = 3;
}

