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;
}
