libs.commands.home_tab.ui_parts
libs/commands/home_tab/ui_parts.py
1""" 2libs/commands/home_tab/ui_parts.py 3""" 4 5import logging 6 7import libs.global_value as g 8 9 10def plain_text(msg: str) -> dict: 11 """プレーンテキストの埋め込み 12 13 Args: 14 msg (str): テキスト 15 16 Returns: 17 dict: ブロック要素 18 """ 19 20 view: dict = {"type": "home", "blocks": []} 21 view["blocks"].append({"type": "section", "text": {}}) 22 view["blocks"][0]["text"] = {"type": "mrkdwn", "text": msg} 23 24 return view 25 26 27def divider() -> None: 28 """境界線を引く""" 29 g.app_var["view"]["blocks"].append({"type": "divider", }) 30 g.app_var["no"] += 1 31 32 33def header(text: str = "dummy") -> None: 34 """ヘッダ生成 35 36 Args: 37 text (str, optional): ヘッダテキスト. Defaults to "dummy". 38 """ 39 40 g.app_var["view"]["blocks"].append({"type": "header", "text": {}}) 41 g.app_var["view"]["blocks"][g.app_var["no"]]["text"] = {"type": "plain_text", "text": text} 42 g.app_var["no"] += 1 43 44 45def button(text: str, action_id: str, style: str | bool = False) -> None: 46 """ボタン配置 47 48 Args: 49 text (str, optional): 表示テキスト 50 action_id (str): action_id 51 style (str | bool, optional): 表示スタイル. Defaults to False. 52 """ 53 54 g.app_var["view"]["blocks"].append({"type": "actions", "elements": [{}]}) 55 g.app_var["view"]["blocks"][g.app_var["no"]]["elements"][0] = {"type": "button", "text": {}, "action_id": action_id} 56 g.app_var["view"]["blocks"][g.app_var["no"]]["elements"][0]["text"] = {"type": "plain_text", "text": text} 57 if style: 58 g.app_var["view"]["blocks"][g.app_var["no"]]["elements"][0].update({"style": style}) 59 60 g.app_var["no"] += 1 61 62 63def radio_buttons(id_suffix: str, title: str, flag: dict) -> None: 64 """オプション選択メニュー 65 66 Args: 67 id_suffix (str): block_id, action_id 68 title (str): 表示タイトル 69 flag (dict, optional): 表示する選択項目 70 """ 71 72 g.app_var["view"]["blocks"].append({"type": "input", "block_id": f"bid-{id_suffix}", "element": {}}) 73 g.app_var["view"]["blocks"][g.app_var["no"]]["label"] = {"type": "plain_text", "text": title} 74 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["type"] = "radio_buttons" 75 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["action_id"] = f"aid-{id_suffix}" 76 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["initial_option"] = { # 先頭の選択肢はチェック済みにする 77 "text": {"type": "plain_text", "text": flag[next(iter(flag))]}, "value": next(iter(flag)) 78 } 79 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"] = [] 80 for k, v in flag.items(): 81 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 82 {"text": {"type": "plain_text", "text": v}, "value": k} 83 ) 84 g.app_var["no"] += 1 85 86 87def checkboxes(id_suffix: str, title: str, flag: dict | None = None, initial: list | None = None) -> None: 88 """チェックボックス選択メニュー 89 90 Args: 91 id_suffix (str): block_id, action_id 92 title (str): 表示タイトル 93 flag (dict, optional): 表示する選択項目 94 initial (list, optional): チェック済み項目. Defaults to None. 95 """ 96 97 if flag is None: 98 flag = {} 99 100 g.app_var["view"]["blocks"].append({"type": "input", "block_id": f"bid-{id_suffix}", "element": {}}) 101 g.app_var["view"]["blocks"][g.app_var["no"]]["label"] = {"type": "plain_text", "text": title} 102 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["type"] = "checkboxes" 103 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["action_id"] = f"aid-{id_suffix}" 104 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"] = [] 105 if initial: 106 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["initial_options"] = [] 107 else: 108 initial = [] # None -> list 109 110 for k, v in flag.items(): 111 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 112 {"text": {"type": "plain_text", "text": v}, "value": k} 113 ) 114 if k in initial: 115 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["initial_options"].append( 116 {"text": {"type": "plain_text", "text": v}, "value": k} 117 ) 118 119 g.app_var["no"] += 1 120 121 122def user_select_pulldown(text: str = "dummy", add_list: list | None = None) -> None: 123 """プレイヤー選択プルダウンメニュー 124 125 Args: 126 text (str, optional): 表示テキスト. Defaults to "dummy". 127 add_list (list | None, optional): プレイヤーリスト. Defaults to None. 128 """ 129 130 g.app_var["view"]["blocks"].append({"type": "input", "block_id": "bid-user_select", "element": {}}) 131 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["type"] = "static_select" 132 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["action_id"] = "player" 133 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["placeholder"] = {"type": "plain_text", "text": "Select an item"} 134 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"] = [] 135 136 if add_list: 137 for val in add_list: 138 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 139 {"text": {"type": "plain_text", "text": val}, "value": val} 140 ) 141 142 for name in set(g.member_list.values()): 143 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 144 {"text": {"type": "plain_text", "text": name}, "value": name} 145 ) 146 147 g.app_var["view"]["blocks"][g.app_var["no"]]["label"] = {"type": "plain_text", "text": text} 148 149 g.app_var["no"] += 1 150 151 152def multi_select_pulldown(text: str = "dummy", add_list: list | None = None) -> None: 153 """複数プレイヤー選択プルダウンメニュー 154 155 Args: 156 text (str, optional): 表示テキスト. Defaults to "dummy". 157 add_list (list | None, optional): プレイヤーリスト. Defaults to None. 158 """ 159 g.app_var["view"]["blocks"].append({"type": "input", "block_id": "bid-multi_select", "element": {}}) 160 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["type"] = "multi_static_select" 161 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["action_id"] = "player" 162 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["placeholder"] = {"type": "plain_text", "text": "Select an item"} 163 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"] = [] 164 165 if add_list: 166 for val in add_list: 167 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 168 {"text": {"type": "plain_text", "text": val}, "value": val} 169 ) 170 171 for name in set(g.member_list.values()): 172 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 173 {"text": {"type": "plain_text", "text": name}, "value": name} 174 ) 175 176 g.app_var["view"]["blocks"][g.app_var["no"]]["label"] = {"type": "plain_text", "text": text} 177 178 g.app_var["no"] += 1 179 180 181def input_ranked(block_id: str | bool = False) -> None: 182 """ランキング上限入力テキストボックス 183 184 Args: 185 block_id (str | bool, optional): block_id. Defaults to False. 186 """ 187 188 if block_id: 189 g.app_var["view"]["blocks"].append({"type": "input", "block_id": block_id, "element": {}, "label": {}}) 190 else: 191 g.app_var["view"]["blocks"].append({"type": "input", "element": {}, "label": {}}) 192 193 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"type": "number_input"}) 194 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"is_decimal_allowed": True}) 195 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"initial_value": str(g.cfg.ranking.ranked)}) 196 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"min_value": "1"}) 197 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"action_id": "aid-ranked"}) 198 g.app_var["view"]["blocks"][g.app_var["no"]]["label"].update({"type": "plain_text", "text": "出力順位上限"}) 199 200 g.app_var["no"] += 1 201 202 203def modalperiod_selection() -> dict: 204 """日付選択 205 206 Returns: 207 dict: ブロック要素 208 """ 209 210 view: dict = {"type": "modal", "callback_id": f"{g.app_var["screen"]}_ModalPeriodSelection"} 211 view["title"] = {"type": "plain_text", "text": "検索範囲指定"} 212 view["submit"] = {"type": "plain_text", "text": "決定"} 213 view["close"] = {"type": "plain_text", "text": "取消"} 214 215 view["blocks"] = [] 216 view["blocks"].append({"type": "input", "element": {}, "label": {}}) 217 view["blocks"][0]["element"].update({"type": "datepicker"}) 218 view["blocks"][0]["element"].update({"initial_date": g.app_var["sday"]}) 219 view["blocks"][0]["element"].update({"placeholder": {"type": "plain_text", "text": "Select a date"}}) 220 view["blocks"][0]["element"].update({"action_id": "aid-sday"}) 221 view["blocks"][0]["label"].update({"type": "plain_text", "text": "開始日"}) 222 view["blocks"].append({"type": "input", "element": {}, "label": {}}) 223 view["blocks"][1]["element"].update({"type": "datepicker"}) 224 view["blocks"][1]["element"].update({"initial_date": g.app_var["eday"]}) 225 view["blocks"][1]["element"].update({"placeholder": {"type": "plain_text", "text": "Select a date"}}) 226 view["blocks"][1]["element"].update({"action_id": "aid-eday"}) 227 view["blocks"][1]["label"].update({"type": "plain_text", "text": "終了日"}) 228 229 return view 230 231 232def set_command_option(body) -> tuple[list, list, dict]: 233 """選択オプションの内容のフラグをセット 234 235 Args: 236 body (dict): イベント内容 237 238 Returns: 239 tuple[list, list, dict]: 240 - list: コマンドに追加する文字列 241 - list: viewに表示するメッセージ 242 - dict: 変更されるフラグ 243 """ 244 245 update_flag: dict = {} 246 247 # 検索設定 248 argument: list = [] 249 search_options = body["view"]["state"]["values"] 250 logging.info("search options: %s", search_options) 251 252 app_msg: list = [] 253 g.app_var.update(operation=None) 254 255 if "bid-user_select" in search_options: 256 user_select = search_options["bid-user_select"]["player"]["selected_option"] 257 if user_select is not None: 258 if "value" in user_select: 259 player = user_select["value"] 260 app_msg.append(f"対象プレイヤー:{player}") 261 argument.append(player) 262 263 if "bid-multi_select" in search_options: 264 user_list = search_options["bid-multi_select"]["player"]["selected_options"] 265 for _, val in enumerate(user_list): 266 argument.append(val["value"]) 267 268 if "bid-search_range" in search_options: 269 match search_options["bid-search_range"]["aid-search_range"]["selected_option"]["value"]: 270 case "指定": 271 app_msg.append(f"集計範囲:{g.app_var["sday"]} ~ {g.app_var["eday"]}") 272 argument.extend([g.app_var["sday"], g.app_var["eday"]]) 273 case "全部": 274 app_msg.append("集計範囲:全部") 275 argument.append("全部") 276 case _ as select_item: 277 app_msg.append(f"集計範囲:{select_item}") 278 argument.append(select_item) 279 280 for id_suffix in ("search_option", "display_option", "output_option"): 281 if f"bid-{id_suffix}" in search_options: 282 match search_options[f"bid-{id_suffix}"][f"aid-{id_suffix}"].get("type"): 283 case "checkboxes": 284 selected_options = search_options[f"bid-{id_suffix}"][f"aid-{id_suffix}"].get("selected_options") 285 case "radio_buttons": 286 selected_options = [search_options[f"bid-{id_suffix}"][f"aid-{id_suffix}"].get("selected_option")] 287 case _: 288 continue 289 290 for _, val in enumerate(selected_options): 291 match val["value"]: 292 case "unregistered_replace": 293 update_flag.update(unregistered_replace=False) 294 case "versus_matrix": 295 update_flag.update(versus_matrix=True) 296 case "game_results": 297 update_flag.update(game_results=True) 298 case "verbose": 299 update_flag.update(game_results=True) 300 update_flag.update(verbose=True) 301 case "score_comparisons": 302 update_flag.update(score_comparisons=True) 303 g.app_var.update(operation=None) 304 case _ as option: 305 g.app_var.update(operation=option) 306 307 app_msg.append("集計中…") 308 return (argument, app_msg, update_flag)
def
plain_text(msg: str) -> dict:
11def plain_text(msg: str) -> dict: 12 """プレーンテキストの埋め込み 13 14 Args: 15 msg (str): テキスト 16 17 Returns: 18 dict: ブロック要素 19 """ 20 21 view: dict = {"type": "home", "blocks": []} 22 view["blocks"].append({"type": "section", "text": {}}) 23 view["blocks"][0]["text"] = {"type": "mrkdwn", "text": msg} 24 25 return view
プレーンテキストの埋め込み
Arguments:
- msg (str): テキスト
Returns:
dict: ブロック要素
def
divider() -> None:
28def divider() -> None: 29 """境界線を引く""" 30 g.app_var["view"]["blocks"].append({"type": "divider", }) 31 g.app_var["no"] += 1
境界線を引く
def
header(text: str = 'dummy') -> None:
34def header(text: str = "dummy") -> None: 35 """ヘッダ生成 36 37 Args: 38 text (str, optional): ヘッダテキスト. Defaults to "dummy". 39 """ 40 41 g.app_var["view"]["blocks"].append({"type": "header", "text": {}}) 42 g.app_var["view"]["blocks"][g.app_var["no"]]["text"] = {"type": "plain_text", "text": text} 43 g.app_var["no"] += 1
ヘッダ生成
Arguments:
- text (str, optional): ヘッダテキスト. Defaults to "dummy".
def
checkboxes( id_suffix: str, title: str, flag: dict | None = None, initial: list | None = None) -> None:
88def checkboxes(id_suffix: str, title: str, flag: dict | None = None, initial: list | None = None) -> None: 89 """チェックボックス選択メニュー 90 91 Args: 92 id_suffix (str): block_id, action_id 93 title (str): 表示タイトル 94 flag (dict, optional): 表示する選択項目 95 initial (list, optional): チェック済み項目. Defaults to None. 96 """ 97 98 if flag is None: 99 flag = {} 100 101 g.app_var["view"]["blocks"].append({"type": "input", "block_id": f"bid-{id_suffix}", "element": {}}) 102 g.app_var["view"]["blocks"][g.app_var["no"]]["label"] = {"type": "plain_text", "text": title} 103 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["type"] = "checkboxes" 104 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["action_id"] = f"aid-{id_suffix}" 105 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"] = [] 106 if initial: 107 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["initial_options"] = [] 108 else: 109 initial = [] # None -> list 110 111 for k, v in flag.items(): 112 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 113 {"text": {"type": "plain_text", "text": v}, "value": k} 114 ) 115 if k in initial: 116 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["initial_options"].append( 117 {"text": {"type": "plain_text", "text": v}, "value": k} 118 ) 119 120 g.app_var["no"] += 1
チェックボックス選択メニュー
Arguments:
- id_suffix (str): block_id, action_id
- title (str): 表示タイトル
- flag (dict, optional): 表示する選択項目
- initial (list, optional): チェック済み項目. Defaults to None.
def
user_select_pulldown(text: str = 'dummy', add_list: list | None = None) -> None:
123def user_select_pulldown(text: str = "dummy", add_list: list | None = None) -> None: 124 """プレイヤー選択プルダウンメニュー 125 126 Args: 127 text (str, optional): 表示テキスト. Defaults to "dummy". 128 add_list (list | None, optional): プレイヤーリスト. Defaults to None. 129 """ 130 131 g.app_var["view"]["blocks"].append({"type": "input", "block_id": "bid-user_select", "element": {}}) 132 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["type"] = "static_select" 133 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["action_id"] = "player" 134 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["placeholder"] = {"type": "plain_text", "text": "Select an item"} 135 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"] = [] 136 137 if add_list: 138 for val in add_list: 139 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 140 {"text": {"type": "plain_text", "text": val}, "value": val} 141 ) 142 143 for name in set(g.member_list.values()): 144 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 145 {"text": {"type": "plain_text", "text": name}, "value": name} 146 ) 147 148 g.app_var["view"]["blocks"][g.app_var["no"]]["label"] = {"type": "plain_text", "text": text} 149 150 g.app_var["no"] += 1
プレイヤー選択プルダウンメニュー
Arguments:
- text (str, optional): 表示テキスト. Defaults to "dummy".
- add_list (list | None, optional): プレイヤーリスト. Defaults to None.
def
multi_select_pulldown(text: str = 'dummy', add_list: list | None = None) -> None:
153def multi_select_pulldown(text: str = "dummy", add_list: list | None = None) -> None: 154 """複数プレイヤー選択プルダウンメニュー 155 156 Args: 157 text (str, optional): 表示テキスト. Defaults to "dummy". 158 add_list (list | None, optional): プレイヤーリスト. Defaults to None. 159 """ 160 g.app_var["view"]["blocks"].append({"type": "input", "block_id": "bid-multi_select", "element": {}}) 161 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["type"] = "multi_static_select" 162 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["action_id"] = "player" 163 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["placeholder"] = {"type": "plain_text", "text": "Select an item"} 164 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"] = [] 165 166 if add_list: 167 for val in add_list: 168 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 169 {"text": {"type": "plain_text", "text": val}, "value": val} 170 ) 171 172 for name in set(g.member_list.values()): 173 g.app_var["view"]["blocks"][g.app_var["no"]]["element"]["options"].append( 174 {"text": {"type": "plain_text", "text": name}, "value": name} 175 ) 176 177 g.app_var["view"]["blocks"][g.app_var["no"]]["label"] = {"type": "plain_text", "text": text} 178 179 g.app_var["no"] += 1
複数プレイヤー選択プルダウンメニュー
Arguments:
- text (str, optional): 表示テキスト. Defaults to "dummy".
- add_list (list | None, optional): プレイヤーリスト. Defaults to None.
def
input_ranked(block_id: str | bool = False) -> None:
182def input_ranked(block_id: str | bool = False) -> None: 183 """ランキング上限入力テキストボックス 184 185 Args: 186 block_id (str | bool, optional): block_id. Defaults to False. 187 """ 188 189 if block_id: 190 g.app_var["view"]["blocks"].append({"type": "input", "block_id": block_id, "element": {}, "label": {}}) 191 else: 192 g.app_var["view"]["blocks"].append({"type": "input", "element": {}, "label": {}}) 193 194 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"type": "number_input"}) 195 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"is_decimal_allowed": True}) 196 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"initial_value": str(g.cfg.ranking.ranked)}) 197 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"min_value": "1"}) 198 g.app_var["view"]["blocks"][g.app_var["no"]]["element"].update({"action_id": "aid-ranked"}) 199 g.app_var["view"]["blocks"][g.app_var["no"]]["label"].update({"type": "plain_text", "text": "出力順位上限"}) 200 201 g.app_var["no"] += 1
ランキング上限入力テキストボックス
Arguments:
- block_id (str | bool, optional): block_id. Defaults to False.
def
modalperiod_selection() -> dict:
204def modalperiod_selection() -> dict: 205 """日付選択 206 207 Returns: 208 dict: ブロック要素 209 """ 210 211 view: dict = {"type": "modal", "callback_id": f"{g.app_var["screen"]}_ModalPeriodSelection"} 212 view["title"] = {"type": "plain_text", "text": "検索範囲指定"} 213 view["submit"] = {"type": "plain_text", "text": "決定"} 214 view["close"] = {"type": "plain_text", "text": "取消"} 215 216 view["blocks"] = [] 217 view["blocks"].append({"type": "input", "element": {}, "label": {}}) 218 view["blocks"][0]["element"].update({"type": "datepicker"}) 219 view["blocks"][0]["element"].update({"initial_date": g.app_var["sday"]}) 220 view["blocks"][0]["element"].update({"placeholder": {"type": "plain_text", "text": "Select a date"}}) 221 view["blocks"][0]["element"].update({"action_id": "aid-sday"}) 222 view["blocks"][0]["label"].update({"type": "plain_text", "text": "開始日"}) 223 view["blocks"].append({"type": "input", "element": {}, "label": {}}) 224 view["blocks"][1]["element"].update({"type": "datepicker"}) 225 view["blocks"][1]["element"].update({"initial_date": g.app_var["eday"]}) 226 view["blocks"][1]["element"].update({"placeholder": {"type": "plain_text", "text": "Select a date"}}) 227 view["blocks"][1]["element"].update({"action_id": "aid-eday"}) 228 view["blocks"][1]["label"].update({"type": "plain_text", "text": "終了日"}) 229 230 return view
日付選択
Returns:
dict: ブロック要素
def
set_command_option(body) -> tuple[list, list, dict]:
233def set_command_option(body) -> tuple[list, list, dict]: 234 """選択オプションの内容のフラグをセット 235 236 Args: 237 body (dict): イベント内容 238 239 Returns: 240 tuple[list, list, dict]: 241 - list: コマンドに追加する文字列 242 - list: viewに表示するメッセージ 243 - dict: 変更されるフラグ 244 """ 245 246 update_flag: dict = {} 247 248 # 検索設定 249 argument: list = [] 250 search_options = body["view"]["state"]["values"] 251 logging.info("search options: %s", search_options) 252 253 app_msg: list = [] 254 g.app_var.update(operation=None) 255 256 if "bid-user_select" in search_options: 257 user_select = search_options["bid-user_select"]["player"]["selected_option"] 258 if user_select is not None: 259 if "value" in user_select: 260 player = user_select["value"] 261 app_msg.append(f"対象プレイヤー:{player}") 262 argument.append(player) 263 264 if "bid-multi_select" in search_options: 265 user_list = search_options["bid-multi_select"]["player"]["selected_options"] 266 for _, val in enumerate(user_list): 267 argument.append(val["value"]) 268 269 if "bid-search_range" in search_options: 270 match search_options["bid-search_range"]["aid-search_range"]["selected_option"]["value"]: 271 case "指定": 272 app_msg.append(f"集計範囲:{g.app_var["sday"]} ~ {g.app_var["eday"]}") 273 argument.extend([g.app_var["sday"], g.app_var["eday"]]) 274 case "全部": 275 app_msg.append("集計範囲:全部") 276 argument.append("全部") 277 case _ as select_item: 278 app_msg.append(f"集計範囲:{select_item}") 279 argument.append(select_item) 280 281 for id_suffix in ("search_option", "display_option", "output_option"): 282 if f"bid-{id_suffix}" in search_options: 283 match search_options[f"bid-{id_suffix}"][f"aid-{id_suffix}"].get("type"): 284 case "checkboxes": 285 selected_options = search_options[f"bid-{id_suffix}"][f"aid-{id_suffix}"].get("selected_options") 286 case "radio_buttons": 287 selected_options = [search_options[f"bid-{id_suffix}"][f"aid-{id_suffix}"].get("selected_option")] 288 case _: 289 continue 290 291 for _, val in enumerate(selected_options): 292 match val["value"]: 293 case "unregistered_replace": 294 update_flag.update(unregistered_replace=False) 295 case "versus_matrix": 296 update_flag.update(versus_matrix=True) 297 case "game_results": 298 update_flag.update(game_results=True) 299 case "verbose": 300 update_flag.update(game_results=True) 301 update_flag.update(verbose=True) 302 case "score_comparisons": 303 update_flag.update(score_comparisons=True) 304 g.app_var.update(operation=None) 305 case _ as option: 306 g.app_var.update(operation=option) 307 308 app_msg.append("集計中…") 309 return (argument, app_msg, update_flag)
選択オプションの内容のフラグをセット
Arguments:
- body (dict): イベント内容
Returns:
tuple[list, list, dict]:
- list: コマンドに追加する文字列
- list: viewに表示するメッセージ
- dict: 変更されるフラグ