Esempio n. 1
0
    def wrapped(bot, update, *pargs, **kwargs):
        user, chat = _user_chat_from_update(update)
        player = gm.player_for_user_in_chat(user, chat)
        locales = list()

        if player:
            for player in player.game.players:
                us = UserSetting.get(id=player.user.id)

                if us and us.lang != 'pt':
                    loc = us.lang
                else:
                    loc = 'en_US'

                if loc in locales:
                    continue

                _.push(loc)
                locales.append(loc)

        result = func(bot, update, *pargs, **kwargs)

        while _.code:
            _.pop()

        return result
Esempio n. 2
0
def leave_game(bot, update):
    """Handler for the /leave command"""
    chat = update.message.chat
    user = update.message.from_user

    player = gm.player_for_user_in_chat(user, chat)

    if player is None:
        send_async(bot, chat.id, text=_("You are not playing in a game in "
                                        "this group."),
                   reply_to_message_id=update.message.message_id)
        return

    game = player.game
    user = update.message.from_user

    try:
        gm.leave_game(user, chat)

    except NoGameInChatError:
        send_async(bot, chat.id, text=_("You are not playing in a game in "
                                        "this group."),
                   reply_to_message_id=update.message.message_id)

    except NotEnoughPlayersError:
        gm.end_game(chat, user)
        send_async(bot, chat.id, text=__("Game ended!", multi=game.translate))

    else:
        send_async(bot, chat.id,
                   text=__("Okay. Next Player: {name}",
                           multi=game.translate).format(
                       name=display_name(game.current_player.user)),
                   reply_to_message_id=update.message.message_id)
Esempio n. 3
0
def skip_player(bot, update):
    """Handler for the /skip command"""
    chat = update.message.chat
    user = update.message.from_user

    player = gm.player_for_user_in_chat(user, chat)
    if not player:
        send_async(bot,
                   chat.id,
                   text=_("You are not playing in a game in this chat."))
        return

    game = player.game
    skipped_player = game.current_player

    started = skipped_player.turn_started
    now = datetime.now()
    delta = (now - started).seconds

    # You can't skip if the current player still has time left
    # You can skip yourself even if you have time left (you'll still draw)
    if delta < skipped_player.waiting_time and player != skipped_player:
        n = skipped_player.waiting_time - delta
        send_async(bot,
                   chat.id,
                   text=_("Please wait {time} second",
                          "Please wait {time} seconds", n).format(time=n),
                   reply_to_message_id=update.message.message_id)
    else:
        do_skip(bot, player)
Esempio n. 4
0
def status_update(bot, update):
    """Remove player from game if user leaves the group"""
    chat = update.message.chat

    if update.message.left_chat_member:
        user = update.message.left_chat_member

        try:
            gm.leave_game(user, chat)
            game = gm.player_for_user_in_chat(user, chat).game

        except NoGameInChatError:
            pass
        except NotEnoughPlayersError:
            gm.end_game(chat, user)
            send_async(bot,
                       chat.id,
                       text=__("chalo hogaya aaj ka, back to bihar.",
                               multi=game.translate))
        else:
            send_async(
                bot,
                chat.id,
                text=__("{name} bihari ko nikalo bc",
                        multi=game.translate).format(name=display_name(user)))
Esempio n. 5
0
def leave_game(bot, update):
    """Handler for the /leave command"""
    chat = update.message.chat
    user = update.message.from_user

    player = gm.player_for_user_in_chat(user, chat)

    if player is None:
        send_async(bot, chat.id, text=_("You are not playing in a game in "
                                        "this group."),
                   reply_to_message_id=update.message.message_id)
        return

    game = player.game
    user = update.message.from_user

    try:
        gm.leave_game(user, chat)

    except NoGameInChatError:
        send_async(bot, chat.id, text=_("You are not playing in a game in "
                                        "this group."),
                   reply_to_message_id=update.message.message_id)

    except NotEnoughPlayersError:
        gm.end_game(chat, user)
        send_async(bot, chat.id, text=__("Game ended!", multi=game.translate))

    else:
        send_async(bot, chat.id,
                   text=__("Okay. Next Player: {name}",
                           multi=game.translate).format(
                       name=display_name(game.current_player.user)),
                   reply_to_message_id=update.message.message_id)
    def wrapped(bot, update, *pargs, **kwargs):
        user, chat = _user_chat_from_update(update)
        player = gm.player_for_user_in_chat(user, chat)
        locales = list()

        if player:
            for player in player.game.players:
                us = UserSetting.get(id=player.user.id)

                if us and us.lang != 'en':
                    loc = us.lang
                else:
                    loc = 'en_US'

                if loc in locales:
                    continue

                _.push(loc)
                locales.append(loc)

        result = func(bot, update, *pargs, **kwargs)

        while _.code:
            _.pop()

        return result
Esempio n. 7
0
def onText(bot, update):

    chat = update.message.chat
    user = update.message.from_user
    try:
        game = gm.chatid_games[chat.id][-1]
    except (KeyError, IndexError):
        return
    if game.started and game.last_card.value == c.SEVEN and not (
            update.message.text.startswith("Drawing")
            or update.message.text == "Pass"):
        send_async(bot,
                   chat.id,
                   text=__(
                       "{name} falou durante o 7 e comprou uma carta",
                       multi=game.translate).format(name=display_name(user)))
        player = gm.player_for_user_in_chat(user, chat)
        logger.info(
            "Add one card for {name}".format(name=display_name(player.user)))
        try:
            player.draw_serven()
        except DeckEmptyError:
            send_async(bot,
                       chat.id,
                       text=__("Não há mais cartas para compra",
                               multi=game.translate))
Esempio n. 8
0
def skip_player(bot, update):
    """Handler for the /skip command"""
    chat = update.message.chat
    user = update.message.from_user

    player = gm.player_for_user_in_chat(user, chat)
    if not player:
        send_async(bot, chat.id,
                   text=_("You are not playing in a game in this chat."))
        return

    game = player.game
    skipped_player = game.current_player
    next_player = game.current_player.next

    started = skipped_player.turn_started
    now = datetime.now()
    delta = (now - started).seconds

    if delta < skipped_player.waiting_time:
        send_async(bot, chat.id,
                   text=_("Please wait {time} seconds")
                   .format(time=(skipped_player.waiting_time - delta)),
                   reply_to_message_id=update.message.message_id)

    elif skipped_player.waiting_time > 0:
        skipped_player.anti_cheat += 1
        skipped_player.waiting_time -= 30
        try:
            skipped_player.draw()
        except DeckEmptyError:
            pass

        send_async(bot, chat.id,
                   text=__("Waiting time to skip this player has "
                           "been reduced to {time} seconds.\n"
                           "Next player: {name}", game.translate)
                   .format(time=skipped_player.waiting_time,
                           name=display_name(next_player.user)))
        game.turn()

    else:
        try:
            gm.leave_game(skipped_player.user, chat)
            send_async(bot, chat.id,
                       text=__("{name1} was skipped four times in a row "
                               "and has been removed from the game.\n"
                               "Next player: {name2}", game.translate)
                       .format(name1=display_name(skipped_player.user),
                               name2=display_name(next_player.user)))

        except NotEnoughPlayersError:
            send_async(bot, chat.id,
                       text=__("{name} was skipped four times in a row "
                               "and has been removed from the game.\n"
                               "The game ended.", game.translate)
                       .format(name=display_name(skipped_player.user)))

            gm.end_game(chat.id, skipped_player.user)
Esempio n. 9
0
def leave_game(bot, update):
    """Handler for the /leave command"""
    chat = update.message.chat
    user = update.message.from_user

    player = gm.player_for_user_in_chat(user, chat)

    if player is None:
        send_async(bot,
                   chat.id,
                   text=_("You are not playing in a game in "
                          "this group."),
                   reply_to_message_id=update.message.message_id)
        return

    game = player.game
    user = update.message.from_user

    try:
        gm.leave_game(user, chat)

    except NoGameInChatError:
        send_async(bot,
                   chat.id,
                   text=_("You are not playing in a game in "
                          "this group."),
                   reply_to_message_id=update.message.message_id)

    except NotEnoughPlayersError:
        gm.end_game(chat, user)
        send_async(bot, chat.id, text=__("Game ended!", multi=game.translate))

    else:
        if game.started:
            # send message to indicate the game has randomly choosen the color
            if game._randomed_color:
                send_async(bot,
                           chat.id,
                           text=__(
                               "Color randomly choosen to: {col}",
                               multi=game.translate).format(
                                   col=c.COLOR_ICONS[game.last_card.color]),
                           reply_to_message_id=update.message.message_id)
            send_async(
                bot,
                chat.id,
                text=__("Okay. Next Player: {name}",
                        multi=game.translate).format(
                            name=display_name(game.current_player.user)),
                reply_to_message_id=update.message.message_id)
        else:
            send_async(
                bot,
                chat.id,
                text=__("{name} left the game before it started.",
                        multi=game.translate).format(name=display_name(user)),
                reply_to_message_id=update.message.message_id)
Esempio n. 10
0
def status_update(bot, update):
    """Remove player from game if user leaves the group"""
    chat = update.message.chat

    if update.message.left_chat_member:
        user = update.message.left_chat_member

        try:
            gm.leave_game(user, chat)
            game = gm.player_for_user_in_chat(user, chat).game

        except NoGameInChatError:
            pass
        except NotEnoughPlayersError:
            gm.end_game(chat, user)
            send_async(bot, chat.id, text=__("Game ended!", game.translate))
        else:
            send_async(bot, chat.id, text=__("Removing {name} from the game",
                                             game.translate)
                       .format(name=display_name(user)))
Esempio n. 11
0
def status_update(bot, update):
    """Remove player from game if user leaves the group"""
    chat = update.message.chat

    if update.message.left_chat_member:
        user = update.message.left_chat_member

        try:
            game = gm.player_for_user_in_chat(user, chat).game
            gm.leave_game(user, chat)

        except NoGameInChatError:
            pass
        except NotEnoughPlayersError:
            gm.end_game(chat, user)
            send_async(bot, chat.id, text=__("Game ended!",
                                             multi=game.translate))
        else:
            send_async(bot, chat.id, text=__("Removing {name} from the game",
                                             multi=game.translate)
                       .format(name=display_name(user)))
Esempio n. 12
0
def skip_player(bot, update):
    """Handler for the /skip command"""
    chat = update.message.chat
    user = update.message.from_user

    player = gm.player_for_user_in_chat(user, chat)
    if not player:
        send_async(bot,
                   chat.id,
                   text=_("You are not playing in a game in this chat."))
        return

    game = player.game
    skipped_player = game.current_player
    next_player = game.current_player.next

    started = skipped_player.turn_started
    now = datetime.now()
    delta = (now - started).seconds

    if delta < skipped_player.waiting_time:
        n = skipped_player.waiting_time - delta
        send_async(bot,
                   chat.id,
                   text=_("Please wait {time} second",
                          "Please wait {time} seconds", n).format(time=n),
                   reply_to_message_id=update.message.message_id)

    elif skipped_player.waiting_time > 0:
        skipped_player.anti_cheat += 1
        skipped_player.waiting_time -= 30
        try:
            skipped_player.draw()
        except DeckEmptyError:
            pass

        n = skipped_player.waiting_time
        send_async(bot,
                   chat.id,
                   text=__(
                       "Waiting time to skip this player has "
                       "been reduced to {time} second.\n"
                       "Next player: {name}",
                       "Waiting time to skip this player has "
                       "been reduced to {time} seconds.\n"
                       "Next player: {name}",
                       n,
                       multi=game.translate).format(time=n,
                                                    name=display_name(
                                                        next_player.user)))
        game.turn()

    else:
        try:
            gm.leave_game(skipped_player.user, chat)
            send_async(bot,
                       chat.id,
                       text=__(
                           "{name1} was skipped four times in a row "
                           "and has been removed from the game.\n"
                           "Next player: {name2}",
                           multi=game.translate).format(
                               name1=display_name(skipped_player.user),
                               name2=display_name(next_player.user)))

        except NotEnoughPlayersError:
            send_async(bot,
                       chat.id,
                       text=__(
                           "{name} was skipped four times in a row "
                           "and has been removed from the game.\n"
                           "The game ended.",
                           multi=game.translate).format(
                               name=display_name(skipped_player.user)))

            gm.end_game(chat.id, skipped_player.user)