古いトピックに返信する際に確認ボックスを追加

(Creating a component to show last-chance warning when replying to old topics から大部分をコピーペーストしました)

過去にスレッドのネクロバンピング(古いスレッドへの投稿)に悩まされる傾向があるコミュニティを運営しています。

warn_reviving_old_topic_age については承知しており、設定もしていますが、多くのユーザーがアラートに気づいていないようです。また、古いスレッドの復活が有用なユースケースも実際にあるため、グローバルなトピックタイマーを導入することも避けたいと考えています。

以前の解決策は、このコンポーネントに基づいた「本当に投稿しますか?」ダイアログで投稿をブロックすることでした。

しかし、このコンポーネントは壊れているとマークされており(実際、私たちのバージョンも壊れています)。元のサポートリクエストのアドバイスに従い、フォーマットされていないコード検出器を調べ始めましたが、完了させるのに苦労しています。

現在、以下のようなものを作成中です。

import { withPluginApi } from "discourse/lib/plugin-api";
import { inject as service } from "@ember/service";

export default {
  name: "discourse-necro-warnings",
  initialize() {
    withPluginApi("0.8.8", (api) => {
      api.modifyClass("service:composer", (Superclass) =>
        class extends Superclass {
          save(...args) {
            let lastPostedAt = moment(this.model?.topic?.last_posted_at);
            let now = moment();
            let diff = now - lastPostedAt;
            console.log(diff);
            let d = moment.duration(settings.death_timer);

            if (diff >= d && !skipWarning) {
              // TODO: i18n
              let diffH = moment.duration(diff).humanize();
              let confirmationMessage = `このスレッドの最後の投稿は ${diffH} 前です。本当にこのスレッドを BUMP しますか?`;
              this.dialog.yesNoConfirm({
                message: confirmationMessage,
                didConfirm: () => {
                  super.save(...args);
                },
              });
            } else {
              super.save(...args);
            }
          }
        }
      );
    });
  },
};

しかし、これは機能していないようです。デバッグログを追加すると、this.model?.topic?.last_posted_at が実際には undefined であることが確認でき、確認ダイアログが機能するかどうかも全くわかりません。

何かアドバイスがあれば幸いです!トピックの現在の BUMP 日時(もしあれば)の ISO 文字列を取得できれば、進歩できると思います。

「いいね!」 3