このコミットが含まれているのは:
+1
-1
サブモジュール nizika_ai が更新されました: 8e1d305b4a...662b7d69de
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import math
|
||||
import os
|
||||
import random
|
||||
import sys
|
||||
from datetime import datetime, timedelta
|
||||
@@ -13,6 +14,7 @@ import ephem # type: ignore
|
||||
import pygame
|
||||
import pygame.gfxdraw
|
||||
import pytchat # type: ignore
|
||||
import requests
|
||||
from cv2 import VideoCapture
|
||||
from ephem import Moon, Observer, Sun # type: ignore
|
||||
from pygame import Rect, Surface
|
||||
@@ -24,7 +26,7 @@ from pytchat.processors.default.processor import Chat # type: ignore
|
||||
|
||||
from common_module import CommonModule
|
||||
from nizika_ai.models import Answer, AnsweredFlag, Query, User
|
||||
from nizika_ai.consts import Platform
|
||||
from nizika_ai.consts import AnswerType, Character, GPTModel, Platform, QueryType
|
||||
|
||||
pygame.init ()
|
||||
|
||||
@@ -46,7 +48,7 @@ def main (
|
||||
Deerjika (game, DeerjikaPattern.RELAXED, x = CWindow.WIDTH * 3 / 4, y = CWindow.HEIGHT - 120)
|
||||
balloon = Balloon (game)
|
||||
CurrentTime (game, SYSTEM_FONT)
|
||||
broadcast = Broadcast ()
|
||||
broadcast = Broadcast (os.environ['BROADCAST_CODE'])
|
||||
try:
|
||||
Sound ('assets/bgm.mp3').play (loops = -1)
|
||||
except Exception:
|
||||
@@ -56,14 +58,17 @@ def main (
|
||||
if event.type == pygame.QUIT:
|
||||
pygame.quit ()
|
||||
sys.exit ()
|
||||
chat = broadcast.fetch_chat ()
|
||||
if chat is not None:
|
||||
chat.message = emoji.emojize (chat.message)
|
||||
message: str = chat.message
|
||||
user = (User.where ('platform', Platform.YOUTUBE.value)
|
||||
.where ('code', chat.author.channelId)
|
||||
.get ())
|
||||
# chat.author
|
||||
answer_flags = (AnsweredFlag.where ('platform', Platform.YOUTUBE.value)
|
||||
.where ('answered', False)
|
||||
.get ())
|
||||
if not balloon.enabled:
|
||||
if answer_flags:
|
||||
answer_id: int = random.choice (answer_flags).answer_id
|
||||
answer = Answer.find (answer_id)
|
||||
if answer.answer_type == AnswerType.YOUTUBE_REPLY.value:
|
||||
query = Query.find (answer.query_id)
|
||||
balloon.talk (query.content, answer.content)
|
||||
add_query (broadcast)
|
||||
game.redraw ()
|
||||
|
||||
|
||||
@@ -666,8 +671,9 @@ class Broadcast:
|
||||
|
||||
def __init__ (
|
||||
self,
|
||||
broadcast_code,
|
||||
):
|
||||
self.chat = pytchat.create (os.environ['BROADCAST_CODE'])
|
||||
self.chat = pytchat.create (broadcast_code)
|
||||
|
||||
def fetch_chat (
|
||||
self,
|
||||
@@ -684,5 +690,42 @@ class Log:
|
||||
...
|
||||
|
||||
|
||||
def fetch_bytes_from_url (
|
||||
url: str,
|
||||
) -> bytes | None:
|
||||
res = requests.get (url, timeout = 60)
|
||||
if res.status_code != 200:
|
||||
return None
|
||||
return res.content
|
||||
|
||||
|
||||
def add_query (
|
||||
broadcast: Broadcast,
|
||||
) -> None:
|
||||
chat = broadcast.fetch_chat ()
|
||||
if chat is None:
|
||||
return
|
||||
chat.message = emoji.emojize (chat.message)
|
||||
message: str = chat.message
|
||||
user = (User.where ('platform', Platform.YOUTUBE.value)
|
||||
.where ('code', chat.author.channelId)
|
||||
.first ())
|
||||
if user is None:
|
||||
user = User ()
|
||||
user.platform = Platform.YOUTUBE.value
|
||||
user.code = chat.author.channelId
|
||||
user.name = chat.author.name
|
||||
user.icon = fetch_bytes_from_url (chat.author.imageUrl)
|
||||
user.save ()
|
||||
query = Query ()
|
||||
query.user_id = user.id
|
||||
query.target_character = Character.DEERJIKA.value
|
||||
query.content = chat.message
|
||||
query.query_type = QueryType.YOUTUBE_COMMENT.value
|
||||
query.model = GPTModel.GPT3_TURBO.value
|
||||
query.sent_at = datetime.now ()
|
||||
query.answerd = False
|
||||
query.save ()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main ()
|
||||
|
||||
新しい課題から参照
ユーザをブロックする