diff --git a/instrumentation.ts b/instrumentation.ts index ff193d2bfe..e9b461b0e3 100644 --- a/instrumentation.ts +++ b/instrumentation.ts @@ -7,5 +7,6 @@ export async function register() { version: packageJson.version, env: process.env.DD_ENV, }) + tracer.use('next') } } diff --git a/pages/addbot.tsx b/pages/addbot.tsx index beb642df95..4e2cc72f43 100644 --- a/pages/addbot.tsx +++ b/pages/addbot.tsx @@ -367,20 +367,30 @@ const AddBot: NextPage = ({ logged, user, csrfToken, theme }) => { } > ({ - label: v.label, - value: k, - }))} - handleChange={(value) => { - setFieldValue( - 'enforcements', - value.map((v) => v.value) - ) + options={Object.entries(botEnforcements) + .filter(([k]) => k === 'NONE' || !values.enforcements.includes('NONE')) + .map(([k, v]) => ({ + label: v.label, + value: k, + }))} + handleChange={(values) => { + if (values.some((i) => i.value === 'NONE')) { + setFieldValue('enforcements', ['NONE']) + } else { + setFieldValue( + 'enforcements', + values.map((v) => v.value) + ) + } }} handleTouch={() => setFieldTouched('enforcements', true)} values={values.enforcements ?? ([] as string[])} - setValues={(value) => { - setFieldValue('enforcements', value) + setValues={(values) => { + if (values.includes('NONE')) { + setFieldValue('enforcements', ['NONE']) + } else { + setFieldValue('enforcements', values) + } }} /> diff --git a/pages/bots/[id]/edit.tsx b/pages/bots/[id]/edit.tsx index 4dbf03bc04..5dddab5a84 100644 --- a/pages/bots/[id]/edit.tsx +++ b/pages/bots/[id]/edit.tsx @@ -339,20 +339,30 @@ const ManageBotPage: NextPage = ({ bot, user, csrfToken, theme } } > ({ - label: v.label, - value: k, - }))} - handleChange={(value) => { - setFieldValue( - 'enforcements', - value.map((v) => v.value) - ) + options={Object.entries(botEnforcements) + .filter(([k]) => k === 'NONE' || !values.enforcements.includes('NONE')) + .map(([k, v]) => ({ + label: v.label, + value: k, + }))} + handleChange={(values) => { + if (values.some((i) => i.value === 'NONE')) { + setFieldValue('enforcements', ['NONE']) + } else { + setFieldValue( + 'enforcements', + values.map((v) => v.value) + ) + } }} handleTouch={() => setFieldTouched('enforcements', true)} values={values.enforcements ?? ([] as string[])} - setValues={(value) => { - setFieldValue('enforcements', value) + setValues={(values) => { + if (values.includes('NONE')) { + setFieldValue('enforcements', ['NONE']) + } else { + setFieldValue('enforcements', values) + } }} /> diff --git a/pages/bots/[id]/index.tsx b/pages/bots/[id]/index.tsx index b342930a08..5450d02d2d 100644 --- a/pages/bots/[id]/index.tsx +++ b/pages/bots/[id]/index.tsx @@ -116,13 +116,15 @@ const Bots: NextPage = ({ data, desc, date, user, theme, csrfToken }) 로 문의해주세요.

- ) : data.enforcements.length > 0 ? ( + ) : data.enforcements.filter((i) => i !== 'NONE').length > 0 ? (

이 봇은 기능에 제한을 두고 있습니다.

- {data.enforcements.map((i) => ( -

  • {botEnforcements[i].description}
  • - ))} + {data.enforcements + .filter((i) => i !== 'NONE') + .map((i) => ( +
  • {botEnforcements[i].description}
  • + ))}

    ) : ( diff --git a/utils/Constants.ts b/utils/Constants.ts index fbda29880b..18d7209bf2 100644 --- a/utils/Constants.ts +++ b/utils/Constants.ts @@ -121,13 +121,17 @@ export const botCategoryDescription = { } export const botEnforcements = { + NONE: { + label: '해당사항이 없습니다.', + description: '', + }, JOIN_PARTIALLY_ENFORCED: { - label: '서버 참여가 필요한 기능이 있습니다', - description: '봇의 일부 명령어는 봇의 디스코드 서버에 참여해야 사용할 수 있습니다.', + label: '지정된 서버에 참여해야만 사용이 가능한 기능이 있습니다', + description: '봇의 일부 명령어는 봇이 지정한 특정 디스코드 서버에 참여해야 사용할 수 있습니다.', }, JOIN_ENFORCED: { - label: '서버 참여 없이는 봇의 핵심 기능을 사용할 수 없습니다', - description: '봇의 핵심 기능은 봇의 디스코드 서버에 참여해야 사용할 수 있습니다.', + label: '지정된 서버에 참여하지 않으면 봇의 핵심 기능을 사용할 수 없습니다', + description: '봇의 핵심 기능은 봇이 지정한 특정 디스코드 서버에 참여해야 사용할 수 있습니다.', }, LICENSE_PARTIALLY_ENFORCED: { label: '유료 구매가 필요한 기능이 있습니다', diff --git a/utils/Yup.ts b/utils/Yup.ts index 7f73e87cff..b1ede4197b 100644 --- a/utils/Yup.ts +++ b/utils/Yup.ts @@ -175,7 +175,10 @@ export const AddBotSubmitSchema: Yup.SchemaOf = Yup.object({ .min(100, '봇 설명은 최소 100자여야합니다.') .max(1500, '봇 설명은 최대 1500자여야합니다.') .required('봇 설명은 필수 항목입니다.'), - enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))), + enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))) + .min(1, '최소 한 개의 선택지를 선택해주세요.') + .unique('선택지는 중복될 수 없습니다.') + .required('강제사항 명시는 필수 선택사항입니다.'), _csrf: Yup.string().required(), _captcha: Yup.string().required(), }) @@ -306,7 +309,10 @@ export function getManageBotSchema(perkAvailable = false) { .min(100, '봇 설명은 최소 100자여야합니다.') .max(1500, '봇 설명은 최대 1500자여야합니다.') .required('봇 설명은 필수 항목입니다.'), - enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))), + enforcements: Yup.array(Yup.string().oneOf(Object.keys(botEnforcements))) + .min(1, '최소 한 개의 선택지를 선택해주세요.') + .unique('선택지는 중복될 수 없습니다.') + .required('강제사항 명시는 필수 선택사항입니다.'), _csrf: Yup.string().required(), }