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:
coolbot
2026-03-06 17:58:28 -08:00
committed by GitHub
parent 20cbe1ad8f
commit 98175a58a6
33 changed files with 350 additions and 111 deletions

View File

@@ -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%.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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%

View File

@@ -0,0 +1,3 @@
Please confirm you have permission to distribute the following content as overrides:
%OVERRIDES%

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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%.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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({

View File

@@ -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) =>

View File

@@ -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',

View File

@@ -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',
],
},
],
}

View File

@@ -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,
},
],
}

View File

@@ -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,
],
}

View File

@@ -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."

View File

@@ -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'