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))
def plot(m: integrations.protocols.MessageParserProtocol) -> None:
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): メッセージデータ