セパレート機能設定例 ==================== 機能概要 -------- セパレート機能は `../../functions/output/results/index` などで集計するデータを *チャンネル識別子* で区別する設定となる。 データに記録されるゲーム結果には「 *成績記録キーワード* 」が発行されたチャンネル固有の *チャンネル識別子* が保存され、「どこから入力されたデータか」を区別できるようになっている。 チャンネル識別子のフォーマット ++++++++++++++++++++++++++++++ *チャンネル識別子* のデフォルトフォーマットは、連携先サービス名のプレフィックスを持ち、そのサービス内で用いられる :setting_section:`channel_id` などのチャンネルを識別するためのIDが続く形をとる。 ``<サービス名>_<サービス内で使われるチャンネルID>`` | *チャンネル識別子* は `setting-section` などで :setting_section:`channel_id` を定義することで自由に変更できる。 | チャンネル単位でのグループ分けを行ったり、Slackワークスペースの変更対応などで利用できる。 集計データ抽出ルール ++++++++++++++++++++ | 基本となるデータ抽出条件は `ルールセット` 単位となり、「 *ルール識別子* 」が抽出条件として指定されている。 | 「 *成績記録キーワード* 」で保存される成績は `keyword_mapping-section` によってどの `ルールセット` を使うかが定義されている。 | 異なるサービスや異なるチャンネルでも同じマッピングの定義であれば、同じ「 *ルール識別子* 」が使用される。 | 同じ `ルールセット` を使用していれば、Discordで入力された成績データをSlackで参照できる。 セパレート機能を有効にした場合、データの抽出条件に *チャンネル識別子* が追加され、集計コマンドを発行したチャンネルの *チャンネル識別子* を持つデータだけが集計対象となる。 付与される *チャンネル識別子* は「 `function-help` 」機能で内容を確認できる。 セパレート機能設定箇所 ++++++++++++++++++++++ | ``separate`` キーを ``True`` にセットすれば有効になる。 | 設定できるセクションは以下になる(メイン設定内限定)。 - settingセクション - 各サービスのセクション - チャンネル個別設定 設定箇所による有効範囲は以下のようになる。 .. code-block:: ini :caption: メイン設定 [setting] separate = True メイン設定のセパレート機能有効化は、全サービス、全チャンネルのデータを分けて集計するようになる。 - Slack / Discord で入力されたデータを区別 - 各サービス内の各チャンネルで入力されたデータを区別 .. code-block:: ini :caption: サービス設定 [slack] separate = True [discord] separate = True | サービス設定のセパレート機能有効化は、Slack / Discord のデータを分ける。 | 同じ `ルールセット` の記録でもSlackで実行した集計コマンドの結果にDiscordから登録されたデータは含まれない。 該当サービスのすべてチャンネルでセパレート機能が有効になる。 .. note:: | 1つのアプリケーションから複数のサービスは利用できない。 | アプリケーション単体ではsettingセクションで定義したときと同じ動きになる。 利用シーンとしては以下のようなものが考えられる。 - アプリケーションを複数立ち上げ、同じDBを参照させている - Slack + Web など - チャンネル単位で :setting_section:`channel_id` を設定してグループを作っており、チャンネル個別設定でセパレートせずにサービス設定でまとめてセパレートしている - など .. code-block:: ini :caption: チャンネル個別設定 [slack_Cxxxxxxxxxx] separate = True [discord_xxxxxxxxxxxxxxxxxxx] separate = True チャンネル個別設定で使用するセクション名は「**<サービス名>_<サービス内で使われるチャンネルID>** 」となる(変更不可)。 チャンネルAで有効、チャンネルBは無効とし、同じ `ルールセット` の記録を集計する場合は以下のように集計される。 **チャンネルA** - 集計コマンドの抽出条件に *チャンネル識別子* が追加される - チャンネルAで入力されたデータ:集計対象 - チャンネルBで入力されたデータ:集計対象外 **チャンネルB** - 集計コマンドの抽出条件は *ルール識別子* のみ - チャンネルAで入力されたデータ:集計対象 - チャンネルBで入力されたデータ:集計対象 チャンネル設定情報 ++++++++++++++++++ | 「 `function-help` 」コマンドにチャンネルの設定情報が表示される。 | セパレート機能が有効になっているか、使用される *チャンネル識別子* の確認ができる。 .. code-block:: text :caption: Slack :emphasize-lines: 2, 4 【チャンネル設定情報】 チャンネル識別子:slack_Cxxxxxxxxxx チャンネル個別設定:--- セパレート:有効 データベースファイル:mahjong.db .. code-block:: text :caption: Discord :emphasize-lines: 2, 4 【チャンネル設定情報】 チャンネル識別子:discord_xxxxxxxxxxxxxxxxxxx チャンネル個別設定:--- セパレート:有効 データベースファイル:mahjong.db 設定例 ------ グループ化設定例 ++++++++++++++++ 共通する *チャンネル識別子* 設定することで集計範囲をコントロールできる。 サービス単位でグループ化 連携先のサービスからの成績登録はそのサービスの全チャンネルで利用するが、サービスを跨いで集計しない。 .. code-block:: ini :caption: メイン設定 [setting] separate = True [slack] channel_id = slack_data [discord] channel_id = discord_data | Slackで扱う *チャンネル識別子* が全チャンネルで「slack_data」となる。Discordも同様。 | セパレート機能が有効なので各サービスの記録は分けて集計される。 チャンネル単位でグループ化 3つのチャンネルのうち、1つのチャンネルだけ別集計にする。 .. code-block:: ini :caption: メイン設定 [slack] separate = True [slack_Cxxxxxxxxx1] # チャンネルAの設定 channel_id = slack_data1 [slack_Cxxxxxxxxx2] # チャンネルBの設定 channel_id = slack_data1 [slack_Cxxxxxxxxx3] # チャンネルCの設定 channel_id = slack_data2 | チャンネルAとチャンネルBの集計結果にはチャンネルCの記録は含まれない。 | チャンネルCの集計結果はチャンネルCだけの記録で集計される。 その他の設定例 ++++++++++++++ Slackワークスペースの変更 旧ワークスペースで記録された *チャンネル識別子* を新ワークスペースに引き継ぐ。 .. code-block:: ini :caption: メイン設定 [slack_CxxxxxxxNEW] # 新ワークスペースのチャンネルID # 旧ワークスペースで使用していた *チャンネル識別子* を設定する channel_id = slack_CxxxxxxxOLD | セパレート機能を使わない場合は *チャンネル識別子* の変更の必要性はない。 | 後にセパレート機能を有効にする可能性を考慮し、新旧で *チャンネル識別子* を合わせておくとよい。 .. warning:: *チャンネル識別子* の変更を行わない場合、セパレート機能を有効にすると旧ワークスペースのデータが集計の対象から外れることになる。