diff --git a/bot.py b/bot.py index d3b1ea2..700ed97 100644 --- a/bot.py +++ b/bot.py @@ -32,6 +32,7 @@ from start_bot import start_bot from results import (add_call_bluff, add_choose_color, add_draw, add_gameinfo, add_no_game, add_not_started, add_other_cards, add_pass, add_card) +from user_setting import UserSetting from utils import display_name import card as c from errors import (NoGameInChatError, LobbyClosedError, AlreadyJoinedError, @@ -474,7 +475,7 @@ def reply_to_query(bot, update): elif user_id == game.current_player.user.id: if game.choosing_color: - add_choose_color(results) + add_choose_color(results, game) add_other_cards(playable, player, results, game) else: if not player.drew: @@ -583,6 +584,12 @@ def do_play_card(bot, player, result_id): chat = game.chat user = player.user + us = UserSetting.get(id=user.id) + if not us: + us = UserSetting(id=user.id) + + us.cards_played += 1 + if game.choosing_color: send_async(bot, chat.id, text=_("Please choose a color")) @@ -593,10 +600,22 @@ def do_play_card(bot, player, result_id): send_async(bot, chat.id, text=__("{name} won!", game.translate) .format(name=user.first_name)) + + if us.stats: + us.games_played += 1 + + if game.players_won is 0: + us.first_places += 1 + try: gm.leave_game(user, chat) except NotEnoughPlayersError: send_async(bot, chat.id, text=__("Game ended!", game.translate)) + + us2 = UserSetting.get(id=game.current_player.next.user.id) + if us2 and us2.stats: + us2.games_played += 1 + gm.end_game(chat, user) if botan: diff --git a/game.py b/game.py index f25726a..5308fac 100644 --- a/game.py +++ b/game.py @@ -35,6 +35,7 @@ class Game(object): owner = None open = True translate = False + players_won = 0 def __init__(self, chat): self.chat = chat diff --git a/locales/de_DE/LC_MESSAGES/unobot.po b/locales/de_DE/LC_MESSAGES/unobot.po index 9ce018d..2e72d95 100644 --- a/locales/de_DE/LC_MESSAGES/unobot.po +++ b/locales/de_DE/LC_MESSAGES/unobot.po @@ -403,3 +403,40 @@ msgstr "Alle Statistiken gelöscht und deaktiviert!" #: settings.py:94 msgid "Set locale!" msgstr "Sprache gesetzt!" + + +#: simple_commands.py +msgid "You did not enable statistics. Use /settings in " +"a private chat with the bot to enable them." +msgstr "Du hast die Spiel-Statistiken nicht aktiviert. Aktiviere sie, mit dem " +"/settings-Kommando in einem privaten Chat mit dem Bot." + +#: simple_commands.py +msgid "{number} games played" +msgstr "{number} gespielte Spiele" + +#: simple_commands.py +msgid "{number} first places" +msgstr "{number}x 1. Platz" + +#: simple_commands.py +msgid "{number} cards played" +msgstr "{number} gespielte Karten" + + +#: utils.py +msgid "{emoji} Green" +msgstr "{emoji} Grün" + +#: utils.py +msgid "{emoji} Red" +msgstr "{emoji} Rot" + +#: utils.py +msgid "{emoji} Blue" +msgstr "{emoji} Blau" + +#: utils.py +msgid "{emoji} Yellow" +msgstr "{emoji} Gelb" + diff --git a/locales/unobot.pot b/locales/unobot.pot index 0005894..1d00e72 100644 --- a/locales/unobot.pot +++ b/locales/unobot.pot @@ -345,3 +345,38 @@ msgstr "" msgid "Set locale!" msgstr "" + +#: simple_commands.py +msgid "You did not enable statistics. Use /settings in " +"a private chat with the bot to enable them." +msgstr "" + +#: simple_commands.py +msgid "{number} games played" +msgstr "" + +#: simple_commands.py +msgid "{number} first places" +msgstr "" + +#: simple_commands.py +msgid "{number} cards played" +msgstr "" + + +#: utils.py +msgid "{emoji} Green" +msgstr "" + +#: utils.py +msgid "{emoji} Red" +msgstr "" + +#: utils.py +msgid "{emoji} Blue" +msgstr "" + +#: utils.py +msgid "{emoji} Yellow" +msgstr "" + diff --git a/results.py b/results.py index 722656d..5d98be7 100644 --- a/results.py +++ b/results.py @@ -26,10 +26,11 @@ from telegram import InlineQueryResultArticle, InputTextMessageContent, \ InlineQueryResultCachedSticker as Sticker import card as c -from utils import display_color, display_name, list_subtract, _, __ +from utils import display_color, display_color_group, display_name, \ + list_subtract, _, __ -def add_choose_color(results): +def add_choose_color(results, game): """Add choose color options""" for color in c.COLORS: results.append( @@ -38,7 +39,7 @@ def add_choose_color(results): title=_("Choose Color"), description=display_color(color), input_message_content= - InputTextMessageContent(display_color(color)) + InputTextMessageContent(display_color_group(color, game)) ) ) diff --git a/settings.py b/settings.py index b98600d..aa4a1c3 100644 --- a/settings.py +++ b/settings.py @@ -30,6 +30,7 @@ from shared_vars import dispatcher available_locales = [['en_US', 'de_DE']] + @user_locale def show_settings(bot, update): chat = update.message.chat diff --git a/simple_commands.py b/simple_commands.py index 51c0770..2cb99f3 100644 --- a/simple_commands.py +++ b/simple_commands.py @@ -20,6 +20,7 @@ from telegram import ParseMode from telegram.ext import CommandHandler +from user_setting import UserSetting from utils import _, send_async, user_locale from shared_vars import dispatcher @@ -82,6 +83,28 @@ def news(bot, update): disable_web_page_preview=True) +@user_locale +def stats(bot, update): + user = update.message.from_user + us = UserSetting.get(id=user.id) + if not us or not us.stats: + send_async(bot, update.message.chat_id, + text=_("You did not enable statistics. Use /settings in " + "a private chat with the bot to enable them.")) + else: + stats_text = list() + stats_text.append( + _("{number} games played").format(number=us.games_played)) + stats_text.append( + _("{number} first places").format(number=us.first_places)) + stats_text.append( + _("{number} cards played").format(number=us.cards_played)) + + send_async(bot, update.message.chat_id, + text='\n'.join(stats_text)) + + dispatcher.add_handler(CommandHandler('help', help)) dispatcher.add_handler(CommandHandler('source', source)) dispatcher.add_handler(CommandHandler('news', news)) +dispatcher.add_handler(CommandHandler('stats', stats)) diff --git a/utils.py b/utils.py index 9d93152..af32d83 100644 --- a/utils.py +++ b/utils.py @@ -62,7 +62,7 @@ def __(string, multi_translate): for l in reversed(locales): _.push(l) - return '\n'.join(translations) # TODO + return '\n'.join(translations) def list_subtract(list1, list2): @@ -86,13 +86,29 @@ def display_name(user): def display_color(color): """ Convert a color code to actual color name """ if color == "r": - return Emoji.HEAVY_BLACK_HEART + " Red" + return _("{emoji} Red").format(emoji=Emoji.HEAVY_BLACK_HEART) if color == "b": - return Emoji.BLUE_HEART + " Blue" + return _("{emoji} Blue").format(emoji=Emoji.BLUE_HEART) if color == "g": - return Emoji.GREEN_HEART + " Green" + return _("{emoji} Green").format(emoji=Emoji.GREEN_HEART) if color == "y": - return Emoji.YELLOW_HEART + " Yellow" + return _("{emoji} Yellow").format(emoji=Emoji.YELLOW_HEART) + + +def display_color_group(color, game): + """ Convert a color code to actual color name """ + if color == "r": + return __("{emoji} Red", game.translate).format( + emoji=Emoji.HEAVY_BLACK_HEART) + if color == "b": + return __("{emoji} Blue", game.translate).format( + emoji=Emoji.BLUE_HEART) + if color == "g": + return __("{emoji} Green", game.translate).format( + emoji=Emoji.GREEN_HEART) + if color == "y": + return __("{emoji} Yellow", game.translate).format( + emoji=Emoji.YELLOW_HEART) def error(bot, update, error):