「スレ状態を管理するファイルの導入」「!774、!gobiコマンドの実装」「本文内でのシステムメッセージの構造を変更」等 #41
No reviewers
Labels
No Label
bug
discussion
documentation
duplicate
enhancement
feature
help wanted
invalid
Priority
High
Priority
Low
Priority
Medium
question
wontfix
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stat2/delightly-v2fork#41
Loading…
Reference in New Issue
No description provided.
Delete Branch "konkon-fox/delightly-v2fork:main"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
スレ状態を管理するファイルの導入
概要
現在のdelightly-v2forkでは、スレ内のレス全体に適用されるコマンドは
!add
で'>>1'に追記し、投稿時点で'>>1'にコマンド文言があるかどうかで発動判定を行っています。(例)!noid
、!idchange
今回実装する
!774
や!gobi
コマンドについても、同様にスレ内のレス全体に影響を与えるコマンドとなります。しかし、
!774
や!gobi
は単なるオンオフではなく文字列を情報として持ちます。!add
で追記していく形でも実装不可能ではないですが、>>1
が煩雑になってしまい発動時の処理も複雑なものになってしまいます。そこで新たに個々のスレの状態を管理するファイルを導入することで処理を簡便化します。
ファイルは
/${bbs}/threads-states.cgi
に生成されます。${bbs}
は板名です。cgi
である理由は、該当ディレクトリのcgi
へのアクセスが既に.htaccess
なりで拒否されているからです。ファイルの内容は以下の変数(連想配列)を
json_encode
したものです。キーはスレッド番号となります。
!774
、!gobi
コマンド内ではこのファイルを読み書きすることでスレの状態を取得したり更新したりします。現在の項目は二項目ですが今後新たにコマンドを追加する際にも有効活用可能なはずです。
更新をする際のクラス
スレ情報を更新する際に使用する
ThreadsStatesUpdater
クラスを新規作成しました。get()
とput()
で簡潔に処理を書くことが可能です。get()
とput()
の間ファイルがロックされます。!774
コマンドの実装コードについて
設定時と発動時で処理の内容とタイミングが変わるのでファイルは分けております。
概要
名前欄未入力時のデフォルト名無しを任意の文字列に設定します。
スレ主、管理人、コマンド権限を持つCAPが設定可能です。
本文中に
!774:◯◯
で、デフォ名無しを◯◯に変更します。!774:
の後に何も入れないか、すぐ改行することで解除できます。!gobi
コマンドの実装コードについて
設定時と発動時で処理の内容とタイミングが変わるのでファイルは分けております。
概要
全ての投稿本文に指定された語尾が自動で追加されます。
スレ主、管理人、コマンド権限を持つCAPが設定可能です。
本文中に
!gobi:◯◯:
で、語尾を◯◯に変更します。!gobi::
で解除できます。注意点としては
:
で挟む必要があるということです。これは!gobi
コマンドの中に改行を含めることが可能だからです。※!chtt:
や!774:
は改行も終了時の合図になるので:
で閉じる必要がありません。本文内でのシステムメッセージの構造を変更
概要
本文の構造を以下のように三分割して表示するように変更しました。
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段目に文章を追記する関数で、主にコマンド使用時に利用可能です。
上記に説明した実装を行いました。
変更点が多くなってしまいましたが、よろしければテストしてコードレビューをいただけると幸いです。
また、ご質問や修正案等があればどうぞお知らせください。
こちらのプルリクエストは確認点が多いので #40 を優先でお願いします。
確認しましたが、全ての機能が正常に動作しているようです。
このプルリクエストの趣旨とずれる余談ですが
/test/extend/extra-commands
下に置かれている各種php内でコマンド有効判定や主判定等の同じ処理が書かれているので、将来的にコマンドが更に増える可能性がある事を考えると主用コマンド
一般ユーザも使えるコマンド
任意のコマンド有効時処理
みたいに共通項を括りだして一括で判定したらいいのかなと考えていました。SaturdayTheMsgrさん、コードのご確認及びテストありがとうございます。
現状特に問題無さそうなので(#40)がマージされたらWIPは外そうと思います。
余談についてですが、以下のように
bbs-main.php
内で判定するイメージでしょうか。上記のイメージだとするならば、
主用
や誰でも
という単位で分類することで可読性の向上や個々ファイルでの判定漏れを防ぐというメリットがありそうです。ただ懸念点としては、他のコマンドとの処理の順番が重要なコマンドを追加した際に
主用
と誰でも
コマンドのinclude
順序が入り交じる可能性がある点や、処理の都合上include
位置が離れるコマンドがあるという点があります。現時点でも
主用
である!pool
コマンドが離れた位置でinclude
されているので、コードの共通化を図るという考えを優先すると個々のコードで判定するパターンの方が良いのではないかと思います。確かに処理の優先度等を調整したりするのにコードが複雑になるとバグの温床になりやすいのでその方が良さそうですね
WIP: 「スレ状態を管理するファイルの導入」「!774、!gobiコマンドの実装」「本文内でのシステムメッセージの構造を変更」等to 「スレ状態を管理するファイルの導入」「!774、!gobiコマンドの実装」「本文内でのシステムメッセージの構造を変更」等いつもありがとうございます。
遅くなりましたがマージしました。
マージありがとうございます。