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