syntax = "proto2";

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

option cc_generic_services = true;

enum EClanImageGroup {
  k_EClanImageGroup_None = 0;
  k_EClanImageGroup_Announcement = 1;
  k_EClanImageGroup_Curator = 2;
}

enum EClanImageFileType {
  k_EClanImageFileType_Unknown = 0;
  k_EClanImageFileType_JPEG = 1;
  k_EClanImageFileType_GIF = 2;
  k_EClanImageFileType_PNG = 3;
  k_EClanImageFileType_MP4 = 4;
  k_EClanImageFileType_WEBM = 5;
  k_EClanImageFileType_VTT = 6;
  k_EClanImageFileType_SRT = 7;
  k_EClanImageFileType_SVG = 8;
  k_EClanImageFileType_XML = 9;
  k_EClanImageFileType_WEBP = 10;
}

enum EPartnerEventDisplayLocation {
  k_EPartnerEventDisplayLocation_Invalid = 0;
  k_EPartnerEventDisplayLocation_AppDetailsSpotlight = 1;
  k_EPartnerEventDisplayLocation_LibraryOverview = 2;
  k_EPartnerEventDisplayLocation_StoreAppPage = 3;
  k_EPartnerEventDisplayLocation_EventScroller = 4;
  k_EPartnerEventDisplayLocation_AppDetailsActivity = 5;
  k_EPartnerEventDisplayLocation_CommunityHub = 6;
  k_EPartnerEventDisplayLocation_StoreFrontPage = 7;
  k_EPartnerEventDisplayLocation_NewsHub = 8;
  k_EPartnerEventDisplayLocation_GamepadHome = 9;
  k_EPartnerEventDisplayLocation_StoreHub = 10;
}

message CCommunity_GetApps_Request {
  repeated int32 appids = 1;
  optional uint32 language = 2;
}

message CCommunity_GetApps_Response {
  repeated CCDDBAppDetailCommon apps = 1;
}

message CCommunity_GetAppRichPresenceLocalization_Request {
  optional int32 appid = 1;
  optional string language = 2;
}

message CCommunity_GetAppRichPresenceLocalization_Response {
  message Token {
    optional string name = 1;
    optional string value = 2;
  }
  message TokenList {
    optional string language = 1;
    repeated CCommunity_GetAppRichPresenceLocalization_Response.Token tokens = 2;
  }
  optional int32 appid = 1;
  repeated CCommunity_GetAppRichPresenceLocalization_Response.TokenList token_lists = 2;
}

message CCommunity_GetCommentThread_Request {
  optional fixed64 steamid = 1;
  optional ECommentThreadType comment_thread_type = 2;
  optional fixed64 gidfeature = 3;
  optional fixed64 gidfeature2 = 4;
  optional fixed64 commentthreadid = 5;
  optional int32 start = 6;
  optional int32 count = 7;
  optional int32 upvoters = 8;
  optional bool include_deleted = 9;
  optional fixed64 gidcomment = 10;
  optional uint32 time_oldest = 11;
  optional bool oldest_first = 12;
}

message CCommunity_Comment {
  message Reaction {
    optional uint32 reactionid = 1;
    optional uint32 count = 2;
  }
  optional fixed64 gidcomment = 1;
  optional fixed64 steamid = 2;
  optional uint32 timestamp = 3;
  optional string text = 4;
  optional int32 upvotes = 5;
  optional bool hidden = 6;
  optional bool hidden_by_user = 7;
  optional bool deleted = 8;
  optional CMsgIPAddress ipaddress = 9;
  optional int32 total_hidden = 10;
  optional bool upvoted_by_user = 11;
  repeated CCommunity_Comment.Reaction reactions = 12;
  optional fixed64 gidparentcomment = 13;
  optional ECommentDeleteReason delete_reason = 14;
}

message CCommunity_GetCommentThread_Response {
  repeated CCommunity_Comment comments = 1;
  repeated CCommunity_Comment deleted_comments = 2;
  optional fixed64 steamid = 3;
  optional fixed64 commentthreadid = 4;
  optional int32 start = 5;
  optional int32 count = 6;
  optional int32 total_count = 7;
  optional int32 upvotes = 8;
  repeated uint32 upvoters = 9;
  optional bool user_subscribed = 10;
  optional bool user_upvoted = 11;
  optional fixed64 answer_commentid = 12;
  optional uint32 answer_actor = 13;
  optional int32 answer_actor_rank = 14;
  optional bool can_post = 15;
  optional uint32 comment_thread_type = 16;
  optional fixed64 gidfeature = 17;
  optional fixed64 gidfeature2 = 18;
}

message CCommunity_PostCommentToThread_Request {
  optional fixed64 steamid = 1;
  optional ECommentThreadType comment_thread_type = 2;
  optional fixed64 gidfeature = 3;
  optional fixed64 gidfeature2 = 4;
  optional string text = 6;
  optional fixed64 gidparentcomment = 7;
  optional bool suppress_notifications = 8;
  optional bool is_report = 9;
  optional bool start_hidden = 10;
}

message CCommunity_PostCommentToThread_Response {
  optional fixed64 gidcomment = 1;
  optional fixed64 commentthreadid = 2;
  optional int32 count = 3;
  optional int32 upvotes = 4;
}

message CCommunity_DeleteCommentFromThread_Request {
  optional fixed64 steamid = 1;
  optional ECommentThreadType comment_thread_type = 2;
  optional fixed64 gidfeature = 3;
  optional fixed64 gidfeature2 = 4;
  optional fixed64 gidcomment = 5;
  optional bool undelete = 6;
}

message CCommunity_DeleteCommentFromThread_Response {
}

message CCommunity_RateCommentThread_Request {
  optional string commentthreadtype = 1;
  optional uint64 steamid = 2;
  optional uint64 gidfeature = 3;
  optional uint64 gidfeature2 = 4;
  optional uint64 gidcomment = 5;
  optional bool rate_up = 6;
  optional bool suppress_notifications = 7;
}

message CCommunity_RateCommentThread_Response {
  optional uint64 gidcomment = 1;
  optional uint64 commentthreadid = 2;
  optional uint32 count = 3;
  optional uint32 upvotes = 4;
  optional bool has_upvoted = 5;
}

message CCommunity_GetCommentThreadRatings_Request {
  optional string commentthreadtype = 1;
  optional uint64 steamid = 2;
  optional uint64 gidfeature = 3;
  optional uint64 gidfeature2 = 4;
  optional uint64 gidcomment = 5;
  optional uint32 max_results = 6;
}

message CCommunity_GetCommentThreadRatings_Response {
  optional uint64 commentthreadid = 1;
  optional uint64 gidcomment = 2;
  optional uint32 upvotes = 3;
  optional bool has_upvoted = 4;
  repeated uint32 upvoter_accountids = 5;
}

message CCommunity_VerifyClanMembership_Request {
  optional uint64 steamid = 1;
  repeated uint64 steamids_verifymembership = 2;
}

message CCommunity_VerifyClanMembership_Response {
  repeated uint64 steamids_nonmembers = 1;
}

message CCommunity_RateClanAnnouncement_Request {
  optional uint64 announcementid = 1;
  optional bool vote_up = 2;
  optional uint32 clan_accountid = 3;
}

message CCommunity_RateClanAnnouncement_Response {
}

message CCommunity_GetClanAnnouncementVoteForUser_Request {
  optional uint64 announcementid = 1;
}

message CCommunity_GetClanAnnouncementVoteForUser_Response {
  optional bool voted_up = 1;
  optional bool voted_down = 2;
}

message CCommunity_GetClanLocGroupImages_Request {
  optional uint64 steamid = 1;
  optional EClanImageGroup group = 2;
  optional uint32 language = 3;
  repeated uint64 loc_group_ids = 4;
}

message CCommunity_ClanLocGroupImage {
  optional uint64 loc_group_id = 1;
  optional string image_hash = 2;
  optional string thumbnail_hash = 3;
  optional EClanImageFileType file_type = 4;
  optional EClanImageGroup group = 5;
  optional uint32 width = 6;
  optional uint32 height = 7;
  optional string extensions = 8;
}

message CCommunity_GetClanLocGroupImages_Response {
  repeated CCommunity_ClanLocGroupImage images = 1;
}

message CCommunity_GetAvatarHistory_Request {
  optional fixed64 steamid = 1;
  optional bool filter_user_uploaded_only = 2;
}

message CCommunity_GetAvatarHistory_Response {
  message AvatarData {
    optional string avatar_sha1 = 1;
    optional bool user_uploaded = 2;
    optional uint32 timestamp = 3;
  }
  repeated CCommunity_GetAvatarHistory_Response.AvatarData avatars = 1;
}

message CCommunity_GetClanEventCrowdInMetadata_Request {
  optional fixed64 steamid = 1;
  optional uint64 itemid = 2;
}

message CCommunity_GetClanEventCrowdInMetadata_Response {
  optional uint64 crowdin_project_id = 1;
  optional uint64 crowdin_file_id = 2;
}

message CCommunity_GetClanCrowdInMetadata_Request {
  optional fixed64 steamid = 1;
}

message CCommunity_GetClanCrowdInMetadata_Response {
  optional uint64 crowdin_project_id = 1;
  optional uint64 crowdin_directory_id = 2;
  optional bool push_by_default = 3;
}

message CCommunity_FetchTranslationFromCrowdIn_Request {
  optional fixed64 steamid = 1;
  optional uint64 itemid = 2;
  optional int32 language = 3;
}

message CCommunity_FetchTranslationFromCrowdIn_Response {
}

message CCommunity_HideAndReportComment_Request {
  optional uint64 gidfeature = 1;
  optional uint64 gidfeature2 = 2;
  optional uint64 gidcomment = 3;
  optional fixed64 steamid = 4;
  optional string commentthreadtype = 5;
  optional bool hide = 6;
  optional EContentReportReason report_reason = 7;
  optional string report_text = 8;
}

message CCommunity_HideAndReportComment_Response {
}

message CAppPriority {
  optional uint32 priority = 1;
  repeated uint32 appid = 2;
}

message CCommunity_GetUserPartnerEventNews_Request {
  optional uint32 count = 1;
  optional uint32 offset = 2;
  optional uint32 rtime32_start_time = 3;
  optional uint32 rtime32_end_time = 4;
  repeated uint32 language_preference = 5;
  repeated EProtoClanEventType filter_event_type = 6;
  optional bool filter_to_appid = 7;
  repeated CAppPriority app_list = 8;
  optional uint32 count_after = 9 [default = 0];
  optional uint32 count_before = 10 [default = 0];
}

message CCommunity_GetUserPartnerEventNews_Response {
  repeated CClanMatchEventByRange results = 1;
}

message CCommunity_GetBestEventsForUser_Request {
  optional bool include_steam_blog = 1;
  optional uint32 filter_to_played_within_days = 2;
  optional bool include_only_game_updates = 3;
}

message CCommunity_PartnerEventResult {
  optional uint32 clanid = 1;
  optional fixed64 event_gid = 2;
  optional fixed64 announcement_gid = 3;
  optional uint32 appid = 4;
  optional bool possible_takeover = 5;
  optional uint32 rtime32_last_modified = 6 [default = 0];
  optional int32 user_app_priority = 7;
}

message CCommunity_GetBestEventsForUser_Response {
  repeated CCommunity_PartnerEventResult results = 1;
}

message CCommunity_MarkPartnerEventsForUser_Request {
  message PartnerEventMarking {
    optional uint32 clanid = 1;
    optional fixed64 event_gid = 2;
    optional EPartnerEventDisplayLocation display_location = 3;
    optional bool mark_shown = 4;
    optional bool mark_read = 5;
  }
  repeated CCommunity_MarkPartnerEventsForUser_Request.PartnerEventMarking markings = 1;
}

message CCommunity_MarkPartnerEventsForUser_Response {
}

message CCommunity_GetUserPartnerEventViewStatus_Request {
  repeated fixed64 event_gids = 1;
  optional bool include_read_events_only = 2;
}

message CCommunity_GetUserPartnerEventViewStatus_Response {
  message PartnerEvent {
    optional fixed64 event_gid = 1;
    optional uint32 last_shown_time = 2;
    optional uint32 last_read_time = 3;
    optional uint32 clan_account_id = 4;
  }
  repeated CCommunity_GetUserPartnerEventViewStatus_Response.PartnerEvent events = 1;
}

message CCommunity_PartnerEventsShowMoreForApp_Request {
  optional uint32 appid = 1;
}

message CCommunity_PartnerEventsShowMoreForApp_Response {
}

message CCommunity_PartnerEventsShowLessForApp_Request {
  optional uint32 appid = 1;
}

message CCommunity_PartnerEventsShowLessForApp_Response {
}

message CCommunity_ClearUserPartnerEventsAppPriorities_Request {
}

message CCommunity_ClearUserPartnerEventsAppPriorities_Response {
}

message CCommunity_GetUserPartnerEventsAppPriorities_Request {
}

message CCommunity_PartnerEventsAppPriority {
  optional uint32 appid = 1;
  optional int32 user_app_priority = 2;
}

message CCommunity_GetUserPartnerEventsAppPriorities_Response {
  repeated CCommunity_PartnerEventsAppPriority priorities = 1;
}

message CCommunity_ClearSinglePartnerEventsAppPriority_Request {
  optional uint32 appid = 1;
}

message CCommunity_ClearSinglePartnerEventsAppPriority_Response {
}

message CCommunity_SetRecommendationBotReviewStatus_Request {
  message ReviewLabel {
    optional uint32 appid = 1;
    optional uint64 recommendationid = 2;
    optional bool is_bot_review = 3;
  }
  repeated CCommunity_SetRecommendationBotReviewStatus_Request.ReviewLabel review_labels = 1;
}

message CCommunity_SetRecommendationBotReviewStatus_Response {
}

service Community {
  rpc GetApps (.CCommunity_GetApps_Request) returns (.CCommunity_GetApps_Response) {
  }
  rpc GetAppRichPresenceLocalization (.CCommunity_GetAppRichPresenceLocalization_Request) returns (.CCommunity_GetAppRichPresenceLocalization_Response) {
  }
  rpc GetCommentThread (.CCommunity_GetCommentThread_Request) returns (.CCommunity_GetCommentThread_Response) {
  }
  rpc PostCommentToThread (.CCommunity_PostCommentToThread_Request) returns (.CCommunity_PostCommentToThread_Response) {
  }
  rpc DeleteCommentFromThread (.CCommunity_DeleteCommentFromThread_Request) returns (.CCommunity_DeleteCommentFromThread_Response) {
  }
  rpc RateCommentThread (.CCommunity_RateCommentThread_Request) returns (.CCommunity_RateCommentThread_Response) {
  }
  rpc GetCommentThreadRatings (.CCommunity_GetCommentThreadRatings_Request) returns (.CCommunity_GetCommentThreadRatings_Response) {
  }
  rpc VerifyClanMembership (.CCommunity_VerifyClanMembership_Request) returns (.CCommunity_VerifyClanMembership_Response) {
  }
  rpc RateClanAnnouncement (.CCommunity_RateClanAnnouncement_Request) returns (.CCommunity_RateClanAnnouncement_Response) {
  }
  rpc GetClanAnnouncementVoteForUser (.CCommunity_GetClanAnnouncementVoteForUser_Request) returns (.CCommunity_GetClanAnnouncementVoteForUser_Response) {
  }
  rpc GetClanLocGroupImages (.CCommunity_GetClanLocGroupImages_Request) returns (.CCommunity_GetClanLocGroupImages_Response) {
  }
  rpc GetAvatarHistory (.CCommunity_GetAvatarHistory_Request) returns (.CCommunity_GetAvatarHistory_Response) {
  }
  rpc GetClanEventCrowdInMetadata (.CCommunity_GetClanEventCrowdInMetadata_Request) returns (.CCommunity_GetClanEventCrowdInMetadata_Response) {
  }
  rpc GetClanCrowdInMetadata (.CCommunity_GetClanCrowdInMetadata_Request) returns (.CCommunity_GetClanCrowdInMetadata_Response) {
  }
  rpc FetchTranslationFromCrowdIn (.CCommunity_FetchTranslationFromCrowdIn_Request) returns (.CCommunity_FetchTranslationFromCrowdIn_Response) {
  }
  rpc HideAndReportComment (.CCommunity_HideAndReportComment_Request) returns (.CCommunity_HideAndReportComment_Response) {
  }
  rpc GetUserPartnerEventNews (.CCommunity_GetUserPartnerEventNews_Request) returns (.CCommunity_GetUserPartnerEventNews_Response) {
  }
  rpc GetBestEventsForUser (.CCommunity_GetBestEventsForUser_Request) returns (.CCommunity_GetBestEventsForUser_Response) {
  }
  rpc MarkPartnerEventsForUser (.CCommunity_MarkPartnerEventsForUser_Request) returns (.CCommunity_MarkPartnerEventsForUser_Response) {
  }
  rpc GetUserPartnerEventViewStatus (.CCommunity_GetUserPartnerEventViewStatus_Request) returns (.CCommunity_GetUserPartnerEventViewStatus_Response) {
  }
  rpc PartnerEventsShowMoreForApp (.CCommunity_PartnerEventsShowMoreForApp_Request) returns (.CCommunity_PartnerEventsShowMoreForApp_Response) {
  }
  rpc PartnerEventsShowLessForApp (.CCommunity_PartnerEventsShowLessForApp_Request) returns (.CCommunity_PartnerEventsShowLessForApp_Response) {
  }
  rpc ClearUserPartnerEventsAppPriorities (.CCommunity_ClearUserPartnerEventsAppPriorities_Request) returns (.CCommunity_ClearUserPartnerEventsAppPriorities_Response) {
  }
  rpc GetUserPartnerEventsAppPriorities (.CCommunity_GetUserPartnerEventsAppPriorities_Request) returns (.CCommunity_GetUserPartnerEventsAppPriorities_Response) {
  }
  rpc ClearSinglePartnerEventsAppPriority (.CCommunity_ClearSinglePartnerEventsAppPriority_Request) returns (.CCommunity_ClearSinglePartnerEventsAppPriority_Response) {
  }
  rpc SetRecommendationBotReviewStatus (.CCommunity_SetRecommendationBotReviewStatus_Request) returns (.CCommunity_SetRecommendationBotReviewStatus_Response) {
  }
}

