diff --git a/packages/moderation/data/messages/checklist-text/title-slug/slug.md b/packages/moderation/data/messages/checklist-text/title-slug/slug.md new file mode 100644 index 000000000..52e2fa281 --- /dev/null +++ b/packages/moderation/data/messages/checklist-text/title-slug/slug.md @@ -0,0 +1,3 @@ +**Slug:** `%PROJECT_SLUG%`
+ +**Title issues?** diff --git a/packages/moderation/data/messages/checklist-text/title-slug/title.md b/packages/moderation/data/messages/checklist-text/title-slug/title.md new file mode 100644 index 000000000..650eba3ba --- /dev/null +++ b/packages/moderation/data/messages/checklist-text/title-slug/title.md @@ -0,0 +1 @@ +**Title:** %PROJECT_TITLE%
\ No newline at end of file diff --git a/packages/moderation/data/stages/title-slug.ts b/packages/moderation/data/stages/title-slug.ts index 4fe699a69..55d32a62c 100644 --- a/packages/moderation/data/stages/title-slug.ts +++ b/packages/moderation/data/stages/title-slug.ts @@ -1,10 +1,28 @@ import { BookOpenIcon } from '@modrinth/assets' import type { Stage } from '../../types/stage' +import type { Project } from '@modrinth/utils' + +function hasCustomSlug(project: Project): boolean { + return ( + project.slug !== + project.title + .trim() + .toLowerCase() + .replaceAll(' ', '-') + .replaceAll(/[^a-zA-Z0-9!@$()`.+,_"-]/g, '') + .replaceAll(/--+/gm, '-') + ) +} const titleSlug: Stage = { title: 'Are the Name and URL accurate and appropriate?', id: 'title-&-slug', - text: async () => (await import('../messages/checklist-text/title-slug.md?raw')).default, + text: async (project) => { + let text = (await import('../messages/checklist-text/title-slug/title.md?raw')).default + if (hasCustomSlug(project)) + text += (await import('../messages/checklist-text/title-slug/slug.md?raw')).default + return text + }, icon: BookOpenIcon, guidance_url: 'https://modrinth.com/legal/rules#miscellaneous', actions: [ @@ -63,6 +81,7 @@ const titleSlug: Stage = { label: 'Slug issues?', suggestedStatus: 'rejected', severity: 'low', + shouldShow: (project) => hasCustomSlug(project), options: [ { label: 'Misused',