def put(slug, value, update=True): slug = to_slug(slug) if ':' in slug: left, _, right = slug.partition(':') if left == 'type': return put_type(right, value) elif slug == 'type': raise RuntimeError("Unnable to alter 'type'. That's hard coded.") type = get_type(value['type']) or get_default_type() try: value = fields.process(type['fields'], value) except TypeError: raise FormError(type['fields']) value['type'] = type['slug'].split(':', 1)[1] value['slug'] = slug if update: value['updated'] = datetime.now().strftime("%Y-%m-%dT%H:%M:%S") relations = set() for k, content in value.items(): if isinstance(content, basestring): relations.update(get_relations_from_text(content)) set_relations(slug, relations) redis.set('n:' + slug, json.dumps(value)) search.index_node(value) return value
def join_in(self, request_json): game_session_data = self.get_game_session_data(request_json) if game_session_data.game_status == GameStatusEnum.END: chatbots.get(request_json['chatbotUserId']).send_text("游戏已经结束...") return if game_session_data.game_status == GameStatusEnum.GAMING: chatbots.get(request_json['chatbotUserId']).send_text("游戏已经开始...") return gamer = list( filter(lambda x: x.sender_id == request_json['senderId'], game_session_data.get_gamers())) if gamer: chatbots.get(request_json['chatbotUserId']).send_text("你已经参加了...") return new_gamer = Gamers() new_gamer.name = request_json['senderNick'] new_gamer.sender_id = request_json['senderId'] game_session_data.gamers.append(new_gamer) game_session_data_str = json.dumps(game_session_data, cls=DarkSpyGameSessionDataEncoder, indent=4) redis.set(name=self.get_dark_spy_session_name( request_json['chatbotUserId']), value=game_session_data_str) self.render_game(game_session_data, request_json) return
def start_dark_spy(self, request_json): game_session_data = self.get_game_session_data(request_json) if game_session_data.game_status == GameStatusEnum.END: game_session_data = DarkSpyGameSessionData() game_session_data_str = json.dumps( game_session_data, cls=DarkSpyGameSessionDataEncoder, indent=4) redis.set(name=self.get_dark_spy_session_name( request_json['chatbotUserId']), value=game_session_data_str) self.render_game(game_session_data, request_json)
def update_module_list(): root = root_from_url(get_tt_url() + 'finder.xml') modules = root.findall(".//resource[@type='module']") module_list = [] for module in modules: module_name = module.find('name').text if re.match("^M[12345][^0-9]", module_name): module_name_split = module_name.split(" - ") module_list.append(dict(code=module_name_split[0], name=module_name_split[1], id='m' + module.get('id'))) redis.set('module_list', json.dumps(module_list))
def display_maze(self, data, message): redis.set(name=get_dark_maze_session_name(self.chatbot_user_id), value=str(data)) title = "暗黑迷宫" img_url = 'http://{2}/dark_buddy/dark_maze/image/get?session_id={0}&uuid={1}'.format( self.chatbot_user_id, uuid.uuid1(), config.public_ip) text = '![screenshot]({0})\n# {1}'.format(img_url, message) action_card = ActionCard(title=title, text=text, btns=[], img_url=img_url) chatbots.get(self.chatbot_user_id).send_action_card(action_card) return
def put_type(slug, value): supertype = get_type_type() try: value = fields.process(supertype['fields'], value) except TypeError: raise FormError(supertype['fields']) value['slug'] = 'type:' + slug value['type'] = 'type' value['updated'] = datetime.now().strftime("%Y-%m-%dT%H:%M:%S") redis.sadd("types", slug) redis.set('n:type:' + slug, json.dumps(value)) set_type_template(slug, 'details', value.get('details')) set_type_template(slug, 'summary', value.get('summary')) return value
def update_events_by_id(module_id): root = root_from_url(get_tt_url() + module_id + '.xml') title_split = root.find(".//subheading").text.split(" - ") module_code = title_split[1] module_name = title_split[2] events = root.findall(".//event") event_list = [] for event in events: event_list.append(dict(name=module_name, code=module_code, type=event.find('category').text, starttime=event.find('starttime').text, endtime=event.find('endtime').text, week=event.get('date'), day=event.find('day').text, room=get_room(event))) redis.set(module_id, json.dumps(event_list))
def start_game(self, request_json): game_session_data = self.get_game_session_data(request_json) if game_session_data.game_status == GameStatusEnum.END: chatbots.get(request_json['chatbotUserId']).send_text("游戏已经结束...") return gamers = game_session_data.get_gamers() if len(gamers) < 4: chatbots.get(request_json['chatbotUserId']).send_text("人太少了...") return game_session_data = self.build_game(game_session_data) game_session_data_str = json.dumps(game_session_data, cls=DarkSpyGameSessionDataEncoder, indent=4) redis.set(name=self.get_dark_spy_session_name( request_json['chatbotUserId']), value=game_session_data_str) self.render_game(game_session_data, request_json) return
def update_term(): current_term = json.dumps(get_current_term()) redis.set('current_term', current_term)
first = False o.write("\n]") print "Dumped data to %s" % path elif command == "loaddata": try: path = sys.argv[2] except: usage() with open(path) as o: data = json.load(o) for node in data: redis.set( 'n:' + node['slug'], json.dumps(node)) print "Loadded data from %s" % path elif command == 'fixdb': import wiki, search types = wiki.get_types() for k, v in types.items(): if k == 'type': continue try: wiki.put_type(k, v) except wiki.FormError, e: print e.field search.rebuild_index() wiki.rebuild_nodes()
def vote_player(self, player_info, request_json): # 暂定用名字 game_session_data = self.get_game_session_data(request_json) if game_session_data.game_status == GameStatusEnum.END: chatbots.get(request_json['chatbotUserId']).send_text("游戏已经结束...") return if game_session_data.game_status == GameStatusEnum.PREPARE: chatbots.get(request_json['chatbotUserId']).send_text("游戏还未开始...") return result = game_session_data.result operator_player_list = list( filter(lambda x: x.name == request_json["senderNick"], game_session_data.get_gamers())) if not operator_player_list or operator_player_list[0].status == 1: chatbots.get(request_json['chatbotUserId']).send_text( "{0}!你别闹!...".format(request_json["senderNick"])) return if operator_player_list[0].voted == 1: chatbots.get(request_json['chatbotUserId']).send_text( "{0}!你都投过了!...".format(request_json["senderNick"])) return # 先处理票数 if player_info == "弃票": voted_player_name = player_info else: voted_player_list = list( filter(lambda x: x.name == player_info, game_session_data.get_gamers())) if not voted_player_list: chatbots.get(request_json['chatbotUserId']).send_text( "{0}!你投你🐎呢!...".format(request_json["senderNick"])) return voted_player = voted_player_list[0] voted_player_name = voted_player.name if not game_session_data.vote_info.get(voted_player_name): game_session_data.vote_info[voted_player_name] = 1 else: game_session_data.vote_info[voted_player_name] += 1 operator_player_list[0].voted = 1 game_session_data.vote_info["count"] -= 1 if game_session_data.vote_info["count"] == 0: game_session_data.vote_info.pop("count") vote_list = sorted(game_session_data.vote_info.items(), key=lambda x: x[1], reverse=True) if len(vote_list) > 1 and vote_list[0][1] == vote_list[1][1]: chatbots.get(request_json['chatbotUserId']).send_text( "{0} 和 {1} 你们平票了,再battle一波吧!".format( vote_list[0][0], vote_list[1][0])) game_session_data.vote_info = {} sum = 0 for count in result.items(): sum = sum + count[1] game_session_data.vote_info["count"] = sum elif len(vote_list) == 0: chatbots.get( request_json['chatbotUserId']).send_text("都弃票了?!再来一轮!") game_session_data.vote_info = {} sum = 0 for count in result.items(): sum = sum + count[1] game_session_data.vote_info["count"] = sum else: voted_player = list( filter(lambda x: x.name == vote_list[0][0], game_session_data.get_gamers()))[0] chatbots.get(request_json['chatbotUserId']).send_text( "{0}出局!!".format(voted_player.name)) voted_player.status = 1 result[voted_player.role] = result.get(voted_player.role) - 1 game_winner = self.check_result(result) if game_winner: winner_players = list( filter(lambda x: x.role == game_winner, game_session_data.get_gamers())) winner_players_name = list( map(lambda x: x.name, winner_players)) chatbots.get(request_json['chatbotUserId']).send_text( "{0}获胜!获胜者:{1}".format(game_winner, str(winner_players_name))) game_session_data.game_status = GameStatusEnum.END game_session_data.vote_info = {} sum = 0 for count in result.items(): sum = sum + count[1] game_session_data.vote_info["count"] = sum for gamer in game_session_data.get_gamers(): gamer.voted = 0 game_session_data_str = json.dumps(game_session_data, cls=DarkSpyGameSessionDataEncoder, indent=4) redis.set(name=self.get_dark_spy_session_name( request_json['chatbotUserId']), value=game_session_data_str) self.render_game(game_session_data, request_json) pass