final version?

This commit is contained in:
Jannes Höke 2016-05-22 19:21:51 +02:00
parent 4cdffffa5f
commit ba47f4c19e
8 changed files with 142 additions and 9 deletions

21
bot.py
View file

@ -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:

View file

@ -35,6 +35,7 @@ class Game(object):
owner = None
open = True
translate = False
players_won = 0
def __init__(self, chat):
self.chat = chat

View file

@ -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"

View file

@ -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 ""

View file

@ -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))
)
)

View file

@ -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

View file

@ -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))

View file

@ -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):