「スレ状態を管理するファイルの導入」「!774、!gobiコマンドの実装」「本文内でのシステムメッセージの構造を変更」等 #41

Merged
stat2 merged 5 commits from konkon-fox/delightly-v2fork:main into main 2023-11-11 22:28:46 +09:00
Contributor

スレ状態を管理するファイルの導入

概要

現在のdelightly-v2forkでは、スレ内のレス全体に適用されるコマンドは!addで'>>1'に追記し、投稿時点で'>>1'にコマンド文言があるかどうかで発動判定を行っています。(例)!noid!idchange
今回実装する!774!gobiコマンドについても、同様にスレ内のレス全体に影響を与えるコマンドとなります。
しかし、!774!gobiは単なるオンオフではなく文字列を情報として持ちます。!addで追記していく形でも実装不可能ではないですが、>>1が煩雑になってしまい発動時の処理も複雑なものになってしまいます。

そこで新たに個々のスレの状態を管理するファイルを導入することで処理を簡便化します。
ファイルは/${bbs}/threads-states.cgiに生成されます。${bbs}は板名です。
cgiである理由は、該当ディレクトリのcgiへのアクセスが既に.htaccessなりで拒否されているからです。
ファイルの内容は以下の変数(連想配列)をjson_encodeしたものです。

@var array<string, array{'774': string, 'gobi': string}> $threadsStates

キーはスレッド番号となります。
!774!gobiコマンド内ではこのファイルを読み書きすることでスレの状態を取得したり更新したりします。
現在の項目は二項目ですが今後新たにコマンドを追加する際にも有効活用可能なはずです。

更新をする際のクラス

スレ情報を更新する際に使用するThreadsStatesUpdaterクラスを新規作成しました。
get()put()で簡潔に処理を書くことが可能です。get()put()の間ファイルがロックされます。

!774コマンドの実装

コードについて

設定時と発動時で処理の内容とタイミングが変わるのでファイルは分けております。

概要

名前欄未入力時のデフォルト名無しを任意の文字列に設定します。
スレ主、管理人、コマンド権限を持つCAPが設定可能です。
本文中に!774:◯◯で、デフォ名無しを◯◯に変更します。
!774:の後に何も入れないか、すぐ改行することで解除できます。

!gobiコマンドの実装

コードについて

設定時と発動時で処理の内容とタイミングが変わるのでファイルは分けております。

概要

全ての投稿本文に指定された語尾が自動で追加されます。
スレ主、管理人、コマンド権限を持つCAPが設定可能です。
本文中に!gobi:◯◯:で、語尾を◯◯に変更します。
!gobi::で解除できます。
注意点としては:で挟む必要があるということです。これは!gobiコマンドの中に改行を含めることが可能だからです。※!chtt:!774:は改行も終了時の合図になるので:で閉じる必要がありません。

本文内でのシステムメッセージの構造を変更

概要

本文の構造を以下のように三分割して表示するように変更しました。

(投稿主による本文)
<hr>
(コマンド使用によるシステムメッセージ)
<hr>
(スレ状態を示すシステムメッセージ)

1段目には投稿主が入力した本文が表示されます。
2段目には!chttコマンドの履歴やシステムメッセージが表示されます。情報が追記されていきます。
3段目には現在のスレのデフォルト名無しや語尾等の状態が表示されます。情報は最新のものが表示されます。

3段目が存在するのは>>1のみです。
3段目の更新はtest/extend/extra-commands/utilities/show-threads-states.phpによって行われます。

汎用関数addSystemMessageの実装

test/extend/extra-commands/utilities/add-system-message.phpにより追加された関数です。
本文の2段目に文章を追記する関数で、主にコマンド使用時に利用可能です。

## スレ状態を管理するファイルの導入 ### 概要 現在のdelightly-v2forkでは、スレ内のレス全体に適用されるコマンドは`!add`で'>>1'に追記し、投稿時点で'>>1'にコマンド文言があるかどうかで発動判定を行っています。(例)`!noid`、`!idchange` 今回実装する`!774`や`!gobi`コマンドについても、同様にスレ内のレス全体に影響を与えるコマンドとなります。 しかし、`!774`や`!gobi`は単なるオンオフではなく文字列を情報として持ちます。`!add`で追記していく形でも実装不可能ではないですが、`>>1`が煩雑になってしまい発動時の処理も複雑なものになってしまいます。 そこで新たに個々のスレの状態を管理するファイルを導入することで処理を簡便化します。 ファイルは`/${bbs}/threads-states.cgi`に生成されます。`${bbs}`は板名です。 `cgi`である理由は、該当ディレクトリの`cgi`へのアクセスが既に`.htaccess`なりで拒否されているからです。 ファイルの内容は以下の変数(連想配列)を`json_encode`したものです。 ``` @var array<string, array{'774': string, 'gobi': string}> $threadsStates ``` キーはスレッド番号となります。 `!774`、`!gobi`コマンド内ではこのファイルを読み書きすることでスレの状態を取得したり更新したりします。 現在の項目は二項目ですが今後新たにコマンドを追加する際にも有効活用可能なはずです。 ### 更新をする際のクラス スレ情報を更新する際に使用する`ThreadsStatesUpdater`クラスを新規作成しました。 `get()`と`put()`で簡潔に処理を書くことが可能です。`get()`と`put()`の間ファイルがロックされます。 ## `!774`コマンドの実装 ### コードについて 設定時と発動時で処理の内容とタイミングが変わるのでファイルは分けております。 ### 概要 名前欄未入力時のデフォルト名無しを任意の文字列に設定します。 スレ主、管理人、コマンド権限を持つCAPが設定可能です。 本文中に`!774:◯◯`で、デフォ名無しを◯◯に変更します。 `!774:`の後に何も入れないか、すぐ改行することで解除できます。 ## `!gobi`コマンドの実装 ### コードについて 設定時と発動時で処理の内容とタイミングが変わるのでファイルは分けております。 ### 概要 全ての投稿本文に指定された語尾が自動で追加されます。 スレ主、管理人、コマンド権限を持つCAPが設定可能です。 本文中に`!gobi:◯◯:`で、語尾を◯◯に変更します。 `!gobi::`で解除できます。 注意点としては`:`で挟む必要があるということです。これは`!gobi`コマンドの中に改行を含めることが可能だからです。※`!chtt:`や`!774:`は改行も終了時の合図になるので`:`で閉じる必要がありません。 ## 本文内でのシステムメッセージの構造を変更 ### 概要 本文の構造を以下のように三分割して表示するように変更しました。 ``` (投稿主による本文) <hr> (コマンド使用によるシステムメッセージ) <hr> (スレ状態を示すシステムメッセージ) ``` 1段目には投稿主が入力した本文が表示されます。 2段目には`!chtt`コマンドの履歴やシステムメッセージが表示されます。情報が追記されていきます。 3段目には現在のスレのデフォルト名無しや語尾等の状態が表示されます。情報は最新のものが表示されます。 3段目が存在するのは`>>1`のみです。 3段目の更新は`test/extend/extra-commands/utilities/show-threads-states.php`によって行われます。 ### 汎用関数`addSystemMessage`の実装 `test/extend/extra-commands/utilities/add-system-message.php`により追加された関数です。 本文の2段目に文章を追記する関数で、主にコマンド使用時に利用可能です。
konkon-fox added 3 commits 2023-10-30 02:14:38 +09:00
Author
Contributor

上記に説明した実装を行いました。
変更点が多くなってしまいましたが、よろしければテストしてコードレビューをいただけると幸いです。
また、ご質問や修正案等があればどうぞお知らせください。

こちらのプルリクエストは確認点が多いので #40 を優先でお願いします。

上記に説明した実装を行いました。 変更点が多くなってしまいましたが、よろしければテストしてコードレビューをいただけると幸いです。 また、ご質問や修正案等があればどうぞお知らせください。 こちらのプルリクエストは確認点が多いので https://git.3chan.cc/stat2/delightly-v2fork/pulls/40 を優先でお願いします。
konkon-fox added 1 commit 2023-10-30 02:19:07 +09:00
Contributor

確認しましたが、全ての機能が正常に動作しているようです。

このプルリクエストの趣旨とずれる余談ですが
/test/extend/extra-commands下に置かれている各種php内でコマンド有効判定や主判定等の同じ処理が書かれているので、将来的にコマンドが更に増える可能性がある事を考えると主用コマンド 一般ユーザも使えるコマンド 任意のコマンド有効時処理みたいに共通項を括りだして一括で判定したらいいのかなと考えていました。

確認しましたが、全ての機能が正常に動作しているようです。 このプルリクエストの趣旨とずれる余談ですが `/test/extend/extra-commands`下に置かれている各種php内でコマンド有効判定や主判定等の同じ処理が書かれているので、将来的にコマンドが更に増える可能性がある事を考えると`主用コマンド` `一般ユーザも使えるコマンド` `任意のコマンド有効時処理`みたいに共通項を括りだして一括で判定したらいいのかなと考えていました。
Author
Contributor

SaturdayTheMsgrさん、コードのご確認及びテストありがとうございます。
現状特に問題無さそうなので(#40)がマージされたらWIPは外そうと思います。

余談についてですが、以下のようにbbs-main.php内で判定するイメージでしょうか。

// 主用コマンド
if($supervisor || $admin) {
    // !chttコマンド
    @include './extend/extra-commands/chtt.php';
    // !774設定
    @include './extend/extra-commands/set-774.php';
    // !gobi設定
    @include './extend/extra-commands/set-gobi.php';
}
// 一般ユーザも使えるコマンド
// !774適用
@include './extend/extra-commands/apply-774.php';
// !gobi適用
@include './extend/extra-commands/apply-gobi.php';
// スレ状態更新処理
@include './extend/extra-commands/utilities/show-threads-states.php';
// !xDy(dice)コマンド
@include './extend/extra-commands/dice.php';

上記のイメージだとするならば、主用誰でもという単位で分類することで可読性の向上や個々ファイルでの判定漏れを防ぐというメリットがありそうです。
ただ懸念点としては、他のコマンドとの処理の順番が重要なコマンドを追加した際に主用誰でもコマンドのinclude順序が入り交じる可能性がある点や、処理の都合上include位置が離れるコマンドがあるという点があります。
現時点でも主用である!poolコマンドが離れた位置でincludeされているので、コードの共通化を図るという考えを優先すると個々のコードで判定するパターンの方が良いのではないかと思います。

SaturdayTheMsgrさん、コードのご確認及びテストありがとうございます。 現状特に問題無さそうなので(https://git.3chan.cc/stat2/delightly-v2fork/pulls/40)がマージされたらWIPは外そうと思います。 余談についてですが、以下のように`bbs-main.php`内で判定するイメージでしょうか。 ``` // 主用コマンド if($supervisor || $admin) { // !chttコマンド @include './extend/extra-commands/chtt.php'; // !774設定 @include './extend/extra-commands/set-774.php'; // !gobi設定 @include './extend/extra-commands/set-gobi.php'; } // 一般ユーザも使えるコマンド // !774適用 @include './extend/extra-commands/apply-774.php'; // !gobi適用 @include './extend/extra-commands/apply-gobi.php'; // スレ状態更新処理 @include './extend/extra-commands/utilities/show-threads-states.php'; // !xDy(dice)コマンド @include './extend/extra-commands/dice.php'; ``` 上記のイメージだとするならば、`主用`や`誰でも`という単位で分類することで可読性の向上や個々ファイルでの判定漏れを防ぐというメリットがありそうです。 ただ懸念点としては、他のコマンドとの処理の順番が重要なコマンドを追加した際に`主用`と`誰でも`コマンドの`include`順序が入り交じる可能性がある点や、処理の都合上`include`位置が離れるコマンドがあるという点があります。 現時点でも`主用`である`!pool`コマンドが離れた位置で`include`されているので、コードの共通化を図るという考えを優先すると個々のコードで判定するパターンの方が良いのではないかと思います。
Contributor

確かに処理の優先度等を調整したりするのにコードが複雑になるとバグの温床になりやすいのでその方が良さそうですね

確かに処理の優先度等を調整したりするのにコードが複雑になるとバグの温床になりやすいのでその方が良さそうですね
konkon-fox added 1 commit 2023-11-04 22:14:04 +09:00
konkon-fox changed title from WIP: 「スレ状態を管理するファイルの導入」「!774、!gobiコマンドの実装」「本文内でのシステムメッセージの構造を変更」等 to 「スレ状態を管理するファイルの導入」「!774、!gobiコマンドの実装」「本文内でのシステムメッセージの構造を変更」等 2023-11-04 22:14:49 +09:00
Owner

いつもありがとうございます。
遅くなりましたがマージしました。

いつもありがとうございます。 遅くなりましたがマージしました。
stat2 merged commit ca415d001d into main 2023-11-11 22:28:46 +09:00
Author
Contributor

マージありがとうございます。

マージありがとうございます。
Sign in to join this conversation.
No description provided.