Moderation improvements post server projects launch (#5485)
* identical links nag + use V3 more * updater status alerts * identity verification msg for servers * private use msg for server projects * fix newlines in some messages * Tweak + add description messages * tweak status alerts * flinks for summary messages * Rule 4 msgs for servers * account for some jank * fixes * Project Type placeholder * update locales * add button for rejecting pay to play servers * update country to region * add lowercase option for project type placeholders * update link of article to the published url * prepr --------- Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
## No English Description
|
||||
|
||||
Per section 2.2 of %RULES%, a server's [Summary](%PROJECT_SETTINGS_LINK%) and %PROJECT_DESCRIPTION_FLINK% must be in English, unless meant exclusively for a non-english audience.
|
||||
|
||||
You may include your non-English Description if you would like but we ask that you also add an English translation of the Description to your project page, if you would like to use an online translator to do this, we recommend [DeepL](https://www.deepl.com/translator).
|
||||
|
||||
Alternatively, if your server does not support English, please ensure the accuracy of your selected %PROJECT_LANGUAGE_SETTINGS_FLINK%.
|
||||
@@ -1,8 +0,0 @@
|
||||
## Insufficient Description
|
||||
|
||||
Per section 2.1 of %RULES%, your project's Description should clearly inform the reader of the content, purpose, and appeal of your project.
|
||||
|
||||
Currently, it looks like there are some missing details.
|
||||
|
||||
What does your modpack add? What features does it have? Why would a user want to download it? Be specific!
|
||||
See descriptions like [Simply Optimized](https://modrinth.com/modpack/sop) or [Aged](https://modrinth.com/modpack/aged) for examples of what a good description looks like.
|
||||
@@ -1,8 +0,0 @@
|
||||
## Insufficient Description
|
||||
|
||||
Per section 2.1 of %RULES%, your project's Description should clearly inform the reader of the content, purpose, and appeal of your project.
|
||||
|
||||
Currently, it looks like there are some missing details.
|
||||
|
||||
What does your project add? What features does it have? Why would a user want to download it? Be specific!
|
||||
See descriptions like [Sodium](https://modrinth.com/mod/sodium) or [LambDynamicLights](https://modrinth.com/mod/lambdynamiclights) for examples of what a good description looks like.
|
||||
@@ -0,0 +1,8 @@
|
||||
## Insufficient Description
|
||||
|
||||
Per section 2.1 of %RULES%, your project's %PROJECT_DESCRIPTION_FLINK% should clearly inform the reader of the content, purpose, and appeal of your project.
|
||||
|
||||
Currently, it looks like there are some missing details.
|
||||
|
||||
What does your modpack add? What features does it have? Why would a user want to download it?
|
||||
Check out descriptions like [What Is My FPS??](https://modrinth.com/modpack/WIMP) or [Aged](https://modrinth.com/modpack/aged) for inspiration when creating a quality and informative description.
|
||||
@@ -0,0 +1,8 @@
|
||||
## Insufficient Description
|
||||
|
||||
Per section 2.1 of %RULES%, your project's %PROJECT_DESCRIPTION_FLINK% should clearly inform the reader of the content, purpose, and appeal of your project.
|
||||
|
||||
Currently, it looks like there are some missing details.
|
||||
|
||||
What does your project add? What features does it have? Why would a user want to download it?
|
||||
Check out descriptions like [Sodium](https://modrinth.com/mod/sodium) or [The Aether](https://modrinth.com/mod/aether) for inspiration when creating a quality and informative description.
|
||||
@@ -0,0 +1,8 @@
|
||||
## Insufficient Description
|
||||
|
||||
Per section 2.1 of %RULES%, your server's %PROJECT_DESCRIPTION_FLINK% should clearly inform the reader of the content, purpose, and appeal of your server.
|
||||
|
||||
Currently, it looks like there are some missing details.
|
||||
|
||||
What is your server about? What features does it have? Why would a user want to join?
|
||||
Check out descriptions like [Flatnet](https://modrinth.com/server/flatnet) or [Cobblemon Islands](https://modrinth.com/server/cobblemon-islands-server) for inspiration when creating a quality and informative description.
|
||||
@@ -0,0 +1,5 @@
|
||||
## Unsupported Listing
|
||||
|
||||
Modrinth does not support the listing of servers that require players to pay for access or donate to be able to join.
|
||||
|
||||
We ask that you remove such restrictions from your server before resubmission, ensuring that all Modrinth users are able to enjoy your server as advertised for free.
|
||||
@@ -0,0 +1,11 @@
|
||||
## Forbidden Overrides
|
||||
|
||||
It looks like the custom modpack for your server is distributing content from outside of the Modrinth ecosystem, known as "Overrides."
|
||||
|
||||
Some of these overrides are forbidden from distribution on Modrinth.
|
||||
|
||||
We ask that you please remove the content listed below from your server's custom modpack before resubmission.
|
||||
|
||||
For all other content distributed as overrides, we ask that you verify you are abiding by all licensing requirements and have permission to distribute the content included in your modpack. By resubmitting your server while including this content, you acknowledge that you have seen this notice and have all necessary rights and permissions to upload your custom server pack to Modrinth.
|
||||
|
||||
%OVERRIDES%
|
||||
@@ -0,0 +1,3 @@
|
||||
Please confirm you have permission to distribute the following content as overrides:
|
||||
|
||||
%OVERRIDES%
|
||||
@@ -0,0 +1,9 @@
|
||||
## Permission Verification
|
||||
|
||||
It looks like the custom modpack for your server may be distributing content from outside of the Modrinth ecosystem.
|
||||
|
||||
Per section 4 of [Modrinth's Content Rules](https://modrinth.com/legal/rules), we ask that you verify you are abiding by all licensing requirements and have permission to distribute the content included in your modpack.
|
||||
|
||||
By resubmitting your server while including this content, you acknowledge that you have seen this notice and have all necessary rights and permissions to upload your custom server pack to Modrinth.
|
||||
|
||||
Keep in mind, if your server's custom modpack is found to be in violation of [Modrinth's Content Rules](https://modrinth.com/legal/rules), your listing may be temporarily or permanently removed from Modrinth with or without warning.
|
||||
@@ -1,5 +1,5 @@
|
||||
## Reuploads are forbidden
|
||||
|
||||
This server appears to have uploaded a Modpack by another creator.
|
||||
Per section 4 of %RULES%, we ask that you provide proof of your permission to distribute this pack on Modrinth.
|
||||
This server appears to have uploaded a Modpack by another creator.
|
||||
Per section 4 of %RULES%, we ask that you provide proof of your permission to distribute this pack on Modrinth.
|
||||
Either implicit permission abiding by the terms of the content's license(s) or explicit permission from the original creator of the pack.
|
||||
@@ -0,0 +1,10 @@
|
||||
## Identity Verification
|
||||
|
||||
**Welcome to Modrinth!**
|
||||
|
||||
We're happy to see you here and are looking forward to sharing your server with our users.
|
||||
First, we just want to make sure you have the necessary authority to create this listing.
|
||||
|
||||
To verify, please contact our support team `support@modrinth.com` from a known public contact associated with the ownership or management of this server, such as `%CONTACT%`.
|
||||
|
||||
If you would like to use an alternate known contact for verification, please let us know here in this moderation thread before contacting our support team, and ensure the method is something publicly known to be credibly linked to your server or its management, thank you.
|
||||
@@ -1,6 +1,8 @@
|
||||
## Identity Verification
|
||||
|
||||
**Welcome to Modrinth!** We're happy to see you here, we just want to make sure you're you.
|
||||
**Welcome to Modrinth!**
|
||||
|
||||
Since this project already exists on the internet we ask that you provide evidence you are the rightful owner of this content.
|
||||
We're happy to see you here, we just want to make sure you're you.
|
||||
|
||||
Since this project already exists on the internet we ask that you provide evidence you are the rightful owner of this content.
|
||||
For instance, by submitting a screenshot accessing the settings of the project's existing pages such as %PLATFORM%.
|
||||
@@ -0,0 +1,6 @@
|
||||
## Private Community
|
||||
|
||||
Under normal circumstances, your server would be rejected due to the issues listed below.
|
||||
However, since your server is intended for a private community, these requirements will be waived and your server project will be unlisted. This means it will remain accessible through a direct link without appearing in public search results, allowing you to share it privately.
|
||||
If you're okay with this, or submitted your server to be unlisted already, than no further action is necessary.
|
||||
If you would like public modrinth users to see and connect to your server, please address all moderation concerns before resubmitting.
|
||||
@@ -1,6 +1,6 @@
|
||||
## Private Use
|
||||
|
||||
Under normal circumstances, your project would be rejected due to the issues listed below.
|
||||
However, since your project is not intended for public use, these requirements will be waived and your project will be unlisted. This means it will remain accessible through a direct link without appearing in public search results, allowing you to share it privately.
|
||||
If you're okay with this, or submitted your project to be unlisted already, than no further action is necessary.
|
||||
Under normal circumstances, your project would be rejected due to the issues listed below.
|
||||
However, since your project is not intended for public use, these requirements will be waived and your project will be unlisted. This means it will remain accessible through a direct link without appearing in public search results, allowing you to share it privately.
|
||||
If you're okay with this, or submitted your project to be unlisted already, than no further action is necessary.
|
||||
If you would like to publish your project publicly, please address all moderation concerns before resubmitting this project.
|
||||
@@ -1,6 +1,6 @@
|
||||
## Invalid Summary Formatting
|
||||
|
||||
Per section 5.3 of %RULES%, your Summary can not include any extra formatting such as lists, or links.
|
||||
Per section 5.3 of %RULES%, your %PROJECT_SUMMARY_FLINK% can not include any extra formatting such as lists, or links.
|
||||
|
||||
Your project summary should provide a brief overview of your project that informs and entices users.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
## Insufficient Summary
|
||||
|
||||
Per section 5.3 of %RULES%, your project summary should provide a brief overview of your project that informs and entices users.
|
||||
Per section 5.3 of %RULES%, your project %PROJECT_SUMMARY_FLINK% should provide a brief overview of your project that informs and entices users.
|
||||
|
||||
This is the first thing most people will see about your mod other than the Logo, so it's important it be accurate, reasonably detailed, and exciting.
|
||||
This is the first thing most people will see about your %PROJECT_TYPE% other than the Logo, so it's important it be accurate, reasonably detailed, and exciting.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
## No English Summary
|
||||
|
||||
Per section 2.2 of %RULES%, a project's Summary and Description must be in English, unless meant exclusively for non-English use, such as translations.
|
||||
Per section 2.2 of %RULES%, a project's %PROJECT_SUMMARY_FLINK% and %PROJECT_DESCRIPTION_FLINK% must be in English, unless meant exclusively for non-English use, such as translations.
|
||||
|
||||
You may include your non-English Summary but we ask that you also add an English translation.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## Insufficient Summary
|
||||
|
||||
Currently, your summary includes your server's Address, this is redundant information that should instead be appropriately listed in your server's %PROJECT_SETTINGS_FLINK%.
|
||||
Currently, your %PROJECT_SUMMARY_FLINK% includes your server's Address, this is redundant information that should instead be appropriately listed in the %PROJECT_SERVER_SETTINGS_FLINK%.
|
||||
|
||||
Your server's summary should provide a brief overview of your server that informs and entices players.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## Insufficient Summary
|
||||
|
||||
Per section 5.3 of %RULES%, your Summary can not be the same as your project's Title.
|
||||
Per section 5.3 of %RULES%, your %PROJECT_SUMMARY_FLINK% can not be the same as your project's Title.
|
||||
|
||||
Your project summary should provide a brief overview of your project that informs and entices users.
|
||||
|
||||
|
||||
@@ -78,15 +78,12 @@ export const linksNags: Nag[] = [
|
||||
'Add any relevant links targeted outside of Modrinth, such as source code, an issue tracker, or a Discord invite.',
|
||||
}),
|
||||
status: 'suggestion',
|
||||
shouldShow: (context: NagContext) =>
|
||||
!context.projectV3?.minecraft_server &&
|
||||
!(
|
||||
context.project.issues_url ||
|
||||
context.project.source_url ||
|
||||
context.project.wiki_url ||
|
||||
context.project.discord_url ||
|
||||
context.project.donation_urls?.length
|
||||
),
|
||||
shouldShow: (context: NagContext) => {
|
||||
return (
|
||||
!context.projectV3?.minecraft_server &&
|
||||
Object.keys(context.projectV3?.link_urls ?? {}).length === 0
|
||||
)
|
||||
},
|
||||
link: {
|
||||
path: 'settings/links',
|
||||
title: defineMessage({
|
||||
@@ -109,11 +106,9 @@ export const linksNags: Nag[] = [
|
||||
}),
|
||||
status: 'suggestion',
|
||||
shouldShow: (context: NagContext) => {
|
||||
return !(
|
||||
context.projectV3?.link_urls?.site?.url ||
|
||||
context.projectV3?.link_urls?.store?.url ||
|
||||
context.projectV3?.link_urls?.discord?.url ||
|
||||
context.projectV3?.link_urls?.wiki?.url
|
||||
return (
|
||||
!!context.projectV3?.minecraft_server &&
|
||||
Object.keys(context.projectV3?.link_urls ?? {}).length === 0
|
||||
)
|
||||
},
|
||||
link: {
|
||||
@@ -125,6 +120,30 @@ export const linksNags: Nag[] = [
|
||||
shouldShow: (context: NagContext) => context.currentRoute !== 'type-id-settings-links',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'identical-links',
|
||||
title: defineMessage({
|
||||
id: 'nags.identical-links.title',
|
||||
defaultMessage: 'Identical Links',
|
||||
}),
|
||||
description: defineMessage({
|
||||
id: 'nags.identical-links.description',
|
||||
defaultMessage:
|
||||
'Some of your external links appear to be identical. Each link should be entered only once and with the appropriate link type.',
|
||||
}),
|
||||
status: 'required',
|
||||
shouldShow: (context: NagContext) =>
|
||||
new Set(Object.values(context.projectV3?.link_urls ?? {}).map((link) => link.url)).size !==
|
||||
Object.values(context.projectV3?.link_urls ?? {}).map((link) => link.url).length,
|
||||
link: {
|
||||
path: 'settings/links',
|
||||
title: defineMessage({
|
||||
id: 'nags.settings.links.title',
|
||||
defaultMessage: 'Visit links settings',
|
||||
}),
|
||||
shouldShow: (context: NagContext) => context.currentRoute !== 'type-id-settings-links',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'verify-external-links',
|
||||
title: defineMessage({
|
||||
|
||||
@@ -6,11 +6,11 @@ export const serverProjectsNags: Nag[] = [
|
||||
id: 'select-country',
|
||||
title: defineMessage({
|
||||
id: 'nags.select-country.title',
|
||||
defaultMessage: 'Select a country',
|
||||
defaultMessage: 'Select a region',
|
||||
}),
|
||||
description: defineMessage({
|
||||
id: 'nags.select-country.description',
|
||||
defaultMessage: 'Let players know what country your server is located in.',
|
||||
defaultMessage: 'Let players know what region your server is located in.',
|
||||
}),
|
||||
status: 'required',
|
||||
shouldShow: (context: NagContext) =>
|
||||
|
||||
@@ -17,7 +17,8 @@ const description: Stage = {
|
||||
weight: 400,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
message: async () => (await import('../messages/description/insufficient.md?raw')).default,
|
||||
message: async () =>
|
||||
(await import('../messages/description/insufficient/insufficient.md?raw')).default,
|
||||
relevantExtraInput: [
|
||||
{
|
||||
label: 'Please elaborate on how the author can improve their description.',
|
||||
@@ -26,6 +27,11 @@ const description: Stage = {
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
disablesActions: [
|
||||
'description_insufficient_packs',
|
||||
'description_insufficient_projects',
|
||||
'description_insufficient_servers',
|
||||
],
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_insufficient_packs',
|
||||
@@ -34,9 +40,11 @@ const description: Stage = {
|
||||
weight: 401,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
shouldShow: (project) => project.project_type === 'modpack',
|
||||
shouldShow: (project, projectV3) =>
|
||||
project.project_type === 'modpack' && !projectV3?.minecraft_server,
|
||||
message: async () =>
|
||||
(await import('../messages/description/insufficient-packs.md?raw')).default,
|
||||
(await import('../messages/description/insufficient/insufficient-packs.md?raw')).default,
|
||||
disablesActions: ['description_insufficient'],
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_insufficient_projects',
|
||||
@@ -45,9 +53,23 @@ const description: Stage = {
|
||||
weight: 401,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
shouldShow: (project) => project.project_type !== 'modpack',
|
||||
shouldShow: (project, projectV3) =>
|
||||
project.project_type !== 'modpack' && !projectV3?.minecraft_server,
|
||||
message: async () =>
|
||||
(await import('../messages/description/insufficient-projects.md?raw')).default,
|
||||
(await import('../messages/description/insufficient/insufficient-projects.md?raw')).default,
|
||||
disablesActions: ['description_insufficient'],
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_insufficient_servers',
|
||||
type: 'button',
|
||||
label: 'Insufficient',
|
||||
weight: 401,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
shouldShow: (project, projectV3) => !!projectV3?.minecraft_java_server,
|
||||
message: async () =>
|
||||
(await import('../messages/description/insufficient/insufficient-servers.md?raw')).default,
|
||||
disablesActions: ['description_insufficient'],
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_non_english',
|
||||
@@ -56,7 +78,23 @@ const description: Stage = {
|
||||
weight: 402,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
message: async () => (await import('../messages/description/non-english.md?raw')).default,
|
||||
shouldShow: (project, projectV3) => !projectV3?.minecraft_java_server,
|
||||
message: async () =>
|
||||
(await import('../messages/description/accessability/non-english/non-english.md?raw'))
|
||||
.default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_non_english-server',
|
||||
type: 'button',
|
||||
label: 'Non-english',
|
||||
weight: 402,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
shouldShow: (project, projectV3) => !!projectV3?.minecraft_java_server,
|
||||
message: async () =>
|
||||
(
|
||||
await import('../messages/description/accessability/non-english/non-english-server.md?raw')
|
||||
).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_unfinished',
|
||||
@@ -74,7 +112,8 @@ const description: Stage = {
|
||||
weight: 404,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'low',
|
||||
message: async () => (await import('../messages/description/headers-as-body.md?raw')).default,
|
||||
message: async () =>
|
||||
(await import('../messages/description/accessability/headers-as-body.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_image_only',
|
||||
@@ -83,7 +122,8 @@ const description: Stage = {
|
||||
weight: 405,
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
message: async () => (await import('../messages/description/image-only.md?raw')).default,
|
||||
message: async () =>
|
||||
(await import('../messages/description/accessability/image-only.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_non_standard_text',
|
||||
@@ -93,7 +133,7 @@ const description: Stage = {
|
||||
suggestedStatus: 'flagged',
|
||||
severity: 'medium',
|
||||
message: async () =>
|
||||
(await import('../messages/description/non-standard-text.md?raw')).default,
|
||||
(await import('../messages/description/accessability/non-standard-text.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'description_clarity',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { CopyrightIcon } from '@modrinth/assets'
|
||||
|
||||
import type { ButtonAction } from '../../types/actions'
|
||||
import type { ButtonAction, ToggleAction } from '../../types/actions'
|
||||
import type { Stage } from '../../types/stage'
|
||||
|
||||
const reupload: Stage = {
|
||||
@@ -24,6 +24,7 @@ const reupload: Stage = {
|
||||
'reupload_request_proof',
|
||||
'reupload_identity_verification',
|
||||
'reupload_request_proof_server',
|
||||
'reupload_identity_verification_server',
|
||||
],
|
||||
relevantExtraInput: [
|
||||
{
|
||||
@@ -55,6 +56,7 @@ const reupload: Stage = {
|
||||
'reupload_request_proof',
|
||||
'reupload_identity_verification',
|
||||
'reupload_request_proof_server',
|
||||
'reupload_identity_verification_server',
|
||||
],
|
||||
} as ButtonAction,
|
||||
{
|
||||
@@ -72,6 +74,7 @@ const reupload: Stage = {
|
||||
'reupload_request_proof',
|
||||
'reupload_identity_verification',
|
||||
'reupload_request_proof_server',
|
||||
'reupload_identity_verification_server',
|
||||
],
|
||||
} as ButtonAction,
|
||||
{
|
||||
@@ -89,6 +92,7 @@ const reupload: Stage = {
|
||||
'reupload_insufficient_fork',
|
||||
'reupload_identity_verification',
|
||||
'reupload_request_proof_server',
|
||||
'reupload_identity_verification_server',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -100,7 +104,8 @@ const reupload: Stage = {
|
||||
severity: 'high',
|
||||
shouldShow: (project, projectV3) => !projectV3?.minecraft_server,
|
||||
message: async () =>
|
||||
(await import('../messages/reupload/identity_verification.md?raw')).default,
|
||||
(await import('../messages/reupload/identity-verification/identity_verification.md?raw'))
|
||||
.default,
|
||||
relevantExtraInput: [
|
||||
{
|
||||
label: 'Where else can the project be found?',
|
||||
@@ -115,10 +120,36 @@ const reupload: Stage = {
|
||||
'reupload_request_proof_server',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'reupload_identity_verification_server',
|
||||
type: 'button',
|
||||
label: 'Verify Identity',
|
||||
weight: 1100,
|
||||
suggestedStatus: 'rejected',
|
||||
severity: 'high',
|
||||
shouldShow: (project, projectV3) => !!projectV3?.minecraft_server,
|
||||
message: async () =>
|
||||
(
|
||||
await import('../messages/reupload/identity-verification/identity_verification-server.md?raw')
|
||||
).default,
|
||||
relevantExtraInput: [
|
||||
{
|
||||
label: 'known public contact method',
|
||||
variable: 'CONTACT',
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
disablesActions: [
|
||||
'reupload_reupload',
|
||||
'reupload_insufficient_fork',
|
||||
'reupload_request_proof',
|
||||
'reupload_request_proof_server',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'reupload_request_proof_server',
|
||||
type: 'button',
|
||||
label: 'Custom modpack permissions',
|
||||
label: 'Reuploaded pack',
|
||||
weight: 1100,
|
||||
suggestedStatus: 'rejected',
|
||||
severity: 'high',
|
||||
@@ -126,7 +157,9 @@ const reupload: Stage = {
|
||||
!!projectV3?.minecraft_server &&
|
||||
projectV3?.minecraft_java_server?.content?.kind === 'modpack' &&
|
||||
projectV3?.minecraft_java_server?.content?.['project_id'] === project.id,
|
||||
message: async () => (await import('../messages/reupload/custom_server.md?raw')).default,
|
||||
message: async () =>
|
||||
(await import('../messages/reupload/custom_server/custom_server_permissions.md?raw'))
|
||||
.default,
|
||||
disablesActions: [
|
||||
'reupload_reupload',
|
||||
'reupload_unclear_fork',
|
||||
@@ -135,6 +168,83 @@ const reupload: Stage = {
|
||||
'reupload_request_proof',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'reupload_custom_pack_verification',
|
||||
type: 'button',
|
||||
label: 'Override verification',
|
||||
weight: 1100,
|
||||
suggestedStatus: 'rejected',
|
||||
severity: 'high',
|
||||
shouldShow: (project, projectV3) =>
|
||||
!!projectV3?.minecraft_server &&
|
||||
projectV3?.minecraft_java_server?.content?.kind === 'modpack' &&
|
||||
projectV3?.minecraft_java_server?.content?.['project_id'] === project.id,
|
||||
message: async () =>
|
||||
(
|
||||
await import('../messages/reupload/custom_server/custom_server_overrides-verification.md?raw')
|
||||
).default,
|
||||
enablesActions: [
|
||||
{
|
||||
id: 'reupload_custom_pack_verification-list',
|
||||
type: 'toggle',
|
||||
label: 'List overrides?',
|
||||
weight: 1101,
|
||||
message: async () =>
|
||||
(
|
||||
await import('../messages/reupload/custom_server/custom_server_overrides-verification-list.md?raw')
|
||||
).default,
|
||||
relevantExtraInput: [
|
||||
{
|
||||
label: 'Add list of overrides.',
|
||||
variable: 'OVERRIDES',
|
||||
large: true,
|
||||
required: false,
|
||||
},
|
||||
],
|
||||
} as ToggleAction,
|
||||
],
|
||||
|
||||
disablesActions: [
|
||||
'reupload_reupload',
|
||||
'reupload_unclear_fork',
|
||||
'reupload_insufficient_fork',
|
||||
'reupload_identity_verification',
|
||||
'reupload_request_proof',
|
||||
'reupload_custom_pack_prohibited',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'reupload_custom_pack_prohibited',
|
||||
type: 'button',
|
||||
label: 'Forbidden Overrides',
|
||||
weight: 1100,
|
||||
suggestedStatus: 'rejected',
|
||||
severity: 'high',
|
||||
shouldShow: (project, projectV3) =>
|
||||
!!projectV3?.minecraft_server &&
|
||||
projectV3?.minecraft_java_server?.content?.kind === 'modpack' &&
|
||||
projectV3?.minecraft_java_server?.content?.['project_id'] === project.id,
|
||||
message: async () =>
|
||||
(
|
||||
await import('../messages/reupload/custom_server/custom_server_overrides-prohibited.md?raw')
|
||||
).default,
|
||||
relevantExtraInput: [
|
||||
{
|
||||
label: 'Add list of overrides.',
|
||||
variable: 'OVERRIDES',
|
||||
large: true,
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
disablesActions: [
|
||||
'reupload_reupload',
|
||||
'reupload_unclear_fork',
|
||||
'reupload_insufficient_fork',
|
||||
'reupload_identity_verification',
|
||||
'reupload_request_proof',
|
||||
'reupload_custom_pack_verification',
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,15 @@ const ruleFollowing: Stage = {
|
||||
},
|
||||
],
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'paid_access_server',
|
||||
type: 'button',
|
||||
label: 'Paid access server',
|
||||
weight: 0,
|
||||
suggestedStatus: 'rejected',
|
||||
severity: 'critical',
|
||||
message: async () => (await import('../messages/paid-access-server.md?raw')).default,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { TriangleAlertIcon } from '@modrinth/assets'
|
||||
|
||||
import type { ButtonAction, DropdownAction, DropdownActionOption } from '../../types/actions'
|
||||
import type { ButtonAction } from '../../types/actions'
|
||||
import type { Stage } from '../../types/stage'
|
||||
|
||||
const statusAlerts: Stage = {
|
||||
@@ -41,16 +41,27 @@ const statusAlerts: Stage = {
|
||||
suggestedStatus: 'flagged',
|
||||
disablesActions: ['status_corrections_applied', 'status_account_issues'],
|
||||
shouldShow: (project, projectV3) => !projectV3?.minecraft_server,
|
||||
message: async () => (await import('../messages/status-alerts/private.md?raw')).default,
|
||||
message: async () =>
|
||||
(await import('../messages/status-alerts/private/private.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'status_private_use-server',
|
||||
type: 'button',
|
||||
label: 'Private community',
|
||||
weight: -999999,
|
||||
suggestedStatus: 'flagged',
|
||||
disablesActions: ['status_corrections_applied', 'status_account_issues'],
|
||||
shouldShow: (project, projectV3) => !!projectV3?.minecraft_server,
|
||||
message: async () =>
|
||||
(await import('../messages/status-alerts/private/private-server.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'status_server_use',
|
||||
type: 'button',
|
||||
label: 'Server use',
|
||||
weight: -999999,
|
||||
suggestedStatus: 'flagged',
|
||||
disablesActions: ['status_corrections_applied', 'status_account_issues'],
|
||||
shouldShow: (project) => project.project_type === 'modpack',
|
||||
shouldShow: (project, projectV3) =>
|
||||
project.project_type === 'modpack' && !projectV3?.minecraft_server,
|
||||
message: async () => (await import('../messages/status-alerts/serverpack.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
@@ -63,57 +74,15 @@ const statusAlerts: Stage = {
|
||||
message: async () =>
|
||||
(await import('../messages/status-alerts/account_issues.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'status_tec_source_request',
|
||||
type: 'button',
|
||||
label: `Request Source`,
|
||||
suggestedStatus: 'rejected',
|
||||
severity: 'critical',
|
||||
disablesActions: ['status_corrections_applied', 'status_private_use'],
|
||||
shouldShow: (project) =>
|
||||
project.project_type === 'mod' ||
|
||||
project.project_type === 'shader' ||
|
||||
project.project_type.toString() === 'plugin',
|
||||
weight: -999999,
|
||||
message: async () => '',
|
||||
enablesActions: [
|
||||
{
|
||||
id: 'status_tec_source_request_options',
|
||||
type: 'dropdown',
|
||||
label: 'Why are you requesting source?',
|
||||
options: [
|
||||
{
|
||||
label: 'Obfuscated',
|
||||
weight: 999999,
|
||||
message: async () =>
|
||||
(await import('../messages/status-alerts/tec/source_request-obfs.md?raw')).default,
|
||||
} as DropdownActionOption,
|
||||
{
|
||||
label: 'Binaries',
|
||||
weight: 999000,
|
||||
message: async () =>
|
||||
(await import('../messages/status-alerts/tec/source_request-bins.md?raw')).default,
|
||||
} as DropdownActionOption,
|
||||
],
|
||||
} as DropdownAction,
|
||||
],
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'status_automod_confusion',
|
||||
type: 'button',
|
||||
label: `Automod confusion`,
|
||||
weight: -999999,
|
||||
shouldShow: (project, projectV3) => !projectV3?.minecraft_server,
|
||||
message: async () =>
|
||||
(await import('../messages/status-alerts/automod_confusion.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
{
|
||||
id: 'status_serverpack',
|
||||
type: 'button',
|
||||
label: `Serverpack`,
|
||||
weight: -999999,
|
||||
shouldShow: (project) => project.project_type === 'modpack',
|
||||
message: async () => (await import('../messages/status-alerts/serverpack.md?raw')).default,
|
||||
} as ButtonAction,
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,12 @@
|
||||
"nags.gpl-license-source-required.title": {
|
||||
"defaultMessage": "Provide source code"
|
||||
},
|
||||
"nags.identical-links.description": {
|
||||
"defaultMessage": "Some of your external links appear to be identical. Each link should be entered only once and with the appropriate link type."
|
||||
},
|
||||
"nags.identical-links.title": {
|
||||
"defaultMessage": "Identical Links"
|
||||
},
|
||||
"nags.image-heavy-description.description": {
|
||||
"defaultMessage": "Your Description should contain sufficient plain text or image alt-text, keeping it accessible to those using screen readers or with slow internet connections."
|
||||
},
|
||||
@@ -141,10 +147,10 @@
|
||||
"defaultMessage": "Select compatibility"
|
||||
},
|
||||
"nags.select-country.description": {
|
||||
"defaultMessage": "Let players know what country your server is located in."
|
||||
"defaultMessage": "Let players know what region your server is located in."
|
||||
},
|
||||
"nags.select-country.title": {
|
||||
"defaultMessage": "Select a country"
|
||||
"defaultMessage": "Select a region"
|
||||
},
|
||||
"nags.select-language.description": {
|
||||
"defaultMessage": "List the language or languages supported by your server."
|
||||
|
||||
@@ -237,6 +237,19 @@ export function arrayOrNone(arr: string[]): string {
|
||||
return arr.length > 0 ? arr.join(', ') : 'None'
|
||||
}
|
||||
|
||||
export function formatProjectTypes(type: string, lower: boolean = false) {
|
||||
let value = type
|
||||
.replaceAll('mod', 'Mod')
|
||||
.replaceAll('resourcepack', 'Resource Pack')
|
||||
.replaceAll('datapack', 'Data Pack')
|
||||
.replaceAll('plugin', 'Plugin')
|
||||
.replaceAll('shader', 'Shaders')
|
||||
.replaceAll('minecraft_java_server', 'Server')
|
||||
.replaceAll('minecraft_server', 'Server')
|
||||
if (lower) value = value.toLowerCase()
|
||||
return value
|
||||
}
|
||||
|
||||
export function flattenStaticVariables(): Record<string, string> {
|
||||
const vars: Record<string, string> = {}
|
||||
|
||||
@@ -255,7 +268,7 @@ export function flattenStaticVariables(): Record<string, string> {
|
||||
`our guide to [Licensing your Mods](https://modrinth.com/news/article/licensing-guide)`
|
||||
vars[`NEW_ENVIRONMENTS_LINK`] = `https://modrinth.com/news/article/new-environments`
|
||||
vars[`LEARN_MORE_ABOUT_SERVERS_FLINK`] =
|
||||
`[learn more about server projects from our news feed](https://modrinth.com/news/)`
|
||||
`[learn more about server projects from our news feed](https://modrinth.com/news/article/introducing-server-projects/)`
|
||||
|
||||
return vars
|
||||
}
|
||||
@@ -334,9 +347,8 @@ export function flattenProjectVariables(
|
||||
vars[`PROJECT_TITLE_FLINK`] = `[Name](https://modrinth.com/project/${project.id}/settings)`
|
||||
vars[`PROJECT_SLUG_FLINK`] = `[URL](https://modrinth.com/project/${project.id}/settings)`
|
||||
vars[`PROJECT_SUMMARY_FLINK`] = `[Summary](https://modrinth.com/project/${project.id}/settings)`
|
||||
// Depreciated
|
||||
vars[`PROJECT_ENVIRONMENT_FLINK`] =
|
||||
`[Environment Information](https://modrinth.com/project/${project.id}/settings/environment)`
|
||||
`[Environment Information](https://modrinth.com/project/${project.id}/settings/environment)` // Depreciated
|
||||
vars[`PROJECT_TAGS_LINK`] = `https://modrinth.com/project/${project.id}/settings/tags`
|
||||
vars[`PROJECT_TAGS_FLINK`] = `[Tags](https://modrinth.com/project/${project.id}/settings/tags)`
|
||||
vars[`PROJECT_DESCRIPTION_LINK`] =
|
||||
@@ -358,6 +370,12 @@ export function flattenProjectVariables(
|
||||
vars[`PROJECT_MODERATION_LINK`] = `https://modrinth.com/project/${project.id}/moderation`
|
||||
vars[`PROJECT_MODERATION_FLINK`] =
|
||||
`[moderation tab](https://modrinth.com/project/${project.id}/moderation)`
|
||||
vars[`PROJECT_SERVER_SETTINGS`] = `https://modrinth.com/project/${project.id}/settings/server`
|
||||
vars[`PROJECT_SERVER_SETTINGS_FLINK`] =
|
||||
`[Server Settings](https://modrinth.com/project/${project.id}/settings/server)`
|
||||
vars[`PROJECT_LANGUAGE_SETTINGS`] = `https://modrinth.com/project/${project.id}/settings/server`
|
||||
vars[`PROJECT_LANGUAGE_SETTINGS_FLINK`] =
|
||||
`[Language Settings](https://modrinth.com/project/${project.id}/settings/server)`
|
||||
|
||||
return vars
|
||||
}
|
||||
@@ -377,6 +395,13 @@ export function flattenProjectV3Variables(
|
||||
|
||||
vars['PROJECT_V3_REVIEW_STATUS'] = projectV3.side_types_migration_review_status
|
||||
vars['PROJECT_V3_TYPES'] = projectV3.project_types.join(', ')
|
||||
vars['PROJECT_TYPE_FORMATTED'] = formatProjectTypes(projectV3.project_types[0])
|
||||
vars['PROJECT_TYPE_FORMATTED_LOWER'] = formatProjectTypes(projectV3.project_types[0], true)
|
||||
vars['PROJECT_TYPES_FORMATTED'] = formatProjectTypes(projectV3.project_types.join(' / '))
|
||||
vars['PROJECT_TYPES_FORMATTED_LOWER'] = formatProjectTypes(
|
||||
projectV3.project_types.join(' / '),
|
||||
true,
|
||||
)
|
||||
|
||||
vars['PROJECT_SITE_URL'] = projectV3.link_urls?.site?.url || 'None'
|
||||
vars['PROJECT_STORE_URL'] = projectV3.link_urls?.store?.url || 'None'
|
||||
|
||||
Reference in New Issue
Block a user