import "steammessages_unified_base.steamclient.proto";
import "enums.proto";

option cc_generic_services = true;

enum EProfileCustomizationStyle {
	k_EProfileCustomizationStyleDefault = 0;
	k_EProfileCustomizationStyleSelected = 1;
	k_EProfileCustomizationStyleRarest = 2;
	k_EProfileCustomizationStyleMostRecent = 3;
	k_EProfileCustomizationStyleRandom = 4;
	k_EProfileCustomizationStyleHighestRated = 5;
}

enum EAgreementType {
	k_EAgreementType_Invalid = -1;
	k_EAgreementType_GlobalSSA = 0;
	k_EAgreementType_ChinaSSA = 1;
}

enum ENotificationSetting {
	k_ENotificationSettingNotifyUseDefault = 0;
	k_ENotificationSettingAlways = 1;
	k_ENotificationSettingNever = 2;
}

enum ETextFilterSetting {
	k_ETextFilterSettingSteamLabOptedOut = 0;
	k_ETextFilterSettingEnabled = 1;
	k_ETextFilterSettingEnabledAllowProfanity = 2;
	k_ETextFilterSettingDisabled = 3;
}

message CPlayer_GetMutualFriendsForIncomingInvites_Request {
}

message CPlayer_IncomingInviteMutualFriendList {
	optional fixed64 steamid = 1;
	repeated uint32 mutual_friend_account_ids = 2;
}

message CPlayer_GetMutualFriendsForIncomingInvites_Response {
	repeated .CPlayer_IncomingInviteMutualFriendList incoming_invite_mutual_friends_lists = 1;
}

message CPlayer_GetOwnedGames_Request {
	optional uint64 steamid = 1 [(description) = "The player we're asking about"];
	optional bool include_appinfo = 2 [(description) = "true if we want additional details (name, icon) about each game"];
	optional bool include_played_free_games = 3 [(description) = "Free games are excluded by default.  If this is set, free games the user has played will be returned."];
	repeated uint32 appids_filter = 4 [(description) = "if set, restricts result set to the passed in apps"];
	optional bool include_free_sub = 5 [(description) = "Some games are in the free sub, which are excluded by default."];
	optional bool skip_unvetted_apps = 6 [default = true, (description) = "if set, skip unvetted store apps"];
}

message CPlayer_GetOwnedGames_Response {
	message Game {
		optional int32 appid = 1;
		optional string name = 2;
		optional int32 playtime_2weeks = 3;
		optional int32 playtime_forever = 4;
		optional string img_icon_url = 5;
		optional string img_logo_url = 6;
		optional bool has_community_visible_stats = 7;
		optional int32 playtime_windows_forever = 8;
		optional int32 playtime_mac_forever = 9;
		optional int32 playtime_linux_forever = 10;
	}

	optional uint32 game_count = 1;
	repeated .CPlayer_GetOwnedGames_Response.Game games = 2;
}

message CPlayer_GetPlayNext_Request {
	optional uint32 max_age_seconds = 1;
	repeated uint32 ignore_appids = 2;
}

message CPlayer_GetPlayNext_Response {
	optional uint32 last_update_time = 1;
	repeated uint32 appids = 2;
}

message CPlayer_GetFriendsGameplayInfo_Request {
	optional uint32 appid = 1;
}

message CPlayer_GetFriendsGameplayInfo_Response {
	message FriendsGameplayInfo {
		optional fixed64 steamid = 1;
		optional uint32 minutes_played = 2;
		optional uint32 minutes_played_forever = 3;
	}

	message OwnGameplayInfo {
		optional fixed64 steamid = 1;
		optional uint32 minutes_played = 2;
		optional uint32 minutes_played_forever = 3;
		optional bool in_wishlist = 4;
		optional bool owned = 5;
	}

	optional .CPlayer_GetFriendsGameplayInfo_Response.OwnGameplayInfo your_info = 1;
	repeated .CPlayer_GetFriendsGameplayInfo_Response.FriendsGameplayInfo in_game = 2;
	repeated .CPlayer_GetFriendsGameplayInfo_Response.FriendsGameplayInfo played_recently = 3;
	repeated .CPlayer_GetFriendsGameplayInfo_Response.FriendsGameplayInfo played_ever = 4;
	repeated .CPlayer_GetFriendsGameplayInfo_Response.FriendsGameplayInfo owns = 5;
	repeated .CPlayer_GetFriendsGameplayInfo_Response.FriendsGameplayInfo in_wishlist = 6;
}

message CPlayer_GetFriendsAppsActivity_Request {
	optional string news_language = 1 [(description) = "Language for which to query about news items (for the being_discussed results). DEPRECATED AND UNUSED."];
	optional uint32 request_flags = 2 [(description) = "Flags describing the request; see EGetFriendsAppsActivityFlags"];
}

message CPlayer_GetFriendsAppsActivity_Response {
	message FriendPlayTime {
		optional fixed64 steamid = 1;
		optional uint32 minutes_played_this_week = 2 [(description) = "Minutes this friend played the game (from the enclosing structure) this week."];
		optional uint32 minutes_played_two_weeks = 3 [(description) = "Minutes this friend played the game (from the enclosing structure) in the past 2 weeks."];
		optional uint32 minutes_played_forever = 4 [(description) = "Minutes this friend played the game (from the enclosing structure) all time."];
		optional uint32 event_count = 5 [(description) = "Number of events involving this user & app. (Only set for results in being_discussed.) DEPRECATED AND UNUSED."];
	}

	message AppFriendsInfo {
		optional uint32 appid = 1;
		repeated .CPlayer_GetFriendsAppsActivity_Response.FriendPlayTime friends = 2 [(description) = "Friends (w/ playtime) that meet a specific criteria -- e.g. for trending, only includes friends w/ more playtime this week."];
		optional uint32 display_order = 3 [(description) = "Index indicating the order in which this app should be displayed, relative to other apps in the same response."];
	}

	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo trending = 1 [(description) = "Apps that friends have played more this week than last, with list of friends who've played more this week"];
	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo recent_purchases = 2 [(description) = "Apps friends have played in the past two weeks for which the user recently acquired a license"];
	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo unowned = 3 [(description) = "Apps friends have played in the past two weeks for which the user has no license"];
	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo popular = 4 [(description) = "Apps friends have played in the past two weeks, for which the user has a license, sorted by count"];
	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo dont_forget = 5 [(description) = "Apps friends have played in the past two weeks which the user has neither purchased nor played in the past two weeks"];
	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo being_discussed = 6 [(description) = "Owned apps that friends have posted status or screenshots for in the past two weeks. DEPRECATED AND UNUSED."];
	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo new_to_group = 7 [(description) = "Owned apps that none of your friends had played prior to 2 weeks."];
	repeated .CPlayer_GetFriendsAppsActivity_Response.AppFriendsInfo returned_to_group = 8 [(description) = "Owned apps that friends hadn't played for a while, but are again."];
	optional uint32 active_friend_count = 9 [default = 0, (description) = "Number of friends with non-trivial activity in the past two weeks."];
}

message CPlayer_GetGameBadgeLevels_Request {
	optional uint32 appid = 1;
}

message CPlayer_GetGameBadgeLevels_Response {
	message Badge {
		optional int32 level = 1;
		optional int32 series = 2;
		optional uint32 border_color = 3;
	}

	optional uint32 player_level = 1;
	repeated .CPlayer_GetGameBadgeLevels_Response.Badge badges = 2;
}

message CPlayer_GetProfileBackground_Request {
	optional fixed64 steamid = 1 [(description) = "The player we're asking about"];
	optional string language = 2;
}

message ProfileItem {
	optional uint64 communityitemid = 1;
	optional string image_small = 2 [(description) = "small image used in backpack or selection"];
	optional string image_large = 3 [(description) = "the image itself"];
	optional string name = 4 [(description) = "english name"];
	optional string item_title = 5 [(description) = "localized title"];
	optional string item_description = 6 [(description) = "localized description"];
	optional uint32 appid = 7;
	optional uint32 item_type = 8;
	optional uint32 item_class = 9;
	optional string movie_webm = 10 [(description) = "URL to webm, if any"];
	optional string movie_mp4 = 11 [(description) = "URL to mp4, if any"];
	optional string movie_webm_small = 13 [(description) = "URL to small webm, if any"];
	optional string movie_mp4_small = 14 [(description) = "URL to small mp4, if any"];
	optional uint32 equipped_flags = 12 [(description) = "Special flags set when equipped (EProfileItemEquippedFlag)"];
}

message CPlayer_GetProfileBackground_Response {
	optional .ProfileItem profile_background = 1;
}

message CPlayer_SetProfileBackground_Request {
	optional uint64 communityitemid = 1;
}

message CPlayer_SetProfileBackground_Response {
}

message CPlayer_GetMiniProfileBackground_Request {
	optional fixed64 steamid = 1 [(description) = "The player we're asking about"];
	optional string language = 2;
}

message CPlayer_GetMiniProfileBackground_Response {
	optional .ProfileItem profile_background = 1;
}

message CPlayer_SetMiniProfileBackground_Request {
	optional uint64 communityitemid = 1;
}

message CPlayer_SetMiniProfileBackground_Response {
}

message CPlayer_GetAvatarFrame_Request {
	optional fixed64 steamid = 1 [(description) = "The player we're asking about"];
	optional string language = 2;
}

message CPlayer_GetAvatarFrame_Response {
	optional .ProfileItem avatar_frame = 1;
}

message CPlayer_SetAvatarFrame_Request {
	optional uint64 communityitemid = 1;
}

message CPlayer_SetAvatarFrame_Response {
}

message CPlayer_GetAnimatedAvatar_Request {
	optional fixed64 steamid = 1 [(description) = "The player we're asking about"];
	optional string language = 2;
}

message CPlayer_GetAnimatedAvatar_Response {
	optional .ProfileItem avatar = 1;
}

message CPlayer_SetAnimatedAvatar_Request {
	optional uint64 communityitemid = 1;
}

message CPlayer_SetAnimatedAvatar_Response {
}

message CPlayer_GetProfileItemsOwned_Request {
	optional string language = 1;
}

message CPlayer_GetProfileItemsOwned_Response {
	repeated .ProfileItem profile_backgrounds = 1;
	repeated .ProfileItem mini_profile_backgrounds = 2;
	repeated .ProfileItem avatar_frames = 3;
	repeated .ProfileItem animated_avatars = 4;
	repeated .ProfileItem profile_modifiers = 5;
}

message CPlayer_GetProfileItemsEquipped_Request {
	optional fixed64 steamid = 1;
	optional string language = 2;
}

message CPlayer_GetProfileItemsEquipped_Response {
	optional .ProfileItem profile_background = 1;
	optional .ProfileItem mini_profile_background = 2;
	optional .ProfileItem avatar_frame = 3;
	optional .ProfileItem animated_avatar = 4;
	optional .ProfileItem profile_modifier = 5;
}

message CPlayer_SetEquippedProfileItemFlags_Request {
	optional uint64 communityitemid = 1;
	optional uint32 flags = 2 [(description) = "Set of EProfileItemEquippedFlag"];
}

message CPlayer_SetEquippedProfileItemFlags_Response {
}

message CPlayer_GetEmoticonList_Request {
}

message CPlayer_GetEmoticonList_Response {
	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;
	}

	repeated .CPlayer_GetEmoticonList_Response.Emoticon emoticons = 1;
}

message CPlayer_GetAchievementsProgress_Request {
	optional uint64 steamid = 1;
	optional string language = 2;
	repeated uint32 appids = 3;
}

message CPlayer_GetAchievementsProgress_Response {
	message AchievementProgress {
		optional uint32 appid = 1;
		optional uint32 unlocked = 2;
		optional uint32 total = 3;
		optional float percentage = 4;
		optional bool all_unlocked = 5;
		optional uint32 cache_time = 6;
	}

	repeated .CPlayer_GetAchievementsProgress_Response.AchievementProgress achievement_progress = 1;
}

message CPlayer_GetFavoriteBadge_Request {
	optional uint64 steamid = 1;
}

message CPlayer_GetFavoriteBadge_Response {
	optional bool has_favorite_badge = 1;
	optional uint32 badgeid = 2;
	optional uint64 communityitemid = 3;
	optional uint32 item_type = 4;
	optional uint32 border_color = 5;
	optional uint32 appid = 6;
	optional uint32 level = 7;
}

message CPlayer_SetFavoriteBadge_Request {
	optional uint64 communityitemid = 1;
	optional uint32 badgeid = 2;
}

message CPlayer_SetFavoriteBadge_Response {
}

message CPlayer_GetProfileCustomization_Request {
	optional fixed64 steamid = 1;
	optional bool include_inactive_customizations = 2;
	optional bool include_purchased_customizations = 3;
}

message ProfileCustomizationSlot {
	optional uint32 slot = 1;
	optional uint32 appid = 2;
	optional uint64 publishedfileid = 3;
	optional uint64 item_assetid = 4;
	optional uint64 item_contextid = 5;
	optional string notes = 6;
	optional string title = 7;
	optional uint32 accountid = 8;
	optional uint32 badgeid = 9;
	optional uint32 border_color = 10;
	optional uint64 item_classid = 11;
	optional uint64 item_instanceid = 12;
	optional .EBanContentCheckResult ban_check_result = 13 [default = k_EBanContentCheckResult_NotScanned];
}

message ProfileCustomization {
	optional .EProfileCustomizationType customization_type = 1 [default = k_EProfileCustomizationTypeInvalid];
	optional bool large = 2;
	repeated .ProfileCustomizationSlot slots = 3;
	optional bool active = 4;
	optional .EProfileCustomizationStyle customization_style = 5 [default = k_EProfileCustomizationStyleDefault];
	optional uint64 purchaseid = 6;
	optional uint32 level = 7;
}

message ProfileTheme {
	optional string theme_id = 1;
	optional string title = 2;
}

message ProfilePreferences {
	optional bool hide_profile_awards = 1;
}

message CPlayer_GetProfileCustomization_Response {
	message PurchasedCustomization {
		optional uint64 purchaseid = 1;
		optional .EProfileCustomizationType customization_type = 2 [default = k_EProfileCustomizationTypeInvalid];
		optional uint32 level = 3;
	}

	repeated .ProfileCustomization customizations = 1;
	optional uint32 slots_available = 2;
	optional .ProfileTheme profile_theme = 3;
	repeated .CPlayer_GetProfileCustomization_Response.PurchasedCustomization purchased_customizations = 4;
	optional .ProfilePreferences profile_preferences = 5;
}

message CPlayer_GetPurchasedProfileCustomizations_Request {
	optional fixed64 steamid = 1;
}

message CPlayer_GetPurchasedProfileCustomizations_Response {
	message PurchasedCustomization {
		optional uint64 purchaseid = 1;
		optional .EProfileCustomizationType customization_type = 2 [default = k_EProfileCustomizationTypeInvalid];
	}

	repeated .CPlayer_GetPurchasedProfileCustomizations_Response.PurchasedCustomization purchased_customizations = 1;
}

message CPlayer_GetPurchasedAndUpgradedProfileCustomizations_Request {
	optional fixed64 steamid = 1;
}

message CPlayer_GetPurchasedAndUpgradedProfileCustomizations_Response {
	message PurchasedCustomization {
		optional .EProfileCustomizationType customization_type = 1 [default = k_EProfileCustomizationTypeInvalid];
		optional uint32 count = 2;
	}

	message UpgradedCustomization {
		optional .EProfileCustomizationType customization_type = 1 [default = k_EProfileCustomizationTypeInvalid];
		optional uint32 level = 2;
	}

	repeated .CPlayer_GetPurchasedAndUpgradedProfileCustomizations_Response.PurchasedCustomization purchased_customizations = 1;
	repeated .CPlayer_GetPurchasedAndUpgradedProfileCustomizations_Response.UpgradedCustomization upgraded_customizations = 2;
}

message CPlayer_GetProfileThemesAvailable_Request {
}

message CPlayer_GetProfileThemesAvailable_Response {
	repeated .ProfileTheme profile_themes = 1;
}

message CPlayer_SetProfileTheme_Request {
	optional string theme_id = 1;
}

message CPlayer_SetProfileTheme_Response {
}

message CPlayer_SetProfilePreferences_Request {
	optional .ProfilePreferences profile_preferences = 1;
}

message CPlayer_SetProfilePreferences_Response {
}

message CPlayer_PostStatusToFriends_Request {
	optional uint32 appid = 1;
	optional string status_text = 2;
}

message CPlayer_PostStatusToFriends_Response {
}

message CPlayer_GetPostedStatus_Request {
	optional uint64 steamid = 1 [(description) = "The player we're asking about"];
	optional uint64 postid = 2;
}

message CPlayer_GetPostedStatus_Response {
	optional uint32 accountid = 1;
	optional uint64 postid = 2;
	optional string status_text = 3;
	optional bool deleted = 4;
	optional uint32 appid = 5;
}

message CPlayer_DeletePostedStatus_Request {
	optional uint64 postid = 1;
}

message CPlayer_DeletePostedStatus_Response {
}

message CPlayer_GetLastPlayedTimes_Request {
	optional uint32 min_last_played = 1 [(description) = "The most recent last-played time the client already knows about"];
}

message CPlayer_GetLastPlayedTimes_Response {
	message Game {
		optional int32 appid = 1;
		optional uint32 last_playtime = 2;
		optional int32 playtime_2weeks = 3;
		optional int32 playtime_forever = 4;
		optional uint32 first_playtime = 5;
		optional int32 playtime_windows_forever = 6;
		optional int32 playtime_mac_forever = 7;
		optional int32 playtime_linux_forever = 8;
		optional uint32 first_windows_playtime = 9;
		optional uint32 first_mac_playtime = 10;
		optional uint32 first_linux_playtime = 11;
		optional uint32 last_windows_playtime = 12;
		optional uint32 last_mac_playtime = 13;
		optional uint32 last_linux_playtime = 14;
	}

	repeated .CPlayer_GetLastPlayedTimes_Response.Game games = 1;
}

message CPlayer_AcceptSSA_Request {
	optional .EAgreementType agreement_type = 1 [default = k_EAgreementType_Invalid];
	optional uint32 time_signed_utc = 2;
}

message CPlayer_AcceptSSA_Response {
}

message CPlayer_GetNicknameList_Request {
}

message CPlayer_GetNicknameList_Response {
	message PlayerNickname {
		optional fixed32 accountid = 1;
		optional string nickname = 2;
	}

	repeated .CPlayer_GetNicknameList_Response.PlayerNickname nicknames = 1;
}

message CPlayer_GetPerFriendPreferences_Request {
}

message PerFriendPreferences {
	optional fixed32 accountid = 1;
	optional string nickname = 2;
	optional .ENotificationSetting notifications_showingame = 3 [default = k_ENotificationSettingNotifyUseDefault];
	optional .ENotificationSetting notifications_showonline = 4 [default = k_ENotificationSettingNotifyUseDefault];
	optional .ENotificationSetting notifications_showmessages = 5 [default = k_ENotificationSettingNotifyUseDefault];
	optional .ENotificationSetting sounds_showingame = 6 [default = k_ENotificationSettingNotifyUseDefault];
	optional .ENotificationSetting sounds_showonline = 7 [default = k_ENotificationSettingNotifyUseDefault];
	optional .ENotificationSetting sounds_showmessages = 8 [default = k_ENotificationSettingNotifyUseDefault];
	optional .ENotificationSetting notifications_sendmobile = 9 [default = k_ENotificationSettingNotifyUseDefault];
}

message CPlayer_GetPerFriendPreferences_Response {
	repeated .PerFriendPreferences preferences = 1;
}

message CPlayer_SetPerFriendPreferences_Request {
	optional .PerFriendPreferences preferences = 1;
}

message CPlayer_SetPerFriendPreferences_Response {
}

message CPlayer_AddFriend_Request {
	optional fixed64 steamid = 1 [(description) = "Steam ID of user to whom to send a friend invite."];
}

message CPlayer_AddFriend_Response {
	optional bool invite_sent = 1 [(description) = "True if the operation was successful, false otherwise."];
	optional uint32 friend_relationship = 2 [(description) = "the resulting relationship.  Depending on state, may move directly to friends rather than invite sent"];
	optional int32 result = 3;
}

message CPlayer_RemoveFriend_Request {
	optional fixed64 steamid = 1 [(description) = "Steam ID of friend to remove."];
}

message CPlayer_RemoveFriend_Response {
	optional uint32 friend_relationship = 1 [(description) = "the resulting relationship"];
}

message CPlayer_IgnoreFriend_Request {
	optional fixed64 steamid = 1;
	optional bool unignore = 2 [(description) = "If set, remove from ignore/block list instead of adding "];
}

message CPlayer_IgnoreFriend_Response {
	optional uint32 friend_relationship = 1 [(description) = "the resulting relationship"];
}

message CPlayer_GetCommunityPreferences_Request {
}

message CPlayer_CommunityPreferences {
	optional bool hide_adult_content_violence = 1 [default = true];
	optional bool hide_adult_content_sex = 2 [default = true];
	optional bool parenthesize_nicknames = 4 [default = false];
	optional .ETextFilterSetting text_filter_setting = 5 [default = k_ETextFilterSettingSteamLabOptedOut];
	optional bool text_filter_ignore_friends = 6 [default = true];
	optional uint32 text_filter_words_revision = 7;
	optional uint32 timestamp_updated = 3;
}

message CPlayer_GetCommunityPreferences_Response {
	optional .CPlayer_CommunityPreferences preferences = 1;
}

message CPlayer_SetCommunityPreferences_Request {
	optional .CPlayer_CommunityPreferences preferences = 1;
}

message CPlayer_SetCommunityPreferences_Response {
}

message CPlayer_GetTextFilterWords_Request {
}

message CPlayer_TextFilterWords {
	repeated string text_filter_custom_banned_words = 1;
	repeated string text_filter_custom_clean_words = 2;
	optional uint32 text_filter_words_revision = 3;
}

message CPlayer_GetTextFilterWords_Response {
	optional .CPlayer_TextFilterWords words = 1;
}

message CPlayer_GetNewSteamAnnouncementState_Request {
	optional int32 language = 1;
}

message CPlayer_GetNewSteamAnnouncementState_Response {
	optional int32 state = 1;
	optional string announcement_headline = 2;
	optional string announcement_url = 3;
	optional uint32 time_posted = 4;
	optional uint64 announcement_gid = 5;
}

message CPlayer_UpdateSteamAnnouncementLastRead_Request {
	optional uint64 announcement_gid = 1;
	optional uint32 time_posted = 2;
}

message CPlayer_UpdateSteamAnnouncementLastRead_Response {
}

message CPlayer_GetPrivacySettings_Request {
}

message CPrivacySettings {
	optional int32 privacy_state = 1;
	optional int32 privacy_state_inventory = 2;
	optional int32 privacy_state_gifts = 3;
	optional int32 privacy_state_ownedgames = 4;
	optional int32 privacy_state_playtime = 5;
	optional int32 privacy_state_friendslist = 6;
}

message CPlayer_GetPrivacySettings_Response {
	optional .CPrivacySettings privacy_settings = 1;
}

message CPlayer_GetDurationControl_Request {
	optional uint32 appid = 1;
}

message CPlayer_GetDurationControl_Response {
	optional bool is_enabled = 1;
	optional int32 seconds = 2;
	optional int32 seconds_today = 3;
	optional bool is_steamchina_account = 4;
	optional bool is_age_verified = 5;
	optional uint32 seconds_allowed_today = 6;
	optional bool age_verification_pending = 7;
	optional bool block_minors = 8;
}

message CPlayer_LastPlayedTimes_Notification {
	repeated .CPlayer_GetLastPlayedTimes_Response.Game games = 1;
}

message CPlayer_FriendNicknameChanged_Notification {
	optional fixed32 accountid = 1;
	optional string nickname = 2;
	optional bool is_echo_to_self = 3;
}

message CPlayer_FriendEquippedProfileItemsChanged_Notification {
	optional fixed32 accountid = 1;
}

message CPlayer_NewSteamAnnouncementState_Notification {
	optional int32 state = 1;
	optional string announcement_headline = 2;
	optional string announcement_url = 3;
	optional uint32 time_posted = 4;
	optional uint64 announcement_gid = 5;
}

message CPlayer_CommunityPreferencesChanged_Notification {
	optional .CPlayer_CommunityPreferences preferences = 1;
}

message CPlayer_TextFilterWordsChanged_Notification {
	optional .CPlayer_TextFilterWords words = 1;
}

message CPlayer_PerFriendPreferencesChanged_Notification {
	optional fixed32 accountid = 1;
	optional .PerFriendPreferences preferences = 2;
}

message CPlayer_PrivacySettingsChanged_Notification {
	optional .CPrivacySettings privacy_settings = 1;
}

service Player {
	option (service_description) = "A service for accessing Steam player data";

	rpc GetMutualFriendsForIncomingInvites (.CPlayer_GetMutualFriendsForIncomingInvites_Request) returns (.CPlayer_GetMutualFriendsForIncomingInvites_Response) {
		option (method_description) = "Get me the mutual friends for each of my pending incoming invites (individuals and clans).";
	}

	rpc GetOwnedGames (.CPlayer_GetOwnedGames_Request) returns (.CPlayer_GetOwnedGames_Response) {
		option (method_description) = "Return a list of games owned by the player";
	}

	rpc GetPlayNext (.CPlayer_GetPlayNext_Request) returns (.CPlayer_GetPlayNext_Response) {
		option (method_description) = "Return suggested games for player to play next.";
	}

	rpc GetFriendsGameplayInfo (.CPlayer_GetFriendsGameplayInfo_Request) returns (.CPlayer_GetFriendsGameplayInfo_Response) {
		option (method_description) = "Get a list of friends who are playing, have played, own, or want a game";
	}

	rpc GetFriendsAppsActivity (.CPlayer_GetFriendsAppsActivity_Request) returns (.CPlayer_GetFriendsAppsActivity_Response) {
		option (method_description) = "Get lists of apps friends are active in, in a variety of ways";
	}

	rpc GetGameBadgeLevels (.CPlayer_GetGameBadgeLevels_Request) returns (.CPlayer_GetGameBadgeLevels_Response) {
		option (method_description) = "Returns the Steam Level of a user, the Badge level for the game, and if it's foil";
	}

	rpc GetProfileBackground (.CPlayer_GetProfileBackground_Request) returns (.CPlayer_GetProfileBackground_Response) {
		option (method_description) = "Gets which profile background is active for a specific user";
	}

	rpc SetProfileBackground (.CPlayer_SetProfileBackground_Request) returns (.CPlayer_SetProfileBackground_Response) {
		option (method_description) = "Sets the user's profile background";
	}

	rpc GetMiniProfileBackground (.CPlayer_GetMiniProfileBackground_Request) returns (.CPlayer_GetMiniProfileBackground_Response) {
		option (method_description) = "Gets which mini profile background is active for a specific user";
	}

	rpc SetMiniProfileBackground (.CPlayer_SetMiniProfileBackground_Request) returns (.CPlayer_SetMiniProfileBackground_Response) {
		option (method_description) = "Sets the user's mini profile background";
	}

	rpc GetAvatarFrame (.CPlayer_GetAvatarFrame_Request) returns (.CPlayer_GetAvatarFrame_Response) {
		option (method_description) = "Gets which avatar frame is active for a specific user";
	}

	rpc SetAvatarFrame (.CPlayer_SetAvatarFrame_Request) returns (.CPlayer_SetAvatarFrame_Response) {
		option (method_description) = "Sets the user's avatar frame for their profile";
	}

	rpc GetAnimatedAvatar (.CPlayer_GetAnimatedAvatar_Request) returns (.CPlayer_GetAnimatedAvatar_Response) {
		option (method_description) = "Gets which animated avatar is active for a specific user";
	}

	rpc SetAnimatedAvatar (.CPlayer_SetAnimatedAvatar_Request) returns (.CPlayer_SetAnimatedAvatar_Response) {
		option (method_description) = "Sets the user's animated avatar for their profile";
	}

	rpc GetProfileItemsOwned (.CPlayer_GetProfileItemsOwned_Request) returns (.CPlayer_GetProfileItemsOwned_Response) {
		option (method_description) = "Returns the items the user can equip on their profile";
	}

	rpc GetProfileItemsEquipped (.CPlayer_GetProfileItemsEquipped_Request) returns (.CPlayer_GetProfileItemsEquipped_Response) {
		option (method_description) = "Returns the items the user has equipped on their profile";
	}

	rpc SetEquippedProfileItemFlags (.CPlayer_SetEquippedProfileItemFlags_Request) returns (.CPlayer_SetEquippedProfileItemFlags_Response) {
		option (method_description) = "Sets special flags on the equipped item";
	}

	rpc GetEmoticonList (.CPlayer_GetEmoticonList_Request) returns (.CPlayer_GetEmoticonList_Response) {
		option (method_description) = "Gets a list of the emoticons a user has with metadata";
	}

	rpc GetAchievementsProgress (.CPlayer_GetAchievementsProgress_Request) returns (.CPlayer_GetAchievementsProgress_Response) {
		option (method_description) = "Gets the achievement completion stats for the specified list of apps.";
	}

	rpc GetFavoriteBadge (.CPlayer_GetFavoriteBadge_Request) returns (.CPlayer_GetFavoriteBadge_Response) {
		option (method_description) = "Gets the badge the user has set as their favorite";
	}

	rpc SetFavoriteBadge (.CPlayer_SetFavoriteBadge_Request) returns (.CPlayer_SetFavoriteBadge_Response) {
		option (method_description) = "Sets the badge  as the users favorite";
	}

	rpc GetProfileCustomization (.CPlayer_GetProfileCustomization_Request) returns (.CPlayer_GetProfileCustomization_Response) {
		option (method_description) = "Returns the customizations (if any) for a profile";
	}

	rpc GetPurchasedProfileCustomizations (.CPlayer_GetPurchasedProfileCustomizations_Request) returns (.CPlayer_GetPurchasedProfileCustomizations_Response) {
		option (method_description) = "Returns the purchased profile customizations";
	}

	rpc GetPurchasedAndUpgradedProfileCustomizations (.CPlayer_GetPurchasedAndUpgradedProfileCustomizations_Request) returns (.CPlayer_GetPurchasedAndUpgradedProfileCustomizations_Response) {
		option (method_description) = "Returns the purchased and upgraded profile customizations";
	}

	rpc GetProfileThemesAvailable (.CPlayer_GetProfileThemesAvailable_Request) returns (.CPlayer_GetProfileThemesAvailable_Response) {
		option (method_description) = "Gets themes available for the user.";
	}

	rpc SetProfileTheme (.CPlayer_SetProfileTheme_Request) returns (.CPlayer_SetProfileTheme_Response) {
		option (method_description) = "Selects a theme for the profile";
	}

	rpc SetProfilePreferences (.CPlayer_SetProfilePreferences_Request) returns (.CPlayer_SetProfilePreferences_Response) {
		option (method_description) = "Sets profile preferences";
	}

	rpc PostStatusToFriends (.CPlayer_PostStatusToFriends_Request) returns (.CPlayer_PostStatusToFriends_Response) {
		option (method_description) = "Posts custom status text into the blotter";
	}

	rpc GetPostedStatus (.CPlayer_GetPostedStatus_Request) returns (.CPlayer_GetPostedStatus_Response) {
		option (method_description) = "Gets a posted status text for a user by id";
	}

	rpc DeletePostedStatus (.CPlayer_DeletePostedStatus_Request) returns (.CPlayer_DeletePostedStatus_Response) {
		option (method_description) = "Deletes a posted status text for a user by id";
	}

	rpc ClientGetLastPlayedTimes (.CPlayer_GetLastPlayedTimes_Request) returns (.CPlayer_GetLastPlayedTimes_Response) {
		option (method_description) = "Gets the last-played times for the account";
	}

	rpc AcceptSSA (.CPlayer_AcceptSSA_Request) returns (.CPlayer_AcceptSSA_Response) {
		option (method_description) = "User is accepting the SSA";
	}

	rpc GetNicknameList (.CPlayer_GetNicknameList_Request) returns (.CPlayer_GetNicknameList_Response) {
		option (method_description) = "Gets the list of nicknames this user has for other users";
	}

	rpc GetPerFriendPreferences (.CPlayer_GetPerFriendPreferences_Request) returns (.CPlayer_GetPerFriendPreferences_Response) {
		option (method_description) = "Gets the list of per-friend preferences this user has set for other users";
	}

	rpc SetPerFriendPreferences (.CPlayer_SetPerFriendPreferences_Request) returns (.CPlayer_SetPerFriendPreferences_Response) {
		option (method_description) = "Sets the logged in user's per-friend preferences for the given user";
	}

	rpc AddFriend (.CPlayer_AddFriend_Request) returns (.CPlayer_AddFriend_Response) {
		option (method_description) = "Invites another Steam user to be a friend";
	}

	rpc RemoveFriend (.CPlayer_RemoveFriend_Request) returns (.CPlayer_RemoveFriend_Response) {
		option (method_description) = "Removes a friend or ignores a friend suggestion";
	}

	rpc IgnoreFriend (.CPlayer_IgnoreFriend_Request) returns (.CPlayer_IgnoreFriend_Response) {
		option (method_description) = "Blocks or unblocks communication with the user.  Despite name, can be a non-friend.";
	}

	rpc GetCommunityPreferences (.CPlayer_GetCommunityPreferences_Request) returns (.CPlayer_GetCommunityPreferences_Response) {
		option (method_description) = "Returns the player's community preferences";
	}

	rpc SetCommunityPreferences (.CPlayer_SetCommunityPreferences_Request) returns (.CPlayer_SetCommunityPreferences_Response) {
		option (method_description) = "Sets the player's community preferences";
	}

	rpc GetTextFilterWords (.CPlayer_GetTextFilterWords_Request) returns (.CPlayer_GetTextFilterWords_Response) {
		option (method_description) = "Get the custom text filtering dictionary for this user";
	}

	rpc GetNewSteamAnnouncementState (.CPlayer_GetNewSteamAnnouncementState_Request) returns (.CPlayer_GetNewSteamAnnouncementState_Response) {
		option (method_description) = "Calculates and returns what to display for UI that renders new steam announcement available";
	}

	rpc UpdateSteamAnnouncementLastRead (.CPlayer_UpdateSteamAnnouncementLastRead_Request) returns (.CPlayer_UpdateSteamAnnouncementLastRead_Response) {
		option (method_description) = "Marks latest announcement timestamp read by user";
	}

	rpc GetPrivacySettings (.CPlayer_GetPrivacySettings_Request) returns (.CPlayer_GetPrivacySettings_Response) {
		option (method_description) = "Get current privacy settings.";
	}

	rpc GetDurationControl (.CPlayer_GetDurationControl_Request) returns (.CPlayer_GetDurationControl_Response) {
		option (method_description) = "Get gameplay duration control settings.";
	}
}

service PlayerClient {
	option (service_description) = "Steam player data client notifications";
	option (service_execution_site) = k_EProtoExecutionSiteSteamClient;

	rpc NotifyLastPlayedTimes (.CPlayer_LastPlayedTimes_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server to client of more recent play time";
	}

	rpc NotifyFriendNicknameChanged (.CPlayer_FriendNicknameChanged_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server to client that a friend's nickname has changed";
	}

	rpc NotifyFriendEquippedProfileItemsChanged (.CPlayer_FriendEquippedProfileItemsChanged_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server to client that a friend's equipped profile items have changed";
	}

	rpc NotifyNewSteamAnnouncementState (.CPlayer_NewSteamAnnouncementState_Notification) returns (.NoResponse) {
		option (method_description) = "Notifies client of changes to steam announcement state for user";
	}

	rpc NotifyCommunityPreferencesChanged (.CPlayer_CommunityPreferencesChanged_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server to client that their community preferences have changed";
	}

	rpc NotifyTextFilterWordsChanged (.CPlayer_TextFilterWordsChanged_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server to client that their text filtering dictionary has changed";
	}

	rpc NotifyPerFriendPreferencesChanged (.CPlayer_PerFriendPreferencesChanged_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server that per-friend preferences have changed";
	}

	rpc NotifyPrivacyPrivacySettingsChanged (.CPlayer_PrivacySettingsChanged_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server that privacy settings changed";
	}
}
