libs.commands.report.matrix
libs/commands/report/matrix.py
1""" 2libs/commands/report/matrix.py 3""" 4 5from typing import TYPE_CHECKING 6 7import libs.global_value as g 8from libs.domain import aggregate 9from libs.domain.datamodels import GameInfo 10from libs.functions import message 11from libs.types import StyleOptions 12from libs.utils import formatter, textutil 13 14if TYPE_CHECKING: 15 from integrations.protocols import MessageParserProtocol 16 17 18def plot(m: "MessageParserProtocol") -> None: 19 """ 20 対局対戦マトリックスの表示 21 22 Args: 23 m (MessageParserProtocol): メッセージデータ 24 25 """ 26 # データ集計 27 title: str = "対局対戦マトリックス" 28 game_info = GameInfo() 29 df = aggregate.matrix_table() 30 if g.params.anonymous: 31 mapping_dict = formatter.anonymous_mapping(df.index.tolist()) 32 df = df.rename(columns=mapping_dict, index=mapping_dict) 33 34 if df.empty: 35 m.set_headline(message.random_reply(m, "no_target"), StyleOptions(title=title)) 36 m.status.result = False 37 return 38 39 if g.params.format.lower() == "csv": 40 file_path = textutil.save_file_path("matrix.csv", True) 41 df.to_csv(file_path) 42 else: 43 file_path = textutil.save_file_path("matrix.txt", True) 44 df.to_markdown(file_path, tablefmt="outline") 45 46 m.set_headline(message.header(game_info, m, "", 1), StyleOptions(title=title)) 47 match g.adapter.interface_type: 48 case "slack" | "discord": 49 m.set_message(file_path, StyleOptions(title=title, use_comment=True, header_hidden=True)) 50 case "web": 51 m.set_message(df, StyleOptions(show_index=True)) 52 case _: 53 m.set_message(df, StyleOptions(show_index=True))
19def plot(m: "MessageParserProtocol") -> None: 20 """ 21 対局対戦マトリックスの表示 22 23 Args: 24 m (MessageParserProtocol): メッセージデータ 25 26 """ 27 # データ集計 28 title: str = "対局対戦マトリックス" 29 game_info = GameInfo() 30 df = aggregate.matrix_table() 31 if g.params.anonymous: 32 mapping_dict = formatter.anonymous_mapping(df.index.tolist()) 33 df = df.rename(columns=mapping_dict, index=mapping_dict) 34 35 if df.empty: 36 m.set_headline(message.random_reply(m, "no_target"), StyleOptions(title=title)) 37 m.status.result = False 38 return 39 40 if g.params.format.lower() == "csv": 41 file_path = textutil.save_file_path("matrix.csv", True) 42 df.to_csv(file_path) 43 else: 44 file_path = textutil.save_file_path("matrix.txt", True) 45 df.to_markdown(file_path, tablefmt="outline") 46 47 m.set_headline(message.header(game_info, m, "", 1), StyleOptions(title=title)) 48 match g.adapter.interface_type: 49 case "slack" | "discord": 50 m.set_message(file_path, StyleOptions(title=title, use_comment=True, header_hidden=True)) 51 case "web": 52 m.set_message(df, StyleOptions(show_index=True)) 53 case _: 54 m.set_message(df, StyleOptions(show_index=True))
対局対戦マトリックスの表示
Arguments:
- m (MessageParserProtocol): メッセージデータ