|
|
|
@@ -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 () |