diff --git a/backend/src/services/youtube/index.js b/backend/src/services/youtube/index.js index a7d1c80..489cda7 100644 --- a/backend/src/services/youtube/index.js +++ b/backend/src/services/youtube/index.js @@ -110,6 +110,15 @@ async function youtubeBotPlugin(fastify) { [newScheduleId, null, 'video', bot.channelId, bot.channelName] ); + // 옵션: 예정 일정에 고정 멤버 포함 + if (autoScheduleNext.includeDefaultMembers && bot.defaultMemberIds?.length > 0) { + const values = [...new Set(bot.defaultMemberIds)].map(id => [newScheduleId, id]); + await conn.query( + 'INSERT INTO schedule_members (schedule_id, member_id) VALUES ?', + [values] + ); + } + return newScheduleId; }); diff --git a/frontend/src/components/pc/admin/bot/YouTubeBotDialog.jsx b/frontend/src/components/pc/admin/bot/YouTubeBotDialog.jsx index be3e7f3..9b13463 100644 --- a/frontend/src/components/pc/admin/bot/YouTubeBotDialog.jsx +++ b/frontend/src/components/pc/admin/bot/YouTubeBotDialog.jsx @@ -293,6 +293,7 @@ function YouTubeBotDialog({ isOpen, onClose, botId = null, onSuccess }) { const [scheduleTime, setScheduleTime] = useState('18:00'); const [titleTemplate, setTitleTemplate] = useState('{channelName} {episode}화'); const [deadlineDayOfWeek, setDeadlineDayOfWeek] = useState(5); + const [includeDefaultMembers, setIncludeDefaultMembers] = useState(false); // 고급 설정 const [showAdvanced, setShowAdvanced] = useState(false); @@ -371,12 +372,14 @@ function YouTubeBotDialog({ isOpen, onClose, botId = null, onSuccess }) { setScheduleTime(config.time?.slice(0, 5) || '18:00'); setTitleTemplate(config.titleTemplate || '{channelName} {episode}화'); setDeadlineDayOfWeek(config.deadlineDayOfWeek ?? 5); + setIncludeDefaultMembers(config.includeDefaultMembers ?? false); } else { setAutoScheduleEnabled(false); setScheduleDayOfWeek(4); setScheduleTime('18:00'); setTitleTemplate('{channelName} {episode}화'); setDeadlineDayOfWeek(5); + setIncludeDefaultMembers(false); } setTitleFilters(bot.title_filters || []); @@ -458,6 +461,7 @@ function YouTubeBotDialog({ isOpen, onClose, botId = null, onSuccess }) { time: `${scheduleTime}:00`, titleTemplate, deadlineDayOfWeek, + includeDefaultMembers, } : null, weekly_schedule_config: pollingMode === 'weekly' @@ -756,6 +760,30 @@ function YouTubeBotDialog({ isOpen, onClose, botId = null, onSuccess }) { 이 요일까지 영상이 없으면 예정 일정을 삭제합니다

+ + {/* 고정 멤버 포함 */} +
setIncludeDefaultMembers(!includeDefaultMembers)} + > +
+

고정 멤버 포함

+

+ 예정 일정에 고급 설정의 고정 멤버를 함께 추가합니다 +

+
+
+
+
+
)}