参加承認・公開文書に関する歴史的な設計・準備コードの原文移管。 設計・コード断片・机上チェックをBot実装PASS、DB migration、Cloudflare Pages公開、Telegram実E2Eと扱わない。旧原本:‣。

原文本文

正式5文書(Notion原文):①ガイドライン ②規約・規則 ③Privacy Policy ④グループルール ⑤使い方・操作方法。Cloudflare Pagesの全文はこの5種類を別ページとする。

参加承認Botには①〜④の要約と全文へのリンクのみを出す。⑤は参加審査に出さない。3グループの総合案内には①〜⑤の共通要約と各全文リンクを固定投稿する。

公開ページのルートとリンク設定(コード)

新規 artifacts/bot/src/config/policyLinks.ts 候補:

export const POLICY_VERSION = "2026-10-28-v1.0";
export const POLICY_PATHS = {
  guideline: "/guideline/",
  terms: "/terms/",
  privacy: "/privacy/",
  rules: "/rules/",
  howto: "/howto/",
} as const;

export type PolicyKey = keyof typeof POLICY_PATHS;

export function policyUrl(baseUrl:string,key:PolicyKey):string {
 const parsed=new URL(baseUrl);
 if(parsed.protocol!=="https:") throw new Error("HTTPS required");
 return new URL(POLICY_PATHS[key],parsed).toString();
}

export function policyLinksForApproval(baseUrl:string) {
 return (["guideline","terms","privacy","rules"] as const)
   .map(k=>({key:k,url:policyUrl(baseUrl,k)}));
}

export function policyLinksForGeneralInfo(baseUrl:string) {
 return (["guideline","terms","privacy","rules","howto"] as const)
   .map(k=>({key:k,url:policyUrl(baseUrl,k)}));
}

POLICY_BASE_URLはCloudflare Pagesデプロイ後に確認した実URLのみ環境変数へ指定。存在しないドメイン・URLをダミーとして本番使用しない。

質問本文(正式採用の雛形)

質問1:参加条件への承諾

「当グループは18歳以上で、性自認が男性(FTMを含む)、男性と性的関係を持てる方を対象とします。参加条件をすべて満たし、虚偽なく申請していますか?」

質問2:利用条件と情報の取扱いへの承諾

「利用者同士の交流は自己責任です。法令・Telegram規約・当コミュニティの規約を遵守し、管理Botによるグループ内投稿のモニタリングと違反履歴管理について、②規約・③Privacy Policyの全文を確認し承諾しますか?」

最終ルール承諾

「画像・動画のスポイラー、URL直接投稿禁止、無許可販売・誘導禁止、スパム禁止、通常違反5段階、重大違反・虚偽申告の即時BANを理解し、④グループルールの全文を確認して遵守しますか?」