import "dota_shared_enums.proto";

enum EGuildAuditAction {
	k_EGuildAuditAction_Invalid = 0;
	k_EGuildAuditAction_GuildCreated = 1;
	k_EGuildAuditAction_GuildLanguageChanged = 2;
	k_EGuildAuditAction_GuildFlagsChanged = 3;
	k_EGuildAuditAction_GuildMemberJoined = 5;
	k_EGuildAuditAction_GuildMemberLeft = 6;
	k_EGuildAuditAction_GuildMemberKicked = 7;
	k_EGuildAuditAction_GuildMemberRoleChanged = 8;
	k_EGuildAuditAction_GuildLogoChanged = 9;
	k_EGuildAuditAction_GuildRegionChanged = 10;
	k_EGuildAuditAction_GuildDescriptionChanged = 11;
	k_EGuildAuditAction_GuildPrimaryColorChanged = 12;
	k_EGuildAuditAction_GuildSecondaryColorChanged = 13;
	k_EGuildAuditAction_GuildPatternChanged = 14;
	k_EGuildAuditAction_AdminClearedLogo = 15;
	k_EGuildAuditAction_GuildRequiredRankChanged = 16;
	k_EGuildAuditAction_GuildMotDChanged = 18;
	k_EGuildAuditAction_AdminResetName = 19;
	k_EGuildAuditAction_AdminResetTag = 20;
	k_EGuildAuditAction_AdminLock = 21;
	k_EGuildAuditAction_GuildNameChanged = 22;
	k_EGuildAuditAction_GuildTagChanged = 23;
	k_EGuildAuditAction_AdminPermitted = 24;
	k_EGuildAuditAction_AdminBlocked = 25;
	k_EGuildAuditAction_AdminBannedUser = 26;
	k_EGuildAuditAction_AdminExonerated = 27;
}

enum EGuildChatType {
	k_EGuildChatType_Unspecified = 0;
	k_EGuildChatType_SteamChatGroup = 1;
	k_EGuildChatType_GC = 2;
}

message CMsgGuildInfo {
	optional string guild_name = 1;
	optional string guild_tag = 2;
	optional uint32 created_timestamp = 3;
	optional uint32 guild_language = 4;
	optional uint32 guild_flags = 5;
	optional uint64 guild_logo = 7;
	optional uint32 guild_region = 8;
	optional uint64 guild_chat_group_id = 9;
	optional string guild_description = 10;
	optional uint64 default_chat_channel_id = 11;
	optional uint32 guild_primary_color = 12;
	optional uint32 guild_secondary_color = 13;
	optional uint32 guild_pattern = 14;
	optional uint32 guild_refresh_time_offset = 15;
	optional uint32 guild_required_rank_tier = 16;
	optional uint32 guild_motd_timestamp = 17;
	optional string guild_motd = 18;
}

message CMsgGuildSummary {
	message EventPoints {
		optional uint32 event_id = 1;
		optional uint32 guild_points = 2;
		optional uint32 guild_rank = 3;
		optional uint32 guild_weekly_rank = 4;
		optional uint32 guild_weekly_percentile = 5;
		optional uint32 guild_current_percentile = 6;
	}

	optional .CMsgGuildInfo guild_info = 1;
	optional uint32 member_count = 2;
	repeated .CMsgGuildSummary.EventPoints event_points = 3;
}

message CMsgGuildRole {
	optional uint32 role_id = 1;
	optional string role_name = 2;
	optional uint32 role_flags = 3;
	optional uint32 role_order = 4;
}

message CMsgGuildMember {
	optional uint32 member_account_id = 1;
	optional uint32 member_role_id = 2;
	optional uint32 member_joined_timestamp = 3;
	optional uint32 member_last_active_timestamp = 4;
}

message CMsgGuildInvite {
	optional uint32 requester_account_id = 1;
	optional uint32 target_account_id = 2;
	optional uint32 timestamp_sent = 3;
}

message CMsgGuildData {
	optional uint32 guild_id = 1;
	optional .CMsgGuildInfo guild_info = 2;
	repeated .CMsgGuildRole guild_roles = 3;
	repeated .CMsgGuildMember guild_members = 4;
	repeated .CMsgGuildInvite guild_invites = 5;
}

message CMsgAccountGuildInvite {
	optional uint32 guild_id = 1;
	optional uint32 requester_account_id = 2;
	optional uint32 timestamp_sent = 3;
}

message CMsgAccountGuildMemberships {
	repeated uint32 guild_ids = 1;
	repeated .CMsgAccountGuildInvite guild_invites = 2;
}

message CMsgGuildPersonaInfo {
	optional uint32 guild_id = 1;
	optional string guild_tag = 2;
	optional uint32 guild_flags = 3;
}

message CMsgAccountGuildsPersonaInfo {
	repeated .CMsgGuildPersonaInfo guild_persona_infos = 1;
}

message CMsgGuildFeedEvent {
	optional uint64 feed_event_id = 1;
	optional uint32 timestamp = 2;
	optional uint32 event_type = 3;
	optional uint32 param_uint_1 = 4;
	optional uint32 param_uint_2 = 5;
	optional uint32 param_uint_3 = 6;
}

message CMsgClientToGCCreateGuild {
	optional .CMsgGuildInfo guild_info = 1;
	optional .EGuildChatType guild_chat_type = 2 [default = k_EGuildChatType_Unspecified];
}

message CMsgClientToGCCreateGuildResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidName = 5;
		k_eNameAlreadyUsed = 6;
		k_eInvalidTag = 7;
		k_eTagAlreadyUsed = 8;
		k_eInvalidDescription = 9;
		k_eInvalidRegion = 10;
		k_eInvalidLogo = 11;
		k_eDoesNotOwnEvent = 12;
		k_eGuildLimit = 13;
		k_eInvalidMotD = 14;
		k_eBlocked = 15;
		k_eFreeTrialNotAllowed = 16;
	}

	optional .CMsgClientToGCCreateGuildResponse.EResponse result = 1 [default = k_eInternalError];
	optional uint32 guild_id = 2;
}

message CMsgClientToGCSetGuildInfo {
	optional uint32 guild_id = 1;
	optional .CMsgGuildInfo guild_info = 2;
	optional .EGuildChatType guild_chat_type = 3 [default = k_EGuildChatType_Unspecified];
}

message CMsgClientToGCSetGuildInfoResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNotMember = 6;
		k_eNoPermission = 7;
		k_eMotDTooLong = 8;
		k_eNameChangeNoPermissions = 9;
		k_eTagChangeNoPermissions = 10;
		k_eNameInvalid = 11;
		k_eTagInvalid = 12;
		k_eDescriptionInvalid = 13;
		k_eBlocked = 14;
	}

	optional .CMsgClientToGCSetGuildInfoResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCRequestGuildData {
	optional uint32 guild_id = 1;
}

message CMsgClientToGCRequestGuildDataResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNotMember = 6;
	}

	optional .CMsgClientToGCRequestGuildDataResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgGuildData guild_data = 2;
}

message CMsgGCToClientGuildDataUpdated {
	optional .CMsgGuildData guild_data = 1;
	optional uint32 update_flags = 2;
}

message CMsgGCToClientGuildMembersDataUpdated {
	optional uint32 guild_id = 1;
	repeated .CMsgGuildMember members_data = 2;
}

message CMsgClientToGCRequestGuildMembership {
}

message CMsgClientToGCRequestGuildMembershipResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
	}

	optional .CMsgClientToGCRequestGuildMembershipResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgAccountGuildMemberships guild_memberships = 2;
}

message CMsgGCToClientGuildMembershipUpdated {
	optional .CMsgAccountGuildMemberships guild_memberships = 1;
}

message CMsgClientToGCJoinGuild {
	optional uint32 guild_id = 1;
}

message CMsgClientToGCJoinGuildResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eGuildFull = 6;
		k_eAlreadyMember = 7;
		k_eGuildLimit = 8;
		k_eGuildRequiresInvite = 9;
		k_eGuildRankTooLow = 10;
	}

	optional .CMsgClientToGCJoinGuildResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCLeaveGuild {
	optional uint32 guild_id = 1;
}

message CMsgClientToGCLeaveGuildResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNotMember = 6;
		k_eLastAdmin = 7;
	}

	optional .CMsgClientToGCLeaveGuildResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCKickGuildMember {
	optional uint32 guild_id = 1;
	optional uint32 target_account_id = 2;
}

message CMsgClientToGCKickGuildMemberResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eRequesterNotMember = 6;
		k_eTargetNotMember = 7;
		k_eNoPermission = 8;
		k_eCantKickSelf = 9;
	}

	optional .CMsgClientToGCKickGuildMemberResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCSetGuildMemberRole {
	optional uint32 guild_id = 1;
	optional uint32 target_account_id = 2;
	optional uint32 target_role_id = 3;
}

message CMsgClientToGCSetGuildMemberRoleResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eRequesterNotMember = 6;
		k_eTargetNotMember = 7;
		k_eNoPermission = 8;
		k_eInvalidRole = 9;
		k_eAdminViolation = 10;
	}

	optional .CMsgClientToGCSetGuildMemberRoleResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCInviteToGuild {
	optional uint32 guild_id = 1;
	optional uint32 target_account_id = 2;
}

message CMsgClientToGCInviteToGuildResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eGuildFull = 6;
		k_eRequesterNotMember = 7;
		k_eAlreadyAMember = 8;
		k_eAlreadyInvited = 9;
		k_eNoInvitePermissions = 10;
		k_eTooManyInvites = 11;
		k_eInvalidUser = 12;
	}

	optional .CMsgClientToGCInviteToGuildResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCDeclineInviteToGuild {
	optional uint32 guild_id = 1;
}

message CMsgClientToGCDeclineInviteToGuildResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNoInviteFound = 6;
	}

	optional .CMsgClientToGCDeclineInviteToGuildResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCAcceptInviteToGuild {
	optional uint32 guild_id = 1;
}

message CMsgClientToGCAcceptInviteToGuildResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNoInviteFound = 6;
		k_eGuildFull = 7;
		k_eGuildLimit = 8;
		k_eInvalidInviter = 9;
		k_eAlreadyInGuild = 10;
	}

	optional .CMsgClientToGCAcceptInviteToGuildResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCCancelInviteToGuild {
	optional uint32 guild_id = 1;
	optional uint32 target_account_id = 2;
}

message CMsgClientToGCCancelInviteToGuildResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNoInviteFound = 6;
		k_eNoPermissions = 7;
	}

	optional .CMsgClientToGCCancelInviteToGuildResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCAddGuildRole {
	optional uint32 guild_id = 1;
	optional string role_name = 2;
	optional uint32 role_flags = 3;
}

message CMsgClientToGCAddGuildRoleResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNameAlreadyUsed = 6;
		k_eNoPermissions = 7;
		k_eInvalidFlags = 8;
		k_eInvalidName = 9;
		k_eAdminViolation = 10;
		k_eTooManyRoles = 11;
		k_eBlocked = 12;
	}

	optional .CMsgClientToGCAddGuildRoleResponse.EResponse result = 1 [default = k_eInternalError];
	optional uint32 role_id = 2;
}

message CMsgClientToGCModifyGuildRole {
	optional uint32 guild_id = 1;
	optional uint32 role_id = 2;
	optional string role_name = 3;
	optional uint32 role_flags = 4;
}

message CMsgClientToGCModifyGuildRoleResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eInvalidRole = 6;
		k_eNameAlreadyUsed = 7;
		k_eInvalidFlags = 8;
		k_eInvalidName = 9;
		k_eNoPermissions = 10;
		k_eAdminViolation = 11;
		k_eBlocked = 12;
	}

	optional .CMsgClientToGCModifyGuildRoleResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCRemoveGuildRole {
	optional uint32 guild_id = 1;
	optional uint32 role_id = 2;
}

message CMsgClientToGCRemoveGuildRoleResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eInvalidRole = 6;
		k_eRoleNotEmpty = 7;
		k_eNoPermissions = 8;
		k_eAdminViolation = 9;
		k_eCantRemoveDefaultRole = 10;
	}

	optional .CMsgClientToGCRemoveGuildRoleResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCSetGuildRoleOrder {
	optional uint32 guild_id = 1;
	repeated uint32 requested_role_ids = 2;
	repeated uint32 previous_role_ids = 3;
}

message CMsgClientToGCSetGuildRoleOrderResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eInvalidRole = 6;
		k_eInvalidOrder = 7;
		k_eNoPermissions = 8;
		k_eAdminViolation = 9;
	}

	optional .CMsgClientToGCSetGuildRoleOrderResponse.EResponse result = 1 [default = k_eInternalError];
	repeated uint32 confirmed_role_ids = 2;
}

message CMsgClientToGCGuildFeedRequest {
	optional uint32 guild_id = 1;
	optional uint64 last_seen_id = 2;
}

message CMsgClientToGCRequestGuildFeedResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNoPermissions = 6;
	}

	optional .CMsgClientToGCRequestGuildFeedResponse.EResponse result = 1 [default = k_eInternalError];
	optional uint32 guild_id = 2;
	repeated .CMsgGuildFeedEvent feed_events = 3;
}

message CMsgGCToClientGuildFeedUpdated {
	optional uint32 guild_id = 1;
}

message CMsgClientToGCAddPlayerToGuildChat {
	optional uint32 guild_id = 1;
}

message CMsgClientToGCAddPlayerToGuildChatResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidGuild = 5;
		k_eNotMember = 6;
		k_eSteamChatNotEnabled = 7;
	}

	optional .CMsgClientToGCAddPlayerToGuildChatResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgFindGuildByTagResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidTag = 5;
		k_eGuildNotFound = 6;
	}

	optional .CMsgFindGuildByTagResponse.EResponse result = 1 [default = k_eInternalError];
	optional uint32 guild_id = 2;
	optional .CMsgGuildSummary guild_summary = 3;
}

message CMsgSearchForOpenGuildsResponse {
	message SearchResult {
		optional uint32 guild_id = 1;
		optional .CMsgGuildSummary guild_summary = 2;
	}

	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
	}

	optional .CMsgSearchForOpenGuildsResponse.EResponse result = 1 [default = k_eInternalError];
	repeated .CMsgSearchForOpenGuildsResponse.SearchResult search_results = 2;
	optional bool use_whitelist = 3;
}

message CMsgClientToGCReportGuildContent {
	enum EContentFlags {
		k_eNone = 0;
		k_eInappropriateName = 1;
		k_eInappropriateTag = 2;
		k_eInappropriateLogo = 4;
		k_eValidFlags = 7;
	}

	optional uint32 guild_id = 1;
	optional uint32 guild_content_flags = 2;
}

message CMsgClientToGCReportGuildContentResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eGuildNotFound = 5;
		k_eFlagsInvalid = 6;
	}

	optional .CMsgClientToGCReportGuildContentResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCRequestAccountGuildPersonaInfo {
	optional uint32 account_id = 1;
}

message CMsgClientToGCRequestAccountGuildPersonaInfoResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidAccount = 5;
	}

	optional .CMsgClientToGCRequestAccountGuildPersonaInfoResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgAccountGuildsPersonaInfo persona_info = 2;
}

message CMsgClientToGCRequestAccountGuildPersonaInfoBatch {
	repeated uint32 account_ids = 1;
}

message CMsgClientToGCRequestAccountGuildPersonaInfoBatchResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidRequest = 5;
	}

	optional .CMsgClientToGCRequestAccountGuildPersonaInfoBatchResponse.EResponse result = 1 [default = k_eInternalError];
	repeated .CMsgAccountGuildsPersonaInfo persona_infos = 2;
}
