4 コミット

4個のファイルの変更43行の追加94行の削除
+6
ファイルの表示
@@ -45,3 +45,9 @@ class CommonModule:
return trimmed_left[:cls.index_by_f2c (trimmed_left, length)] return trimmed_left[:cls.index_by_f2c (trimmed_left, length)]
@staticmethod
def rad_to_deg (
rad: float) \
-> float:
return rad * 180 / CMath.PI
+20 -66
ファイルの表示
@@ -1,7 +1,6 @@
# vim: nosmartindent autoindent # vim: nosmartindent autoindent
import json import json
import math
import random import random
import subprocess import subprocess
import sys import sys
@@ -11,7 +10,6 @@ from datetime import datetime, timedelta
import emoji import emoji
import ephem import ephem
import pygame import pygame
import pygame.gfxdraw
import pytchat import pytchat
from playsound import playsound from playsound import playsound
from pygame.locals import * from pygame.locals import *
@@ -121,7 +119,7 @@ class Main:
# Youtube Chat から取得したコメントたち # Youtube Chat から取得したコメントたち
chat_items: list = [] chat_items: list = []
# 会話の履歴 # 会話の履歴(3 件分保持)
histories: list = [] histories: list = []
while (True): while (True):
@@ -144,32 +142,29 @@ class Main:
# 日の入終了 # 日の入終了
sunset_end: datetime = sunset_start + timedelta (hours = 1) sunset_end: datetime = sunset_start + timedelta (hours = 1)
# 時刻つき観測地 # 月の出開始
observer_with_time: ephem.Observer = observer 'todo'
observer_with_time.date = datetime.now () - timedelta (hours = 9)
# 月の出終了
'todo'
# 月の入開始
'todo'
# 月の入終了
'todo'
# 日の角度 # 日の角度
observer_with_time: ephem.Observer = observer
observer_with_time.date = datetime.now () - timedelta (hours = 9)
sun.compute (observer_with_time) sun.compute (observer_with_time)
sun_alt: float = math.degrees (sun.alt) sun_alt: float = CommonModule.rad_to_deg (sun.alt)
sun_az: float = math.degrees (sun.az)
# 月の角度
moon.compute (observer_with_time)
moon_alt: float = math.degrees (moon.alt)
moon_az: float = math.degrees (moon.az)
# 月齢
new_moon_dt: datetime = ephem.localtime (
ephem.previous_new_moon (observer_with_time.date))
moon_days_old: float = (
(datetime.now () - new_moon_dt).total_seconds ()
/ 60 / 60 / 24)
# 背景描画 # 背景描画
cls.draw_bg (screen, bg_day, bg_evening, bg_night, bg_grass, cls.draw_bg (screen, bg_day, bg_evening, bg_night, bg_grass,
kita, jojoko, kita, jojoko,
sunrise_start, sunrise_end, sunset_start, sunset_end, sunrise_start, sunrise_end, sunset_start, sunset_end,
sun_alt, sun_az, moon_alt, moon_az, moon_days_old) sun_alt)
# 左上に時刻表示 # 左上に時刻表示
for i in range (4): for i in range (4):
@@ -299,8 +294,7 @@ class Main:
bg_grass, kita, jojoko, bg_grass, kita, jojoko,
sunrise_start, sunrise_end, sunrise_start, sunrise_end,
sunset_start, sunset_end, sunset_start, sunset_end,
sun_alt, sun_az, moon_alt, moon_az, sun_alt)
moon_days_old)
chat_item.author = {'name': 'ゴートうひとり' if goatoh_talking else '伊地知ニジカ', chat_item.author = {'name': 'ゴートうひとり' if goatoh_talking else '伊地知ニジカ',
'id': '', 'id': '',
@@ -332,25 +326,18 @@ class Main:
bg_night: pygame.Surface, bg_night: pygame.Surface,
bg_grass: pygame.Surface, bg_grass: pygame.Surface,
kita: pygame.Surface, kita: pygame.Surface,
jojoko_original: pygame.Surface, jojoko: pygame.Surface,
sunrise_start: datetime, sunrise_start: datetime,
sunrise_end: datetime, sunrise_end: datetime,
sunset_start: datetime, sunset_start: datetime,
sunset_end: datetime, sunset_end: datetime,
sun_alt: float, sun_alt: float) \
sun_az: float,
moon_alt: float,
moon_az: float,
moon_days_old: float) \
-> None: -> None:
sunrise_centre: datetime = ( sunrise_centre: datetime = (
sunrise_start + (sunrise_end - sunrise_start) / 2) sunrise_start + (sunrise_end - sunrise_start) / 2)
sunset_centre: datetime = ( sunset_centre: datetime = (
sunset_start + (sunset_end - sunset_start) / 2) sunset_start + (sunset_end - sunset_start) / 2)
jojoko: pygame.Surface = cls.get_jojoko (jojoko_original,
moon_days_old)
dt: datetime = datetime.now () dt: datetime = datetime.now ()
if sunrise_centre <= dt < sunset_centre: if sunrise_centre <= dt < sunset_centre:
@@ -367,48 +354,15 @@ class Main:
else: else:
bg_evening.set_alpha (0) bg_evening.set_alpha (0)
if sunrise_start <= dt < sunset_end:
jojoko.set_alpha (255 - 255 / 15 * abs (moon_days_old - 15))
else:
jojoko.set_alpha (255)
screen.blit (bg_evening, (0, 0)) screen.blit (bg_evening, (0, 0))
if (moon_az < 180) and (-10 <= moon_alt < 40): if -10 <= sun_alt < 40:
y = ((CWindow.HEIGHT / 2 + 100)
- (CWindow.HEIGHT / 2 + 200) / 30 * moon_alt)
screen.blit (jojoko, jojoko.get_rect (center = (400, y)))
screen.blit (bg_grass, (0, 0))
if (sun_az < 180) and (-10 <= sun_alt < 40):
y = ((CWindow.HEIGHT / 2 + 100) y = ((CWindow.HEIGHT / 2 + 100)
- (CWindow.HEIGHT / 2 + 200) / 30 * sun_alt) - (CWindow.HEIGHT / 2 + 200) / 30 * sun_alt)
screen.blit (kita, kita.get_rect (center = (400, y))) screen.blit (kita, kita.get_rect (center = (400, y)))
screen.blit (bg_grass, (0, 0)) screen.blit (bg_grass, (0, 0))
@staticmethod
def get_jojoko (
jojoko_original: pygame.Surface,
moon_days_old: float) \
-> pygame.Surface:
jojoko: pygame.Surface = jojoko_original.copy ()
jojoko.set_colorkey ((0, 255, 0))
for i in range (200):
if 1 <= moon_days_old < 15:
pygame.gfxdraw.bezier (jojoko, ((0, 100 + i), (100, 180 * moon_days_old / 7 - 80 + i), (200, 100 + i)), 3, (0, 255, 0))
elif moon_days_old < 16:
pass
elif moon_days_old < 30:
pygame.gfxdraw.bezier (jojoko, ((0, 100 - i), (100, 180 * (moon_days_old - 15) / 7 - 80 - i), (200, 100 - i)), 3, (0, 255, 0))
else:
jojoko.fill ((0, 255, 0))
return jojoko
if __name__ == '__main__': if __name__ == '__main__':
Main.main (sys.argv, len (sys.argv)) Main.main (sys.argv, len (sys.argv))
バイナリ
ファイルの表示
バイナリファイルは表示されません.

変更前

幅:  |  高さ:  |  サイズ: 641 KiB

変更後

幅:  |  高さ:  |  サイズ: 728 KiB

+7 -18
ファイルの表示
@@ -24,13 +24,7 @@ class Talk:
top_p: float = 1. top_p: float = 1.
@classmethod @classmethod
def main ( def main (cls, message: str, name: str | None = None, histories: list = [], goatoh_mode: bool = False) -> str:
cls,
message: str,
name: str | None = None,
histories: list = [],
goatoh_mode: bool = False,
) -> str:
# ChatGPT API Organisation ID # ChatGPT API Organisation ID
openai.organization = OPENAI_ORGANISATION openai.organization = OPENAI_ORGANISATION
@@ -44,13 +38,8 @@ class Talk:
return answer.content if answer is not None else cls.DUMMY_RESPONSE return answer.content if answer is not None else cls.DUMMY_RESPONSE
@classmethod @classmethod
def __get_message ( def __get_message (cls, message: str, name: str | None, histories: list, goatoh_mode: bool = False) \
cls, -> chat.chat_completion_message.ChatCompletionMessage | None:
message: str,
name: str | None,
histories: list,
goatoh_mode: bool = False,
) -> chat.chat_completion_message.ChatCompletionMessage | None:
# プロンプト(JSON 等外部ファイルに置くことを検討) # プロンプト(JSON 等外部ファイルに置くことを検討)
if goatoh_mode: if goatoh_mode:
messages: list = [{'role': 'system', messages: list = [{'role': 'system',
@@ -214,13 +203,13 @@ class Talk:
+ 'ふざけるのはいい加減にするぬ゛ぬ゛ん゛。'))}, + 'ふざけるのはいい加減にするぬ゛ぬ゛ん゛。'))},
{'role': 'system', {'role': 'system',
'content': '歌(しーざおぐあ)歌って'}, 'content': '歌(しーざおぐあ)歌って'},
{'role': 'assistant', {'role': 'assistant',
'content': ('おけだぬ゛~゛ん゛(苦笑)。' 'content': ('おけだぬ゛~゛ん゛(苦笑)。'
+ '毛巾浴帽小鴨鴨水溫剛剛好♪' + '毛巾浴帽小鸭鸭水温刚刚好♪'
+ '潑潑水來搓泡泡今天是美妙♪' + '泼泼水来搓泡泡今天是美妙♪'
+ '唱歌扭扭腰我洗洗澡♪' + '唱歌扭扭腰我洗洗澡♪'
+ 'だぬ゛ん♪')}, + 'だぬ゛ん♪')},
{'role': 'system', {'role': 'system',