| @@ -4,6 +4,7 @@ import math | |||||
| import os | import os | ||||
| import random | import random | ||||
| import sys | import sys | ||||
| import time | |||||
| import wave | import wave | ||||
| from datetime import datetime, timedelta | from datetime import datetime, timedelta | ||||
| from enum import Enum, auto | from enum import Enum, auto | ||||
| @@ -60,40 +61,48 @@ def main ( | |||||
| pass | pass | ||||
| waiting_balloon = (False, '', '') | waiting_balloon = (False, '', '') | ||||
| last_flags_poll: float = 0 | |||||
| while True: | while True: | ||||
| now_m = time.monotonic () | |||||
| for event in pygame.event.get (): | for event in pygame.event.get (): | ||||
| if event.type == pygame.QUIT: | if event.type == pygame.QUIT: | ||||
| pygame.quit () | pygame.quit () | ||||
| sys.exit () | sys.exit () | ||||
| if (not balloon.enabled) and (not snack_time.enabled): | if (not balloon.enabled) and (not snack_time.enabled): | ||||
| if waiting_balloon[0]: | if waiting_balloon[0]: | ||||
| deerjika.talk (waiting_balloon[1], waiting_balloon[2]) | deerjika.talk (waiting_balloon[1], waiting_balloon[2]) | ||||
| waiting_balloon = (False, '', '') | waiting_balloon = (False, '', '') | ||||
| try: | |||||
| DB.begin_transaction () | |||||
| answer_flags = (AnsweredFlag.where ('platform', Platform.YOUTUBE.value) | |||||
| .where ('answered', False) | |||||
| .get ()) | |||||
| if answer_flags: | |||||
| answer_flag = random.choice (answer_flags) | |||||
| answer = Answer.find (answer_flag.answer_id) | |||||
| match QueryType (answer.query_rel.query_type): | |||||
| case QueryType.YOUTUBE_COMMENT: | |||||
| query = Query.find (answer.query_id) | |||||
| deerjika.talk (query.content, answer.content) | |||||
| answer_flag.answered = True | |||||
| answer_flag.save () | |||||
| case QueryType.SNACK_TIME: | |||||
| snack_time.play () | |||||
| query = Query.find (answer.query_id) | |||||
| waiting_balloon = (True, query.content, answer.content) | |||||
| answer_flag.answered = True | |||||
| answer_flag.save () | |||||
| DB.commit () | |||||
| add_query (broadcast) | |||||
| except Exception as ex: | |||||
| print (ex) | |||||
| if now_m - last_flags_poll >= 10: | |||||
| last_flags_poll = now_m | |||||
| try: | |||||
| DB.begin_transaction () | |||||
| answer_flags = (AnsweredFlag.where ('platform', Platform.YOUTUBE.value) | |||||
| .where ('answered', False) | |||||
| .get ()) | |||||
| if answer_flags: | |||||
| answer_flag = random.choice (answer_flags) | |||||
| answer = Answer.find (answer_flag.answer_id) | |||||
| match QueryType (answer.query_rel.query_type): | |||||
| case QueryType.YOUTUBE_COMMENT: | |||||
| query = Query.find (answer.query_id) | |||||
| deerjika.talk (query.content, answer.content) | |||||
| answer_flag.answered = True | |||||
| answer_flag.save () | |||||
| case QueryType.SNACK_TIME: | |||||
| snack_time.play () | |||||
| query = Query.find (answer.query_id) | |||||
| waiting_balloon = (True, query.content, answer.content) | |||||
| answer_flag.answered = True | |||||
| answer_flag.save () | |||||
| DB.commit () | |||||
| add_query (broadcast) | |||||
| except Exception as ex: | |||||
| DB.rollback () | |||||
| print (ex) | |||||
| game.redraw () | game.redraw () | ||||