Commit Graph

181 Commits

Author SHA1 Message Date
syuilo 5dfbce7571 feat: チャンネルの削除
Resolve #7171
Resolve #9935
2023-05-06 08:15:17 +09:00
okayurisotto 43593603f1
fix(backend): `fields`の誤った定義を修正 (#10737) 2023-05-02 21:14:22 +09:00
syuilo d535ec21a2 feat: チャンネルに色を設定できるように 2023-05-02 09:36:40 +09:00
Namekuji d28866f71a
enhance: account migration (#10592)
* copy block and mute then create follow and unfollow jobs

* copy block and mute and update lists when detecting an account has moved

* no need to care promise orders

* refactor updating actor and target

* automatically accept if a locked account had accepted an old account

* fix exception format

* prevent the old account from calling some endpoints

* do not unfollow when moving

* adjust following and follower counts

* check movedToUri when receiving a follow request

* skip if no need to adjust

* Revert "disable account migration"

This reverts commit 2321214c98.

* fix translation specifier

* fix checking alsoKnownAs and uri

* fix updating account

* fix refollowing locked account

* decrease followersCount if followed by the old account

* adjust following and followers counts when unfollowing

* fix copying mutings

* prohibit moved account from moving again

* fix move service

* allow app creation after moving

* fix lint

* remove unnecessary field

* fix cache update

* add e2e test

* add e2e test of accepting the new account automatically

* force follow if any error happens

* remove unnecessary joins

* use Array.map instead of for const of

* ユーザーリストの移行は追加のみを行う

* nanka iroiro

* fix misskey-js?

* ✌️

* 移行を行ったアカウントからのフォローリクエストの自動許可を調整

* newUriを外に出す

* newUriを外に出す2

* clean up

* fix newUri

* prevent moving if the destination account has already moved

* set alsoKnownAs via /i/update

* fix database initialization

* add return type

* prohibit updating alsoKnownAs after moving

* skip to add to alsoKnownAs if toUrl is known

* skip adding to the list if it already has

* use Acct.parse instead

* rename error code

* 🎨

* 制限を5から10に緩和

* movedTo(Uri), alsoKnownAsはユーザーidを返すように

* test api res

* fix

* 元アカウントはミュートし続ける

* 🎨

* unfollow

* fix

* getUserUriをUserEntityServiceに

* ?

* job!

* 🎨

* instance => server

* accountMovedShort, forbiddenBecauseYouAreMigrated

* accountMovedShort

* fix test

* import, pin禁止

* 実績を凍結する

* clean up

* ✌️

* change message

* ブロック, フォロー, ミュート, リストのインポートファイルの制限を32MiBに

* Revert "ブロック, フォロー, ミュート, リストのインポートファイルの制限を32MiBに"

This reverts commit 3bd7be35d8aa455cb01ae58f8172a71a50485db1.

* validateAlsoKnownAs

* 移行後2時間以内はインポート可能なファイルサイズを拡大

* clean up

* どうせactorをupdatePersonで更新するならupdatePersonしか移行処理を発行しないことにする

* handle error?

* リモートからの移行処理の条件を是正

* log, port

* fix

* fix

* enhance(dev): non-production環境でhttpサーバー間でもユーザー、ノートの連合が可能なように

* refactor (use checkHttps)

* MISSKEY_WEBFINGER_USE_HTTP

* Environment Variable readme

* NEVER USE IN PRODUCTION

* fix punyHost

* fix indent

* fix

* experimental

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-04-30 00:09:29 +09:00
okayurisotto e2d9c0efe2
fix(backend): `alsoKnownAs`の誤った定義を修正 (#10725) 2023-04-29 19:24:33 +09:00
syuilo 0ad7869249 feat: preserved usernames
Resolve #10704
2023-04-29 17:03:14 +09:00
nenohi 8dc60cd327
Role timeline setting (#10677)
* ロールタイムライン設定

* isRoleTimeline to isExplorable

* ポリシーではないので削除

* 型からも

* wip

* 足りてなかった説

* wip

* listはpublicを表示

* 前回の記載修正( #10671 )

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-04-20 20:02:50 +09:00
syuilo e1f9ab77f8
feat: Server rules (#10660)
* enhance(frontend): サーバールールのデザイン調整

* enhance(frontend): i18n

* enhance(frontend): 利用規約URLの設定を「モデレーション」ページへ移動

* enhance(frontend): サーバールールのデザイン調整

* Update CHANGELOG.md

* 不要な差分を削除

* fix(frontend): lint

* ui tweak

* test: add stories

* tweak

* test: bind args

* test: add interaction tests

* fix bug

* Update packages/frontend/src/pages/admin/server-rules.vue

Co-authored-by: Ebise Lutica <7106976+EbiseLutica@users.noreply.github.com>

* Update misskey-js.api.md

* chore: windowを明示

* 🎨

* refactor

* 🎨

* 🎨

* fix e2e test

* 🎨

* 🎨

* fix icon

* fix e2e

---------

Co-authored-by: Ebise Lutica <7106976+EbiseLutica@users.noreply.github.com>
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-04-19 21:24:31 +09:00
syuilo 97abfd48ce refactor(backend): tweak repository name 2023-04-13 13:31:54 +09:00
Ebise Lutica 605f149235
feat: 自分用メモ機能 (#10516)
* 自分用メモを作成する機能

* 不要なCSSを削除

* メモ: デザイン調整

* デザイン崩れを修正

* fix: メモ機能のe2eテストで見つかった不具合を修正

* デザイン調整

* fix(frontend): 自分用メモtextareaにline-heightが適用されない問題を修正
2023-04-13 13:17:32 +09:00
Namekuji 25ebb73756
feat: account migration (#10507)
* add Move activity

* add endpoint to move from local to remote

* follow move activity coming to inbox

* fix move endpoint

* add known-as endpoint to create account alias

* add migration page

* add route to migration page

* add move and known-as endpoints

* fix dependnecies error

* fix new endpoints

* fix move activity id

* fix refollow

* add movedToUri and alsoKnownAs to api

* fix moveToUri indicator

* fix missing context

* add chengelog

* rename MkMoved to MkAccountMoved

* add missing semicolon

* fix targetUri

* fix followings query

* remove redundant null check
2023-04-08 14:16:26 +09:00
syuilo 521eb95dbc perf(backend): cache avatar and banner url to db 2023-04-06 19:48:24 +09:00
syuilo 625fed8838 enhance(backend): チャンネルの既読管理を削除
- 現状上手く機能していない
- パフォーマンス上の理由
- 実装するにしてももっと効率的な方法がある
2023-04-05 07:52:49 +09:00
syuilo 30d6992684 perf(backend): 通知をRedisに保存するように
Resolve #10168
2023-04-04 14:06:57 +09:00
syuilo b53d6c7f8c perf(backend): store notes of an antenna to redis instead of postgresql
Resolve #10169
2023-04-03 12:11:16 +09:00
syuilo 9bc5d52e41 feat: チャンネルにノートをピン留めできるように
Resolve #7740
2023-03-31 15:01:56 +09:00
syuilo 3cb0cc7989 feat: チャンネルをお気に入りに登録できるように
Resolve #10097
2023-03-31 11:30:27 +09:00
syuilo 31f3f5f0f0 enhance(backend): リモートサーバーのチャート生成を無効にするオプションを追加 2023-03-24 19:08:08 +09:00
syuilo 09a846a45c enhance(backend): use ❤️ for reaction fallback 2023-03-24 18:55:31 +09:00
syuilo f01e6ef6bf enhance(backend): リモートユーザーのチャート生成を無効にするオプションを追加 2023-03-24 15:43:36 +09:00
syuilo 41d1b1b8c9 enhance: コンディショナルロールの条件に「投稿数が~以下」「投稿数が~以上」を追加
Resolve #10395
2023-03-23 17:18:38 +09:00
syuilo 54630edb0f enhance: 使われてないアンテナは自動停止されるように
Resolve #9373
2023-03-20 20:12:38 +09:00
syuilo b644567735 feat: clip favorite
Resolve #10337
2023-03-16 17:24:49 +09:00
syuilo 8ae9d2eaa8 enhance: カスタム絵文字にライセンス情報を付与できるように
Resolve #10091
2023-03-16 15:08:48 +09:00
syuilo 58fc17e3b6 fix: tweak retention rate aggregation 2023-03-15 17:43:13 +09:00
Cj-bc 850addc619
user schemaにあるany型を厳格にした (#10319)
使用されている箇所から、これらのプロパティの型はstring型に限定出来そうということが分かった。
又、OpenAPIv3の仕様上はanyは使えないため修正した。

related: https://github.com/misskey-dev/misskey/issues/10308

* Update CHANGELOG
2023-03-13 23:13:51 +09:00
syuilo 7f16b50e73 feat: sensitive word 2023-03-13 17:37:22 +09:00
syuilo 7c2d8d73ce enhance: ロールの並び順を設定可能に 2023-03-12 16:38:08 +09:00
syuilo 99f3f0917f tweak postgresql entities
Fix #10266
2023-03-10 14:53:56 +09:00
syuilo 5de8930058 refactor: rename schema to json-schema 2023-03-10 14:22:37 +09:00
syuilo dd6569a1bb
feat: Reaction acceptance (#10256)
* wip

* wip

* デフォルト設定
2023-03-08 08:56:47 +09:00
syuilo 4c2f7c64cc
feat: Per-user renote mute (#10249)
* feat: per-user renote muting

From FoundKey/c414f24a2c https://akkoma.dev/FoundKeyGang/FoundKey

* Update ja-JP.yml

* Delete renote-muting.ts

* rename

* fix ids

* lint

* fix

* Update CHANGELOG.md

* リノートをミュートしたユーザー一覧を見れるように

* 🎨

* add test

* fix test

---------

Co-authored-by: Hélène <pleroma-dev@helene.moe>
2023-03-08 08:56:09 +09:00
syuilo 1c5291f818
feat: 時限ロール (#10145)
* feat: 時限ロール

* クライアントから期限を確認できるように

* リファクタとか

* fix test

* fix test

* fix test

* clean up
2023-03-01 10:20:03 +09:00
tamaina becc4d2e54
fix: i/notificationsで古い通知タイプを許容するなど、古い通知タイプの清算 (#10042)
* wip

* fix

* create migration

* oops

* fix front const

* changelog

* fix type

* fix

* wip

* Revert "wip"

This reverts commit 6cdb3600e280be3550b8b6353b2c7930f7b31438.

* enumのこす

* fix

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-02-23 20:46:14 +09:00
syuilo 60df819c60 refactor: fix types 2023-02-17 15:36:36 +09:00
syuilo bde22208fe refactor: fix types 2023-02-17 15:06:52 +09:00
Kagami Sascha Rosylight 63df2c851e
refactor: remove all unused imports (#9951)
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-02-16 23:09:41 +09:00
tamaina 4db787c4ee
fix(server): マイグレーションad1676438468213が通らないのを修正 (#9963)
* fix(server): マイグレーションad1676438468213が通らないのを修正
Fix #9962

* fix
2023-02-16 22:08:45 +09:00
tamaina 839a626716
fix(server): dropGroupマイグレーションが通るように (#9961) 2023-02-16 22:07:34 +09:00
syuilo e24b0ceb80 startAt -> startsAt 2023-02-15 14:31:59 +09:00
nenohi 71c42bef9b
広告開始時期の設定 (#9944)
* 広告開始時期の設定

* 過去のものも表示するように
2023-02-15 14:29:40 +09:00
syuilo 8caf288ac1
drop group (#9942)
* drop group

* Update operations.ts
2023-02-15 13:37:18 +09:00
syuilo 8f2049bcd2
drop messaging (#9919)
* drop messaging (from backend)

* wip
2023-02-15 13:06:06 +09:00
syuilo 1b21bad202 refactor 2023-02-13 15:50:22 +09:00
syuilo f34f9f6ea5 refactor: fix types 2023-02-13 15:28:07 +09:00
syuilo 451bc0b444 refactor: fix types 2023-02-12 18:47:30 +09:00
syuilo 6a3039f7b7 feat: ロールにアイコンを設定してユーザー名の横に表示できるように
Resolve #9761
2023-02-05 10:37:03 +09:00
syuilo 562b02310f drop twitter/github/discord integrations
Close #9775
2023-02-03 15:01:31 +09:00
syuilo 3e112da486 ローカルのカスタム絵文字については直接オリジナルURLにリクエストするように 2023-01-21 20:40:09 +09:00
syuilo 65cd605b73
Achievements (#9665)
* wip

* Update ja-JP.yml

* wip

* wip

* Update MkAchievements.vue

* wip

* 🎨

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip
2023-01-21 13:14:55 +09:00
syuilo afc0be6790 enhance: playのscriptの文字数制限を緩和 2023-01-19 09:06:11 +09:00
syuilo 91bbb67e4a プロフィールの文字数制限を緩和 2023-01-16 06:05:58 +09:00
syuilo 30fced38c4 refactor: rename instance.caughtAt to instance.firstRetrievedAt 2023-01-16 05:02:38 +09:00
syuilo 81f11d8f86 refactor: rename role.options -> role.policies 2023-01-15 20:52:53 +09:00
syuilo 518b3e2f73 ロールの各オプションに優先度を設定できるように 2023-01-15 19:10:39 +09:00
syuilo 4151087d3c フォロワー数、フォロー数もConditional roleで利用できるように 2023-01-14 08:27:23 +09:00
syuilo 6458239a7c remoteDriveCapacityMbをロールに統合 2023-01-13 11:14:07 +09:00
syuilo c5c40a73b7 feat: conditional role
Resolve #9539
2023-01-13 11:03:54 +09:00
syuilo 2470afaa2e
Role (#9437)
* wip

* Update CHANGELOG.md

* wip

* wip

* wip

* Update create.ts

* wip

* wip

* Update CHANGELOG.md

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update CHANGELOG.md

* wip

* wip

* Update delete.ts

* Update delete.ts

* wip

* wip

* wip

* Update account-info.vue

* wip

* wip

* Update settings.vue

* Update user-info.vue

* wip

* Update show-file.ts

* Update show-user.ts

* wip

* wip

* Update delete.ts

* wip

* wip

* Update overview.moderators.vue

* Create 1673500412259-Role.js

* wip

* wip

* Update roles.vue

* 色

* Update roles.vue

* integrate silence

* wip

* wip
2023-01-12 21:02:26 +09:00
syuilo 789d61d175 enhance(server): アンケート選択肢の文字数制限を緩和
Resolve #9511
2023-01-10 16:41:38 +09:00
syuilo 462acc9eee カスタム絵文字一覧情報をmetaから分離 2023-01-09 15:50:25 +09:00
syuilo 2e2ed1385f delete pollVote notification 2023-01-08 10:54:45 +09:00
syuilo ebe340d510
MisskeyPlay (#9467)
* wip

* wip

* wip

* wip

* wip

* Update ui.ts

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update CHANGELOG.md

* wip

* wip

* wip

* wip

* 🎨

* wip

* ✌️
2023-01-05 13:59:48 +09:00
syuilo 4d0859ce7f drop latestStatus of instance 2023-01-03 09:03:04 +09:00
syuilo c8bd139713 drop lastCommunicatedAt of instance 2023-01-03 09:00:42 +09:00
syuilo 7093573f0c drop latestRequestSentAt of instance 2023-01-03 08:48:00 +09:00
syuilo 6f648fc058 clean up 2022-12-31 08:51:35 +09:00
syuilo b2d6561bc6 enhance(server): clean emoji response 2022-12-31 08:43:13 +09:00
syuilo 912791b3ab
refactor: 絵文字URLを引き回すのをやめる (#9423) 2022-12-29 10:14:44 +09:00
syuilo f44a7e2536 refactor 2022-12-25 14:22:23 +09:00
syuilo 3e81913b6a feat: introduce retention-rate aggregation 2022-12-25 09:09:46 +09:00
syuilo b11f8b0aae chore: fix reporisotry name 2022-12-25 08:30:13 +09:00
syuilo b648c4bc4d chore: fix reporisotry name 2022-12-25 08:27:06 +09:00
tamaina 4ecc42744c
enhance: Implement the toggle to (or not to) close push notifications when notifications or messages are read (#9219)
* create file

* wip

* fix

* wip

* tabun dekita

* ✌️

* implement subscribe push notification button to tutorial

* check-exists→show-registration

* add column sendReadMessage

* fix migration file

* sw api

* change PushNotificationService

* wip

* ✌️

* fix tutorial footer flex
2022-12-18 01:59:59 +09:00
syuilo 6bb194de54 refactor(server): move RepositoryModule into models directory 2022-12-08 17:19:37 +09:00
CyberRex 1309367884
Add Cloudflare Turnstile CAPTCHA support (#9111)
* Add Cloudflare Turnstile CAPTCHA support

* Update packages/client/src/components/MkCaptcha.vue

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2022-10-13 09:19:57 +09:00
syuilo aa3ca438a2 fix type 2022-09-24 10:46:52 +09:00
syuilo b75184ec8e
なんかもうめっちゃ変えた 2022-09-18 03:27:08 +09:00
syuilo 75d516011b enhance: make active email validation configurable 2022-07-09 15:05:55 +09:00
syuilo e560601815
feat: auto nsfw detection (#8840)
* feat: auto nsfw detection

* ✌️

* Update ja-JP.yml

* Update ja-JP.yml

* ポルノ判定のしきい値を高めに

* エラーハンドリングちゃんとした

* Update ja-JP.yml

* 感度設定を強化

* refactor

* feat: add video support for auto nsfw detection

* rename: image -> media

* .js

* fix: add missing error handling

* fix: use valid pathname instead of using filename due to invalid usage

* perf(nsfw-detection): decode frames

* disable detection of video for some reasons

* perf(nsfw-detection): streamify detection process for video

* disable disallowUploadWhenPredictedAsPorn option

* fix(nsfw-detection): improve reliability

* fix(nsfw-detection): use Math.ceil instead of Math.round

* perf(nsfw-detection): delete tmp frames after used

* fix(nsfw-detection): FSWatcher does not emit ready event

* perf(nsfw-detection): skip black frames

* refactor: strip exists check

* Update package.json

* めっちゃ変えた

* lint

* Update COPYING

* オプションで動画解析できるように

* Update yarn.lock

* Update CHANGELOG.md

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2022-07-07 21:06:37 +09:00
CyberRex cd07eb222e
Add additional drive capacity change support (#8867)
* Add additional drive capacity change support

* Update packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>

* 🎨

* show instance default capacity in placeholder

* fix

* update api/drive

* fix

* remove :

* fix lint

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2022-07-05 00:21:01 +09:00
syuilo dd426735a0 feat: moderation note 2022-07-03 00:15:03 +09:00
syuilo eccc90c843
feat: Log user ips (#8872)
* wip

* store ip and headers

* Update admin-file.vue

* require admin for view ip/headers

* IP (recent) 消した

* admin必須

* opt in

* clean ips periodically

* respect logging setting in drive/files/create
2022-07-02 15:12:11 +09:00
syuilo 7d8a70f99e fix(api): fix instance schema 2022-06-28 12:16:11 +09:00
syuilo 164d4a9825 fix(api): add missing themeColor property of instance 2022-06-28 10:40:49 +09:00
syuilo f880d0631c tweak client 2022-06-21 17:55:38 +09:00
syuilo 4efee455b1 fix(server): faviconUrl of federated instance is missing 2022-06-21 14:28:43 +09:00
Johann150 7db09103e7
chore: synchronize visibility checks (#8687)
* reuse single meId parameter

* unify code style

Use template string to avoid having to use escaped quote marks.

* fix: follower only notes are visible to mentioned users

This synchronizes the visibility rules with the Notes.isVisibleForMe
method from packages/backend/src/models/repositories/note.ts

* add comment
2022-06-11 16:14:44 +09:00
syuilo 89419c05b2 use node 16 2022-06-04 17:26:56 +09:00
Johann150 804fa33535
refactor: improve code quality (#8751)
* remove unnecessary if

`Array.prototype.some` already returns a boolean so an if to return
true or false is completely unnecessary in this case.

* perf: use count instead of find

When using `count` instead of `findOneBy`, the data is not
unnecessarily loaded.

* remove duplicate null check

The variable is checked for null in the lines above and the function
returns if so. Therefore, it can not be null at this point.

* simplify `getJsonSchema`

Because the assigned value is `null` and the used keys are only
shallow, use of `nestedProperty.set` seems inappropriate. Because the
value is not read, the initial for loop can be replaced by a `for..in`
loop.

Since all keys will be assigned `null`, the condition of the ternary
expression in the nested function will always be true. Therefore the
recursion case will never happen. With this the nested function can be
eliminated.

* remove duplicate condition

The code above already checks `dragging` and returns if it is truthy.
Checking it again later is therefore unnecessary.

To make this more obvious the `return` is removed in favour of using
an if...else construct.

* remove impossible "unknown" time

The `ago` variable will always be a number and all non-negative numbers
are already covered by other cases, the negative case is handled with
`future` so there is no case when `unkown` could be achieved.
2022-05-29 15:15:52 +09:00
Johann150 8d5c9e96e4
fix: assume remote users are following each other (#8734)
Misskey does not know if two remote users are following each other.
Because ActivityPub actions would otherwise fail on followers only
notes, we have to assume that two remote users are following each other
when an interaction about a remote note occurs.
2022-05-25 23:17:00 +09:00
Johann150 31c73fdfa2
chore: synchronize code and database schema (#8577)
* chore: remove default null

null is always the default value if a table column is nullable, and typeorm's
@Column only accepts strings for default.

* chore: synchronize code with database schema

* chore: sync generated migrations with code
2022-05-05 22:45:22 +09:00
syuilo 84b183a9f6 refactor: use structuredClone for deep clone 2022-04-23 12:38:02 +09:00
syuilo d338ea2591 fix ogp rendering and refactor 2022-04-17 21:18:18 +09:00
syuilo d39465085c refactor: fix type 2022-04-17 12:59:41 +09:00
Johann150 c8935b32f8
fix: validation (better #8456) (#8461)
* Revert "revert 484e023c0"

This reverts commit c03b70c949.

* also allow pure renote

* fix checks for pure renote
2022-04-03 13:57:26 +09:00
syuilo c03b70c949 revert 484e023c0 2022-04-02 16:47:53 +09:00
syuilo 8e5f2690f2
feat: Webhook (#8457)
* feat: introduce webhook

* wip

* wip

* wip

* Update CHANGELOG.md
2022-04-02 15:28:49 +09:00
Johann150 484e023c0c
enhance(doc): required input fields (#8456)
* remove empty file

If the endpoint is to be implemented later, the file can be added back,
but for now it is confusing to have an empty file.

* enhance(doc): document defaults

Default for `isPublic` is based on the database schema default value.
Defaults for `local` and `withFiles` are based on the behaviour of the endpoint.

* enhance(doc): explain nullable emoji category

* fix: make nullable if default is null

* enhance(doc): explain mute attribute expiresAt

* fix: define required fields

- `notes/create`: the default for `text` has been removed because ajv can not handle
  `default` inside of `anyOf`, see
  https://ajv.js.org/guide/modifying-data.html#assigning-defaults
  and the default value cannot be `null` if text is `nullable: false` in the `anyOf`
  first alternative.
- `notes/create`: The `mediaIds` property has been marked as deprecated because it
  has the same behaviour as using `fileIds`, but the implementation tries to handlè
  `fileIds` first.
- The result schema for `admin/emoji/list` has been altered because the `host`
  property will always be `null` as it is filtered this way in the database query.
  See packages/backend/src/server/api/endpoints/admin/emoji/list.ts line 67.

* enhance(doc): explain nullable hostname

* update changelog

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-04-02 15:04:36 +09:00
syuilo bc2c40a6ca refactor and performance improvements 2022-03-26 17:19:27 +09:00