A fork of Mastodon for small communities, including emoji-reaction, quote, antenna, circle and the truth of ohagi.
Find a file
2023-08-21 09:50:07 +09:00
.devcontainer Update mcr.microsoft.com/devcontainers/ruby Docker tag to v1 (#25613) 2023-06-27 11:28:07 +02:00
.github Fix lint:json not processing json5 extension (#26481) 2023-08-14 14:53:13 +02:00
.husky Use Yarn instead of NPX for pre-commit hook (#24287) 2023-03-28 06:28:57 +02:00
app Add full-dark theme 2023-08-21 09:50:07 +09:00
bin Move the mastodon/*_cli files to mastodon/cli/* (#24139) 2023-05-23 16:08:26 +02:00
chart helm: cleanup helm chart, now in mastodon/chart (#21801) 2022-12-09 06:36:29 +01:00
config Add full-dark theme 2023-08-21 09:50:07 +09:00
db Merge remote-tracking branch 'parent/main' into kb_migration 2023-08-20 08:37:27 +09:00
dist Make mastodon-streaming systemd unit templated (#24751) 2023-08-07 15:41:34 +02:00
lib Merge remote-tracking branch 'parent/main' into kb_migration 2023-08-20 08:37:27 +09:00
log Initial commit 2016-02-20 22:53:20 +01:00
public Change: Block GPTBot (#26396) 2023-08-09 11:58:46 +02:00
spec Add antenna timeline api test 2023-08-20 12:22:11 +09:00
streaming Merge remote-tracking branch 'parent/main' into kb_migration 2023-08-20 08:37:27 +09:00
vendor Increase files checked by ESLint (#9705) 2019-01-04 11:28:38 +01:00
.browserslistrc Add ES6 compatibility to browserslist (#18519) 2022-05-26 20:29:28 +02:00
.buildpacks Remove nodejs buildpack from buildpacks (#14364) 2020-07-20 09:48:10 +02:00
.dockerignore Update .dockerignore/.gitignore for #16947 etc (#17099) 2021-12-06 18:04:04 +01:00
.editorconfig Enable EditorConfig trailing whitespace trimming (#23543) 2023-02-12 08:34:17 +01:00
.env.production.sample fix: remove SMTP_SERVER (#21342) 2022-12-15 18:42:08 +01:00
.env.test Bump webpacker from 4.0.7 to 4.2.0 (#12416) 2019-11-20 17:56:11 +01:00
.env.vagrant Add a default DB_HOST to .env.vagrant for enable the streaming (#14030) 2020-06-15 01:57:06 +02:00
.eslintignore Increase files checked by ESLint (#9705) 2019-01-04 11:28:38 +01:00
.eslintrc.js Upgrade to typescript-eslint v6 (#25904) 2023-07-13 11:49:16 +02:00
.foreman Replace sprockets/browserify with Webpack (#2617) 2017-05-03 02:04:16 +02:00
.gitattributes Add .gitattributes file to avoid unwanted CRLF (#3954) 2017-06-26 13:15:24 +02:00
.gitignore helm: cleanup helm chart, now in mastodon/chart (#21801) 2022-12-09 06:36:29 +01:00
.haml-lint.yml Consistently use middle dot (·) instead of bullet (•) to separate items (#25248) 2023-06-02 19:58:18 +02:00
.haml-lint_todo.yml Fix haml/js lints 2023-08-11 11:47:57 +09:00
.nanoignore Remove Storybook (#4397) 2017-07-27 22:30:27 +02:00
.nvmrc Update Node.js to 16.20.0 (#24316) 2023-04-07 14:26:11 +02:00
.prettierignore Fix /share and cleanup and reorganize frontend locale loading (#25240) 2023-06-02 15:00:27 +02:00
.prettierrc.js Use Prettier for ESLint formatting TypeScript (#23631) 2023-05-09 19:02:12 +02:00
.profile Make it possible to upload audio and video to Heroku app (#24866) 2023-05-05 14:41:07 +02:00
.rspec Adding a Mention model, test stubs 2016-02-25 00:17:01 +01:00
.rubocop.yml Merge commit 'fd284311e7' into kb_migration 2023-08-01 17:59:16 +09:00
.rubocop_todo.yml Merge remote-tracking branch 'parent/main' into kb_migration 2023-08-07 22:10:24 +09:00
.ruby-gemset Make Mastodon use its own gemset (#17858) 2022-08-13 15:44:34 +02:00
.ruby-version Bump ruby to 3.2.2 due to ReDoS vulnerabilities (#24320) 2023-03-31 18:28:40 +02:00
.slugignore Remove Storybook (#4397) 2017-07-27 22:30:27 +02:00
.yarnclean Setup Husky and lint-stage for commit fixing (#23308) 2023-03-27 05:17:19 +02:00
app.json Make enable_starttls configurable by envvars (#20321) 2022-11-10 21:06:21 +01:00
Aptfile Make it possible to upload audio and video to Heroku app (#24866) 2023-05-05 14:41:07 +02:00
AUTHORS.md Update AUTHORS.md (#20630) 2022-11-14 08:33:24 +01:00
babel.config.js Update babel monorepo to v7.22.5 (#25405) 2023-06-14 09:22:54 +02:00
Capfile Autofix Rubocop remaining Layout rules (#23679) 2023-02-20 06:58:28 +01:00
CHANGELOG.md Prepare v4.2.0-beta1 (#26339) 2023-08-08 16:12:12 +02:00
CHANGELOG_KB.md Add custom_emoji isSensitive support 2023-05-22 17:44:47 +09:00
CODE_OF_CONDUCT.md Update Contributor Covenant to 2.1 (#23980) 2023-04-23 23:11:50 +02:00
config.ru Autofix Rubocop remaining Layout rules (#23679) 2023-02-20 06:58:28 +01:00
CONTRIBUTING.md Convert CircleCI to GitHub Actions (#23608) 2023-03-07 04:49:43 +01:00
crowdin.yml Add a Github Action to send translations to Crowdin for each merge in main (#25869) 2023-07-18 16:56:01 +02:00
docker-compose.yml Bump version to v4.1.6 (#26272) 2023-07-31 21:11:25 +02:00
Dockerfile Fix minor typos in comments and spec names (#21831) 2023-05-19 17:13:29 +02:00
FEDERATION.md Add FEDERATION.md (#17029) 2021-11-23 00:15:31 +01:00
Gemfile Merge remote-tracking branch 'parent/main' into kb_migration 2023-08-11 11:10:49 +09:00
Gemfile.lock Merge remote-tracking branch 'parent/main' into kb_migration 2023-08-20 08:37:27 +09:00
ide-helper.js Add JS IDE helper (#13012) 2020-04-27 17:19:53 +02:00
jest.config.js Fix /share and cleanup and reorganize frontend locale loading (#25240) 2023-06-02 15:00:27 +02:00
jsconfig.json Correct prettier calls for YML/JSON (#21832) 2022-12-03 12:05:35 +09:00
LICENSE Fix #49 - License changed from GPL-2.0 to AGPL-3.0 2016-09-21 23:04:34 +02:00
package.json Merge commit '3a8370e1f4' into kb_migration 2023-08-15 17:58:03 +09:00
postcss.config.js Update PostCSS dependencies (#23835) 2023-03-15 04:01:10 +01:00
priv-config TOR federation (#7875) 2018-06-26 20:34:12 +02:00
Procfile fix: make Procfile compatible with herokuish (#12685) 2020-08-29 19:00:30 +02:00
Procfile.dev Set RAILS_ENV in Procfile.dev (#15502) 2021-01-07 09:30:12 +01:00
Rakefile Run Rubocop on Rakefile (#23871) 2023-07-12 09:47:54 +02:00
README.md Fix rspec budge 2023-08-08 10:49:46 +09:00
scalingo.json Add S3 region list reference to Scalingo config (#24152) 2023-04-26 16:46:19 +02:00
SECURITY.md Fix Markdown files with Prettier and check in CI (#21972) 2023-02-20 07:37:28 +01:00
stylelint.config.js Update Stylelint disable settings and ignores (#23776) 2023-04-23 22:47:57 +02:00
tsconfig.json Use the new JSX transform (#25064) 2023-05-23 10:52:27 +02:00
Vagrantfile Update Ubuntu, Node versions, dependencies (#22075) 2022-12-07 00:13:14 +01:00
yarn.lock Merge remote-tracking branch 'parent/main' into kb_migration 2023-08-20 08:37:27 +09:00

kmyblue

Ruby Testing

kmyblue はMastodonのフォークです。創作作家のための Mastodon を目指して開発しました。

kmyblue はフォーク名であり、同時にサーバー名でもあります。以下は特に記述がない限り、フォークとしての kmyblue をさします。

kmyblue は AGPL ライセンスで公開されているため、どなたでも自由にフォークし、このソースコードを元に自分でサーバーを立てて公開することができます。また ActivityPub に参加することもできます。サーバーkmyblueは創作作家向けのものですが、フォークとしてのkmyblueは作者の嫌いな政治に関する過激な話を取り扱うコミュニティ、創作活動の一部エロ関係含むまたは全体を否定するコミュニティなども平等にお使いいただけますし、サーバーkmyblueのルールを適用する必要もありません。
ただし kmyblue においてテストコードは飾りでしかないため、不具合が発生しても自己責任になります。既知のバグもいくつかありますし、直す予定のないものも含まれます。

テストコード、Lint どちらも動いています。

kmyblue の強み

本家 Mastodon への積極的追従

kmyblue は、いくつかのフォークと異なり、追加機能を控えめにする代わりに本家 Mastodon に積極的に追従を行います。バージョン 4 には 4 のよさがありますが、技術的に可能である限り、バージョン 5 へのアップグレードもやぶさかではありません。
kmyblue の追加機能そのままに、Mastodon の新機能も利用できるよう調整を行います。

絵文字リアクション対応

kmyblue は絵文字リアクションに対応しているフォークの1つです。絵文字リアクションは Misskey 標準搭載の機能で、需要が高い機能である割には、サーバーに負荷がかかるため本家 Mastodon には搭載されていません。

kmyblue のブランチ

  • main - 現在はメンテナンスされていません
  • kb_development - 現在 kmyblue 本体で使われているソースコードです
  • kb_migration - 本家 Mastodon への追従を目的としたブランチです。kb_development上で開発を進めているときに利用します
  • kb_migration_development - 本家 Mastodon へ追従し、かつその上で開発するときに使うブランチです。最新の本家コードでリファクタリングが行われ、kb_developmentkb_migrationの互換性の維持が困難になったときに利用します。ここで追加された機能は原則、本家 Mastodon のバージョンアップと同時にkb_developmentに反映されます

本家 Mastodon からの追加機能

kmyblue は、本家 Mastodon にいくつかの改造を加えています。以下に示します。

ローカル公開

未収載を拡張した公開範囲です。本来のみ収載の公開範囲に加えて、自分のサーバーのローカルタイムラインに掲載されます。他のサーバーの連合タイムラインに載せたくない、自分と属性の近い人達が集まったサーバーと自分のフォロワーにだけ見せたい投稿に用います。

スタンプ(絵文字リアクション)

kmyblue 内での呼称はスタンプですが、一般には絵文字リアクションと呼ばれる機能です。自分や他人の投稿に絵文字をつけることができます。kmyblue のスタンプは Fedibird の絵文字リアクションと互換性のある API を持っているため、Fedibird 対応アプリで kmyblue のスタンプ機能を利用できる場合があります。

kmyblue は、1つのアカウントが1つの投稿に複数のスタンプ(絵文字リアクション)を最大3個までつけることが可能です。また、下記機能にも対応しています。

  • 他のサーバーのアカウントがつけたスタンプに相乗りする
  • 自分がスタンプを付けた投稿一覧を見る
  • トレンド投稿の選定条件にスタンプを付けたアカウントの数を考慮する
  • 投稿の自動削除で削除条件にスタンプの数を指定する

kmyblue は、他のサーバーの投稿にスタンプをつけることで、相手サーバーに情報を送信します。ただしスタンプに対応していないサーバーにおいては、通知されることはありません。

アンテナ

「自分はフォローしていないが連合タイムラインに流れているアカウント」の投稿を購読することが可能です。アンテナはドメイン、アカウント、ハッシュタグ、キーワードの4種類の絞り込み条件を持ち、複合指定することで AND 条件として働きます。アンテナによって検出された投稿は、指定されたリスト、またはホームタイムラインに追加されます。

ドメイン購読において、自分自身のドメインを指定できることも特長のつです。また、STLソーシャルタイムラインモードにも対応しています。

自分の投稿がアンテナに検出されるのを拒否することもできます。この拒否設定は、ActivityPub で他サーバーにも共有されますが、対応するかはそれぞれの判断に委ねられます。

期間限定投稿

例えば#exp10mタグをつけると、その投稿は 10 分後に自動削除されます。秒、分、時、日の種類の指定に対応、数値は桁まで、5 分未満の時間指定も可能ですが編集が絡むと意図通り動作しないことがあります。

このハッシュタグがついた投稿を編集しても、実際に削除される時刻は編集時刻ではなく、投稿時刻から起算されます。

グループ

kmyblue はグループ機能に対応しています。グループのフォロワーからグループアカウントへのメンションはすべてブーストされ、グループのフォロワー全員に届きます。なおこれは本家 Mastodon でも今後実装予定の機能です。

ドメインブロックの拡張

ドメインブロック機能が大幅に拡張され、「制限」「停止」としなくても、細分化された操作を個別にブロックすることができます。これによって、相手サーバーとの交流が完全に遮断されるリスクを減らします。適切に管理されておらず善良なユーザーとスパム/攻撃者が同居するようなサーバーへの対策として有効です。

  • お気に入り・絵文字リアクションのみをブロック
  • メンションのみをブロック
  • 相手からのフォローを強制的に審査制にする
  • 相手からのフォローを全てブロック

他にも、「自分のサーバーの特定投稿を相手サーバーに送信しない」設定が可能です。これはセンシティブな投稿などを政治的な理由で送信することが難しいサーバーへの対策として実装しました。

Misskey 対策

Misskey およびそのフォークCalckey など)は、フォローしていないアカウントの未収載投稿を自由に検索・購読することができます。これは Mastodon の設計とは根本的に異なる仕様です。kmyblue では、別途手動でドメインブロックデータにフラグを付けたサーバーに限り、そのサーバーに未収載投稿を送信するときに「フォロワーのみ」に変更します。他のサーバーには未収載として送信されます。この動作には、管理者だけでなくユーザー各自の設定も必要になります。

モデレーションの拡張

管理の効率化、規約違反・法律違反コンテンツへの迅速な対応(特にアカウント停止を伴わずに済むようにすること)を目的として、モデレーション機能を拡張しています。

各投稿の操作

各投稿について、強制的な CW 付与、強制的な画像 NSFW フラグ付与、編集履歴の削除、画像の削除、投稿の削除が行なえます。操作は即時反映されます。

アカウントの正規表現検索

アカウント名、表示名について正規表現で検索できます。ただし動作は重くなります。

全画像の閲覧

「未収載」「フォロワーのみ」「指定された相手のみ」公開範囲のものも含め、すべての画像を閲覧できる画面があります。法令、サーバー規約に違反した画像を見つけるために必要です。

AI 学習禁止メタタグ

ユーザー生成コンテンツが含まれる全てのページに、AI 学習を禁止するメタタグを挿入しています。ただし各ユーザーのプロフィールページ・投稿ページに限り、ユーザーは各自設定で AI 学習禁止メタタグを除去することが可能です。

リンクのテキストと実際のリンク先の異なるものの強調表示

Misskey およびそのフォークCalckey などでは、MFM を利用することにより、例えば「https://google.co.jp/ 」に向けたリンクを「https://www.yahoo.co.jp/ 」というテキストで掲載することが容易です。それに関する基本的な詐欺を見分けることができます。ただし実際にフィッシング詐欺への効果があるかは疑問です。

投票項目数の拡張

投票について、本家 Mastodon では項目までですが、kmyblue では8個までに拡張しています。

連合から送られてくる投稿の添付画像最大数の拡張

本家 Mastodon では個までですが、kmyblue では8個までに拡張しています。ただし Web クライアントでの表示には、各自ユーザーによる設定が必要です。kmyblue ローカルから投稿できる画像の枚数に変更はありません。

検索許可

ユーザーは各投稿に「検索許可」パラメータを付与できます。ここで「公開」が指定された投稿は、誰でも自由に検索機能を用いて検索することができます(全文検索に限る)。検索許可に対応していないクライアントアプリから投稿した時の値は、ユーザーが設定することができます。

これは Fedibird の「検索範囲」機能に対応します。API に互換性はありませんが、ActivityPub 仕様は共通しています。

トレンドの拡張

本家マストドンでは、センシティブフラグのついた全ての投稿がトレンドに掲載されません。kmyblue はその中でも、「センシティブフラグはついているが、画像が添付されておらず CW 付きでもない」投稿をトレンドに掲載します。

本来このような投稿はトレンドに掲載すべきでありませんが、本家 Mastodon の Web クライアントでは文章だけの投稿のセンシティブフラグを自由に操作できないことを理由とした独自対応となります。

Sidekiq ヘルスチェック

Sidekiq のヘルスチェックを目的として、30秒に1回ずつ指定された URL に HEAD リクエストを送信します。送信先 URL は、環境変数(または.env.production)にSIDEKIQ_HEALTH_FETCH_URLとして指定します。