| @@ -41,7 +41,9 @@ async def main ( | |||||
| queries_to_answers (), | queries_to_answers (), | ||||
| report_kiriban (), | report_kiriban (), | ||||
| report_nico (), | report_nico (), | ||||
| update_kiriban_list ()) | |||||
| update_kiriban_list (), | |||||
| report_snack_time (), | |||||
| report_hot_spring_time ()) | |||||
| async def queries_to_answers ( | async def queries_to_answers ( | ||||
| @@ -96,16 +98,7 @@ async def report_kiriban ( | |||||
| このことについて、何かお祝いメッセージを下さい。 | このことについて、何かお祝いメッセージを下さい。 | ||||
| ただし、そのメッセージ内には再生数の数値を添えてください。 | ただし、そのメッセージ内には再生数の数値を添えてください。 | ||||
| また、つけられたタグ、コメントからどのような動画か想像し、説明してください。""" | また、つけられたタグ、コメントからどのような動画か想像し、説明してください。""" | ||||
| query = Query () | |||||
| query.user_id = None | |||||
| query.target_character = Character.DEERJIKA.value | |||||
| query.content = prompt | |||||
| query.query_type = QueryType.KIRIBAN.value | |||||
| query.model = GPTModel.GPT3_TURBO.value | |||||
| query.sent_at = datetime.now () | |||||
| query.answered = False | |||||
| query.transfer_data = { 'video_code': video_code } | |||||
| query.save () | |||||
| _add_query (prompt, QueryType.KIRIBAN, { 'video_code': video_code }) | |||||
| # 待ち時間計算 | # 待ち時間計算 | ||||
| dt = datetime.now () | dt = datetime.now () | ||||
| @@ -249,16 +242,7 @@ async def report_nico ( | |||||
| { video['description'] } | { video['description'] } | ||||
| ``` | ``` | ||||
| このことについて、みんなに告知するとともに、ニジカちゃんの感想を教えてください。""" | このことについて、みんなに告知するとともに、ニジカちゃんの感想を教えてください。""" | ||||
| query = Query () | |||||
| query.user_id = None | |||||
| query.target_character = Character.DEERJIKA.value | |||||
| query.content = prompt | |||||
| query.query_type = QueryType.NICO_REPORT.value | |||||
| query.model = GPTModel.GPT3_TURBO.value | |||||
| query.sent_at = datetime.now () | |||||
| query.answered = False | |||||
| query.transfer_data = { 'video_code': video['contentId'] } | |||||
| query.save () | |||||
| _add_query (prompt, QueryType.NICO_REPORT, { 'video_code': video['contentId'] }) | |||||
| await asyncio.sleep (60) | await asyncio.sleep (60) | ||||
| @@ -282,6 +266,45 @@ async def wait_until ( | |||||
| await asyncio.sleep ((datetime.combine (d, t) - dt).total_seconds ()) | await asyncio.sleep ((datetime.combine (d, t) - dt).total_seconds ()) | ||||
| async def report_snack_time ( | |||||
| ) -> None: | |||||
| """ | |||||
| おやつタイムを報知する. | |||||
| """ | |||||
| while True: | |||||
| await wait_until (time (15, 0)) | |||||
| _add_query ('おやつタイムだ!!!!', QueryType.SNACK_TIME) | |||||
| async def report_hot_spring_time ( | |||||
| ) -> None: | |||||
| """ | |||||
| 温泉タイムを報知する. | |||||
| """ | |||||
| while True: | |||||
| await wait_until (time (21, 0)) | |||||
| _add_query ('温泉に入ろう!!!', QueryType.HOT_SPRING) | |||||
| def _add_query ( | |||||
| content: str, | |||||
| query_type: QueryType, | |||||
| transfer_data: dict | None = None, | |||||
| ) -> None: | |||||
| query = Query () | |||||
| query.user_id = None | |||||
| query.target_character = Character.DEERJIKA.value | |||||
| query.content = content | |||||
| query.query_type = query_type.value | |||||
| query.model = GPTModel.GPT3_TURBO.value | |||||
| query.sent_at = datetime.now () | |||||
| query.answered = False | |||||
| query.transfer_data = transfer_data | |||||
| query.save () | |||||
| def _format_elapsed ( | def _format_elapsed ( | ||||
| uploaded_at: datetime, | uploaded_at: datetime, | ||||
| ) -> str: | ) -> str: | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit 9fec1cf5f99ca2cb2a9b3ff158027a3416cc5f06 | |||||
| Subproject commit 32ecf2d00fcba876ed5afe48626058b2b4795399 | |||||
| @@ -9,7 +9,7 @@ from datetime import datetime | |||||
| from typing import TypedDict | from typing import TypedDict | ||||
| from nizika_ai.config import DB | from nizika_ai.config import DB | ||||
| from nizika_ai.consts import AnswerType, Character, Platform | |||||
| from nizika_ai.consts import Character, Platform, QueryType | |||||
| from nizika_ai.models import Answer, AnsweredFlag, Query | from nizika_ai.models import Answer, AnsweredFlag, Query | ||||
| from nizika_ai.talk import Talk | from nizika_ai.talk import Talk | ||||
| @@ -83,7 +83,6 @@ def add_answer ( | |||||
| answer.character = character.value | answer.character = character.value | ||||
| answer.content = Talk.main (message, user_name, histories, | answer.content = Talk.main (message, user_name, histories, | ||||
| goatoh_mode = character == Character.GOATOH) | goatoh_mode = character == Character.GOATOH) | ||||
| answer.answer_type = query.query_type | |||||
| answer.sent_at = datetime.now () | answer.sent_at = datetime.now () | ||||
| answer.save () | answer.save () | ||||
| add_answered_flags (answer) | add_answered_flags (answer) | ||||
| @@ -101,15 +100,26 @@ def add_answered_flags ( | |||||
| 返答モデル | 返答モデル | ||||
| """ | """ | ||||
| answer_type: AnswerType | |||||
| answer_type: QueryType | |||||
| try: | try: | ||||
| answer_type = AnswerType (answer.answer_type) | |||||
| answer_type = QueryType (answer.query.query_type) | |||||
| except (TypeError, ValueError): | except (TypeError, ValueError): | ||||
| return | return | ||||
| if answer_type in (AnswerType.YOUTUBE_REPLY,): | |||||
| if answer_type in (QueryType.YOUTUBE_COMMENT, | |||||
| QueryType.YOUTUBE_COMMENT, | |||||
| QueryType.KIRIBAN, | |||||
| QueryType.NICO_REPORT, | |||||
| QueryType.SNACK_TIME, | |||||
| QueryType.HOT_SPRING): | |||||
| add_answered_flag (answer, Platform.YOUTUBE) | add_answered_flag (answer, Platform.YOUTUBE) | ||||
| if answer_type in (AnswerType.BLUESKY_REPLY,): | |||||
| if answer_type in (QueryType.BLUESKY_COMMENT, | |||||
| QueryType.BLUESKY_SYSTEM, | |||||
| QueryType.KIRIBAN, | |||||
| QueryType.NICO_REPORT, | |||||
| QueryType.SNACK_TIME, | |||||
| QueryType.HOT_SPRING): | |||||
| add_answered_flag (answer, Platform.BLUESKY) | add_answered_flag (answer, Platform.BLUESKY) | ||||