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 [default = k_ECommentThreadTypeInvalid];
	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;
}

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 [default = k_ECommentThreadTypeInvalid];
	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 [default = k_ECommentThreadTypeInvalid];
	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_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 [default = k_EClanImageGroup_None];
	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 [default = k_EClanImageFileType_Unknown];
	optional .EClanImageGroup group = 5 [default = k_EClanImageGroup_None];
	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 [default = k_EContentReportReason_Invalid];
	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 [default = k_EPartnerEventDisplayLocation_Invalid];
		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 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);
}
