示例#1
0
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"それでは制限時間内にお題を予測してください。正解が出たらマスターは「正解が出ました」ボタンを押してください。 ")
    )
示例#2
0
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)
示例#3
0
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']))]
    )
示例#4
0
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