(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 文字列を取得できれば、進歩できると思います。