Browse Source

feat: 回答遅延問題対応(#40) (#41)

#40

#40

#40

Co-authored-by: miteruzo <miteruzo@naver.com>
Reviewed-on: #41
main
みてるぞ 6 days ago
parent
commit
0e1e87ec05
1 changed files with 29 additions and 6 deletions
  1. +29
    -6
      main.py

+ 29
- 6
main.py View File

@@ -55,13 +55,15 @@ def main (
snack_time = SnackTime (game)
CurrentTime (game, DEERJIKA_FONT)

broadcast: Broadcast | None = None
try:
broadcast = Broadcast (os.environ['BROADCAST_CODE'])
except Exception:
pass
except KeyError:
broadcast = None

waiting_balloon = (False, '', '')
last_flags_poll: float = 0
traced_af_ids: list[int] = []

while True:
now_m = time.monotonic ()
@@ -76,15 +78,19 @@ def main (
deerjika.talk (waiting_balloon[1], waiting_balloon[2])
waiting_balloon = (False, '', '')

if now_m - last_flags_poll >= 10:
if now_m - last_flags_poll >= 1:
last_flags_poll = now_m
log (f"balloon: { balloon.enabled }, snack: { snack_time.enabled }")
try:
DB.begin_transaction ()
answer_flags = (AnsweredFlag.where ('platform', Platform.YOUTUBE.value)
.where ('answered', False)
.where_not_in ('id', traced_af_ids)
.get ())
log (f"pending: { len (answer_flags) }")
if answer_flags:
answer_flag = random.choice (answer_flags)
log (f"flag_id: { answer_flag.id }, answer_id: { answer_flag.answer_id }")
answer = Answer.find (answer_flag.answer_id)
match QueryType (answer.query_rel.query_type):
case QueryType.YOUTUBE_COMMENT:
@@ -98,10 +104,19 @@ def main (
waiting_balloon = (True, query.content, answer.content)
answer_flag.answered = True
answer_flag.save ()
case _:
traced_af_ids.append (answer_flag.id)
DB.commit ()
add_query (broadcast)
except Exception as ex:
DB.rollback ()
log ('EXCEPTION in poll loop')
print (ex)

try:
if broadcast is not None:
add_query (broadcast)
except Exception as ex:
log ('EXCEPTION in adding a query')
print (ex)
game.redraw ()

@@ -582,8 +597,9 @@ class Balloon (GameObject):
query = self.query
if CommonModule.len_by_full (query) > 21:
query = CommonModule.mid_by_full (query, 0, 19.5) + '...'
answer = Surface ((375, ((CommonModule.len_by_full (self.answer) - 1) // 16 + 1) * 23.4375),
pygame.SRCALPHA)
answer = Surface (
(375, int (((CommonModule.len_by_full (self.answer) - 1) // 16 + 1) * 23.4375)),
pygame.SRCALPHA)
for i in range (int (CommonModule.len_by_full (self.answer) - 1) // 16 + 1):
answer.blit (DEERJIKA_FONT.render (
CommonModule.mid_by_full (self.answer, 16 * i, 16), True, (192, 0, 0)),
@@ -991,5 +1007,12 @@ def add_query (
DB.commit ()


def log (
msg: str,
) -> None:
print (f"[{ datetime.now ().isoformat (sep = ' ', timespec = 'seconds') }] { msg }",
flush = True)


if __name__ == '__main__':
main ()

Loading…
Cancel
Save