diff --git a/bot.py b/bot.py index e6b592a..f45a779 100644 --- a/bot.py +++ b/bot.py @@ -147,7 +147,6 @@ def leave_game(bot, update): reply_to_message_id=update.message.message_id) -@run_async def select_game(bot, update): """Handler for callback queries to select the current game""" @@ -159,28 +158,31 @@ def select_game(bot, update): gm.userid_current[user_id] = player break else: - bot.sendMessage(update.callback_query.message.chat_id, - text=_("Game not found."), - timeout=TIMEOUT) + send_async(bot, + update.callback_query.message.chat_id, + text=_("Game not found.")) return - back = [[InlineKeyboardButton(text=_("Back to last group"), - switch_inline_query='')]] + @run_async + def selected(bot): + back = [[InlineKeyboardButton(text=_("Back to last group"), + switch_inline_query='')]] + bot.answerCallbackQuery(update.callback_query.id, + text=_("Please switch to the group you selected!"), + show_alert=False, + timeout=TIMEOUT) - bot.answerCallbackQuery(update.callback_query.id, - text=_("Please switch to the group you selected!"), - show_alert=False, + bot.editMessageText(chat_id=update.callback_query.message.chat_id, + message_id=update.callback_query.message.message_id, + text=_("Selected group: {group}\n" + "Make sure that you switch to the correct " + "group!").format( + group=gm.userid_current[user_id].game.chat.title), + reply_markup=InlineKeyboardMarkup(back), + parse_mode=ParseMode.HTML, timeout=TIMEOUT) - bot.editMessageText(chat_id=update.callback_query.message.chat_id, - message_id=update.callback_query.message.message_id, - text=_("Selected group: {group}\n" - "Make sure that you switch to the correct " - "group!").format( - group=gm.userid_current[user_id].game.chat.title), - reply_markup=InlineKeyboardMarkup(back), - parse_mode=ParseMode.HTML, - timeout=TIMEOUT) + selected() @game_locales @@ -192,8 +194,8 @@ def status_update(bot, update): user = update.message.left_chat_member try: - game = gm.player_for_user_in_chat(user, chat).game gm.leave_game(user, chat) + game = gm.player_for_user_in_chat(user, chat).game except NoGameInChatError: pass @@ -539,7 +541,7 @@ def process_result(bot, update): game = player.game result_id = update.chosen_inline_result.result_id chat = game.chat - except KeyError: + except (KeyError, AttributeError): return logger.debug("Selected result: " + result_id) diff --git a/game_manager.py b/game_manager.py index a3bb30a..780e629 100644 --- a/game_manager.py +++ b/game_manager.py @@ -144,7 +144,7 @@ class GameManager(object): pass if this_users_players: - self.userid_current[player.user.id] = this_users_players[0] + self.userid_current[player_in_game.user.id] = this_users_players[0] else: del self.userid_players[player_in_game.user.id] del self.userid_current[player_in_game.user.id] diff --git a/internationalization.py b/internationalization.py index 9087a86..9b09f22 100644 --- a/internationalization.py +++ b/internationalization.py @@ -86,9 +86,7 @@ def __(singular, plural=None, n=1, multi=False): translations = list() if not multi and len(set(_.locale_stack)) >= 1: - _.push('en_US') - translations.append(_(singular, plural, n)) - _.pop() + translations.append(_(singular, plural, n, 'en_US')) else: for locale in _.locale_stack: @@ -109,10 +107,10 @@ def user_locale(func): with db_session: us = UserSetting.get(id=user.id) - if us and us.lang != 'en': - _.push(us.lang) - else: - _.push('en_US') + if us and us.lang != 'en': + _.push(us.lang) + else: + _.push('en_US') result = func(bot, update, *pargs, **kwargs) _.pop() @@ -167,7 +165,7 @@ def _user_chat_from_update(update): try: user = update.chosen_inline_result.from_user chat = gm.userid_current[user.id].game.chat - except (NameError, AttributeError): + except (NameError, AttributeError, KeyError): chat = None return user, chat