import time from bemani.backend.jubeat.base import JubeatBase from bemani.protocol import Node class JubeatLoggerReportHandler(JubeatBase): def handle_logger_report_request(self, request: Node) -> Node: # Handle this by returning nothing, game doesn't care root = Node.void("logger") return root class JubeatDemodataGetNewsHandler(JubeatBase): def handle_demodata_get_news_request(self, request: Node) -> Node: demodata = Node.void("demodata") data = Node.void("data") demodata.add_child(data) officialnews = Node.void("officialnews") data.add_child(officialnews) officialnews.set_attribute("count", "0") return demodata class JubeatDemodataGetHitchartHandler(JubeatBase): def handle_demodata_get_hitchart_request(self, request: Node) -> Node: demodata = Node.void("demodata") data = Node.void("data") demodata.add_child(data) # Not sure what this is, maybe date? data.add_child(Node.string("update", time.strftime("%d/%m/%Y"))) # No idea which songs are licensed or regular, so only return hit chart # for all songs on regular mode. hitchart_lic = Node.void("hitchart_lic") data.add_child(hitchart_lic) hitchart_lic.set_attribute("count", "0") songs = self.data.local.music.get_hit_chart(self.game, self.music_version, 10) hitchart_org = Node.void("hitchart_org") data.add_child(hitchart_org) hitchart_org.set_attribute("count", str(len(songs))) rank = 1 for song in songs: rankdata = Node.void("rankdata") hitchart_org.add_child(rankdata) rankdata.add_child(Node.s32("music_id", song[0])) rankdata.add_child(Node.s16("rank", rank)) rankdata.add_child(Node.s16("prev", rank)) rank = rank + 1 return demodata class JubeatLobbyCheckHandler(JubeatBase): def handle_lobby_check_request(self, request: Node) -> Node: root = Node.void("lobby") data = Node.void("data") root.add_child(data) data.add_child(Node.s16("interval", 0)) data.add_child(Node.s16("entry_timeout", 0)) entrant_nr = Node.u32("entrant_nr", 0) entrant_nr.set_attribute("time", "0") data.add_child(entrant_nr) return root class JubeatGamendRegisterHandler(JubeatBase): def handle_gameend_regist_request(self, request: Node) -> Node: data = request.child("data") player = data.child("player") if player is not None: refid = player.child_value("refid") else: refid = None if refid is not None: userid = self.data.remote.user.from_refid(self.game, self.version, refid) else: userid = None if userid is not None: oldprofile = self.get_profile(userid) newprofile = self.unformat_profile(userid, request, oldprofile) else: newprofile = None if userid is not None and newprofile is not None: self.put_profile(userid, newprofile) gameend = Node.void("gameend") data = Node.void("data") gameend.add_child(data) player = Node.void("player") data.add_child(player) player.add_child(Node.s32("session_id", 1)) player.add_child(Node.s32("end_final_session_id", 1)) return gameend class JubeatGametopGetMeetingHandler(JubeatBase): def handle_gametop_get_meeting_request(self, request: Node) -> Node: gametop = Node.void("gametop") data = Node.void("data") gametop.add_child(data) meeting = Node.void("meeting") data.add_child(meeting) single = Node.void("single") meeting.add_child(single) single.set_attribute("count", "0") tag = Node.void("tag") meeting.add_child(tag) tag.set_attribute("count", "0") reward = Node.void("reward") data.add_child(reward) reward.add_child(Node.s32("total", -1)) reward.add_child(Node.s32("point", -1)) return gametop