Compare commits

..

46 Commits

Author SHA1 Message Date
e967d9ded3 Merge branch 'develop' 2021-08-24 13:20:30 +09:00
c3b55b6849 12.89.1 2021-08-24 13:20:20 +09:00
3e193c9864 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-08-24 13:19:28 +09:00
d64e25e449 fix: support DeepL pro account
Fix #7648
2021-08-24 13:19:21 +09:00
c4707c612d New Crowdin updates (#7679)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations create-plugin.md (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Esperanto)

* New translations keyboard-shortcut.md (Esperanto)

* New translations timeline.md (Esperanto)

* New translations glossary.md (Esperanto)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Esperanto)

* New translations keyboard-shortcut.md (Esperanto)

* New translations timeline.md (Esperanto)

* New translations glossary.md (Esperanto)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)
2021-08-24 13:08:58 +09:00
9d3448c880 fix(server): use csp to imporve security 2021-08-24 13:08:20 +09:00
dad6a77645 refactoring 2021-08-22 22:22:53 +09:00
f64d3942d7 🎨 2021-08-22 16:18:53 +09:00
45fe754759 🎨 2021-08-22 16:15:40 +09:00
98f1d93628 refactor 2021-08-22 13:16:23 +09:00
8785e1c3a4 enhance(client): ユーザー名についてのヒントを追加 2021-08-22 13:16:15 +09:00
f00ceedae4 Merge branch 'develop' 2021-08-21 17:59:29 +09:00
7387e010c2 12.89.0 2021-08-21 17:59:13 +09:00
a59dfff12f New Crowdin updates (#7646)
* New translations mute-and-block.md (Ukrainian)

* New translations mute-and-block.md (Czech)

* New translations mute-and-block.md (Danish)

* New translations mute-and-block.md (German)

* New translations mute-and-block.md (Italian)

* New translations mute-and-block.md (Korean)

* New translations mute-and-block.md (Dutch)

* New translations mute-and-block.md (Norwegian)

* New translations mute-and-block.md (Polish)

* New translations mute-and-block.md (Portuguese)

* New translations mute-and-block.md (Russian)

* New translations mute-and-block.md (Chinese Simplified)

* New translations mute-and-block.md (Spanish)

* New translations mute-and-block.md (Chinese Traditional)

* New translations mute-and-block.md (English)

* New translations mute-and-block.md (Indonesian)

* New translations mute-and-block.md (Thai)

* New translations mute-and-block.md (Esperanto)

* New translations mute-and-block.md (Uyghur)

* New translations mute-and-block.md (Lojban)

* New translations mute-and-block.md (Kannada)

* New translations mute-and-block.md (Haitian Creole)

* New translations mute-and-block.md (Kabyle)

* New translations mute-and-block.md (Arabic)

* New translations mute-and-block.md (French)

* New translations mute-and-block.md (Japanese, Kansai)

* New translations glossary.md (German)

* New translations links.md (German)

* New translations links.md (English)

* New translations report-issue.md (German)

* New translations changelog.md (German)

* New translations apps.md (German)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations disable-timelines.md (Japanese, Kansai)

* New translations disable-timelines.md (Japanese, Kansai)

* New translations faq.md (Japanese, Kansai)

* New translations aiscript.md (Japanese, Kansai)

* New translations faq.md (Japanese, Kansai)

* New translations misskey.md (Japanese, Kansai)

* New translations aiscript.md (Japanese, Kansai)

* New translations reaction.md (Japanese, Kansai)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations glossary.md (Japanese, Kansai)

* New translations glossary.md (Kabyle)

* New translations glossary.md (Haitian Creole)

* New translations glossary.md (Kannada)

* New translations glossary.md (Lojban)

* New translations glossary.md (Uyghur)

* New translations glossary.md (Esperanto)

* New translations glossary.md (Indonesian)

* New translations misskey.md (English)

* New translations glossary.md (Thai)

* New translations glossary.md (English)

* New translations glossary.md (Chinese Traditional)

* New translations glossary.md (Dutch)

* New translations glossary.md (Chinese Simplified)

* New translations glossary.md (Ukrainian)

* New translations glossary.md (Russian)

* New translations glossary.md (Portuguese)

* New translations glossary.md (Polish)

* New translations glossary.md (Norwegian)

* New translations glossary.md (Korean)

* New translations glossary.md (French)

* New translations glossary.md (Italian)

* New translations glossary.md (German)

* New translations glossary.md (Danish)

* New translations glossary.md (Czech)

* New translations glossary.md (Arabic)

* New translations glossary.md (Spanish)

* New translations note.md (French)

* New translations glossary.md (Chinese Simplified)

* New translations faq.md (French)

* New translations faq.md (Chinese Simplified)

* New translations faq.md (Kabyle)

* New translations faq.md (Haitian Creole)

* New translations faq.md (Kannada)

* New translations faq.md (Lojban)

* New translations faq.md (Uyghur)

* New translations faq.md (Esperanto)

* New translations faq.md (Thai)

* New translations faq.md (Indonesian)

* New translations faq.md (English)

* New translations faq.md (Chinese Traditional)

* New translations faq.md (Ukrainian)

* New translations faq.md (Spanish)

* New translations faq.md (Russian)

* New translations faq.md (Portuguese)

* New translations faq.md (Polish)

* New translations faq.md (Norwegian)

* New translations faq.md (Dutch)

* New translations faq.md (Korean)

* New translations faq.md (Italian)

* New translations faq.md (German)

* New translations faq.md (Danish)

* New translations faq.md (Czech)

* New translations faq.md (Arabic)

* New translations faq.md (Japanese, Kansai)

* New translations faq.md (French)

* New translations misskey.md (French)

* New translations faq.md (French)

* New translations misskey.md (French)

* New translations faq.md (French)

* New translations troubleshooting.md (French)

* New translations troubleshooting.md (French)

* New translations troubleshooting.md (French)

* New translations troubleshooting.md (French)

* New translations troubleshooting.md (French)

* New translations troubleshooting.md (French)

* New translations troubleshooting.md (French)

* New translations word-mute.md (Ukrainian)

* New translations word-mute.md (Czech)

* New translations word-mute.md (Danish)

* New translations word-mute.md (German)

* New translations word-mute.md (Italian)

* New translations word-mute.md (Korean)

* New translations word-mute.md (Dutch)

* New translations word-mute.md (Norwegian)

* New translations word-mute.md (Polish)

* New translations word-mute.md (Portuguese)

* New translations word-mute.md (Russian)

* New translations word-mute.md (Chinese Simplified)

* New translations word-mute.md (Spanish)

* New translations word-mute.md (Chinese Traditional)

* New translations word-mute.md (English)

* New translations word-mute.md (Indonesian)

* New translations word-mute.md (Thai)

* New translations word-mute.md (Esperanto)

* New translations word-mute.md (Uyghur)

* New translations word-mute.md (Lojban)

* New translations word-mute.md (Kannada)

* New translations word-mute.md (Haitian Creole)

* New translations word-mute.md (Kabyle)

* New translations word-mute.md (Arabic)

* New translations word-mute.md (French)

* New translations word-mute.md (Japanese, Kansai)

* New translations glossary.md (English)

* New translations glossary.md (English)

* New translations glossary.md (English)

* New translations glossary.md (English)

* New translations faq.md (English)

* New translations faq.md (English)

* New translations glossary.md (English)

* New translations word-mute.md (English)

* New translations word-mute.md (English)

* New translations word-mute.md (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)
2021-08-21 17:58:32 +09:00
f6128dd3ff 🎨 2021-08-21 17:40:15 +09:00
eeff88ece2 Update CHANGELOG.md 2021-08-21 14:52:41 +09:00
bae1282f74 clean up 2021-08-21 14:47:39 +09:00
d2007add75 feat: Implement api sw/unregister (#7611)
* Implement api sw/unregister

* remove all mode

* add changelog

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2021-08-21 14:47:18 +09:00
802db92d98 Update setup.en.md (#7675)
Updated PostgreSQL version to 12  

See https://github.com/misskey-dev/misskey/issues/7632#issuecomment-901653826
2021-08-21 14:24:03 +09:00
a53e1e4ec3 enhance: Improve account deletion experience 2021-08-21 12:48:50 +09:00
fd1ef4a62d enhance(server): Use job queue for account delete (#7668)
* enhance(server): Use job queue for account delete

Fix #5336

* ジョブをひとつに

* remove done call

* clean up

* add User.isDeleted

* コミット忘れ

* Update 1629512953000-user-is-deleted.ts

* show dialog

* lint

* Update 1629512953000-user-is-deleted.ts
2021-08-21 12:41:56 +09:00
8ab9068d8e fix bug 2021-08-21 11:51:46 +09:00
47dd30d3b2 fix(client): ノートの「削除して編集」をするとアンケートの選択肢が[object Object]になる問題を修正
Fix #7037
2021-08-21 11:16:56 +09:00
fcdd042b02 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-08-21 10:29:30 +09:00
04855f9201 enhance(client): Improve emoji autocomplete behaviour
cherry picked from 4b2c215e25
2021-08-21 10:29:26 +09:00
cf0a5d5735 Bump @redocly/openapi-core from 1.0.0-beta.44 to 1.0.0-beta.54 (#7665)
Bumps [@redocly/openapi-core](https://github.com/Redocly/openapi-cli) from 1.0.0-beta.44 to 1.0.0-beta.54.
- [Release notes](https://github.com/Redocly/openapi-cli/releases)
- [Changelog](https://github.com/Redocly/openapi-cli/blob/master/docs/changelog.md)
- [Commits](https://github.com/Redocly/openapi-cli/compare/v1.0.0-beta.44...v1.0.0-beta.54)

---
updated-dependencies:
- dependency-name: "@redocly/openapi-core"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-20 23:15:17 +09:00
bb2db1cf76 perf: Tune AP job queue timings (#7635)
* perf: Tune AP job queue timings

* CHANGELOG

* chore: add reference

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2021-08-20 21:59:03 +09:00
0e69091455 doc: add features/word-mute (#7672) 2021-08-20 21:40:45 +09:00
3cb5ed167a fix: meta.jsonをimportしないように
Fix #7671
2021-08-20 21:34:56 +09:00
1ffee15b83 fix: use correct query generate function (#7657)
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2021-08-20 20:55:12 +09:00
75b9f31acf fix: import syslog-pro 2021-08-20 20:18:24 +09:00
fc56b12690 refactor: localStorageのaccountsはindexedDBで保持するように (#7609)
* accountsストアはindexedDBで保持するように

* fix lint

* fix indexeddb available detection

* remove debugging code

* fix lint

* resolve ba756204b7 (diff-f565878e8202f0037b830c780b7c0932dc1bb5fd3d05ede14d72d10efbc3740c)
Firefoxでの動作を改善

* fix lint

* fix lint

* add changelog
2021-08-20 19:38:16 +09:00
60e768436e Create dependabot.yml 2021-08-20 00:22:29 +09:00
84f2192cde update deps 2021-08-19 22:40:39 +09:00
97f2675d40 refactor: use path alias to improve readability 2021-08-19 22:04:15 +09:00
6d881d4570 fix import 2021-08-19 21:57:36 +09:00
42cc93dd0f fix: mochaが動かないため拡張子なしに戻した 2021-08-19 21:55:45 +09:00
e9f34a0f09 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-08-19 18:33:59 +09:00
b9cb6d1c10 refactor: refactoring imports
将来ESMに移行しやすいように
Related: #7658

なんかmochaが起動しなくなってるけど理由不明
すぐ直したい
2021-08-19 18:33:41 +09:00
7bf517e990 Remove unused packages (#7661)
* Remove unused packages

* Remove unused babel things

* Remove more unused packages
2021-08-19 18:07:32 +09:00
ab54e147f2 Remove is-root dependencies (#7660) 2021-08-19 16:27:12 +09:00
e677540fd6 Update faq.md 2021-08-19 15:42:53 +09:00
31e3aaeda0 Update glossary.md 2021-08-19 11:35:42 +09:00
938fc317c9 Update glossary.md 2021-08-19 11:32:25 +09:00
4c431c5432 refactor 2021-08-19 11:26:26 +09:00
881b914c6a チャンネルを作成しているとアカウントを削除できないのを修正 (#7653)
* チャンネルを作成しているとアカウントを削除できないのを修正

* CHANGELOG

* nullable
2021-08-18 22:04:04 +09:00
743 changed files with 4299 additions and 2600 deletions

View File

@ -1,13 +0,0 @@
{
"plugins": [
[
"@babel/plugin-transform-runtime",
{
"corejs": {
"version": 3,
"proposals": true
}
}
]
]
}

11
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"

View File

@ -7,6 +7,32 @@
-->
## 12.89.1 (2021/08/24)
### Improvements
- クライアントのデザインの調整
### Bugfixes
- 翻訳でDeepLのProアカウントに対応していない問題を修正
- インスタンス設定でDeepLのAuth Keyが空で表示される問題を修正
- セキュリティの向上
## 12.89.0 (2021/08/21)
### Improvements
- アカウント削除の安定性を向上
- 絵文字オートコンプリートの挙動を改修
- localStorageのaccountsはindexedDBで保持するように
- ActivityPub: ジョブキューの試行タイミングを調整 (#7635)
- API: sw/unregisterを追加
- ワードミュートのドキュメントを追加
- クライアントのデザインの調整
- 依存関係の更新
### Bugfixes
- チャンネルを作成しているとアカウントを削除できないのを修正
- ノートの「削除して編集」をするとアンケートの選択肢が[object Object]になる問題を修正
## 12.88.0 (2021/08/17)
### Features

View File

@ -35,6 +35,11 @@ If your language is not listed in Crowdin, please open an issue.
## Test
* Test codes are located in [`/test`](/test).
### Run specify test
```
npx cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT="./test/tsconfig.json" npx mocha test/foo.ts --require ts-node/register
```
## Continuous integration
Misskey uses GitHub Actions for executing automated tests.
Configuration files are located in [`/.github/workflows`](/.github/workflows).
@ -245,6 +250,9 @@ npx ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前
### コネクションには`markRaw`せよ
**Vueのコンポーネントのdataオプションとして**misskey.jsのコネクションを設定するとき、必ず`markRaw`でラップしてください。インスタンスが不必要にリアクティブ化されることで、misskey.js内の処理で不具合が発生するとともに、パフォーマンス上の問題にも繋がる。なお、Composition APIを使う場合はこの限りではない(リアクティブ化はマニュアルなため)。
### JSONのimportに気を付けよう
TypeScriptでjsonをimportすると、tscでコンパイルするときにそのjsonファイルも一緒にdistディレクトリに吐き出されてしまう。この挙動により、意図せずファイルの書き換えが発生することがあるので、jsonをimportするときは書き換えられても良いものかどうか確認すること。書き換えされて欲しくない場合は、importで読み込むのではなく、`fs.readFileSync`などの関数を使って読み込むようにすればよい。
## その他
### HTMLのクラス名で follow という単語は使わない
広告ブロッカーで誤ってブロックされる

View File

@ -24,7 +24,7 @@ Please install and setup these softwares:
#### Dependencies :package:
* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x)
* **[PostgreSQL](https://www.postgresql.org/)** (>= 10)
* **[PostgreSQL](https://www.postgresql.org/)** (12.x / 13.x is preferred)
* **[Redis](https://redis.io/)**
##### Optional

View File

@ -1,3 +1,13 @@
/*
import * as fs from 'fs';
if (fs.existsSync('./built')) {
import('./built/index.js').then(built => built());
} else {
console.log('Built code is not found. Probably an error occurred during a build or you just forgot to build.');
}
*/
const fs = require('fs');
if (fs.existsSync('./built')) {

View File

@ -777,6 +777,15 @@ misskeyUpdated: "Misskey wurde aktualisiert!"
whatIsNew: "Änderungen anzeigen"
translate: "Übersetzen"
translatedFrom: "Aus {x} übersetzt"
accountDeletionInProgress: "Löschung des Benutzerkontos momentan in Bearbeitung"
usernameInfo: "Ein Name, durch den dein Benutzerkonto auf diesem Server identifiziert werden kann. Du kannst das Alphabet (a~z, A~Z), Ziffern (0~9) oder Unterstriche (_) verwenden. Benutzernamen können später nicht geändert werden."
_accountDelete:
accountDelete: "Benutzerkonto löschen"
mayTakeTime: "Da die Löschung eines Benutzerkontos ein aufwendiger Prozess ist, kann dessen Dauer davon abhängen, wie viel Inhalt in diesem erstellt wurde oder wie viele Dateien hochgeladen wurden."
sendEmail: "Sobald die Löschung abgeschlossen ist, wird an die mit ihm verknüpfte Email-Adresse eine Benachrichtigung versendet."
requestAccountDelete: "Löschung des Benutzerkontos anfordern"
started: "Löschung wurde eingeleitet."
inProgress: "Löschung in Bearbeitung"
_docs:
continueReading: "Mehr lesen"
features: "Funktionen"

View File

@ -777,6 +777,15 @@ misskeyUpdated: "Misskey has been updated!"
whatIsNew: "Show changes"
translate: "Translate"
translatedFrom: "Translated from {x}"
accountDeletionInProgress: "Account deletion is currently in progress"
usernameInfo: "A name that identifies your account from others on this server. You can use the alphabet (a~z, A~Z), digits (0~9) or underscores (_). Usernames can not be changed later."
_accountDelete:
accountDelete: "Delete Account"
mayTakeTime: "As account deletion is a resource-heavy process, it may take some time to complete depending on how much content you have created and how many files you have uploaded."
sendEmail: "Once account deletion has been completed, an email will be sent to the email address registered to this account."
requestAccountDelete: "Request account deletion"
started: "Deletion has been started."
inProgress: "Deletion is currently in progress"
_docs:
continueReading: "Read more"
features: "Features"

View File

@ -1,7 +1,7 @@
---
_lang_: "Esperanto"
headlineMisskey: "Reto ligata per notoj"
introMisskey: "Bonvenon! Misskey estas malfermitkoda malcentraliza mikrobloga servo.\nKreu \"noto\"n por diskonigi tion ke nun okazas, aŭ por dissendu pri vi📡\nPer la funkcio \"reago\" vi ankaŭ povas rapide esprimi vian senton pri ĉies noto👍\nVolu esplori nova mondo🚀"
introMisskey: "Bonvenon! Misskey estas malfermitkoda malcentraliza mikrobloga servo.\nKreu \"noto\"n por diskonigu tion ke nun okazas, aŭ por dissendu pri vi. 📡\nPer la funkcio \"reago\", vi ankaŭ povas rapide esprimi vian senton pri ĉies noto. 👍\nOni esploru novan mondon. 🚀"
monthAndDay: "{day}-a/{month}"
search: "Serĉi"
notifications: "Sciigoj"
@ -73,6 +73,7 @@ following: "Sekvatoj"
followers: "Sekvantoj"
followsYou: "Sekvas vin"
createList: "Kreii liston"
manageLists: "Administri liston"
error: "Eraro"
somethingHappened: "Problemo okazis."
retry: "Reprovi"
@ -119,7 +120,7 @@ emojiName: "Nomo de emoĵio"
emojiUrl: "URL de la emoĵio"
addEmoji: "Aldoni emoĵion"
settingGuide: "Rekomendaj agordoj"
cacheRemoteFiles: "Havi staplon por transaj dosieroj"
cacheRemoteFiles: "Havi staplon de transaj dosieroj"
flagAsBot: "Tiu uzanto estas roboto"
flagAsCat: "Tiu uzanto estas kato"
addAccount: "Aldoni konton"
@ -151,7 +152,7 @@ blockedUsers: "Blokataj uzantoj"
noUsers: "Sen uzantoj"
editProfile: "Redakti profilon"
noteDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la noton?"
pinLimitExceeded: "Vi ne plu povas alpingli noton."
pinLimitExceeded: "Vi povas alpingli ne pli noton."
processing: "Traktado..."
noCustomEmojis: "Neniu emoĵio"
federating: "Kunfederado"
@ -169,7 +170,7 @@ currentPassword: "Aktuala pasvorto"
newPassword: "Nova pasvorto"
newPasswordRetype: "Reentajpu la novan pasvorton"
attachFile: "Aldoni dosieron"
more: "Plu!"
more: "Plu !"
featured: "Maksimumi"
usernameOrUserId: "Uzantnomo aŭ identigilo de uzanto"
noSuchUser: "Neniuj uzantoj trovitaj."
@ -188,7 +189,7 @@ fromUrl: "De URL"
uploadFromUrl: "Alŝuti de URL"
uploadFromUrlDescription: "URL de la dosiero kiun vi volas alŝuti"
explore: "Esplori"
games: "Ludoj sur Misskey"
games: "Miskiaj Ludoj"
messageRead: "Legita"
startMessaging: "Komenci babiladon"
nUsersRead: "Legita de {n} homoj"
@ -245,6 +246,7 @@ yearX: "La jaro {year}"
pages: "Paĝoj"
connectService: "Konekti"
disconnectService: "Farkonektiĝi"
enableLocalTimeline: "Ebligi lokan templinion"
enableGlobalTimeline: "Ebligi mallokan templinion"
registration: "Registri"
driveCapacityPerLocalAccount: "Volumo de disko po unu loka uzanto"
@ -257,6 +259,7 @@ pinnedUsers: "Alpinglita uzanto"
pinnedPages: "Alpinglitaj paĝoj"
pinnedNotes: "Pinglita noto"
antennas: "Antenoj"
manageAntennas: "Administri antenojn"
name: "Nomo"
withFileAntenna: "Nur kun aldonaĵo"
withReplies: "Inkluzive respondoj"
@ -342,6 +345,7 @@ poll: "Balotujo"
useCw: "Kaŝi enhavo"
themeEditor: "Redaktilo de koloraroj"
author: "Aŭtoro"
manage: "Administro"
plugins: "Kromaĵoj"
deck: "Kartaro"
medium: "Meza"
@ -351,6 +355,7 @@ emailServer: "Retpoŝta servilo"
email: "Retpoŝto"
emailAddress: "Retpoŝta adreso"
smtpConfig: "Agordoj de la servilo SMTP"
smtpPort: "Pordo"
smtpUser: "Uzantnomo"
smtpPass: "Pasvorto"
wordMute: "Silentigo de vortoj"
@ -363,9 +368,9 @@ create: "Krei"
notificationSetting: "Agordoj de sciigoj"
useGlobalSetting: "Oni uzas malloka agordo"
fileIdOrUrl: "Dosiera identigilo aŭ URL"
abuseReports: "Signali"
reportAbuse: "Signali"
reportAbuseOf: "Signali {name}'(o)n"
abuseReports: "Signaloj"
reportAbuse: "Signalo"
reportAbuseOf: "Signali kontraŭ {name}'(o)"
send: "Sendi"
openInNewTab: "Malfermi en nova langeto"
editTheseSettingsMayBreakAccount: "Redakti tiujn agordojn estas eble damaĝi konton."
@ -423,6 +428,7 @@ offline: "Forkonektita"
instanceBlocking: "Blokado de ekzemplo"
selectAccount: "Elekti konton"
user: "Uzanto"
administration: "Administro"
accounts: "Kontoj"
high: "Alta"
middle: "Meza"
@ -439,6 +445,7 @@ translatedFrom: "Tradukita el {x}"
_docs:
continueReading: "Legi plu"
features: "Funkcioj"
admin: "Administro"
_gallery:
liked: "Ŝatitaj notoj"
like: "Ŝati"
@ -447,6 +454,9 @@ _email:
title: "Vi estas eksekvita"
_receiveFollowRequest:
title: "Vi ricevis peton de sekvado"
_plugin:
install: "Instali kromaĵon"
manage: "Administri kromaĵojn"
_registry:
key: "Ŝlosilo"
keys: "Ŝlosiloj"
@ -460,6 +470,7 @@ _aboutMisskey:
translation: "Traduki Misskey'on"
patrons: "Mecenatoj"
_mfm:
dummy: "Misskey vastigas la mondon de Fediverso"
mention: "Mencioj"
hashtag: "Kradvorto"
url: "URL"
@ -487,6 +498,7 @@ _instanceTicker:
_channel:
create: "Krei kanalon"
edit: "Redakti kanalon"
owned: "Posedaĵo"
following: "Sekvante"
usersCount: "{n} partoprenanto(j)"
_menuDisplay:
@ -495,6 +507,7 @@ _wordMute:
muteWords: "Kaŝigitaj vortoj"
mutedNotes: "Silentigataj notoj"
_theme:
manage: "Administri kolorarojn"
code: "Kodo de koloraro"
darken: "Malbrileco"
lighten: "Brileco"
@ -611,10 +624,10 @@ _charts:
federationInstancesTotal: "Tuta numero de kunfederantaj ekzemploj"
filesTotal: "Tuta numero de dosieroj"
_timelines:
home: "Hejmo"
local: "Loka"
social: "Sociala"
global: "Malloka"
home: "HEJMO"
local: "LOKA"
social: "SOCIALA"
global: "MALLOKA"
_rooms:
translate: "Movi"
chooseImage: "Elekti bildon"
@ -667,6 +680,8 @@ _pages:
arg1: "Listoj"
_listLen:
arg1: "Listoj"
_splitStrByLine:
arg1: "Teksto"
types:
array: "Listoj"
stringArray: "List de teksto"
@ -677,7 +692,7 @@ _notification:
youGotMessagingMessageFromGroup: "Retbabilan mesaĝon oni sendis al la grupo {name}"
youWereFollowed: "sksekvis vin"
youReceivedFollowRequest: "Vi ricevis peton de sekvado"
yourFollowRequestAccepted: "Via peto por eksekvu estas akceptita."
yourFollowRequestAccepted: "Via peto por sekvado estis akceptita."
_types:
follow: "Sekvatoj"
mention: "Mencioj"
@ -685,7 +700,7 @@ _notification:
quote: "Citi"
reaction: "Reagoj"
receiveFollowRequest: "Ricevita peton de sekvado"
followRequestAccepted: "Peto por eksekvu akceptita"
followRequestAccepted: "Akceptita peto por sekvado"
_deck:
profile: "Agordaro"
_columns:

View File

@ -777,6 +777,16 @@ misskeyUpdated: "Misskeyが更新されました"
whatIsNew: "更新情報を見る"
translate: "翻訳"
translatedFrom: "{x}から翻訳"
accountDeletionInProgress: "アカウントの削除が進行中です"
usernameInfo: "サーバー上であなたのアカウントを一意に識別するための名前。アルファベット(a~z, A~Z)、数字(0~9)、およびアンダーバー(_)が使用できます。ユーザー名は後から変更することは出来ません。"
_accountDelete:
accountDelete: "アカウントの削除"
mayTakeTime: "アカウントの削除は負荷のかかる処理であるため、作成したコンテンツの数やアップロードしたファイルの数が多いと完了までに時間がかかることがあります。"
sendEmail: "アカウントの削除が完了する際は、登録してあったメールアドレス宛に通知を送信します。"
requestAccountDelete: "アカウント削除をリクエスト"
started: "削除処理が開始されました。"
inProgress: "削除が進行中"
_docs:
continueReading: "続きを読む"

View File

@ -777,6 +777,15 @@ misskeyUpdated: "Misskey가 업데이트 되었습니다!"
whatIsNew: "패치 정보 보기"
translate: "번역"
translatedFrom: "{x}에서 번역"
accountDeletionInProgress: "계정 삭제 작업을 진행하고 있습니다"
usernameInfo: "서버상에서 계정을 식별하기 위한 이름. 알파벳(a~z, A~Z), 숫자(0~9) 및 언더바(_)를 사용할 수 있습니다. 사용자명은 나중에 변경할 수 없습니다."
_accountDelete:
accountDelete: "계정 삭제"
mayTakeTime: "계정 삭제는 서버에 부하를 가하기 때문에, 작성한 콘텐츠나 업로드한 파일의 수가 많으면 완료까지 시간이 걸릴 수 있습니다."
sendEmail: "계정 삭제가 완료되면 등록된 이메일 주소로 알림을 보냅니다."
requestAccountDelete: "계정 삭제 요청"
started: "삭제 작업이 시작되었습니다."
inProgress: "삭제 진행 중"
_docs:
continueReading: "계속 읽기"
features: "기능"

View File

@ -777,6 +777,11 @@ misskeyUpdated: "Misskey更新完成"
whatIsNew: "显示更新信息"
translate: "翻译"
translatedFrom: "从 {x} 翻译"
accountDeletionInProgress: "正在删除账户"
usernameInfo: "在服务器上唯一标识您的帐户的名称。您可以使用字母 (a ~ z, A ~ Z)、数字 (0 ~ 9) 和下划线 (_)。用户名以后不能更改。"
_accountDelete:
accountDelete: "删除帐户"
inProgress: "正在删除"
_docs:
continueReading: "继续阅读"
features: "特性"

View File

@ -0,0 +1,14 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class fixChannelUserId1629288472000 implements MigrationInterface {
name = 'fixChannelUserId1629288472000'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "channel" ALTER COLUMN "userId" DROP NOT NULL;`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "channel" ALTER COLUMN "userId" SET NOT NULL;`);
}
}

View File

@ -0,0 +1,15 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class isUserDeleted1629512953000 implements MigrationInterface {
name = 'isUserDeleted1629512953000'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "user" ADD "isDeleted" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`COMMENT ON COLUMN "user"."isDeleted" IS 'Whether the User is deleted.'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "isDeleted"`);
}
}

View File

@ -0,0 +1,14 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class deeplIntegration21629778475000 implements MigrationInterface {
name = 'deeplIntegration21629778475000'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "meta" ADD "deeplIsPro" boolean NOT NULL DEFAULT false`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "deeplIsPro"`);
}
}

View File

@ -1,7 +1,7 @@
{
"name": "misskey",
"author": "syuilo <syuilotan@yahoo.co.jp>",
"version": "12.88.0",
"version": "12.89.1",
"codename": "indigo",
"repository": {
"type": "git",
@ -10,8 +10,8 @@
"main": "./index.js",
"private": true,
"scripts": {
"start": "node ./index.js",
"start:test": "cross-env NODE_ENV=test node ./index.js",
"start": "node --experimental-json-modules ./index.js",
"start:test": "cross-env NODE_ENV=test node --experimental-json-modules ./index.js",
"init": "npm run migrate",
"ormconfig": "node ./built/ormconfig.js",
"migrate": "ts-node ./node_modules/typeorm/cli.js migration:run",
@ -38,7 +38,6 @@
"lodash": "^4.17.21"
},
"dependencies": {
"@babel/plugin-transform-runtime": "7.14.5",
"@elastic/elasticsearch": "7.11.0",
"@koa/cors": "3.1.0",
"@koa/multer": "3.0.0",
@ -74,7 +73,7 @@
"@types/markdown-it": "12.0.3",
"@types/matter-js": "0.17.5",
"@types/mocha": "8.2.3",
"@types/node": "16.6.0",
"@types/node": "16.6.2",
"@types/node-fetch": "2.5.12",
"@types/nodemailer": "6.4.4",
"@types/nprogress": "0.2.0",
@ -90,7 +89,7 @@
"@types/redis": "2.8.31",
"@types/rename": "1.0.4",
"@types/request-stats": "3.0.0",
"@types/rimraf": "3.0.1",
"@types/rimraf": "3.0.2",
"@types/seedrandom": "2.4.28",
"@types/sharp": "0.28.5",
"@types/sinonjs__fake-timers": "6.0.3",
@ -104,8 +103,8 @@
"@types/webpack-stream": "3.2.12",
"@types/websocket": "1.0.4",
"@types/ws": "7.4.7",
"@typescript-eslint/parser": "4.29.1",
"@vue/compiler-sfc": "3.2.3",
"@typescript-eslint/parser": "4.29.2",
"@vue/compiler-sfc": "3.2.4",
"abort-controller": "3.0.0",
"apexcharts": "3.27.3",
"autobind-decorator": "2.4.0",
@ -113,25 +112,23 @@
"autwh": "0.1.0",
"aws-sdk": "2.966.0",
"bcryptjs": "2.4.3",
"blurhash": "1.1.3",
"broadcast-channel": "3.7.0",
"bull": "3.26.0",
"blurhash": "1.1.4",
"broadcast-channel": "4.2.0",
"bull": "3.28.1",
"cacheable-lookup": "6.0.0",
"cafy": "15.2.1",
"cbor": "8.0.0",
"chalk": "4.1.2",
"chart.js": "2.9.4",
"cli-highlight": "2.1.11",
"commander": "7.2.0",
"commander": "8.1.0",
"compare-versions": "3.6.0",
"concurrently": "6.2.0",
"concurrently": "6.2.1",
"content-disposition": "0.5.3",
"core-js": "3.16.1",
"crc-32": "1.2.0",
"css-loader": "6.2.0",
"cssnano": "5.0.7",
"cssnano": "5.0.8",
"dateformat": "4.5.1",
"diskusage": "1.1.3",
"escape-regexp": "0.0.1",
"eslint": "7.32.0",
"eslint-plugin-vue": "7.16.0",
@ -147,13 +144,10 @@
"gulp-replace": "1.1.3",
"gulp-terser": "2.0.1",
"gulp-tslint": "8.1.4",
"hard-source-webpack-plugin": "0.13.1",
"hpagent": "0.1.2",
"html-minifier": "4.0.0",
"http-signature": "1.3.5",
"idb-keyval": "5.1.3",
"insert-text-at-cursor": "0.3.0",
"is-root": "2.1.0",
"is-svg": "4.3.1",
"js-yaml": "4.1.0",
"jsdom": "16.7.0",
@ -178,23 +172,20 @@
"mfm-js": "0.19.0",
"misskey-js": "0.0.6",
"mocha": "8.4.0",
"moji": "0.5.1",
"ms": "2.1.3",
"multer": "1.4.3",
"nested-property": "4.0.0",
"node-fetch": "2.6.1",
"nodemailer": "6.6.3",
"object-assign-deep": "0.4.0",
"os-utils": "0.0.14",
"parse5": "6.0.1",
"pg": "8.6.0",
"pg": "8.7.1",
"portscanner": "2.2.0",
"postcss": "8.3.6",
"postcss-loader": "6.1.1",
"prismjs": "1.24.1",
"probe-image-size": "7.2.1",
"promise-limit": "2.7.0",
"promise-sequential": "1.1.1",
"pug": "3.0.2",
"punycode": "2.1.1",
"pureimage": "0.3.2",
@ -202,21 +193,19 @@
"random-seed": "0.3.0",
"ratelimiter": "3.4.1",
"re2": "1.16.0",
"reconnecting-websocket": "4.4.0",
"redis": "3.1.2",
"redis-lock": "0.1.4",
"reflect-metadata": "0.1.13",
"regenerator-runtime": "0.13.9",
"rename": "1.0.4",
"request-stats": "3.0.0",
"require-all": "3.0.0",
"rimraf": "3.0.2",
"rndstr": "1.0.0",
"s-age": "1.1.2",
"sass": "1.37.5",
"sass": "1.38.0",
"sass-loader": "12.1.0",
"seedrandom": "3.0.5",
"sharp": "0.28.3",
"sharp": "0.29.0",
"speakeasy": "2.0.0",
"stringz": "2.1.0",
"style-loader": "3.2.1",
@ -230,21 +219,18 @@
"tinycolor2": "1.4.2",
"tmp": "0.2.1",
"ts-loader": "9.2.5",
"ts-node": "10.2.0",
"tsc-alias": "1.3.8",
"ts-node": "10.2.1",
"tsc-alias": "1.3.9",
"tsconfig-paths": "3.10.1",
"tslint": "6.1.3",
"tslint-sonarts": "1.9.0",
"twemoji-parser": "13.1.0",
"typeorm": "0.2.32",
"typeorm": "0.2.37",
"typescript": "4.3.5",
"ulid": "2.3.0",
"uuid": "8.3.2",
"v-debounce": "0.1.2",
"vanilla-tilt": "1.7.1",
"vue": "3.2.3",
"vue-color": "2.8.1",
"vue-json-pretty": "1.8.1",
"vue": "3.2.4",
"vue-loader": "16.5.0",
"vue-prism-editor": "2.0.0-alpha.2",
"vue-router": "4.0.5",
@ -252,19 +238,17 @@
"vue-svg-loader": "0.17.0-beta.2",
"vuedraggable": "4.0.1",
"web-push": "3.4.5",
"webpack": "5.50.0",
"webpack-cli": "4.7.2",
"webpack": "5.51.0",
"webpack-cli": "4.8.0",
"websocket": "1.0.34",
"ws": "8.1.0",
"ws": "8.2.0",
"xev": "2.0.1"
},
"devDependencies": {
"@redocly/openapi-core": "1.0.0-beta.44",
"@types/chai": "4.2.16",
"@redocly/openapi-core": "1.0.0-beta.54",
"@types/fluent-ffmpeg": "2.1.17",
"chai": "4.3.4",
"cross-env": "7.0.3",
"cypress": "8.2.0",
"cypress": "8.3.0",
"start-server-and-test": "1.13.1"
}
}

View File

@ -1,7 +0,0 @@
declare module 'is-root' {
function isRoot(): boolean;
namespace isRoot {} // Hack
export = isRoot;
}

View File

@ -1,20 +1,19 @@
import { Command } from 'commander';
import config from '@/config';
import config from '@/config/index';
const program = new Command();
program
.version(config.version)
.option('--no-daemons', 'Disable daemon processes (for debbuging)')
.option('--disable-clustering', 'Disable clustering')
.option('--only-server', 'Run server only (without job queue processing)')
.option('--only-queue', 'Pocessing job queue only (without server)')
.option('--quiet', 'Suppress all logs')
.option('--verbose', 'Enable all logs')
.option('--with-log-time', 'Include timestamp for each logs')
.option('--slow', 'Delay all requests (for debbuging)')
.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.')
.parse(process.argv);
program.version(config.version);
program.option('--no-daemons', 'Disable daemon processes (for debbuging)');
program.option('--disable-clustering', 'Disable clustering');
program.option('--only-server', 'Run server only (without job queue processing)');
program.option('--only-queue', 'Pocessing job queue only (without server)');
program.option('--quiet', 'Suppress all logs');
program.option('--verbose', 'Enable all logs');
program.option('--with-log-time', 'Include timestamp for each logs');
program.option('--slow', 'Delay all requests (for debbuging)');
program.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.');
program.parse(process.argv);
if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true;
if (process.env.NODE_ENV === 'test') program.disableClustering = true;

View File

@ -2,7 +2,7 @@ import * as cluster from 'cluster';
import * as chalk from 'chalk';
import Xev from 'xev';
import Logger from '../services/logger';
import Logger from '@/services/logger';
import { program } from '../argv';
// for typeorm

View File

@ -1,18 +1,25 @@
import * as fs from 'fs';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import * as os from 'os';
import * as cluster from 'cluster';
import * as chalk from 'chalk';
import * as portscanner from 'portscanner';
import * as isRoot from 'is-root';
import { getConnection } from 'typeorm';
import Logger from '../services/logger';
import Logger from '@/services/logger';
import loadConfig from '@/config/load';
import { Config } from '@/config/types';
import { lessThan } from '../prelude/array';
import { lessThan } from '@/prelude/array';
import { program } from '../argv';
import { showMachineInfo } from '@/misc/show-machine-info';
import { initDb } from '../db/postgre';
const meta = require('../meta.json');
//const _filename = fileURLToPath(import.meta.url);
const _filename = __filename;
const _dirname = dirname(_filename);
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../meta.json`, 'utf-8'));
const logger = new Logger('core', 'cyan');
const bootLogger = logger.createSubLogger('boot', 'magenta', false);
@ -39,6 +46,11 @@ function greet() {
bootLogger.info(`Misskey v${meta.version}`, null, true);
}
function isRoot() {
// maybe process.getuid will be undefined under not POSIX environment (e.g. Windows)
return process.getuid != null && process.getuid() === 0;
}
/**
* Init master process
*/

View File

@ -1,7 +1,8 @@
import { get, set } from '@client/scripts/idb-proxy';
import { reactive } from 'vue';
import { apiUrl } from '@client/config';
import { waiting } from '@client/os';
import { unisonReload } from '@client/scripts/unison-reload';
import { unisonReload, reloadChannel } from '@client/scripts/unison-reload';
// TODO: 他のタブと永続化されたstateを同期
@ -10,6 +11,7 @@ type Account = {
token: string;
isModerator: boolean;
isAdmin: boolean;
isDeleted: boolean;
};
const data = localStorage.getItem('account');
@ -17,22 +19,45 @@ const data = localStorage.getItem('account');
// TODO: 外部からはreadonlyに
export const $i = data ? reactive(JSON.parse(data) as Account) : null;
export function signout() {
export async function signout() {
waiting();
localStorage.removeItem('account');
//#region Remove account
const accounts = await getAccounts();
accounts.splice(accounts.findIndex(x => x.id === $i.id), 1);
set('accounts', accounts);
//#endregion
//#region Remove push notification registration
try {
const registration = await navigator.serviceWorker.ready;
const push = await registration.pushManager.getSubscription();
if (!push) return;
await fetch(`${apiUrl}/sw/unregister`, {
method: 'POST',
body: JSON.stringify({
i: $i.token,
endpoint: push.endpoint,
}),
});
} catch (e) {}
//#endregion
document.cookie = `igi=; path=/`;
location.href = '/';
if (accounts.length > 0) login(accounts[0].token);
else unisonReload();
}
export function getAccounts() {
const accountsData = localStorage.getItem('accounts');
const accounts: { id: Account['id'], token: Account['token'] }[] = accountsData ? JSON.parse(accountsData) : [];
return accounts;
export async function getAccounts(): Promise<{ id: Account['id'], token: Account['token'] }[]> {
return (await get('accounts')) || [];
}
export function addAccount(id: Account['id'], token: Account['token']) {
const accounts = getAccounts();
export async function addAccount(id: Account['id'], token: Account['token']) {
const accounts = await getAccounts();
if (!accounts.some(x => x.id === id)) {
localStorage.setItem('accounts', JSON.stringify(accounts.concat([{ id, token }])));
await set('accounts', accounts.concat([{ id, token }]));
}
}
@ -47,7 +72,7 @@ function fetchAccount(token): Promise<Account> {
})
.then(res => {
// When failed to authenticate user
if (res.status >= 400 && res.status < 500) {
if (res.status !== 200 && res.status < 500) {
return signout();
}
@ -69,15 +94,22 @@ export function updateAccount(data) {
}
export function refreshAccount() {
fetchAccount($i.token).then(updateAccount);
return fetchAccount($i.token).then(updateAccount);
}
export async function login(token: Account['token']) {
export async function login(token: Account['token'], redirect?: string) {
waiting();
if (_DEV_) console.log('logging as token ', token);
const me = await fetchAccount(token);
localStorage.setItem('account', JSON.stringify(me));
addAccount(me.id, token);
await addAccount(me.id, token);
if (redirect) {
reloadChannel.postMessage('reload');
location.href = redirect;
return;
}
unisonReload();
}

View File

@ -118,6 +118,8 @@ export default defineComponent({
&:not(.noGap) {
> .notes {
background: var(--bg);
.qtqtichx {
background: var(--panel);
border-radius: var(--radius);

View File

@ -7,7 +7,7 @@
<p class="mfcuwfyp" v-else-if="empty">{{ $ts.noNotifications }}</p>
<div v-else>
<XList class="notifications" :items="items" v-slot="{ item: notification }" :no-gap="true">
<XList class="elsfgstc" :items="items" v-slot="{ item: notification }" :no-gap="true">
<XNote v-if="['reply', 'quote', 'mention'].includes(notification.type)" :note="notification.note" @update:note="noteUpdated(notification.note, $event)" :key="notification.id"/>
<XNotification v-else :notification="notification" :with-time="true" :full="true" class="_panel notification" :key="notification.id"/>
</XList>
@ -141,4 +141,8 @@ export default defineComponent({
text-align: center;
color: var(--fg);
}
.elsfgstc {
background: var(--panel);
}
</style>

View File

@ -339,7 +339,12 @@ export default defineComponent({
this.cw = init.cw;
this.useCw = init.cw != null;
if (init.poll) {
this.poll = init.poll;
this.poll = {
choices: init.poll.choices.map(x => x.text),
multiple: init.poll.multiple,
expiresAt: init.poll.expiresAt,
expiredAfter: init.poll.expiredAfter,
};
}
this.visibility = init.visibility;
this.localOnly = init.localOnly;

View File

@ -1,12 +1,12 @@
<template>
<form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
<form class="qlvuhzng" @submit.prevent="onSubmit" :autocomplete="Math.random()">
<template v-if="meta">
<MkInput v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
<MkInput class="_inputNoTopMargin" v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
<template #label>{{ $ts.invitationCode }}</template>
<template #prefix><i class="fas fa-key"></i></template>
</MkInput>
<MkInput v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @update:modelValue="onChangeUsername" data-cy-signup-username>
<template #label>{{ $ts.username }}</template>
<MkInput class="_inputNoTopMargin" v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @update:modelValue="onChangeUsername" data-cy-signup-username>
<template #label>{{ $ts.username }} <div class="_button _help" v-tooltip:dialog="$ts.usernameInfo"><i class="far fa-question-circle"></i></div></template>
<template #prefix>@</template>
<template #suffix>@{{ host }}</template>
<template #caption>
@ -204,7 +204,7 @@ export default defineComponent({
</script>
<style lang="scss" scoped>
.mk-signup {
.qlvuhzng {
.captcha {
margin: 16px 0;
}

View File

@ -1,6 +1,6 @@
import { Directive, ref } from 'vue';
import { isDeviceTouch } from '@client/scripts/is-device-touch';
import { popup } from '@client/os';
import { popup, dialog } from '@client/os';
const start = isDeviceTouch ? 'touchstart' : 'mouseover';
const end = isDeviceTouch ? 'touchend' : 'mouseleave';
@ -24,6 +24,18 @@ export default {
}
};
if (binding.arg === 'dialog') {
el.addEventListener('click', (ev) => {
ev.preventDefault();
ev.stopPropagation();
dialog({
type: 'info',
text: binding.value,
});
return false;
});
}
const show = e => {
if (!document.body.contains(el)) return;
if (self._close) return;

View File

@ -4,6 +4,15 @@
import '@client/style.scss';
//#region account indexedDB migration
import { set } from '@client/scripts/idb-proxy';
if (localStorage.getItem('accounts') != null) {
set('accounts', JSON.parse(localStorage.getItem('accounts')));
localStorage.removeItem('accounts');
}
//#endregion
import * as Sentry from '@sentry/browser';
import { Integrations } from '@sentry/tracing';
import { computed, createApp, watch, markRaw } from 'vue';
@ -92,15 +101,12 @@ window.addEventListener('resize', () => {
});
//#endregion
// Get the <head> element
const head = document.getElementsByTagName('head')[0];
// If mobile, insert the viewport meta tag
if (isMobile || window.innerWidth <= 1024) {
const viewport = document.getElementsByName('viewport').item(0);
viewport.setAttribute('content',
`${viewport.getAttribute('content')},minimum-scale=1,maximum-scale=1,user-scalable=no`);
head.appendChild(viewport);
document.head.appendChild(viewport);
}
//#region Set lang attr
@ -301,6 +307,13 @@ for (const plugin of ColdDeviceStorage.get('plugins').filter(p => p.active)) {
}
if ($i) {
if ($i.isDeleted) {
dialog({
type: 'warning',
text: i18n.locale.accountDeletionInProgress,
});
}
if ('Notification' in window) {
// 許可を得ていなかったらリクエスト
if (Notification.permission === 'default') {

View File

@ -214,7 +214,11 @@ export function modalPageWindow(path: string) {
}, {}, 'closed');
}
export function dialog(props: Record<string, any>) {
export function dialog(props: {
type: 'error' | 'info' | 'success' | 'warning' | 'waiting';
title?: string | null;
text?: string | null;
}) {
return new Promise((resolve, reject) => {
popup(import('@client/components/dialog.vue'), props, {
done: result => {

View File

@ -60,7 +60,7 @@ import FormBase from '@client/components/form/base.vue';
import FormGroup from '@client/components/form/group.vue';
import FormKeyValueView from '@client/components/form/key-value-view.vue';
import MkLink from '@client/components/link.vue';
import { physics } from '@client/scripts/physics.ts';
import { physics } from '@client/scripts/physics';
import * as symbols from '@client/symbols';
const patrons = [

View File

@ -12,6 +12,9 @@
<template #prefix><i class="fas fa-key"></i></template>
DeepL Auth Key
</FormInput>
<FormSwitch v-model:value="deeplIsPro">
Pro account
</FormSwitch>
</FormGroup>
<FormButton @click="save" primary><i class="fas fa-save"></i> {{ $ts.save }}</FormButton>
</FormSuspense>
@ -50,6 +53,7 @@ export default defineComponent({
},
summalyProxy: '',
deeplAuthKey: '',
deeplIsPro: false,
}
},
@ -62,11 +66,13 @@ export default defineComponent({
const meta = await os.api('meta', { detail: true });
this.summalyProxy = meta.summalyProxy;
this.deeplAuthKey = meta.deeplAuthKey;
this.deeplIsPro = meta.deeplIsPro;
},
save() {
os.apiWithDialog('admin/update-meta', {
summalyProxy: this.summalyProxy,
deeplAuthKey: this.deeplAuthKey,
deeplIsPro: this.deeplIsPro,
}).then(() => {
fetchInstance();
});

View File

@ -1,6 +1,6 @@
<template>
<div class="">
<XNotifications class="_content" @before="before" @after="after" page/>
<div class="clupoqwt" v-size="{ min: [800] }">
<XNotifications class="notifications" @before="before" @after="after" page/>
</div>
</template>
@ -43,3 +43,17 @@ export default defineComponent({
}
});
</script>
<style lang="scss" scoped>
.clupoqwt {
&.min-width_800px {
background: var(--bg);
padding: 32px 0;
> .notifications {
max-width: 800px;
margin: 0 auto;
}
}
}
</style>

View File

@ -48,10 +48,10 @@ export default defineComponent({
title: this.$ts.accounts,
icon: 'fas fa-users',
},
storedAccounts: getAccounts().filter(x => x.id !== this.$i.id),
storedAccounts: getAccounts().then(accounts => accounts.filter(x => x.id !== this.$i.id)),
accounts: null,
init: () => os.api('users/show', {
userIds: this.storedAccounts.map(x => x.id)
init: async () => os.api('users/show', {
userIds: (await this.storedAccounts).map(x => x.id)
}).then(accounts => {
this.accounts = accounts;
}),
@ -104,8 +104,8 @@ export default defineComponent({
}, 'closed');
},
switchAccount(account: any) {
const storedAccounts = getAccounts();
async switchAccount(account: any) {
const storedAccounts = await getAccounts();
const token = storedAccounts.find(x => x.id === account.id).token;
this.switchAccountWithToken(token);
},

View File

@ -0,0 +1,67 @@
<template>
<FormBase>
<FormInfo warn>{{ $ts._accountDelete.mayTakeTime }}</FormInfo>
<FormInfo>{{ $ts._accountDelete.sendEmail }}</FormInfo>
<FormButton @click="deleteAccount" danger v-if="!$i.isDeleted">{{ $ts._accountDelete.requestAccountDelete }}</FormButton>
<FormButton disabled v-else>{{ $ts._accountDelete.inProgress }}</FormButton>
</FormBase>
</template>
<script lang="ts">
import { defineAsyncComponent, defineComponent } from 'vue';
import FormInfo from '@client/components/form/info.vue';
import FormBase from '@client/components/form/base.vue';
import FormGroup from '@client/components/form/group.vue';
import FormButton from '@client/components/form/button.vue';
import * as os from '@client/os';
import { debug } from '@client/config';
import { signout } from '@client/account';
import * as symbols from '@client/symbols';
export default defineComponent({
components: {
FormBase,
FormButton,
FormGroup,
FormInfo,
},
emits: ['info'],
data() {
return {
[symbols.PAGE_INFO]: {
title: this.$ts._accountDelete.accountDelete,
icon: 'fas fa-exclamation-triangle'
},
debug,
}
},
mounted() {
this.$emit('info', this[symbols.PAGE_INFO]);
},
methods: {
async deleteAccount() {
const { canceled, result: password } = await os.dialog({
title: this.$ts.password,
input: {
type: 'password'
}
});
if (canceled) return;
await os.apiWithDialog('i/delete-account', {
password: password
});
await os.dialog({
title: this.$ts._accountDelete.started,
});
signout();
}
}
});
</script>

View File

@ -132,6 +132,7 @@ export default defineComponent({
case 'account-info': return defineAsyncComponent(() => import('./account-info.vue'));
case 'update': return defineAsyncComponent(() => import('./update.vue'));
case 'registry': return defineAsyncComponent(() => import('./registry.vue'));
case 'delete-account': return defineAsyncComponent(() => import('./delete-account.vue'));
case 'experimental-features': return defineAsyncComponent(() => import('./experimental-features.vue'));
}
if (page.value.startsWith('registry/keys/system/')) {

View File

@ -26,7 +26,7 @@
<FormLink to="/bios" behavior="browser"><template #icon><i class="fas fa-door-open"></i></template>BIOS</FormLink>
<FormLink to="/cli" behavior="browser"><template #icon><i class="fas fa-door-open"></i></template>CLI</FormLink>
<FormButton @click="closeAccount" danger>{{ $ts.closeAccount }}</FormButton>
<FormLink to="./delete-account"><template #icon><i class="fas fa-exclamation-triangle"></i></template>{{ $ts.closeAccount }}</FormLink>
</FormBase>
</template>
@ -41,7 +41,6 @@ import FormButton from '@client/components/form/button.vue';
import * as os from '@client/os';
import { debug } from '@client/config';
import { defaultStore } from '@client/store';
import { signout } from '@client/account';
import { unisonReload } from '@client/scripts/unison-reload';
import * as symbols from '@client/symbols';
@ -92,22 +91,6 @@ export default defineComponent({
os.popup(import('@client/components/taskmanager.vue'), {
}, {}, 'closed');
},
closeAccount() {
os.dialog({
title: this.$ts.password,
input: {
type: 'password'
}
}).then(({ canceled, result: password }) => {
if (canceled) return;
os.api('i/delete-account', {
password: password
}).then(() => {
signout();
});
});
}
}
});
</script>

View File

@ -1,5 +1,5 @@
<template>
<div class="cmuxhskf" v-hotkey.global="keymap">
<div class="cmuxhskf" v-hotkey.global="keymap" v-size="{ min: [800] }">
<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block _isolated"/>
<XPostForm v-if="$store.reactiveState.showFixedPostForm.value" class="post-form _block _isolated" fixed/>
<div class="tabs">
@ -19,17 +19,19 @@
</div>
</div>
<div class="new" v-if="queue > 0"><button class="_buttonPrimary" @click="top()">{{ $ts.newNoteRecived }}</button></div>
<XTimeline ref="tl" class="tl"
:key="src === 'list' ? `list:${list.id}` : src === 'antenna' ? `antenna:${antenna.id}` : src === 'channel' ? `channel:${channel.id}` : src"
:src="src"
:list="list ? list.id : null"
:antenna="antenna ? antenna.id : null"
:channel="channel ? channel.id : null"
:sound="true"
@before="before()"
@after="after()"
@queue="queueUpdated"
/>
<div class="tl">
<XTimeline ref="tl" class="tl"
:key="src === 'list' ? `list:${list.id}` : src === 'antenna' ? `antenna:${antenna.id}` : src === 'channel' ? `channel:${channel.id}` : src"
:src="src"
:list="list ? list.id : null"
:antenna="antenna ? antenna.id : null"
:channel="channel ? channel.id : null"
:sound="true"
@before="before()"
@after="after()"
@queue="queueUpdated"
/>
</div>
</div>
</template>
@ -231,6 +233,7 @@ export default defineComponent({
padding: 0 8px;
white-space: nowrap;
overflow: auto;
border-bottom: solid 0.5px var(--divider);
// 影の都合上
position: relative;
@ -287,8 +290,16 @@ export default defineComponent({
}
}
> .tl {
border-top: solid 0.5px var(--divider);
&.min-width_800px {
> .tl {
background: var(--bg);
padding: 32px 0;
> .tl {
max-width: 800px;
margin: 0 auto;
}
}
}
}
</style>

View File

@ -65,7 +65,7 @@ export class Autocomplete {
*/
private onInput() {
const caretPos = this.textarea.selectionStart;
const text = this.text.substr(0, caretPos).split('\n').pop();
const text = this.text.substr(0, caretPos).split('\n').pop()!;
const mentionIndex = text.lastIndexOf('@');
const hashtagIndex = text.lastIndexOf('#');
@ -83,7 +83,7 @@ export class Autocomplete {
const isMention = mentionIndex != -1;
const isHashtag = hashtagIndex != -1;
const isEmoji = emojiIndex != -1;
const isEmoji = emojiIndex != -1 && text.split(/:[a-z0-9_+\-]+:/).pop()!.includes(':');
let opened = false;

View File

@ -0,0 +1,7 @@
import { get } from '@client/scripts/idb-proxy';
export async function getAccountFromId(id: string) {
const accounts = await get('accounts') as { token: string; id: string; }[];
if (!accounts) console.log('Accounts are not recorded');
return accounts.find(e => e.id === id);
}

View File

@ -0,0 +1,38 @@
// FirefoxのプライベートモードなどではindexedDBが使用不可能なので、
// indexedDBが使えない環境ではlocalStorageを使う
import {
get as iget,
set as iset,
del as idel,
createStore,
} from 'idb-keyval';
const fallbackName = (key: string) => `idbfallback::${key}`;
let idbAvailable = typeof window !== 'undefined' ? !!window.indexedDB : true;
if (idbAvailable) {
try {
await createStore('keyval-store', 'keyval');
} catch (e) {
console.error('idb open error', e);
idbAvailable = false;
}
}
if (!idbAvailable) console.error('indexedDB is unavailable. It will use localStorage.');
export async function get(key: string) {
if (idbAvailable) return iget(key);
return JSON.parse(localStorage.getItem(fallbackName(key)));
}
export async function set(key: string, val: any) {
if (idbAvailable) return iset(key, val);
return localStorage.setItem(fallbackName(key), JSON.stringify(val));
}
export async function del(key: string) {
if (idbAvailable) return idel(key);
return localStorage.removeItem(fallbackName(key));
}

View File

@ -156,8 +156,10 @@ hr {
._button {
appearance: none;
display: inline-block;
padding: 0;
margin: 0; // for Safari
width: max-content;
background: none;
border: none;
cursor: pointer;
@ -201,6 +203,11 @@ hr {
}
}
._help {
color: var(--accent);
cursor: help
}
._textButton {
@extend ._button;
color: var(--accent);

View File

@ -135,7 +135,7 @@ export default defineComponent({
},
async openAccountMenu(ev) {
const storedAccounts = getAccounts().filter(x => x.id !== this.$i.id);
const storedAccounts = await getAccounts().then(accounts => accounts.filter(x => x.id !== this.$i.id));
const accountsPromise = os.api('users/show', { userIds: storedAccounts.map(x => x.id) });
const accountItemPromises = storedAccounts.map(a => new Promise(res => {
@ -195,8 +195,8 @@ export default defineComponent({
}, 'closed');
},
switchAccount(account: any) {
const storedAccounts = getAccounts();
async switchAccount(account: any) {
const storedAccounts = await getAccounts();
const token = storedAccounts.find(x => x.id === account.id).token;
this.switchAccountWithToken(token);
},

View File

@ -101,7 +101,7 @@ export default defineComponent({
},
async openAccountMenu(ev) {
const storedAccounts = getAccounts().filter(x => x.id !== this.$i.id);
const storedAccounts = await getAccounts().then(accounts => accounts.filter(x => x.id !== this.$i.id));
const accountsPromise = os.api('users/show', { userIds: storedAccounts.map(x => x.id) });
const accountItemPromises = storedAccounts.map(a => new Promise(res => {
@ -161,8 +161,8 @@ export default defineComponent({
}, 'closed');
},
switchAccount(account: any) {
const storedAccounts = getAccounts();
async switchAccount(account: any) {
const storedAccounts = await getAccounts();
const token = storedAccounts.find(x => x.id === account.id).token;
this.switchAccountWithToken(token);
},

View File

@ -121,7 +121,7 @@ export default defineComponent({
},
async openAccountMenu(ev) {
const storedAccounts = getAccounts().filter(x => x.id !== this.$i.id);
const storedAccounts = await getAccounts().then(accounts => accounts.filter(x => x.id !== this.$i.id));
const accountsPromise = os.api('users/show', { userIds: storedAccounts.map(x => x.id) });
const accountItemPromises = storedAccounts.map(a => new Promise(res => {
@ -181,8 +181,8 @@ export default defineComponent({
}, 'closed');
},
switchAccount(account: any) {
const storedAccounts = getAccounts();
async switchAccount(account: any) {
const storedAccounts = await getAccounts();
const token = storedAccounts.find(x => x.id === account.id).token;
this.switchAccountWithToken(token);
},

View File

@ -3,14 +3,19 @@
*/
import * as fs from 'fs';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import * as yaml from 'js-yaml';
import { Source, Mixin } from './types';
const meta = require('../meta.json');
//const _filename = fileURLToPath(import.meta.url);
const _filename = __filename;
const _dirname = dirname(_filename);
/**
* Path of configuration directory
*/
const dir = `${__dirname}/../../.config`;
const dir = `${_dirname}/../../.config`;
/**
* Path of configuration file
@ -20,6 +25,7 @@ const path = process.env.NODE_ENV === 'test'
: `${dir}/default.yml`;
export default function load() {
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../meta.json`, 'utf-8'));
const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
const mixin = {} as Mixin;

View File

@ -1,7 +1,7 @@
// TODO: 消したい
const interval = 30 * 60 * 1000;
import { AttestationChallenges } from '../models';
import { AttestationChallenges } from '@/models/index';
import { LessThan } from 'typeorm';
/**

View File

@ -1,5 +1,5 @@
import * as elasticsearch from '@elastic/elasticsearch';
import config from '@/config';
import config from '@/config/index';
const index = {
settings: {

View File

@ -1,3 +1,3 @@
import Logger from '../services/logger';
import Logger from '@/services/logger';
export const dbLogger = new Logger('db');

View File

@ -3,74 +3,74 @@ const types = require('pg').types;
types.setTypeParser(20, Number);
import { createConnection, Logger, getConnection } from 'typeorm';
import config from '@/config';
import { entities as charts } from '../services/chart/entities';
import config from '@/config/index';
import { entities as charts } from '@/services/chart/entities';
import { dbLogger } from './logger';
import * as highlight from 'cli-highlight';
import { Log } from '../models/entities/log';
import { User } from '../models/entities/user';
import { DriveFile } from '../models/entities/drive-file';
import { DriveFolder } from '../models/entities/drive-folder';
import { AccessToken } from '../models/entities/access-token';
import { App } from '../models/entities/app';
import { PollVote } from '../models/entities/poll-vote';
import { Note } from '../models/entities/note';
import { NoteReaction } from '../models/entities/note-reaction';
import { NoteWatching } from '../models/entities/note-watching';
import { NoteUnread } from '../models/entities/note-unread';
import { Notification } from '../models/entities/notification';
import { Meta } from '../models/entities/meta';
import { Following } from '../models/entities/following';
import { Instance } from '../models/entities/instance';
import { Muting } from '../models/entities/muting';
import { SwSubscription } from '../models/entities/sw-subscription';
import { Blocking } from '../models/entities/blocking';
import { UserList } from '../models/entities/user-list';
import { UserListJoining } from '../models/entities/user-list-joining';
import { UserGroup } from '../models/entities/user-group';
import { UserGroupJoining } from '../models/entities/user-group-joining';
import { UserGroupInvitation } from '../models/entities/user-group-invitation';
import { Hashtag } from '../models/entities/hashtag';
import { NoteFavorite } from '../models/entities/note-favorite';
import { AbuseUserReport } from '../models/entities/abuse-user-report';
import { RegistrationTicket } from '../models/entities/registration-tickets';
import { MessagingMessage } from '../models/entities/messaging-message';
import { Signin } from '../models/entities/signin';
import { AuthSession } from '../models/entities/auth-session';
import { FollowRequest } from '../models/entities/follow-request';
import { Emoji } from '../models/entities/emoji';
import { ReversiGame } from '../models/entities/games/reversi/game';
import { ReversiMatching } from '../models/entities/games/reversi/matching';
import { UserNotePining } from '../models/entities/user-note-pining';
import { Poll } from '../models/entities/poll';
import { UserKeypair } from '../models/entities/user-keypair';
import { UserPublickey } from '../models/entities/user-publickey';
import { UserProfile } from '../models/entities/user-profile';
import { UserSecurityKey } from '../models/entities/user-security-key';
import { AttestationChallenge } from '../models/entities/attestation-challenge';
import { Page } from '../models/entities/page';
import { PageLike } from '../models/entities/page-like';
import { GalleryPost } from '../models/entities/gallery-post';
import { GalleryLike } from '../models/entities/gallery-like';
import { ModerationLog } from '../models/entities/moderation-log';
import { UsedUsername } from '../models/entities/used-username';
import { Announcement } from '../models/entities/announcement';
import { AnnouncementRead } from '../models/entities/announcement-read';
import { Clip } from '../models/entities/clip';
import { ClipNote } from '../models/entities/clip-note';
import { Antenna } from '../models/entities/antenna';
import { AntennaNote } from '../models/entities/antenna-note';
import { PromoNote } from '../models/entities/promo-note';
import { PromoRead } from '../models/entities/promo-read';
import { Log } from '@/models/entities/log';
import { User } from '@/models/entities/user';
import { DriveFile } from '@/models/entities/drive-file';
import { DriveFolder } from '@/models/entities/drive-folder';
import { AccessToken } from '@/models/entities/access-token';
import { App } from '@/models/entities/app';
import { PollVote } from '@/models/entities/poll-vote';
import { Note } from '@/models/entities/note';
import { NoteReaction } from '@/models/entities/note-reaction';
import { NoteWatching } from '@/models/entities/note-watching';
import { NoteUnread } from '@/models/entities/note-unread';
import { Notification } from '@/models/entities/notification';
import { Meta } from '@/models/entities/meta';
import { Following } from '@/models/entities/following';
import { Instance } from '@/models/entities/instance';
import { Muting } from '@/models/entities/muting';
import { SwSubscription } from '@/models/entities/sw-subscription';
import { Blocking } from '@/models/entities/blocking';
import { UserList } from '@/models/entities/user-list';
import { UserListJoining } from '@/models/entities/user-list-joining';
import { UserGroup } from '@/models/entities/user-group';
import { UserGroupJoining } from '@/models/entities/user-group-joining';
import { UserGroupInvitation } from '@/models/entities/user-group-invitation';
import { Hashtag } from '@/models/entities/hashtag';
import { NoteFavorite } from '@/models/entities/note-favorite';
import { AbuseUserReport } from '@/models/entities/abuse-user-report';
import { RegistrationTicket } from '@/models/entities/registration-tickets';
import { MessagingMessage } from '@/models/entities/messaging-message';
import { Signin } from '@/models/entities/signin';
import { AuthSession } from '@/models/entities/auth-session';
import { FollowRequest } from '@/models/entities/follow-request';
import { Emoji } from '@/models/entities/emoji';
import { ReversiGame } from '@/models/entities/games/reversi/game';
import { ReversiMatching } from '@/models/entities/games/reversi/matching';
import { UserNotePining } from '@/models/entities/user-note-pining';
import { Poll } from '@/models/entities/poll';
import { UserKeypair } from '@/models/entities/user-keypair';
import { UserPublickey } from '@/models/entities/user-publickey';
import { UserProfile } from '@/models/entities/user-profile';
import { UserSecurityKey } from '@/models/entities/user-security-key';
import { AttestationChallenge } from '@/models/entities/attestation-challenge';
import { Page } from '@/models/entities/page';
import { PageLike } from '@/models/entities/page-like';
import { GalleryPost } from '@/models/entities/gallery-post';
import { GalleryLike } from '@/models/entities/gallery-like';
import { ModerationLog } from '@/models/entities/moderation-log';
import { UsedUsername } from '@/models/entities/used-username';
import { Announcement } from '@/models/entities/announcement';
import { AnnouncementRead } from '@/models/entities/announcement-read';
import { Clip } from '@/models/entities/clip';
import { ClipNote } from '@/models/entities/clip-note';
import { Antenna } from '@/models/entities/antenna';
import { AntennaNote } from '@/models/entities/antenna-note';
import { PromoNote } from '@/models/entities/promo-note';
import { PromoRead } from '@/models/entities/promo-read';
import { program } from '../argv';
import { Relay } from '../models/entities/relay';
import { MutedNote } from '../models/entities/muted-note';
import { Channel } from '../models/entities/channel';
import { ChannelFollowing } from '../models/entities/channel-following';
import { ChannelNotePining } from '../models/entities/channel-note-pining';
import { RegistryItem } from '../models/entities/registry-item';
import { Ad } from '../models/entities/ad';
import { Relay } from '@/models/entities/relay';
import { MutedNote } from '@/models/entities/muted-note';
import { Channel } from '@/models/entities/channel';
import { ChannelFollowing } from '@/models/entities/channel-following';
import { ChannelNotePining } from '@/models/entities/channel-note-pining';
import { RegistryItem } from '@/models/entities/registry-item';
import { Ad } from '@/models/entities/ad';
import { PasswordResetRequest } from '@/models/entities/password-reset-request';
const sqlLogger = dbLogger.createSubLogger('sql', 'white', false);

View File

@ -1,5 +1,5 @@
import * as redis from 'redis';
import config from '@/config';
import config from '@/config/index';
export function createConnection() {
return redis.createClient(

View File

@ -0,0 +1,41 @@
# تم كتمها / تم حجبها
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## اكتم
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## احجب
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# ワードミュート
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## مثيل الخادم
todo
## إيموجي مخصص
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## اكتم
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## قائمة الانتظار
アクティビティ配送などを順番に行うためのシステム。
## علِق
アカウントが使用不可に設定されている状態。

View File

@ -0,0 +1,41 @@
# ミュートとブロック
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Ztlumit
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Zablokovat
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# ワードミュート
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## Instance
todo
## Vlastní emoji
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## サイレンス
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## Fronta úloh
アクティビティ配送などを順番に行うためのシステム。
## Zmrazit
アカウントが使用不可に設定されている状態。

View File

@ -0,0 +1,41 @@
# ミュートとブロック
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## ミュート
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## ブロック
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# ワードミュート
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## インスタンス
todo
## カスタム絵文字
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## サイレンス
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## ジョブキュー
アクティビティ配送などを順番に行うためのシステム。
## 凍結
アカウントが使用不可に設定されている状態。

View File

@ -0,0 +1,41 @@
# Stummschaltungen und Blockierungen
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Stummschalten
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Blockieren
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# Wort-Stummschaltung
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -1,4 +1,4 @@
# サードパーティアプリのリスト
# Liste von Drittanbieter-Apps
## クライアント
todo

View File

@ -1,4 +1,4 @@
# 更新履歴
# Änderungshistorie
<div class="info"> このサーバーの更新履歴です。Misskeyの最新のリリースについては、<a href="https://github.com/misskey-dev/misskey/blob/master/CHANGELOG.md" target="_blank">GitHub</a>をご確認ください。</div>
<!-- For translators: Do not edit these comments. -->

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -1,4 +1,4 @@
# 用語集
# Glossar
Misskeyに関する用語集です。
## ActivityPub
@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## Instanz
todo
## Benutzerdefinierte Emojis
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## Instanzweit stummschalten
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## Job-Warteschlange
アクティビティ配送などを順番に行うためのシステム。
## Sperren
アカウントが使用不可に設定されている状態。

View File

@ -1,4 +1,4 @@
# リンク集
# Links
## Webサイト
- [Official Discord](https://discord.gg/Wp8gVStHW3) - Misskey公式Discordサーバー

View File

@ -1,4 +1,4 @@
# 不具合の報告
# Fehler melden
不具合と思われる状況に遭遇したときは、まず[トラブルシューティング](./troubleshooting)をご一読ください。 それでも問題が解決しないときは、以下の情報を含めて[フォーラム](https://forum.misskey.io/)に投稿してください。 投稿することで、解決策が見つかったり、不具合と判断されれば開発チームによって修正が行われます。
## 含める情報

View File

@ -0,0 +1,41 @@
# Mutes and Blocks
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Mute
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Block
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# Word mute
Through setting up word mutes, you can make notes satisfying set conditions not appear on your timeline anymore.
There are two types of word mutes: soft and hard.Below is an explanation of the setup process and effect of both.
## Soft word mute
With soft mutes, the word mute is processed within the client (app) you are using.
When a note meets the set conditions, it will be hidden behind text stating "(username) said something".
You can display the note as it was by clicking on this text.
## Hard word mute
With hard mutes, the server judges whether the content of a new incoming note meets the set conditions similar to antennas, and will completely exclude it from your timeline if so.
To summarize, a hard word mute has the following features:
* Only new notes created after configuration will be affected by the mute.
* If the conditions are changed, previously hard muted notes will still remain muted.
* Timelines will not be filled with "(...) said something".
* Hard mutes will function even for apps without functionality for soft mutes.

View File

@ -23,3 +23,6 @@ Only administrators can add, edit or delete custom emoji. If you'd like to do ei
## "I want to develop a Bot."
It is possible to develop a Bot using the Misskey API. Please, [see here](../advanced/develop-bot).
## Which service does the note translation function use?
[DeepL](https://www.deepl.com/) is being used for this.

View File

@ -49,14 +49,20 @@ Those users amongst all existing ones who are continually using their account.
## Instance
todo
## Custom Emoji
Emoji provided by your server.Emoji that are not specifically provided by your server but are available by default are called "Unicode Emoji".
## Control Panel
The settings screen of an instance.
todo
## Server
todo
## Silence
A state in which the visibility of the notes by said user cannot be set to "Public" anymore.Can be set for individual users by Moderators.For details, see [here.](../features/silence)
A state in which the visibility of the notes by said user cannot be set to "Public" anymore.Can be set for individual users by the discretion of Moderators.For details, see [here.](../features/silence)
## Job Queue
A system used for sequentially broadcasting activities to other servers etc.
## Suspend
A state which makes the account of a user unusable.

View File

@ -1,4 +1,4 @@
# A collection of links
# Links
## Websites
- [Official Discord](https://discord.gg/Wp8gVStHW3) - The official Discord server for Misskey

View File

@ -76,7 +76,7 @@ No.Misskey is a project completely different from Mastodon or other alike projec
### Are there any apps for iOS / Android available?
While no official Misskey app for either OS exists, there are several third-party applications. For details, please check [here](./apps).
However, functionality of third-party applications will inevitably lag behind the official Web client, so unless you really want to use a native application, we recommend the official Web client instead. As the Misskey Web client supports PWA, it is possible to make it act as if it was a native application instead. For details regarding this, please check [here](todo).
However, functionality of third-party applications will inevitably lag behind the official Web client, so unless you really want to use a native application, we recommend the official Web client instead. As the Misskey Web client supports PWA, it is also possible to make it act as if it was a native application instead. For details regarding this, please check [here](todo).
### Where can I download Misskey's logo or icon?
(Coming soon)

View File

@ -5,7 +5,7 @@ Misskey Webクライアントのプラグイン機能を使うと、クライア
プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
### name
プラグイン名
Nomo de kromaĵo
### author
プラグイン作者

View File

@ -0,0 +1,41 @@
# Silentigatoj kaj blokatoj
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Silentigi
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Bloki
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# Silentigo de vortoj
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -50,30 +50,36 @@ Ai estas oficiala maskoto de Misskey.
todo
## Ŝaltpodio
インスタンスの設定画面のこと
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる
## コントロールパネル
todo
## Servilo
todo
## Mutigi
A state in which the visibility of the notes by said user cannot be set to "Publika" anymore.Can be set for individual users by Moderators.Rigardu por sciu pli tie[.](../features/silence)
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## Disko
アクティビティ配送などを順番に行うためのシステム。
## Flostigi
アカウントが使用不可に設定されている状態。
## Disko
## Miskiisto
Misskeyにアップロードしたファイルを管理する機能。詳細は[こちら。](../features/drive)
## Notoj
Misskeyに投稿される、文章、ファイル、アンケートなどを含めることができるコンテンツ。詳細は[こちら。](../features/note)
## Miskiisto
Uzuloj de Misskey.
## Transa aŭ fora
Misskeyを使う人のこと。
## Moderigisto
スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
## Transa aŭ fora
## Transa
他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
## Kunfederaĵo

View File

@ -0,0 +1,41 @@
# Silenciar y bloquear
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Silenciar
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Bloquear
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# Silenciar palabras
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## Instancia
todo
## Emojis personalizados
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## Silenciar
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## Cola de trabajos
アクティビティ配送などを順番に行うためのシステム。
## Suspender
アカウントが使用不可に設定されている状態。

View File

@ -0,0 +1,41 @@
# Masqué·e·s / Bloqué·e·s
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Masquer
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Bloquer
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -12,7 +12,7 @@
<div class="info"> コンピューターのクリップボードに画像データがある状態で、フォーム内のテキストボックスにペーストするとその画像を添付することができます。</div>
<div class="info"> テキストボックス内で<kbd class="key">Ctrl + Enter</kbd>を押すことでも投稿できます。</div>
## Partager
## Renoter
既にあるートを引用、もしくはそのートを新しいートとして共有する行為、またそれによって作成されたートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
<div class="warn">⚠️ 公開範囲がフォロワーやダイレクトのートはRenoteできません</div>

View File

@ -0,0 +1,20 @@
# Filtre de mots
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -2,9 +2,9 @@
Vous trouverez ici les questions les plus fréquentes sur l'utilisation de Misskey. Les questions fréquentes concernant Misskey en tant que projet sont publiées [sur cette page](./misskey).
## « Existe-t-il des appli pour Android / iOS ? »
公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
Bien qu'il n'existe d'application Misskey officielle pour aucun OS, différentes applications développées par des tiers sont disponibles. [Voir ici](./apps) pour plus de détails.
ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
Cependant, à moins que vous ne soyez particulièrement déterminé·e à utiliser une application dédiée, l'utilisation du client Web officiel est vivement recommandée du fait que les applications développées par des tiers seront forcément en retard par rapport à celui-ci. Par ailleurs, étant donné que le client Web de Misskey est compatible avec une PWA, il peut adopter le comportement d'une application native. [Voir ici](todo) pour plus d'informations.
## « Ne peut-on pas utiliser un client Mastodon pour se connecter à Misskey ? »
Étant donné que Misskey n'est pas compatible avec l'API Mastodon, sauf cas exceptionnels, il n'est pas possible d'utiliser un client Mastodon pour Misskey.
@ -23,3 +23,6 @@ Seul·e·s les administrateur·rice·s peuvent ajouter, éditer ou effacer des
## « Je veux créer un Bot. »
Vous pouvez développer un Bot en utilisant l'API de Misskey. Plus d'informations sur [cette page](../advanced/develop-bot).
## « Quel est le service utilisé pour la fonctionnalité de traduction des notes ? »
Il s'agit de [DeepL](https://www.deepl.com/).

View File

@ -34,7 +34,7 @@ Misskeyに関する用語集です。
## NSFW
(読み: のっとせーふふぉーわーく) Not Safe For Workの略。画像を「閲覧注意」扱いにし、操作なしには表示しないようにすることができる機能。
## Partager
## Renoter
(読み: りのーと) 既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノート。詳細は[こちら。](../features/note)
## STL
@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## Instance
todo
## Émojis personnalisés
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## Mettre en sourdine
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## File dattente
アクティビティ配送などを順番に行うためのシステム。
## Suspendre
アカウントが使用不可に設定されている状態。

View File

@ -75,9 +75,9 @@ Misskeyは開発が進むにつれ使用する技術も大きく変わってき
いいえ。MisskeyはMastodonやその他のプロジェクトとは全く別のプロジェクトです。 開発に関しても、Misskeyの方が昔から開発されています。ただし、分散型になったのはMastodonの登場より後です。 同じActivityPubという分散のためのプロトコルを実装しているという点以外、両者に特に関りがあるわけでもありません。
### « Existe-t-il des appli pour Android / iOS ? »
公式にはそういったOSのネイティブアプリを開発していませんが、サードパーティ製のアプリがいくつかあります。 詳しくは[こちら](./apps)をご覧ください。
Bien qu'il n'existe d'application Misskey officielle pour aucun OS, différentes applications développées par des tiers sont disponibles. [Voir ici](./apps) pour plus de détails.
ただ、サードパーティ製アプリはどうしても機能への対応が遅れてしまうため、とくに拘りがなければ公式のWebクライアントの利用をおすすめします。 なお、MisskeyのWebクライアントはPWAに対応しているので、ネイティブアプリのように動作させることも可能です。 詳しくは[こちら](todo)をご覧ください。
Cependant, à moins que vous ne soyez particulièrement déterminé·e à utiliser une application dédiée, l'utilisation du client Web officiel est vivement recommandée du fait que les applications développées par des tiers seront forcément en retard par rapport à celui-ci. Par ailleurs, étant donné que le client Web de Misskey est compatible avec une PWA, il peut adopter le comportement d'une application native. [Voir ici](todo) pour plus d'informations.
### Misskeyのロゴ、アイコンはどこで入手できますか
(準備中)

View File

@ -1,19 +1,19 @@
# Résolution des problèmes
<div class="info"> N'hésitez pas à consulter les <a href="./faq">Questions fréquentes</a> en complément de cette page.</div>
問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
Lorsque vous rencontrez un problème, nous vous prions de lire cette page tout d'abord. Si toutefois aucun des paragraphes ci-dessous ne correspond à votre problème, ou bien si vous n'arrivez pas à le résoudre en suivant les instructions détaillées ici, nous vous invitons à contacter l'administrateur·rice de votre instance ou à [Signaler un bug](./report-issue).
## Le client ne démarre pas
ほとんどの場合、お使いのブラウザまたはOSのバージョンが古いことが原因です。 ブラウザおよびOSのバージョンを最新のものに更新してから、再度試してみてください。
Généralement, ce problème est dû au fait que vous utilisez une version trop ancienne de votre navigateur ou de votre système d'exploitation. Effectuez les mises à jour pour chacun d'eux vers leurs versions les plus récentes, puis essayez à nouveau.
これは稀ですが、それでも起動しない場合は、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
Cela arrive rarement, mais si votre client ne démarre toujours pas après cela, le problème vient du cache. Dans ce cas, videz le cache et essayez à nouveau.
## ページが読み込めない
クライアントが起動するもののページが読み込めないというエラーが出る場合は、ネットワークに問題がないか確認してください。また、サーバーがダウンしていないか確認してください。
## La page ne charge pas
Si votre client démarre mais qu'un message d'erreur apparaît lors du chargement de la page, assurez-vous qu'il ne s'agit pas d'un problème de connexion au réseau. Assurez-vous également que votre serveur n'est pas temporairement inaccessible.
これは稀ですが、キャッシュが原因の場合があります。ブラウザのキャッシュをクリアして、再度試してみてください。
Bien que cela arrive rarement, il se peut que le cache soit à l'origine du problème. Dans ce cas, videz le cache et essayez à nouveau.
まだ問題がある場合は、サーバーの問題と思われるのでサーバーの管理者に連絡してください。
Si le problème persiste malgré tout, il est très probable qu'il s'agisse d'une panne côté serveur ; nous vous invitons donc à contacter l'administrateur·rice de votre instance.
## Le client est lent
以下を試してみてください:
@ -31,10 +31,10 @@
点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
## La fonction « Renoter » ne fonctionne pas
フォロワー限定のートはRenoteすることはできません。
Les notes dont l'audience est limitée aux « Abonné·e·s uniquement » ne peuvent pas être renotées.
## Des éléments spécifiques de l'interface ne s'affichent pas
広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
## Certaines parties de l'interface ne sont pas traduites
ほとんどの場合、単に翻訳が間に合っていないだけで、不具合ではありません。翻訳が終わるまでお待ちください。 [翻訳に参加](./misskey)していただくことも可能です。
La plupart du temps, cela n'est pas un bug mais simplement un problème de traduction qui n'a pas encore été faite. Merci de patienter jusqu'à ce que la traduction de la portion en question soit achevée. Vous pouvez également [aider à traduire](./misskey) Misskey.

View File

@ -0,0 +1,41 @@
# ミュートとブロック
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## ミュート
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## ブロック
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# ワードミュート
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## インスタンス
todo
## カスタム絵文字
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## サイレンス
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## ジョブキュー
アクティビティ配送などを順番に行うためのシステム。
## 凍結
アカウントが使用不可に設定されている状態。

View File

@ -0,0 +1,41 @@
# Bisukan / Blokir
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Bisukan
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Blokir
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

View File

@ -0,0 +1,20 @@
# Bisukan kata
ワードミュートの設定をすると、条件に合致したノートが表示されなくなります。
ワードミュートには、ソフトワードミュートとハードワードミュートの2種類があります。それぞれについて設定の方法と挙動を説明します。
## ソフトワードミュート
ソフトワードミュートは、クライアント(アプリ)側でミュートを判断するワードミュートです。
ノートが設定した条件に合致すると、「(ユーザー名)が何かを言いました」という表示で隠れます。
クリックすると元の通りに表示されます。
## ハードワードミュート
ハードワードミュートは、アンテナのようにサーバーが新しいノートの本文に対して条件に合致するかどうか判断し、タイムラインから対象となったノートを除外します。
つまり、ハードワードミュートには、以下のような特徴があります。
* 条件設定後、新しい投稿のみがミュートの対象になります。
* 条件を変更しても、過去にハードミュートされたノートはミュートされたままになります。
* 「○○が何かを言いました」でタイムラインが埋まることがありません。
* ソフトミュートに非対応のアプリでも、ハードミュートは適用されます。

View File

@ -23,3 +23,6 @@ MFMには、そのURLのプレビューを無効にする構文があります
## Botを開発したい
Misskey APIを利用してBotの開発が可能です。[こちら](../advanced/develop-bot)をご確認ください。
## ノートの翻訳機能はどのサービスを使用していますか?
[DeepL](https://www.deepl.com/)を使用しています。

View File

@ -49,6 +49,9 @@ Misskeyに関する用語集です。
## Instansi
todo
## Emoji kustom
サーバーで用意された絵文字。カスタム絵文字ではない通常の絵文字は「Unicode絵文字」と区別して呼ばれる。
## コントロールパネル
インスタンスの設定画面のこと。
@ -58,6 +61,9 @@ todo
## Bungkam
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。詳細は[こちら。](../features/silence)
## Antrian kerja
アクティビティ配送などを順番に行うためのシステム。
## Bekukan
アカウントが使用不可に設定されている状態。

View File

@ -0,0 +1,41 @@
# Silenziati / Bloccati
好みではないユーザーがいる場合は、ミュートを行うことでそのユーザーが自分から見えないようにすることができます。 また、より強力な措置として、ブロックを行うことでそのユーザーから自分のコンテンツが見えないようになるほか、自分に対して関わることができないようにすることができます。 ミュートされていることは相手は分かりませんが、ブロックされていることは相手に分かります。どちらを選ぶかはご自身の判断で行ってください。
<div class="info"> ミュートとブロックは併用できます。</div>
<div class="warn">⚠️ 利用規約に違反するような、迷惑なユーザーがいる場合は運営者に報告することも検討してください。</div>
設定>ミュートとブロック から、自分がミュートまたはブロックしているユーザー一覧を確認することができます。
## Silenzia
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
- タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
- そのユーザーからの通知
- メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
- など
ユーザーをミュートするには、対象のユーザーのユーザーページのメニューを開き、「ミュート」ボタンを押します。
<div class="info"> ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。</div>
## Blocca
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
- フォローする
- ユーザーリストに追加する
- 返信する、Renoteする
- リアクションする、アンケートに投票する
- メッセージを送信する
- など
また、
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
<div class="warn">⚠️ 相手から自分のコンテンツが見えなくなりますが、相手がアカウントを切り替えたりログアウト状態になれば見ることができます。あくまで簡易的、補助的なものとしてお考えください。</div>

Some files were not shown because too many files have changed in this diff Show More