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]
|
||||
);
|
||||
|
||||
// 옵션: 예정 일정에 고정 멤버 포함
|
||||
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;
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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 }) {
|
|||
이 요일까지 영상이 없으면 예정 일정을 삭제합니다
|
||||
</p>
|
||||
</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>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue