def single_turn_main(room, room_id, event): members = get_room_members(room) round_info = room['rounds_info'] master = round_info[-1]['master'] nth_round = len(round_info) line_bot_api.multicast(get_room_members(room), [TextSendMessage(text=f'第{nth_round}ラウンドをスタートしました'), TextSendMessage(text='各自の役割を遂行してください。')] ) start_timestamp = int(str(event.timestamp)[:10]) line_bot_api.push_message( master, get_end_button(room_id, nth_round, start_timestamp) ) reminder_timings = reminder_timings_setting q = Queue(connection=r) guessing_time = 182 guessed_object = "word" q.enqueue(set_reminders, start_timestamp, reminder_timings, members, room_id, master, guessing_time, guessed_object) line_bot_api.multicast( members, TextSendMessage(text=f"それでは制限時間内にお題を予測してください。正解が出たらマスターは「正解が出ました」ボタンを押してください。 ") )
def close_participation(event, room, room_id, rooms_dict): print(room) members = get_room_members(room) line_bot_api.push_message( "U0a028f903127e2178bd789b4b4046ba7", TextSendMessage(text=f"this is {func_mode} mode") ) if len(members) < 4: line_bot_api.reply_message( event.reply_token, [TextSendMessage(text=f"最低でも4人必要です。5~8人がおすすめです。"), TextSendMessage(text=f"上の参加ボタンをあと{4-len(members)}人以上に押してもらってから、もう一度「参加を締め切るボタン」を押してください。」")] ) else: line_bot_api.reply_message( event.reply_token, [TextSendMessage(text=f"皆様の役割を個人メッセージでお送りしました。これ以降は、そちらをご参考ください。")] ) rounds = int(room['total_rounds']) line_bot_api.multicast( members, [TextSendMessage(text=f"ゲームID{room_id}に参加します"), TextSendMessage(text=f"全部で{rounds}ラウンドです。")] ) single_round_intro(members, room, room_id, rooms_dict)
def single_round_intro(members, room, room_id, rooms_dict): members_copy = copy.deepcopy(members) insider = random.choice(members_copy) members_copy.remove(insider) master = random.choice(members_copy) members_copy.remove(master) commons = members_copy room['rounds_info'].append({ 'insider': insider, 'master': master, 'started': False, 'answered': False, 'insider_guess': [], 'commons_who_already_voted': [] }) rooms_dict[room_id] = room with open('rooms.json', 'w') as room_json: json.dump(rooms_dict, room_json, indent=2) nth_round = len(room['rounds_info']) word = room["words"][nth_round - 1] line_bot_api.multicast( members, [ImageSendMessage(original_content_url=round_img[nth_round], preview_image_url=round_img[nth_round])] ) line_bot_api.multicast( commons, [TextSendMessage(text='あなたの役割は庶民です。'), TextSendMessage(text=f'お題を当てるためにマスターに質問をしていきましょう。'), TextSendMessage(text='なお、「はい」「いいえ」「わからない」でマスターが答えられる質問にしましょう'), TextSendMessage(text='それでは、マスターからの指示を待ちましょう')] ) line_bot_api.push_message( insider, [TextSendMessage(text='インサイダーはあなたです。'), TextSendMessage(text=f'お題は"{word}"です。(お題はあなたとマスター以外には送られていません。)'), TextSendMessage(text='庶民のふりをしつつ、庶民を裏で操り、お題を当てさせてあげましょう。'), TextSendMessage(text='それでは、マスターからの指示を待ちましょう')] ) line_bot_api.push_message( master, [TextSendMessage(text='マスターはあなたです。マスターであることを皆に伝えてください。'), TextSendMessage(text=f'お題は"{word}"です。(お題はあなたとインサイダー以外には送られていません。)'), TextSendMessage(text=f'お題に関しての庶民からの質問に「はい」「いいえ」「わからない」の3択で答えていきましょう。'), TextSendMessage(text=f'お題の"{word}"を当てられたら「正解です」と答え、「正解が出ました」ボタンを押しましょう'), get_start_button(room_id, len(room['rounds_info']))] )
def insider_guess_tournament(room, room_id, members, guessed_insiders): master = room['rounds_info'][-1]['master'] print("printing guessed insiders") print(guessed_insiders) guessed_insiders_str = ', '.join([get_display_name(guessed_insider) for guessed_insider in guessed_insiders]) line_bot_api.multicast( members, [TextSendMessage(text="投票の結果、同率一位がいました。"), TextSendMessage(text=f"{guessed_insiders_str} が最もインサイダーの疑惑がかけられています。"), TextSendMessage(text="マスターが議論をして、最終インサイダー予想をしてください。"), TextSendMessage(text="マスターに投票ボタンを送りました。")] ) line_bot_api.push_message( master, get_guess_insider_carousel(room_id, get_members_without_master(room), True) )
async def timer(delay): while True: now = time.time() set_list = r.zrange("timer", 0, -1, withscores=True) for i, value_score in enumerate(set_list): end_timestamp = value_score[1] value_dict = json.loads(value_score[0].decode()) room_id = value_dict["room_id"] members = value_dict["members"] time_left = value_dict["time_left"] print("type of time left") print(type(time_left)) master = value_dict["master"] guessed_object = value_dict["guessed_object"] diff = end_timestamp - now with open('rooms.json', 'r') as room_json: rooms_dict = json.load(room_json) answered = rooms_dict[room_id]["rounds_info"][-1]["answered"] current_round_count = len(rooms_dict[room_id]["rounds_info"]) print(f'\nroom_id{room_id} time_left:{time_left}') print( f'i:{i}, set_list_len:{len(r.zrange("timer", 0, -1, withscores=True))}' ) print(f'answered: {answered}') print(f'guessed_object: {guessed_object}') print(f'diff:{diff}') if guessed_object == "insider": guessed_object_jpn = "インサイダー推理" elif guessed_object == "word": guessed_object_jpn = "お題あて" if answered is True and guessed_object == "word": print("removing since it was answered") r.zrem("timer", value_score[0]) if (diff <= 0 and answered is False) or ( diff <= 0 and guessed_object == "insider"): # message_id, sender_id, text = name.decode().split(':') print(end_timestamp) line_bot_api.multicast( members, TextSendMessage( text=f'{guessed_object_jpn}の残り時間、{time_left}秒です。')) r.zrem("timer", value_score[0]) print("removed one") print( f'z range length :{len(r.zrange("timer", 0, -1, withscores=True))}\n' ) if len(r.zrange("timer", 0, -1, withscores=True)) == 0 or time_left == 0: if guessed_object == "word": line_bot_api.multicast(members, [ TextSendMessage(text=f'お題あての時間が切れました。'), TextSendMessage( text='マスターはまず答えを言ってください。次に表示されている確認ボタンを押してください。' ) ]) line_bot_api.push_message(master, [ get_confirm_button_moving_to_insider_guess( room_id, current_round_count) ]) else: print("breaking from 'for'\n") break await asyncio.sleep(delay) # indent position is important