feat(youtube-bot): 예정 일정에 고정 멤버 포함 옵션 추가
예정 일정 자동 생성 시 봇의 고정 멤버(default_member_ids)를 함께 추가하는 옵션(auto_schedule_config.includeDefaultMembers). 워크돌처럼 멤버가 고정인 채널의 다음 주 예정 일정에 멤버가 자동으로 붙음. DB/라우트 변경 없이 auto_schedule_config JSON에 플래그 추가 + 관리자 다이얼로그에 토글. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
8a8548e2d7
commit
7d58d19737
2 changed files with 37 additions and 0 deletions
|
|
@ -110,6 +110,15 @@ async function youtubeBotPlugin(fastify) {
|
||||||
[newScheduleId, null, 'video', bot.channelId, bot.channelName]
|
[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;
|
return newScheduleId;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -293,6 +293,7 @@ function YouTubeBotDialog({ isOpen, onClose, botId = null, onSuccess }) {
|
||||||
const [scheduleTime, setScheduleTime] = useState('18:00');
|
const [scheduleTime, setScheduleTime] = useState('18:00');
|
||||||
const [titleTemplate, setTitleTemplate] = useState('{channelName} {episode}화');
|
const [titleTemplate, setTitleTemplate] = useState('{channelName} {episode}화');
|
||||||
const [deadlineDayOfWeek, setDeadlineDayOfWeek] = useState(5);
|
const [deadlineDayOfWeek, setDeadlineDayOfWeek] = useState(5);
|
||||||
|
const [includeDefaultMembers, setIncludeDefaultMembers] = useState(false);
|
||||||
|
|
||||||
// 고급 설정
|
// 고급 설정
|
||||||
const [showAdvanced, setShowAdvanced] = 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');
|
setScheduleTime(config.time?.slice(0, 5) || '18:00');
|
||||||
setTitleTemplate(config.titleTemplate || '{channelName} {episode}화');
|
setTitleTemplate(config.titleTemplate || '{channelName} {episode}화');
|
||||||
setDeadlineDayOfWeek(config.deadlineDayOfWeek ?? 5);
|
setDeadlineDayOfWeek(config.deadlineDayOfWeek ?? 5);
|
||||||
|
setIncludeDefaultMembers(config.includeDefaultMembers ?? false);
|
||||||
} else {
|
} else {
|
||||||
setAutoScheduleEnabled(false);
|
setAutoScheduleEnabled(false);
|
||||||
setScheduleDayOfWeek(4);
|
setScheduleDayOfWeek(4);
|
||||||
setScheduleTime('18:00');
|
setScheduleTime('18:00');
|
||||||
setTitleTemplate('{channelName} {episode}화');
|
setTitleTemplate('{channelName} {episode}화');
|
||||||
setDeadlineDayOfWeek(5);
|
setDeadlineDayOfWeek(5);
|
||||||
|
setIncludeDefaultMembers(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
setTitleFilters(bot.title_filters || []);
|
setTitleFilters(bot.title_filters || []);
|
||||||
|
|
@ -458,6 +461,7 @@ function YouTubeBotDialog({ isOpen, onClose, botId = null, onSuccess }) {
|
||||||
time: `${scheduleTime}:00`,
|
time: `${scheduleTime}:00`,
|
||||||
titleTemplate,
|
titleTemplate,
|
||||||
deadlineDayOfWeek,
|
deadlineDayOfWeek,
|
||||||
|
includeDefaultMembers,
|
||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
weekly_schedule_config: pollingMode === 'weekly'
|
weekly_schedule_config: pollingMode === 'weekly'
|
||||||
|
|
@ -756,6 +760,30 @@ function YouTubeBotDialog({ isOpen, onClose, botId = null, onSuccess }) {
|
||||||
이 요일까지 영상이 없으면 예정 일정을 삭제합니다
|
이 요일까지 영상이 없으면 예정 일정을 삭제합니다
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* 고정 멤버 포함 */}
|
||||||
|
<div
|
||||||
|
className="flex items-center justify-between cursor-pointer pt-1"
|
||||||
|
onClick={() => setIncludeDefaultMembers(!includeDefaultMembers)}
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<p className="text-sm text-gray-700">고정 멤버 포함</p>
|
||||||
|
<p className="text-xs text-gray-400 mt-0.5">
|
||||||
|
예정 일정에 고급 설정의 고정 멤버를 함께 추가합니다
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className={`flex-shrink-0 w-11 h-6 rounded-full transition-colors ${
|
||||||
|
includeDefaultMembers ? 'bg-red-500' : 'bg-gray-200'
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className={`w-5 h-5 bg-white rounded-full shadow-sm transform transition-transform mt-0.5 ${
|
||||||
|
includeDefaultMembers ? 'translate-x-5.5 ml-0.5' : 'translate-x-0.5'
|
||||||
|
}`}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue