コード例 #1
0
def current_set(update, context):
    try:
        if update.effective_chat.id < 0:
            raise WrongChatException(ChatTypes.Group)

        game = get_game_by_user(update.effective_user.id)
        if not game:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'You don\'t take part in any game. Join the game in a group with other '
                'players or create your own game using command /create_game (in this case'
                'you still need friends to play with)')
            return

        context.bot.send_message(
            chat_id=update.effective_chat.id,
            text='After this message are cards you have right now\n'
            '⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️️')
        send_set(update.effective_user.id, game, context)
        context.bot.send_message(
            chat_id=update.effective_chat.id,
            text=
            'Don\'t worry if you have less then 5 cards. You will get missing after the '
            'round is finished')
    except WrongChatException as ex:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=ex.message)
    except Exception:
        traceback.print_exc()
コード例 #2
0
def get_card_from_pile(update, context):
    try:
        if update.effective_chat.id > 0:
            raise WrongChatException(ChatTypes.Private)

        game = get_game_by_group_id(update.effective_chat.id)

        if not game:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'There is no games attached to this chat. Make sure that you use the right '
                'chat and that the admin of a game has run the command /attach_group'
            )
            return

        game = get_one_card(game, context)
        print(game)
        update_game(game)

    except WrongChatException as ex:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=ex.message)
    except Exception:
        traceback.print_exc()
コード例 #3
0
def begin(update, context):
    try:
        if update.effective_chat.id > 0:
            raise WrongChatException(ChatTypes.Private)

        game = get_game_by_group_id(update.effective_chat.id)

        if not game or game['is started']:
            return

        if len(game['players']) < 3:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'There are not enough players in the game. There should be at least 3 people'
            )
            return

        game['is started'] = True
        game['free cards'], game['players sets'] = hand_out(game['players'])
        print(game['players sets'])
        update_game(game)

        send_sets(game, update, context)

        update_game(game)

        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text='The game has STARTED!!!')
        return
    except WrongChatException as ex:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=ex.message)
    except Exception:
        traceback.print_exc()
コード例 #4
0
def quit_game(update, context):
    if update.effective_chat.id > 0:
        raise WrongChatException(ChatTypes.Private)

    game = get_game_by_group_id(update.effective_chat.id)
    if game:
        if update.effective_user.id in game['players']:
            game['players'].remove(update.effective_user.id)
            update_game(game)
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text='The user {} has successfully quited the game'.format(
                    update.effective_user.username))
            return
コード例 #5
0
def create_game(update, context):
    try:
        if update.effective_chat.id < 0:
            raise WrongChatException(ChatTypes.Group)
        if 'game is running' in context.user_data.keys(
        ) and context.user_data['game is running']:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text='You haven\'t finished the previous game. '
                'To do this use the command /end_game')
            return
        token = generate_token()
        new_game(token, update.effective_user.id)
        context.bot.send_message(chat_id=update.effective_user.id,
                                 text='The game is created: ' + str(token))
        context.user_data['game is running'] = True
    except WrongChatException as ex:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=ex.message)
    except Exception:
        traceback.print_exc()
コード例 #6
0
def give_more_cards(update, context):
    try:
        if update.effective_chat.id > 0:
            raise WrongChatException(ChatTypes.Private)

        game = get_game_by_group_id(update.effective_chat.id)

        if not game:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'There is no games attached to this chat. Make sure that you use the right '
                'chat and that the admin of a game has run the command /attach_group'
            )
            return

        game = give_cards(game, context)
        update_game(game)
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text='Now everyone has 5 cards again')
        for player in game['players']:
            context.bot.send_message(chat_id=player,
                                     text='You\'ve got new cards!')
            context.bot.send_message(
                chat_id=player,
                text='After this message are cards you have right now\n'
                '⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️️')
            send_set(player, game, context)
            context.bot.send_message(
                chat_id=player,
                text=
                'Don\'t worry if you have less then 5 cards. You will get missing after the '
                'round is finished')

    except WrongChatException as ex:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=ex.message)
    except Exception:
        traceback.print_exc()
コード例 #7
0
def attach_group(update, context):
    try:
        if update.effective_chat.id > 0:
            raise WrongChatException(ChatTypes.Private)

        if not context.user_data['game is running']:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'You haven\'t started the game (this command should be sent by that person, '
                'who has created the token)')
            return

        if get_game_by_group_id(update.effective_chat.id):
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'There is already a game started in this chat. It could be ended by '
                'it\'s admin (that one, who has created it) or it will be ended automatically'
                '24 hours after creating')
            return

        if not context.args:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text='You should write a game token after the function, '
                'like "/attach_group 000000"')
            return

        token = context.args[0]

        if (not token.isdigit()) or len(token) != 6:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text='The token is a 6 number integer, that was sent to your '
                'fprivate chat with me.')
            return

        token = int(token)

        if not check_token(token):
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'Your token is invalid, check if you haven\'t finished the game.'
            )
            return

        game = get_game_by_token(token)

        if update.effective_user.id != game['admin_id']:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'You are not an admin of this game. Please, ask the admin to '
                'register the game')
            return

        game['group_id'] = update.effective_chat.id
        update_game(game)
        context.bot.send_message(
            chat_id=update.effective_chat.id,
            text='The group is successfully attached! '
            'Now all the players, who want to play, should send a command '
            '/enter_game here (in this group). The admin is already in the game. '
            '\nThen go to a private chat with me @blablabla_with_friends_bot and press start '
            'or make sure, that our dialog has already been started. If not, you won\'t be able '
            'to get cards.'
            '\nAfter everybody have entered, rut the command /begin and the game will start \n'
            '(ATTENTION: after beginning no other players won\'t be able to join)'
        )
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text='If you don\'t want to '
                                 'play any more, run the command /quit_game')
    except WrongChatException as ex:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=ex.message)
    except Exception:
        traceback.print_exc()
コード例 #8
0
def enter_game(update, context):
    try:
        if update.effective_chat.id > 0:
            raise WrongChatException(ChatTypes.Private)

        game = get_game_by_user(update.effective_user.id)
        if game:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'User {} already takes part in a game. Quit that game to enter '
                'this one.'.format(update.effective_user.username))
            return

        game = get_game_by_group_id(update.effective_chat.id)
        if not game:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'There is no games attached to this chat. Make sure that you use the right '
                'chat and that the admin of a game has run the command /attach_group'
            )
            return

        if game['is started']:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'The game has already started, unfortunately you cannot join it now'
            )
            return

        if len(game['players']) == 8:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text=
                'I\'m sorry, there are already too many players, maybe next time'
            )
            return

        if update.effective_user.id in game['players']:
            context.bot.send_message(
                chat_id=update.effective_chat.id,
                text='The user {} is already in the game'.format(
                    update.effective_user.username))
            return

        print(update.effective_user.id)
        game['players'].append(update.effective_user.id)
        if game['is started']:
            new_set = list()
            for i in range(5):
                card = random.choice(game['free cards'])
                new_set.append(card)
                game['free cards'].remove(card)
            game['players sets'][str(update.effective_user.id)] = new_set

        update_game(game)

        context.bot.send_message(
            chat_id=update.effective_chat.id,
            text='The user {} has successfully entered the game'.format(
                update.effective_user.username))
    except WrongChatException as ex:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=ex.message)
    except Exception:
        traceback.print_exc()