Merge branch 'develop' into feature/config-dropdir
This commit is contained in:
commit
5af915e17e
363 changed files with 2756 additions and 1228 deletions
|
@ -80,4 +80,6 @@ jobs:
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
- run: corepack enable
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
|
- run: pnpm --filter misskey-js run build
|
||||||
|
if: ${{ matrix.workspace == 'backend' }}
|
||||||
- run: pnpm --filter ${{ matrix.workspace }} run typecheck
|
- run: pnpm --filter ${{ matrix.workspace }} run typecheck
|
||||||
|
|
|
@ -87,4 +87,10 @@ body:
|
||||||
* OS and Architecture:
|
* OS and Architecture:
|
||||||
render: markdown
|
render: markdown
|
||||||
validations:
|
validations:
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Do you want to address this bug yourself?
|
||||||
|
options:
|
||||||
|
- label: Yes, I will patch the bug myself and send a pull request
|
||||||
|
|
36
CHANGELOG.md
36
CHANGELOG.md
|
@ -12,6 +12,39 @@
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
## 2023.12.2
|
||||||
|
|
||||||
|
### General
|
||||||
|
- v2023.12.1でDockerを利用してサーバーを起動できない問題を修正
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Enhance: 検索画面においてEnterキー押下で検索できるように
|
||||||
|
|
||||||
|
## 2023.12.1
|
||||||
|
|
||||||
|
### Note
|
||||||
|
- アクセストークンの権限が再整理されたため、一部のAPIが古いAPIトークンでは動作しなくなりました。\
|
||||||
|
権限不足になる場合には権限を再設定して再生成してください。
|
||||||
|
|
||||||
|
### General
|
||||||
|
- Enhance: ローカリゼーションの更新
|
||||||
|
- Fix: 自分のdirect noteがuser list timelineに追加されない
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Feat: AiScript専用のMFM構文`$[clickable.ev=EVENTNAME ...]`を追加。`Mk:C:mfm`のオプション`onClickEv`に関数を渡すと、クリック時に`EVENTNAME`を引数にして呼び出す
|
||||||
|
- Enhance: MFM入力補助ボタンを投稿フォームに表示できるように #12787
|
||||||
|
- Fix: 一部のモデログ(logYellowでの表示対象)について、表示の色が変わらない問題を修正
|
||||||
|
- Fix: `fg`/`bg`MFMに長い単語を指定すると、オーバーフローされずはみ出る問題を修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Enhance: センシティブワードの設定がハッシュタグトレンドにも適用されるようになりました
|
||||||
|
- Enhance: `oauth/token`エンドポイントのCORS対応
|
||||||
|
- Fix: 1702718871541-ffVisibility.jsのdownが壊れている
|
||||||
|
- Fix:「非センシティブのみ(リモートはいいねのみ)」を設定していても、センシティブに設定されたカスタム絵文字をリアクションできる問題を修正
|
||||||
|
- Fix: ロールアサイン時の通知で,ロールアイコンが縮小されずに表示される問題を修正
|
||||||
|
- Fix: サードパーティアプリケーションがWebsocket APIに無条件にアクセスできる問題を修正
|
||||||
|
- Fix: サードパーティアプリケーションがユーザーの許可なしに非公開の情報を見ることができる問題を修正
|
||||||
|
|
||||||
## 2023.12.0
|
## 2023.12.0
|
||||||
|
|
||||||
### Note
|
### Note
|
||||||
|
@ -99,6 +132,7 @@
|
||||||
- Enhance: MFM `$[ruby ]` が他ソフトウェアと連合されるように
|
- Enhance: MFM `$[ruby ]` が他ソフトウェアと連合されるように
|
||||||
- Enhance: Meilisearchを有効にした検索で、ユーザーのミュートやブロックを考慮するように
|
- Enhance: Meilisearchを有効にした検索で、ユーザーのミュートやブロックを考慮するように
|
||||||
- Enhance: カスタム絵文字のインポート時の動作を改善
|
- Enhance: カスタム絵文字のインポート時の動作を改善
|
||||||
|
- Enhance: json-schema(OpenAPIの戻り値として使用されるスキーマ定義)を出来る限り最新化 #12311
|
||||||
- Fix: 時間経過により無効化されたアンテナを再有効化したとき、サーバ再起動までその状況が反映されないのを修正 #12303
|
- Fix: 時間経過により無効化されたアンテナを再有効化したとき、サーバ再起動までその状況が反映されないのを修正 #12303
|
||||||
- Fix: ロールタイムラインが保存されない問題を修正
|
- Fix: ロールタイムラインが保存されない問題を修正
|
||||||
- Fix: api.jsonの生成ロジックを改善 #12402
|
- Fix: api.jsonの生成ロジックを改善 #12402
|
||||||
|
@ -115,7 +149,6 @@
|
||||||
- Fix: モデレーションログがモデレーターは閲覧できないように修正
|
- Fix: モデレーションログがモデレーターは閲覧できないように修正
|
||||||
- Fix: ハッシュタグのトレンド除外設定が即時に効果を持つように修正
|
- Fix: ハッシュタグのトレンド除外設定が即時に効果を持つように修正
|
||||||
- Fix: HTTP Digestヘッダのアルゴリズム部分に大文字の"SHA-256"しか使えない
|
- Fix: HTTP Digestヘッダのアルゴリズム部分に大文字の"SHA-256"しか使えない
|
||||||
- Fix: 管理者用APIのアクセス権限が適切に設定されていない問題を修正
|
|
||||||
|
|
||||||
## 2023.11.1
|
## 2023.11.1
|
||||||
|
|
||||||
|
@ -126,7 +159,6 @@
|
||||||
- Feat: 管理者がコントロールパネルからメールアドレスの照会を行えるようになりました
|
- Feat: 管理者がコントロールパネルからメールアドレスの照会を行えるようになりました
|
||||||
- Enhance: ローカリゼーションの更新
|
- Enhance: ローカリゼーションの更新
|
||||||
- Enhance: 依存関係の更新
|
- Enhance: 依存関係の更新
|
||||||
- Enhance: json-schema(OpenAPIの戻り値として使用されるスキーマ定義)を出来る限り最新化 #12311
|
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
- Enhance: MFMでルビを振れるように
|
- Enhance: MFMでルビを振れるように
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
_lang_: "বাংলা"
|
_lang_: "বাংলা"
|
||||||
headlineMisskey: "নোট ব্যাবহার করে সংযুক্ত নেটওয়ার্ক"
|
headlineMisskey: "নোট ব্যাবহার করে সংযুক্ত নেটওয়ার্ক"
|
||||||
introMisskey: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা। \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন 📡\n\"রিঅ্যাকশন\" গুলির মাধ্যমে যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন 👍\nএকটি নতুন দুনিয়া ঘুরে দেখুন 🚀\n"
|
introMisskey: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা। \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন 📡\n\"রিঅ্যাকশন\" গুলির মাধ্যমে যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন 👍\nএকটি নতুন দুনিয়া ঘুরে দেখুন 🚀\n"
|
||||||
|
poweredByMisskeyDescription: "{name} হল ওপেন সোর্স প্ল্যাটফর্ম <b>Misskey</b>-এর সার্ভারগুলির একটি৷"
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "খুঁজুন"
|
search: "খুঁজুন"
|
||||||
notifications: "বিজ্ঞপ্তি"
|
notifications: "বিজ্ঞপ্তি"
|
||||||
|
@ -12,12 +13,14 @@ fetchingAsApObject: "ফেডিভার্স থেকে খবর আন
|
||||||
ok: "ঠিক"
|
ok: "ঠিক"
|
||||||
gotIt: "বুঝেছি"
|
gotIt: "বুঝেছি"
|
||||||
cancel: "বাতিল"
|
cancel: "বাতিল"
|
||||||
|
noThankYou: "না, ধন্যবাদ"
|
||||||
enterUsername: "ইউজারনেম লিখুন"
|
enterUsername: "ইউজারনেম লিখুন"
|
||||||
renotedBy: "{user} রিনোট করেছেন"
|
renotedBy: "{user} রিনোট করেছেন"
|
||||||
noNotes: "কোন নোট নেই"
|
noNotes: "কোন নোট নেই"
|
||||||
noNotifications: "কোনো বিজ্ঞপ্তি নেই"
|
noNotifications: "কোনো বিজ্ঞপ্তি নেই"
|
||||||
instance: "ইন্সট্যান্স"
|
instance: "ইন্সট্যান্স"
|
||||||
settings: "সেটিংস"
|
settings: "সেটিংস"
|
||||||
|
notificationSettings: "বিজ্ঞপ্তির সেটিংস"
|
||||||
basicSettings: "সাধারণ সেটিংস"
|
basicSettings: "সাধারণ সেটিংস"
|
||||||
otherSettings: "অন্যান্য সেটিংস"
|
otherSettings: "অন্যান্য সেটিংস"
|
||||||
openInWindow: "নতুন উইন্ডোতে খুলা"
|
openInWindow: "নতুন উইন্ডোতে খুলা"
|
||||||
|
@ -42,12 +45,20 @@ pin: "পিন করা"
|
||||||
unpin: "পিন সরান"
|
unpin: "পিন সরান"
|
||||||
copyContent: "বিষয়বস্তু কপি করুন"
|
copyContent: "বিষয়বস্তু কপি করুন"
|
||||||
copyLink: "লিঙ্ক কপি করুন"
|
copyLink: "লিঙ্ক কপি করুন"
|
||||||
|
copyLinkRenote: "রিনোট লিঙ্ক কপি করুন"
|
||||||
delete: "মুছুন"
|
delete: "মুছুন"
|
||||||
deleteAndEdit: "মুছুন এবং সম্পাদনা করুন"
|
deleteAndEdit: "মুছুন এবং সম্পাদনা করুন"
|
||||||
deleteAndEditConfirm: "আপনি কি এই নোটটি মুছে এটি সম্পাদনা করার বিষয়ে নিশ্চিত? আপনি এটির সমস্ত রিঅ্যাকশন, রিনোট এবং জবাব হারাবেন।"
|
deleteAndEditConfirm: "আপনি কি এই নোটটি মুছে এটি সম্পাদনা করার বিষয়ে নিশ্চিত? আপনি এটির সমস্ত রিঅ্যাকশন, রিনোট এবং জবাব হারাবেন।"
|
||||||
addToList: "লিস্ট এ যোগ করুন"
|
addToList: "লিস্ট এ যোগ করুন"
|
||||||
|
addToAntenna: "অ্যান্টেনা এ যোগ করুন"
|
||||||
sendMessage: "একটি বার্তা পাঠান"
|
sendMessage: "একটি বার্তা পাঠান"
|
||||||
|
copyRSS: "RSS কপি করুন"
|
||||||
copyUsername: "ব্যবহারকারীর নাম কপি করুন"
|
copyUsername: "ব্যবহারকারীর নাম কপি করুন"
|
||||||
|
copyUserId: "ব্যবহারকারীর ID কপি করুন"
|
||||||
|
copyNoteId: "নোটের ID কপি করুন"
|
||||||
|
copyFileId: "ফাইল ID কপি করুন"
|
||||||
|
copyFolderId: "ফোল্ডার ID কপি করুন"
|
||||||
|
copyProfileUrl: "প্রোফাইল URL কপি করুন"
|
||||||
searchUser: "ব্যবহারকারী খুঁজুন..."
|
searchUser: "ব্যবহারকারী খুঁজুন..."
|
||||||
reply: "জবাব"
|
reply: "জবাব"
|
||||||
loadMore: "আরও দেখুন"
|
loadMore: "আরও দেখুন"
|
||||||
|
@ -100,6 +111,8 @@ renoted: "রিনোট করা হয়েছে"
|
||||||
cantRenote: "এই নোটটি রিনোট করা যাবে না।"
|
cantRenote: "এই নোটটি রিনোট করা যাবে না।"
|
||||||
cantReRenote: "রিনোটকে রিনোট করা যাবে না।"
|
cantReRenote: "রিনোটকে রিনোট করা যাবে না।"
|
||||||
quote: "উদ্ধৃতি"
|
quote: "উদ্ধৃতি"
|
||||||
|
inChannelRenote: "চ্যানেলে রিনোট"
|
||||||
|
inChannelQuote: "চ্যানেলে উদ্ধৃতি"
|
||||||
pinnedNote: "পিন করা নোট"
|
pinnedNote: "পিন করা নোট"
|
||||||
pinned: "পিন করা"
|
pinned: "পিন করা"
|
||||||
you: "আপনি"
|
you: "আপনি"
|
||||||
|
@ -108,6 +121,10 @@ sensitive: "সংবেদনশীল বিষয়বস্তু"
|
||||||
add: "যুক্ত করুন"
|
add: "যুক্ত করুন"
|
||||||
reaction: "প্রতিক্রিয়া"
|
reaction: "প্রতিক্রিয়া"
|
||||||
reactions: "প্রতিক্রিয়া"
|
reactions: "প্রতিক্রিয়া"
|
||||||
|
emojiPicker: "ইমোজি পিকার"
|
||||||
|
pinnedEmojisForReactionSettingDescription: "রিঅ্যাকশন দেয়ার সময় আপনি ইমোজিটিকে পিন করা এবং প্রদর্শিত হওয়ার জন্য সেট করতে পারেন।"
|
||||||
|
pinnedEmojisSettingDescription: "ইমোজি ইনপুট দেয়ার সময় আপনি ইমোজিটিকে পিন করা এবং প্রদর্শিত হওয়ার জন্য সেট করতে পারেন।"
|
||||||
|
emojiPickerDisplay: "পিকার ডিসপ্লে"
|
||||||
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + টিপুন।"
|
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + টিপুন।"
|
||||||
rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন"
|
rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন"
|
||||||
attachCancel: "অ্যাটাচমেন্ট সরান "
|
attachCancel: "অ্যাটাচমেন্ট সরান "
|
||||||
|
@ -1034,6 +1051,7 @@ _2fa:
|
||||||
step3: "অ্যাপে প্রদর্শিত টোকেনটি লিখুন এবং আপনার কাজ শেষ।"
|
step3: "অ্যাপে প্রদর্শিত টোকেনটি লিখুন এবং আপনার কাজ শেষ।"
|
||||||
step4: "আপনাকে এখন থেকে লগ ইন করার সময়, এইভাবে টোকেন লিখতে হবে।"
|
step4: "আপনাকে এখন থেকে লগ ইন করার সময়, এইভাবে টোকেন লিখতে হবে।"
|
||||||
securityKeyInfo: "আপনি একটি হার্ডওয়্যার সিকিউরিটি কী ব্যবহার করে লগ ইন করতে পারেন যা FIDO2 বা ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর বা পিন সমর্থন করে৷"
|
securityKeyInfo: "আপনি একটি হার্ডওয়্যার সিকিউরিটি কী ব্যবহার করে লগ ইন করতে পারেন যা FIDO2 বা ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর বা পিন সমর্থন করে৷"
|
||||||
|
renewTOTPCancel: "না, ধন্যবাদ"
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "অ্যাকাউন্টের তথ্য দেখুন"
|
"read:account": "অ্যাকাউন্টের তথ্য দেখুন"
|
||||||
"write:account": "অ্যাকাউন্টের তথ্য সম্পাদন করুন"
|
"write:account": "অ্যাকাউন্টের তথ্য সম্পাদন করুন"
|
||||||
|
|
|
@ -125,6 +125,8 @@ sensitive: "Sensitive"
|
||||||
add: "Add"
|
add: "Add"
|
||||||
reaction: "Reactions"
|
reaction: "Reactions"
|
||||||
reactions: "Reactions"
|
reactions: "Reactions"
|
||||||
|
emojiPicker: "Emoji picker"
|
||||||
|
emojiPickerDisplay: "Emoji picker display"
|
||||||
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
|
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
|
||||||
rememberNoteVisibility: "Remember note visibility settings"
|
rememberNoteVisibility: "Remember note visibility settings"
|
||||||
attachCancel: "Remove attachment"
|
attachCancel: "Remove attachment"
|
||||||
|
@ -270,6 +272,7 @@ removed: "Successfully deleted"
|
||||||
removeAreYouSure: "Are you sure that you want to remove \"{x}\"?"
|
removeAreYouSure: "Are you sure that you want to remove \"{x}\"?"
|
||||||
deleteAreYouSure: "Are you sure that you want to delete \"{x}\"?"
|
deleteAreYouSure: "Are you sure that you want to delete \"{x}\"?"
|
||||||
resetAreYouSure: "Really reset?"
|
resetAreYouSure: "Really reset?"
|
||||||
|
areYouSure: "Are you sure?"
|
||||||
saved: "Saved"
|
saved: "Saved"
|
||||||
messaging: "Chat"
|
messaging: "Chat"
|
||||||
upload: "Upload"
|
upload: "Upload"
|
||||||
|
@ -891,6 +894,8 @@ makeReactionsPublicDescription: "This will make the list of all your past reacti
|
||||||
classic: "Classic"
|
classic: "Classic"
|
||||||
muteThread: "Mute thread"
|
muteThread: "Mute thread"
|
||||||
unmuteThread: "Unmute thread"
|
unmuteThread: "Unmute thread"
|
||||||
|
followingVisibility: "Visibility of follows"
|
||||||
|
followersVisibility: "Visibility of followers"
|
||||||
continueThread: "View thread continuation"
|
continueThread: "View thread continuation"
|
||||||
deleteAccountConfirm: "This will irreversibly delete your account. Proceed?"
|
deleteAccountConfirm: "This will irreversibly delete your account. Proceed?"
|
||||||
incorrectPassword: "Incorrect password."
|
incorrectPassword: "Incorrect password."
|
||||||
|
@ -2014,6 +2019,7 @@ _widgets:
|
||||||
chooseList: "Select a list"
|
chooseList: "Select a list"
|
||||||
clicker: "Clicker"
|
clicker: "Clicker"
|
||||||
search: "Search"
|
search: "Search"
|
||||||
|
birthdayFollowings: "Users who celebrate their birthday today"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Hide"
|
hide: "Hide"
|
||||||
show: "Show content"
|
show: "Show content"
|
||||||
|
@ -2461,6 +2467,8 @@ _dataSaver:
|
||||||
_avatar:
|
_avatar:
|
||||||
title: "Avatar image"
|
title: "Avatar image"
|
||||||
description: "Stop avatar image animation. Animated images can be larger in file size than normal images, potentially leading to further reductions in data traffic."
|
description: "Stop avatar image animation. Animated images can be larger in file size than normal images, potentially leading to further reductions in data traffic."
|
||||||
|
_urlPreview:
|
||||||
|
title: "URL preview thumbnails"
|
||||||
_code:
|
_code:
|
||||||
title: "Code highlighting"
|
title: "Code highlighting"
|
||||||
description: "If code highlighting notations are used in MFM, etc., they will not load until tapped. Syntax highlighting requires downloading the highlight definition files for each programming language. Therefore, disabling the automatic loading of these files is expected to reduce the amount of communication data."
|
description: "If code highlighting notations are used in MFM, etc., they will not load until tapped. Syntax highlighting requires downloading the highlight definition files for each programming language. Therefore, disabling the automatic loading of these files is expected to reduce the amount of communication data."
|
||||||
|
|
|
@ -121,6 +121,12 @@ sensitive: "Marcado como sensible"
|
||||||
add: "Agregar"
|
add: "Agregar"
|
||||||
reaction: "Reacción"
|
reaction: "Reacción"
|
||||||
reactions: "Reacción"
|
reactions: "Reacción"
|
||||||
|
emojiPicker: "Selector de emojis"
|
||||||
|
pinnedEmojisForReactionSettingDescription: "Puedes seleccionar reacciones para fijarlos en el selector"
|
||||||
|
pinnedEmojisSettingDescription: "Puedes seleccionar emojis para fijarlos en el selector"
|
||||||
|
emojiPickerDisplay: "Mostrar el selector de emojis"
|
||||||
|
overwriteFromPinnedEmojisForReaction: "Sobreescribir las reacciones fijadas"
|
||||||
|
overwriteFromPinnedEmojis: "Sobreescribir los emojis fijados"
|
||||||
reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete la tecla + para añadir."
|
reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete la tecla + para añadir."
|
||||||
rememberNoteVisibility: "Recordar visibilidad"
|
rememberNoteVisibility: "Recordar visibilidad"
|
||||||
attachCancel: "Quitar adjunto"
|
attachCancel: "Quitar adjunto"
|
||||||
|
@ -260,6 +266,7 @@ removed: "Borrado"
|
||||||
removeAreYouSure: "¿Desea borrar \"{x}\"?"
|
removeAreYouSure: "¿Desea borrar \"{x}\"?"
|
||||||
deleteAreYouSure: "¿Desea borrar \"{x}\"?"
|
deleteAreYouSure: "¿Desea borrar \"{x}\"?"
|
||||||
resetAreYouSure: "¿Desea reestablecer?"
|
resetAreYouSure: "¿Desea reestablecer?"
|
||||||
|
areYouSure: "¿Estás conforme?"
|
||||||
saved: "Guardado"
|
saved: "Guardado"
|
||||||
messaging: "Chat"
|
messaging: "Chat"
|
||||||
upload: "Subir"
|
upload: "Subir"
|
||||||
|
@ -640,6 +647,7 @@ smtpSecure: "Usar SSL/TLS implícito en la conexión SMTP"
|
||||||
smtpSecureInfo: "Apagar cuando se use STARTTLS"
|
smtpSecureInfo: "Apagar cuando se use STARTTLS"
|
||||||
testEmail: "Prueba de envío"
|
testEmail: "Prueba de envío"
|
||||||
wordMute: "Silenciar palabras"
|
wordMute: "Silenciar palabras"
|
||||||
|
hardWordMute: "Filtro de palabra fuerte"
|
||||||
regexpError: "Error de la expresión regular"
|
regexpError: "Error de la expresión regular"
|
||||||
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
|
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
|
||||||
instanceMute: "Instancias silenciadas"
|
instanceMute: "Instancias silenciadas"
|
||||||
|
@ -873,6 +881,8 @@ makeReactionsPublicDescription: "Todas las reacciones que hayas hecho serán pú
|
||||||
classic: "Clásico"
|
classic: "Clásico"
|
||||||
muteThread: "Silenciar hilo"
|
muteThread: "Silenciar hilo"
|
||||||
unmuteThread: "Mostrar hilo"
|
unmuteThread: "Mostrar hilo"
|
||||||
|
followingVisibility: "Visibilidad de seguidos"
|
||||||
|
followersVisibility: "Visibilidad de seguidores"
|
||||||
continueThread: "Ver la continuación del hilo"
|
continueThread: "Ver la continuación del hilo"
|
||||||
deleteAccountConfirm: "La cuenta será borrada. ¿Está seguro?"
|
deleteAccountConfirm: "La cuenta será borrada. ¿Está seguro?"
|
||||||
incorrectPassword: "La contraseña es incorrecta"
|
incorrectPassword: "La contraseña es incorrecta"
|
||||||
|
@ -1024,6 +1034,7 @@ sensitiveWords: "Palabras sensibles"
|
||||||
sensitiveWordsDescription: "La visibilidad de todas las notas que contienen cualquiera de las palabras configuradas serán puestas en \"Inicio\" automáticamente. Puedes enumerás varias separándolas con saltos de línea"
|
sensitiveWordsDescription: "La visibilidad de todas las notas que contienen cualquiera de las palabras configuradas serán puestas en \"Inicio\" automáticamente. Puedes enumerás varias separándolas con saltos de línea"
|
||||||
sensitiveWordsDescription2: "Si se usan espacios se crearán expresiones AND y las palabras subsecuentes con barras inclinadas se convertirán en expresiones regulares."
|
sensitiveWordsDescription2: "Si se usan espacios se crearán expresiones AND y las palabras subsecuentes con barras inclinadas se convertirán en expresiones regulares."
|
||||||
hiddenTags: "Hashtags ocultos"
|
hiddenTags: "Hashtags ocultos"
|
||||||
|
hiddenTagsDescription: "Selecciona las etiquetas que no se mostrarán en tendencias. Una etiqueta por línea."
|
||||||
notesSearchNotAvailable: "No se puede buscar una nota"
|
notesSearchNotAvailable: "No se puede buscar una nota"
|
||||||
license: "Licencia"
|
license: "Licencia"
|
||||||
unfavoriteConfirm: "¿Desea quitar de favoritos?"
|
unfavoriteConfirm: "¿Desea quitar de favoritos?"
|
||||||
|
@ -1152,6 +1163,7 @@ tosAndPrivacyPolicy: "Condiciones de Uso y Política de Privacidad"
|
||||||
avatarDecorations: "Decoraciones de avatar"
|
avatarDecorations: "Decoraciones de avatar"
|
||||||
attach: "Acoplar"
|
attach: "Acoplar"
|
||||||
detach: "Quitar"
|
detach: "Quitar"
|
||||||
|
detachAll: "Quitar todo"
|
||||||
angle: "Ángulo"
|
angle: "Ángulo"
|
||||||
flip: "Echar de un capirotazo"
|
flip: "Echar de un capirotazo"
|
||||||
showAvatarDecorations: "Mostrar decoraciones de avatar"
|
showAvatarDecorations: "Mostrar decoraciones de avatar"
|
||||||
|
@ -1165,6 +1177,10 @@ cwNotationRequired: "Si se ha activado \"ocultar contenido\", es necesario propo
|
||||||
doReaction: "Añadir reacción"
|
doReaction: "Añadir reacción"
|
||||||
code: "Código"
|
code: "Código"
|
||||||
reloadRequiredToApplySettings: "Es necesario recargar para que se aplique la configuración."
|
reloadRequiredToApplySettings: "Es necesario recargar para que se aplique la configuración."
|
||||||
|
remainingN: "Faltan: {n}"
|
||||||
|
overwriteContentConfirm: "¿Quieres sustituir todo el contenido actual?"
|
||||||
|
seasonalScreenEffect: "Efectos de pantalla asociados a estaciones"
|
||||||
|
decorate: "Decorar"
|
||||||
_announcement:
|
_announcement:
|
||||||
forExistingUsers: "Solo para usuarios registrados"
|
forExistingUsers: "Solo para usuarios registrados"
|
||||||
forExistingUsersDescription: "Este anuncio solo se mostrará a aquellos usuarios registrados en el momento de su publicación. Si se deshabilita esta opción, aquellos usuarios que se registren tras su publicación también lo verán."
|
forExistingUsersDescription: "Este anuncio solo se mostrará a aquellos usuarios registrados en el momento de su publicación. Si se deshabilita esta opción, aquellos usuarios que se registren tras su publicación también lo verán."
|
||||||
|
@ -1222,6 +1238,45 @@ _initialTutorial:
|
||||||
home: "Puedes ver los posts de las cuentas que sigues."
|
home: "Puedes ver los posts de las cuentas que sigues."
|
||||||
local: "Puedes ver los posts de todos los usuarios de este servidor."
|
local: "Puedes ver los posts de todos los usuarios de este servidor."
|
||||||
social: "Se ven los posts de la línea de tiempo de inicio junto con los de la línea de tiempo local."
|
social: "Se ven los posts de la línea de tiempo de inicio junto con los de la línea de tiempo local."
|
||||||
|
global: "Puedes ver notas de todos los servidores conectados."
|
||||||
|
description2: "Puedes cambiar la línea de tiempo en la parte superior de la pantalla cuando quieras."
|
||||||
|
description3: "Además, hay listas de líneas de tiempo y listas de canales. Para más detalle, por favor visita este enlace: {link}"
|
||||||
|
_postNote:
|
||||||
|
title: "Ajustes de publicación de nota"
|
||||||
|
description1: "Cuando publicas una nota en Misskey, hay varias opciones disponibles. El formulario tiene este aspecto."
|
||||||
|
_visibility:
|
||||||
|
description: "Puedes limitar quién puede ver tu nota."
|
||||||
|
public: "Tu nota será visible para todos los usuarios."
|
||||||
|
home: "Publicar solo en la línea de tiempo de Inicio. La nota se verá en tu perfil, la verán tus seguidores y también cuando sea renotada."
|
||||||
|
followers: "Visible solo para seguidores. Sólo tus seguidores podrán ver la nota, y no podrá ser renotada por otras personas."
|
||||||
|
direct: "Visible sólo para usuarios específicos, y el destinatario será notificado. Puede usarse como alternativa a la mensajería directa."
|
||||||
|
doNotSendConfidencialOnDirect1: "¡Ten cuidado cuando vayas a enviar información sensible!"
|
||||||
|
doNotSendConfidencialOnDirect2: "Los administradores del servidor pueden leer lo que escribes. Ten cuidado cuando envíes información sensible en notas directas en servidores no confiables."
|
||||||
|
localOnly: "Publicando con esta opción seleccionada, la nota no se federará hacia otros servidores. Los usuarios de otros servidores no podrán ver estas notas directamente, sin importar los ajustes seleccionados más arriba."
|
||||||
|
_cw:
|
||||||
|
title: "Alerta de contenido (CW)"
|
||||||
|
description: "En lugar de mostrarse el contenido de la nota, se mostrará lo que escribas en el campo \"comentarios\". Pulsando en \"leer más\" desplegará el contenido de la nota."
|
||||||
|
_exampleNote:
|
||||||
|
cw: "¡Esto te hará tener hambre!"
|
||||||
|
note: "Acabo de comerme un donut de chocolate glaseado 🍩😋"
|
||||||
|
useCases: "Esto se usa cuando las normas del servidor lo requieren, o para ocultar spoilers o contenido sensible."
|
||||||
|
_howToMakeAttachmentsSensitive:
|
||||||
|
title: "¿Cómo puedo marcar adjuntos como contenido sensible?"
|
||||||
|
description: "Cuando las normas del servidor lo requieran, o el contenido lo requiera, marca la opción de \"contenido sensible\" para el adjunto."
|
||||||
|
tryThisFile: "¡Prueba a marcar la imagen adjunta como contenido sensible!"
|
||||||
|
_exampleNote:
|
||||||
|
note: "Ups, la he liado al abrir la tapa del natto..."
|
||||||
|
method: "Para marcar un adjunto como sensible, haz clic en la miniatura, abre el menú, y haz clic en \"Marcar como sensible\"."
|
||||||
|
sensitiveSucceeded: "Cuando adjuntes archivos, por favor, ten en cuenta las normas del servidor para marcarlos como contenido sensible."
|
||||||
|
doItToContinue: "Marca el archivo adjunto como sensible para continuar."
|
||||||
|
_done:
|
||||||
|
title: "¡Has completado el tutorial! 🎉"
|
||||||
|
description: "Las funciones que mostramos aquí son sólo una pequeña parte. Para más detalles sobre el funcionamiento de Misskey, pulsa en este enlace: {link}"
|
||||||
|
_timelineDescription:
|
||||||
|
home: "En la línea de tiempo de Inicio puedes ver las notas de las cuentas a las que sigues."
|
||||||
|
local: "En la línea de tiempo Local puedes ver las notas de todos los usuarios del servidor."
|
||||||
|
social: "En la línea de tiempo Social verás las notas de Inicio y Local a la vez."
|
||||||
|
global: "En la línea de tiempo Global verás las notas de todos los servidores conectados."
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "Un conjunto de reglas que serán mostradas antes del registro. Configurar un sumario de términos de servicio es recomendado."
|
description: "Un conjunto de reglas que serán mostradas antes del registro. Configurar un sumario de términos de servicio es recomendado."
|
||||||
_serverSettings:
|
_serverSettings:
|
||||||
|
@ -1233,6 +1288,9 @@ _serverSettings:
|
||||||
manifestJsonOverride: "Sobreescribir manifest.json"
|
manifestJsonOverride: "Sobreescribir manifest.json"
|
||||||
shortName: "Nombre corto"
|
shortName: "Nombre corto"
|
||||||
shortNameDescription: "Forma corta del nombre de la instancia que puede mostrarse si el nombre completo es demasiado largo."
|
shortNameDescription: "Forma corta del nombre de la instancia que puede mostrarse si el nombre completo es demasiado largo."
|
||||||
|
fanoutTimelineDescription: "Incrementa el rendimiento de forma significativa cuando se obtienen las líneas de tiempo y reduce la carga en la base de datos. A cambio, el uso de la memoria en Redis incrementará. Considera desactivar esta opción en caso de que tu servidor tenga poca memoria o detectes inestabilidad."
|
||||||
|
fanoutTimelineDbFallback: "Cargar desde la base de datos"
|
||||||
|
fanoutTimelineDbFallbackDescription: "Cuando esta opción está habilitada, la carga de peticiones adicionales de la línea de tiempo se hará desde la base de datos cuando éstas no se encuentren en la caché. Al deshabilitar esta opción se reduce la carga del servidor, pero limita el número de líneas de tiempo que pueden obtenerse."
|
||||||
_accountMigration:
|
_accountMigration:
|
||||||
moveFrom: "Trasladar de otra cuenta a ésta"
|
moveFrom: "Trasladar de otra cuenta a ésta"
|
||||||
moveFromSub: "Crear un alias para otra cuenta."
|
moveFromSub: "Crear un alias para otra cuenta."
|
||||||
|
@ -1490,6 +1548,9 @@ _achievements:
|
||||||
_smashTestNotificationButton:
|
_smashTestNotificationButton:
|
||||||
title: "Sobrecarga de pruebas"
|
title: "Sobrecarga de pruebas"
|
||||||
description: "Envía muchas notificaciones de prueba en un corto espacio de tiempo"
|
description: "Envía muchas notificaciones de prueba en un corto espacio de tiempo"
|
||||||
|
_tutorialCompleted:
|
||||||
|
title: "Diploma del Curso Básico de Misskey"
|
||||||
|
description: "Tutorial completado"
|
||||||
_role:
|
_role:
|
||||||
new: "Crear rol"
|
new: "Crear rol"
|
||||||
edit: "Editar rol"
|
edit: "Editar rol"
|
||||||
|
@ -1500,7 +1561,9 @@ _role:
|
||||||
assignTarget: "Asignar objetivo"
|
assignTarget: "Asignar objetivo"
|
||||||
descriptionOfAssignTarget: "<b>Manual</b> Para cambiar manualmente lo que se incluye en este rol.\n<b>Condicional</b> configura una condición, y los usuarios que cumplan la condición serán incluídos automáticamente."
|
descriptionOfAssignTarget: "<b>Manual</b> Para cambiar manualmente lo que se incluye en este rol.\n<b>Condicional</b> configura una condición, y los usuarios que cumplan la condición serán incluídos automáticamente."
|
||||||
manual: "manual"
|
manual: "manual"
|
||||||
|
manualRoles: "Roles manuales"
|
||||||
conditional: "condicional"
|
conditional: "condicional"
|
||||||
|
conditionalRoles: "Roles condicionales"
|
||||||
condition: "condición"
|
condition: "condición"
|
||||||
isConditionalRole: "Esto es un rol condicional"
|
isConditionalRole: "Esto es un rol condicional"
|
||||||
isPublic: "Publicar rol"
|
isPublic: "Publicar rol"
|
||||||
|
@ -1549,6 +1612,7 @@ _role:
|
||||||
canHideAds: "Puede ocultar anuncios"
|
canHideAds: "Puede ocultar anuncios"
|
||||||
canSearchNotes: "Uso de la búsqueda de notas"
|
canSearchNotes: "Uso de la búsqueda de notas"
|
||||||
canUseTranslator: "Uso de traductor"
|
canUseTranslator: "Uso de traductor"
|
||||||
|
avatarDecorationLimit: "Número máximo de decoraciones de avatar"
|
||||||
_condition:
|
_condition:
|
||||||
isLocal: "Usuario local"
|
isLocal: "Usuario local"
|
||||||
isRemote: "Usuario remoto"
|
isRemote: "Usuario remoto"
|
||||||
|
@ -1577,6 +1641,7 @@ _emailUnavailable:
|
||||||
disposable: "No es un correo reutilizable"
|
disposable: "No es un correo reutilizable"
|
||||||
mx: "Servidor de correo inválido"
|
mx: "Servidor de correo inválido"
|
||||||
smtp: "Servidor de correo no disponible"
|
smtp: "Servidor de correo no disponible"
|
||||||
|
banned: "Email no disponible"
|
||||||
_ffVisibility:
|
_ffVisibility:
|
||||||
public: "Publicar"
|
public: "Publicar"
|
||||||
followers: "Visible solo para seguidores"
|
followers: "Visible solo para seguidores"
|
||||||
|
@ -1653,6 +1718,7 @@ _aboutMisskey:
|
||||||
donate: "Donar a Misskey"
|
donate: "Donar a Misskey"
|
||||||
morePatrons: "Muchas más personas nos apoyan. Muchas gracias🥰"
|
morePatrons: "Muchas más personas nos apoyan. Muchas gracias🥰"
|
||||||
patrons: "Patrocinadores"
|
patrons: "Patrocinadores"
|
||||||
|
projectMembers: "Miembros del proyecto"
|
||||||
_displayOfSensitiveMedia:
|
_displayOfSensitiveMedia:
|
||||||
respect: "Esconder medios marcados como sensibles"
|
respect: "Esconder medios marcados como sensibles"
|
||||||
ignore: "Mostrar medios marcados como sensibles"
|
ignore: "Mostrar medios marcados como sensibles"
|
||||||
|
@ -1677,6 +1743,7 @@ _channel:
|
||||||
notesCount: "{n} notas"
|
notesCount: "{n} notas"
|
||||||
nameAndDescription: "Nombre y descripción"
|
nameAndDescription: "Nombre y descripción"
|
||||||
nameOnly: "Sólo nombre"
|
nameOnly: "Sólo nombre"
|
||||||
|
allowRenoteToExternal: "Permitir renotas y menciones fuera del canal"
|
||||||
_menuDisplay:
|
_menuDisplay:
|
||||||
sideFull: "Horizontal"
|
sideFull: "Horizontal"
|
||||||
sideIcon: "Horizontal (ícono)"
|
sideIcon: "Horizontal (ícono)"
|
||||||
|
@ -1768,6 +1835,14 @@ _sfx:
|
||||||
notification: "Notificaciones"
|
notification: "Notificaciones"
|
||||||
antenna: "Antena receptora"
|
antenna: "Antena receptora"
|
||||||
channel: "Notificaciones del canal"
|
channel: "Notificaciones del canal"
|
||||||
|
reaction: "Al seleccionar una reacción"
|
||||||
|
_soundSettings:
|
||||||
|
driveFile: "Usar un archivo de audio en Drive"
|
||||||
|
driveFileWarn: "Selecciona un archivo de audio en Drive."
|
||||||
|
driveFileTypeWarn: "Este archivo es incompatible"
|
||||||
|
driveFileTypeWarnDescription: "Selecciona un archivo de audio"
|
||||||
|
driveFileDurationWarn: "La duración del audio es demasiado larga."
|
||||||
|
driveFileDurationWarnDescription: "Usar un audio de larga duración puede llegar a molestar mientras usas Misskey. ¿Quieres continuar?"
|
||||||
_ago:
|
_ago:
|
||||||
future: "Futuro"
|
future: "Futuro"
|
||||||
justNow: "Justo ahora"
|
justNow: "Justo ahora"
|
||||||
|
@ -1780,6 +1855,12 @@ _ago:
|
||||||
yearsAgo: "Hace {n} años"
|
yearsAgo: "Hace {n} años"
|
||||||
invalid: "No hay nada que ver aqui"
|
invalid: "No hay nada que ver aqui"
|
||||||
_timeIn:
|
_timeIn:
|
||||||
|
seconds: "En {n} segundos"
|
||||||
|
minutes: "En {n}m"
|
||||||
|
hours: "En {n}h"
|
||||||
|
days: "En {n}d"
|
||||||
|
weeks: "En {n}sem."
|
||||||
|
months: "En {n}M"
|
||||||
years: "En {n} años"
|
years: "En {n} años"
|
||||||
_time:
|
_time:
|
||||||
second: "Segundos"
|
second: "Segundos"
|
||||||
|
@ -1906,6 +1987,7 @@ _widgets:
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Seleccione una lista"
|
chooseList: "Seleccione una lista"
|
||||||
clicker: "Cliqueador"
|
clicker: "Cliqueador"
|
||||||
|
birthdayFollowings: "Hoy cumplen años"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Ocultar"
|
hide: "Ocultar"
|
||||||
show: "Ver más"
|
show: "Ver más"
|
||||||
|
@ -1969,6 +2051,7 @@ _profile:
|
||||||
changeAvatar: "Cambiar avatar"
|
changeAvatar: "Cambiar avatar"
|
||||||
changeBanner: "Cambiar banner"
|
changeBanner: "Cambiar banner"
|
||||||
verifiedLinkDescription: "Introduciendo una URL que contiene un enlace a tu perfil, se puede mostrar un icono de verificación de propiedad al lado del campo."
|
verifiedLinkDescription: "Introduciendo una URL que contiene un enlace a tu perfil, se puede mostrar un icono de verificación de propiedad al lado del campo."
|
||||||
|
avatarDecorationMax: "Puedes añadir un máximo de {max} decoraciones de avatar."
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "Todas las notas"
|
allNotes: "Todas las notas"
|
||||||
favoritedNotes: "Notas favoritas"
|
favoritedNotes: "Notas favoritas"
|
||||||
|
@ -2090,6 +2173,7 @@ _notification:
|
||||||
pollEnded: "Estan disponibles los resultados de la encuesta"
|
pollEnded: "Estan disponibles los resultados de la encuesta"
|
||||||
newNote: "Nueva nota"
|
newNote: "Nueva nota"
|
||||||
unreadAntennaNote: "Antena {name}"
|
unreadAntennaNote: "Antena {name}"
|
||||||
|
roleAssigned: "Rol asignado"
|
||||||
emptyPushNotificationMessage: "Se han actualizado las notificaciones push"
|
emptyPushNotificationMessage: "Se han actualizado las notificaciones push"
|
||||||
achievementEarned: "Logro desbloqueado"
|
achievementEarned: "Logro desbloqueado"
|
||||||
testNotification: "Notificación de prueba"
|
testNotification: "Notificación de prueba"
|
||||||
|
@ -2111,6 +2195,7 @@ _notification:
|
||||||
pollEnded: "La encuesta terminó"
|
pollEnded: "La encuesta terminó"
|
||||||
receiveFollowRequest: "Recibió una solicitud de seguimiento"
|
receiveFollowRequest: "Recibió una solicitud de seguimiento"
|
||||||
followRequestAccepted: "El seguimiento fue aceptado"
|
followRequestAccepted: "El seguimiento fue aceptado"
|
||||||
|
roleAssigned: "Rol asignado"
|
||||||
achievementEarned: "Logro desbloqueado"
|
achievementEarned: "Logro desbloqueado"
|
||||||
app: "Notificaciones desde aplicaciones"
|
app: "Notificaciones desde aplicaciones"
|
||||||
_actions:
|
_actions:
|
||||||
|
@ -2256,3 +2341,16 @@ _externalResourceInstaller:
|
||||||
_themeInstallFailed:
|
_themeInstallFailed:
|
||||||
title: "Instalación de tema fallida"
|
title: "Instalación de tema fallida"
|
||||||
description: "Ha ocurrido un problema al instalar el tema. Por favor, inténtalo de nuevo. Se pueden ver más detalles del error en la consola de Javascript."
|
description: "Ha ocurrido un problema al instalar el tema. Por favor, inténtalo de nuevo. Se pueden ver más detalles del error en la consola de Javascript."
|
||||||
|
_dataSaver:
|
||||||
|
_media:
|
||||||
|
title: "Cargando Multimedia"
|
||||||
|
description: "Desactiva la carga automática de imágenes y vídeos. Tendrás que tocar en las imágenes y vídeos ocultos para cargarlos."
|
||||||
|
_avatar:
|
||||||
|
title: "Avatares animados"
|
||||||
|
description: "Desactiva la animación de los avatares. Las imágenes animadas pueden llegar a ser de mayor tamaño que las normales, por lo que al desactivarlas puedes reducir el consumo de datos."
|
||||||
|
_urlPreview:
|
||||||
|
title: "Vista previa de URLs"
|
||||||
|
description: "Desactiva la carga de vistas previas de las URLs."
|
||||||
|
_code:
|
||||||
|
title: "Resaltar código"
|
||||||
|
description: "Si se usa resaltado de código en MFM, etc., no se cargará hasta pulsar en ello. El resaltado de sintaxis requiere la descarga de archivos de definición para cada lenguaje de programación. Debido a esto, al deshabilitar la carga automática de estos archivos reducirás el consumo de datos."
|
||||||
|
|
|
@ -162,6 +162,7 @@ addEmoji: "Ajouter un émoji"
|
||||||
settingGuide: "Configuration proposée"
|
settingGuide: "Configuration proposée"
|
||||||
cacheRemoteFiles: "Mise en cache des fichiers distants"
|
cacheRemoteFiles: "Mise en cache des fichiers distants"
|
||||||
cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants sont chargés directement depuis l’instance distante. La désactiver diminuera certes l’utilisation de l’espace de stockage local mais augmentera le trafic réseau puisque les miniatures ne seront plus générées."
|
cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants sont chargés directement depuis l’instance distante. La désactiver diminuera certes l’utilisation de l’espace de stockage local mais augmentera le trafic réseau puisque les miniatures ne seront plus générées."
|
||||||
|
youCanCleanRemoteFilesCache: "Vous pouvez supprimer tous les caches en cliquant le bouton 🗑️ dans la gestion des fichiers."
|
||||||
cacheRemoteSensitiveFiles: "Mettre en cache les fichiers distants sensibles"
|
cacheRemoteSensitiveFiles: "Mettre en cache les fichiers distants sensibles"
|
||||||
cacheRemoteSensitiveFilesDescription: "Si vous désactivez ce paramètre, les fichiers sensibles distants ne seront pas mis en cache et un lien direct sera utilisé à la place"
|
cacheRemoteSensitiveFilesDescription: "Si vous désactivez ce paramètre, les fichiers sensibles distants ne seront pas mis en cache et un lien direct sera utilisé à la place"
|
||||||
flagAsBot: "Ce compte est un robot"
|
flagAsBot: "Ce compte est un robot"
|
||||||
|
@ -726,6 +727,7 @@ lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre no
|
||||||
alwaysMarkSensitive: "Marquer les médias comme contenu sensible par défaut"
|
alwaysMarkSensitive: "Marquer les médias comme contenu sensible par défaut"
|
||||||
loadRawImages: "Affichage complet des images jointes au lieu des vignettes"
|
loadRawImages: "Affichage complet des images jointes au lieu des vignettes"
|
||||||
disableShowingAnimatedImages: "Désactiver l'animation des images"
|
disableShowingAnimatedImages: "Désactiver l'animation des images"
|
||||||
|
highlightSensitiveMedia: "Mettre en évidence les médias sensibles"
|
||||||
verificationEmailSent: "Un e-mail de vérification a été envoyé. Veuillez accéder au lien pour compléter la vérification."
|
verificationEmailSent: "Un e-mail de vérification a été envoyé. Veuillez accéder au lien pour compléter la vérification."
|
||||||
notSet: "Non défini"
|
notSet: "Non défini"
|
||||||
emailVerified: "Votre adresse e-mail a été vérifiée."
|
emailVerified: "Votre adresse e-mail a été vérifiée."
|
||||||
|
@ -979,6 +981,7 @@ show: "Affichage"
|
||||||
neverShow: "Ne plus afficher"
|
neverShow: "Ne plus afficher"
|
||||||
remindMeLater: "Peut-être plus tard"
|
remindMeLater: "Peut-être plus tard"
|
||||||
didYouLikeMisskey: "Avez-vous aimé Misskey ?"
|
didYouLikeMisskey: "Avez-vous aimé Misskey ?"
|
||||||
|
pleaseDonate: "Misskey est le logiciel libre utilisé par {host}. Merci de faire un don pour que nous puissions continuer à le développer !"
|
||||||
roles: "Rôles"
|
roles: "Rôles"
|
||||||
role: "Rôles"
|
role: "Rôles"
|
||||||
noRole: "Aucun rôle"
|
noRole: "Aucun rôle"
|
||||||
|
@ -991,8 +994,10 @@ manageCustomEmojis: "Gestion des émojis personnalisés"
|
||||||
manageAvatarDecorations: "Gérer les décorations d'avatar"
|
manageAvatarDecorations: "Gérer les décorations d'avatar"
|
||||||
youCannotCreateAnymore: "Vous avez atteint la limite de création."
|
youCannotCreateAnymore: "Vous avez atteint la limite de création."
|
||||||
cannotPerformTemporary: "Temporairement indisponible"
|
cannotPerformTemporary: "Temporairement indisponible"
|
||||||
|
cannotPerformTemporaryDescription: "Temporairement indisponible puisque le nombre d'opérations dépasse la limite. Veuillez patienter un peu, puis réessayer."
|
||||||
invalidParamError: "Paramètres invalides"
|
invalidParamError: "Paramètres invalides"
|
||||||
permissionDeniedError: "Opération refusée"
|
permissionDeniedError: "Opération refusée"
|
||||||
|
permissionDeniedErrorDescription: "Ce compte n'a pas la permission d'effectuer cette opération."
|
||||||
preset: "Préréglage"
|
preset: "Préréglage"
|
||||||
selectFromPresets: "Sélectionner à partir des préréglages"
|
selectFromPresets: "Sélectionner à partir des préréglages"
|
||||||
achievements: "Accomplissements"
|
achievements: "Accomplissements"
|
||||||
|
@ -1021,6 +1026,7 @@ likeOnlyForRemote: "Toutes (mentions j'aime seulement pour les instances distant
|
||||||
nonSensitiveOnly: "Non sensibles seulement"
|
nonSensitiveOnly: "Non sensibles seulement"
|
||||||
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Non sensibles seulement (mentions j'aime seulement pour les instances distantes)"
|
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Non sensibles seulement (mentions j'aime seulement pour les instances distantes)"
|
||||||
rolesAssignedToMe: "Rôles attribués à moi"
|
rolesAssignedToMe: "Rôles attribués à moi"
|
||||||
|
resetPasswordConfirm: "Souhaitez-vous réinitialiser votre mot de passe ?"
|
||||||
sensitiveWords: "Mots sensibles"
|
sensitiveWords: "Mots sensibles"
|
||||||
hiddenTags: "Hashtags cachés"
|
hiddenTags: "Hashtags cachés"
|
||||||
hiddenTagsDescription: "Les hashtags définis ne s'afficheront pas dans les tendances. Vous pouvez définir plusieurs hashtags en faisant un saut de ligne."
|
hiddenTagsDescription: "Les hashtags définis ne s'afficheront pas dans les tendances. Vous pouvez définir plusieurs hashtags en faisant un saut de ligne."
|
||||||
|
@ -1082,6 +1088,7 @@ installed: "Installé"
|
||||||
branding: "Image de marque"
|
branding: "Image de marque"
|
||||||
expirationDate: "Date d’expiration"
|
expirationDate: "Date d’expiration"
|
||||||
waitingForMailAuth: "En attente de la vérification de l'adresse courriel"
|
waitingForMailAuth: "En attente de la vérification de l'adresse courriel"
|
||||||
|
inviteCodeCreator: "Créateur·rice de ce code d'invitation"
|
||||||
usedAt: "Utilisé le"
|
usedAt: "Utilisé le"
|
||||||
unused: "Non-utilisé"
|
unused: "Non-utilisé"
|
||||||
used: "Utilisé"
|
used: "Utilisé"
|
||||||
|
@ -1765,6 +1772,7 @@ _visibility:
|
||||||
followersDescription: "Publier à vos abonné·e·s uniquement"
|
followersDescription: "Publier à vos abonné·e·s uniquement"
|
||||||
specified: "Direct"
|
specified: "Direct"
|
||||||
specifiedDescription: "Publier uniquement aux utilisateur·rice·s mentionné·e·s"
|
specifiedDescription: "Publier uniquement aux utilisateur·rice·s mentionné·e·s"
|
||||||
|
disableFederation: "Défédérer"
|
||||||
_postForm:
|
_postForm:
|
||||||
replyPlaceholder: "Répondre à cette note ..."
|
replyPlaceholder: "Répondre à cette note ..."
|
||||||
quotePlaceholder: "Citez cette note ..."
|
quotePlaceholder: "Citez cette note ..."
|
||||||
|
|
|
@ -121,6 +121,10 @@ sensitive: "Konten sensitif"
|
||||||
add: "Tambahkan"
|
add: "Tambahkan"
|
||||||
reaction: "Reaksi"
|
reaction: "Reaksi"
|
||||||
reactions: "Reaksi"
|
reactions: "Reaksi"
|
||||||
|
emojiPicker: "Emoji Picker"
|
||||||
|
pinnedEmojisForReactionSettingDescription: "Atur sematan emoji pada reaksi"
|
||||||
|
pinnedEmojisSettingDescription: "Atur sematan emoji pada masukan emoji"
|
||||||
|
emojiPickerDisplay: "Tampilan Emoji Picker"
|
||||||
reactionSettingDescription2: "Geser untuk memindah urutan emoji, klik untuk menghapus, tekan \"+\" untuk menambahkan"
|
reactionSettingDescription2: "Geser untuk memindah urutan emoji, klik untuk menghapus, tekan \"+\" untuk menambahkan"
|
||||||
rememberNoteVisibility: "Ingat pengaturan visibilitas catatan"
|
rememberNoteVisibility: "Ingat pengaturan visibilitas catatan"
|
||||||
attachCancel: "Hapus lampiran"
|
attachCancel: "Hapus lampiran"
|
||||||
|
@ -641,6 +645,7 @@ smtpSecure: "Gunakan SSL/TLS implisit untuk koneksi SMTP"
|
||||||
smtpSecureInfo: "Matikan ini ketika menggunakan STARTTLS"
|
smtpSecureInfo: "Matikan ini ketika menggunakan STARTTLS"
|
||||||
testEmail: "Tes pengiriman surel"
|
testEmail: "Tes pengiriman surel"
|
||||||
wordMute: "Bisukan kata"
|
wordMute: "Bisukan kata"
|
||||||
|
hardWordMute: "Pembisuan kata keras"
|
||||||
regexpError: "Kesalahan ekspresi reguler"
|
regexpError: "Kesalahan ekspresi reguler"
|
||||||
regexpErrorDescription: "Galat terjadi pada baris {line} ekspresi reguler dari {tab} kata yang dibisukan:"
|
regexpErrorDescription: "Galat terjadi pada baris {line} ekspresi reguler dari {tab} kata yang dibisukan:"
|
||||||
instanceMute: "Bisukan instansi"
|
instanceMute: "Bisukan instansi"
|
||||||
|
@ -1154,6 +1159,7 @@ tosAndPrivacyPolicy: "Syarat dan Ketentuan serta Kebijakan Privasi"
|
||||||
avatarDecorations: "Dekorasi avatar"
|
avatarDecorations: "Dekorasi avatar"
|
||||||
attach: "Lampirkan"
|
attach: "Lampirkan"
|
||||||
detach: "Hapus"
|
detach: "Hapus"
|
||||||
|
detachAll: "Lepas Semua"
|
||||||
angle: "Sudut"
|
angle: "Sudut"
|
||||||
flip: "Balik"
|
flip: "Balik"
|
||||||
showAvatarDecorations: "Tampilkan dekorasi avatar"
|
showAvatarDecorations: "Tampilkan dekorasi avatar"
|
||||||
|
@ -1168,6 +1174,7 @@ doReaction: "Tambahkan reaksi"
|
||||||
code: "Kode"
|
code: "Kode"
|
||||||
reloadRequiredToApplySettings: "Muat ulang diperlukan untuk menerapkan pengaturan."
|
reloadRequiredToApplySettings: "Muat ulang diperlukan untuk menerapkan pengaturan."
|
||||||
remainingN: "Sisa : {n}"
|
remainingN: "Sisa : {n}"
|
||||||
|
decorate: "Dekor"
|
||||||
_announcement:
|
_announcement:
|
||||||
forExistingUsers: "Hanya pengguna yang telah ada"
|
forExistingUsers: "Hanya pengguna yang telah ada"
|
||||||
forExistingUsersDescription: "Pengumuman ini akan dimunculkan ke pengguna yang sudah ada dari titik waktu publikasi jika dinyalakan. Apabila dimatikan, mereka yang baru mendaftar setelah publikasi ini akan juga melihatnya."
|
forExistingUsersDescription: "Pengumuman ini akan dimunculkan ke pengguna yang sudah ada dari titik waktu publikasi jika dinyalakan. Apabila dimatikan, mereka yang baru mendaftar setelah publikasi ini akan juga melihatnya."
|
||||||
|
@ -1215,6 +1222,7 @@ _initialTutorial:
|
||||||
followers: "Perlihatkan ke pengikut saja. Hanya pengikut yang dapat melihat postinganmu dan tidak dapat direnote oleh siapapun."
|
followers: "Perlihatkan ke pengikut saja. Hanya pengikut yang dapat melihat postinganmu dan tidak dapat direnote oleh siapapun."
|
||||||
direct: "Hanya perlihatkan ke pengguna spesifik dan penerima akan diberi tahu. Dapat juga digunakan sebagai alternatif dari pesan langsung."
|
direct: "Hanya perlihatkan ke pengguna spesifik dan penerima akan diberi tahu. Dapat juga digunakan sebagai alternatif dari pesan langsung."
|
||||||
_cw:
|
_cw:
|
||||||
|
title: "Peringatan Konten (CW)"
|
||||||
_exampleNote:
|
_exampleNote:
|
||||||
cw: "Peringatan: Bikin Lapar!"
|
cw: "Peringatan: Bikin Lapar!"
|
||||||
note: "Baru aja makan donat berlapis coklat 🍩😋"
|
note: "Baru aja makan donat berlapis coklat 🍩😋"
|
||||||
|
|
51
locales/index.d.ts
vendored
51
locales/index.d.ts
vendored
|
@ -1220,6 +1220,8 @@ export interface Locale {
|
||||||
"overwriteContentConfirm": string;
|
"overwriteContentConfirm": string;
|
||||||
"seasonalScreenEffect": string;
|
"seasonalScreenEffect": string;
|
||||||
"decorate": string;
|
"decorate": string;
|
||||||
|
"addMfmFunction": string;
|
||||||
|
"enableQuickAddMfmFunction": string;
|
||||||
"_announcement": {
|
"_announcement": {
|
||||||
"forExistingUsers": string;
|
"forExistingUsers": string;
|
||||||
"forExistingUsersDescription": string;
|
"forExistingUsersDescription": string;
|
||||||
|
@ -2107,6 +2109,55 @@ export interface Locale {
|
||||||
"write:flash": string;
|
"write:flash": string;
|
||||||
"read:flash-likes": string;
|
"read:flash-likes": string;
|
||||||
"write:flash-likes": string;
|
"write:flash-likes": string;
|
||||||
|
"read:admin:abuse-user-reports": string;
|
||||||
|
"write:admin:delete-account": string;
|
||||||
|
"write:admin:delete-all-files-of-a-user": string;
|
||||||
|
"read:admin:index-stats": string;
|
||||||
|
"read:admin:table-stats": string;
|
||||||
|
"read:admin:user-ips": string;
|
||||||
|
"read:admin:meta": string;
|
||||||
|
"write:admin:reset-password": string;
|
||||||
|
"write:admin:resolve-abuse-user-report": string;
|
||||||
|
"write:admin:send-email": string;
|
||||||
|
"read:admin:server-info": string;
|
||||||
|
"read:admin:show-moderation-log": string;
|
||||||
|
"read:admin:show-user": string;
|
||||||
|
"read:admin:show-users": string;
|
||||||
|
"write:admin:suspend-user": string;
|
||||||
|
"write:admin:unset-user-avatar": string;
|
||||||
|
"write:admin:unset-user-banner": string;
|
||||||
|
"write:admin:unsuspend-user": string;
|
||||||
|
"write:admin:meta": string;
|
||||||
|
"write:admin:user-note": string;
|
||||||
|
"write:admin:roles": string;
|
||||||
|
"read:admin:roles": string;
|
||||||
|
"write:admin:relays": string;
|
||||||
|
"read:admin:relays": string;
|
||||||
|
"write:admin:invite-codes": string;
|
||||||
|
"read:admin:invite-codes": string;
|
||||||
|
"write:admin:announcements": string;
|
||||||
|
"read:admin:announcements": string;
|
||||||
|
"write:admin:avatar-decorations": string;
|
||||||
|
"read:admin:avatar-decorations": string;
|
||||||
|
"write:admin:federation": string;
|
||||||
|
"write:admin:account": string;
|
||||||
|
"read:admin:account": string;
|
||||||
|
"write:admin:emoji": string;
|
||||||
|
"read:admin:emoji": string;
|
||||||
|
"write:admin:queue": string;
|
||||||
|
"read:admin:queue": string;
|
||||||
|
"write:admin:promo": string;
|
||||||
|
"write:admin:drive": string;
|
||||||
|
"read:admin:drive": string;
|
||||||
|
"read:admin:stream": string;
|
||||||
|
"write:admin:ad": string;
|
||||||
|
"read:admin:ad": string;
|
||||||
|
"write:invite-codes": string;
|
||||||
|
"read:invite-codes": string;
|
||||||
|
"write:clip-favorite": string;
|
||||||
|
"read:clip-favorite": string;
|
||||||
|
"read:federation": string;
|
||||||
|
"write:report-abuse": string;
|
||||||
};
|
};
|
||||||
"_auth": {
|
"_auth": {
|
||||||
"shareAccessTitle": string;
|
"shareAccessTitle": string;
|
||||||
|
|
|
@ -1217,6 +1217,8 @@ remainingN: "残り: {n}"
|
||||||
overwriteContentConfirm: "現在の内容に上書きされますがよろしいですか?"
|
overwriteContentConfirm: "現在の内容に上書きされますがよろしいですか?"
|
||||||
seasonalScreenEffect: "季節に応じた画面の演出"
|
seasonalScreenEffect: "季節に応じた画面の演出"
|
||||||
decorate: "デコる"
|
decorate: "デコる"
|
||||||
|
addMfmFunction: "装飾を追加"
|
||||||
|
enableQuickAddMfmFunction: "高度なMFMのピッカーを表示する"
|
||||||
|
|
||||||
_announcement:
|
_announcement:
|
||||||
forExistingUsers: "既存ユーザーのみ"
|
forExistingUsers: "既存ユーザーのみ"
|
||||||
|
@ -2012,6 +2014,55 @@ _permissions:
|
||||||
"write:flash": "Playを操作する"
|
"write:flash": "Playを操作する"
|
||||||
"read:flash-likes": "Playのいいねを見る"
|
"read:flash-likes": "Playのいいねを見る"
|
||||||
"write:flash-likes": "Playのいいねを操作する"
|
"write:flash-likes": "Playのいいねを操作する"
|
||||||
|
"read:admin:abuse-user-reports": "ユーザーからの通報を見る"
|
||||||
|
"write:admin:delete-account": "ユーザーアカウントを削除する"
|
||||||
|
"write:admin:delete-all-files-of-a-user": "ユーザーのすべてのファイルを削除する"
|
||||||
|
"read:admin:index-stats": "データベースインデックスに関する情報を見る"
|
||||||
|
"read:admin:table-stats": "データベーステーブルに関する情報を見る"
|
||||||
|
"read:admin:user-ips": "ユーザーのIPアドレスを見る"
|
||||||
|
"read:admin:meta": "インスタンスのメタデータを見る"
|
||||||
|
"write:admin:reset-password": "ユーザーのパスワードをリセットする"
|
||||||
|
"write:admin:resolve-abuse-user-report": "ユーザーからの通報を解決する"
|
||||||
|
"write:admin:send-email": "メールを送る"
|
||||||
|
"read:admin:server-info": "サーバーの情報を見る"
|
||||||
|
"read:admin:show-moderation-log": "モデレーションログを見る"
|
||||||
|
"read:admin:show-user": "ユーザーのプライベートな情報を見る"
|
||||||
|
"read:admin:show-users": "ユーザーのプライベートな情報を見る"
|
||||||
|
"write:admin:suspend-user": "ユーザーを凍結する"
|
||||||
|
"write:admin:unset-user-avatar": "ユーザーのアバターを削除する"
|
||||||
|
"write:admin:unset-user-banner": "ユーザーのバーナーを削除する"
|
||||||
|
"write:admin:unsuspend-user": "ユーザーの凍結を解除する"
|
||||||
|
"write:admin:meta": "インスタンスのメタデータを操作する"
|
||||||
|
"write:admin:user-note": "モデレーションノートを操作する"
|
||||||
|
"write:admin:roles": "ロールを操作する"
|
||||||
|
"read:admin:roles": "ロールを見る"
|
||||||
|
"write:admin:relays": "リレーを操作する"
|
||||||
|
"read:admin:relays": "リレーを見る"
|
||||||
|
"write:admin:invite-codes": "招待コードを操作する"
|
||||||
|
"read:admin:invite-codes": "招待コードを見る"
|
||||||
|
"write:admin:announcements": "お知らせを操作する"
|
||||||
|
"read:admin:announcements": "お知らせを見る"
|
||||||
|
"write:admin:avatar-decorations": "アバターデコレーションを操作する"
|
||||||
|
"read:admin:avatar-decorations": "アバターデコレーションを見る"
|
||||||
|
"write:admin:federation": "連合に関する情報を操作する"
|
||||||
|
"write:admin:account": "ユーザーアカウントを操作する"
|
||||||
|
"read:admin:account": "ユーザーに関する情報を見る"
|
||||||
|
"write:admin:emoji": "絵文字を操作する"
|
||||||
|
"read:admin:emoji": "絵文字を見る"
|
||||||
|
"write:admin:queue": "ジョブキューを操作する"
|
||||||
|
"read:admin:queue": "ジョブキューに関する情報を見る"
|
||||||
|
"write:admin:promo": "プロモーションノートを操作する"
|
||||||
|
"write:admin:drive": "ユーザーのドライブを操作する"
|
||||||
|
"read:admin:drive": "ユーザーのドライブの関する情報を見る"
|
||||||
|
"read:admin:stream": "管理者用のWebsocket APIを使う"
|
||||||
|
"write:admin:ad": "広告を操作する"
|
||||||
|
"read:admin:ad": "広告を見る"
|
||||||
|
"write:invite-codes": "招待コードを作成する"
|
||||||
|
"read:invite-codes": "招待コードを取得する"
|
||||||
|
"write:clip-favorite": "クリップのいいねを操作する"
|
||||||
|
"read:clip-favorite": "クリップのいいねを見る"
|
||||||
|
"read:federation": "連合に関する情報を取得する"
|
||||||
|
"write:report-abuse": "違反を報告する"
|
||||||
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccessTitle: "アプリへのアクセス許可"
|
shareAccessTitle: "アプリへのアクセス許可"
|
||||||
|
|
|
@ -260,6 +260,7 @@ removed: "뭉캣십니다"
|
||||||
removeAreYouSure: "‘{x}’(얼)럴 뭉캡니꺼?"
|
removeAreYouSure: "‘{x}’(얼)럴 뭉캡니꺼?"
|
||||||
deleteAreYouSure: "‘{x}’(얼)럴 뭉캡니꺼?"
|
deleteAreYouSure: "‘{x}’(얼)럴 뭉캡니꺼?"
|
||||||
resetAreYouSure: "아시로 데돌립니꺼?"
|
resetAreYouSure: "아시로 데돌립니꺼?"
|
||||||
|
areYouSure: "갠찮십니꺼?"
|
||||||
saved: "저장햇십니다"
|
saved: "저장햇십니다"
|
||||||
messaging: "대화"
|
messaging: "대화"
|
||||||
upload: "올리기"
|
upload: "올리기"
|
||||||
|
@ -298,7 +299,7 @@ light: "볽엄"
|
||||||
dark: "어덥엄"
|
dark: "어덥엄"
|
||||||
lightThemes: "볽언 테마"
|
lightThemes: "볽언 테마"
|
||||||
darkThemes: "어덥언 테마"
|
darkThemes: "어덥언 테마"
|
||||||
syncDeviceDarkMode: "드라이브으 어덥엄 모드하고 같구로 마추기"
|
syncDeviceDarkMode: "디바이스 쪽 어덥엄 모드하고 같구로 마추기"
|
||||||
drive: "드라이브"
|
drive: "드라이브"
|
||||||
fileName: "파일 이럼"
|
fileName: "파일 이럼"
|
||||||
selectFile: "파일 개리기"
|
selectFile: "파일 개리기"
|
||||||
|
@ -425,20 +426,151 @@ moderationLogs: "중재 일지"
|
||||||
nUsersMentioned: "{n}멩이 이바구하고 잇어예"
|
nUsersMentioned: "{n}멩이 이바구하고 잇어예"
|
||||||
securityKeyAndPasskey: "보안키·패스키"
|
securityKeyAndPasskey: "보안키·패스키"
|
||||||
securityKey: "보안키"
|
securityKey: "보안키"
|
||||||
|
lastUsed: "마지막 쓰임"
|
||||||
|
lastUsedAt: "마지막 쓰임: {t}"
|
||||||
unregister: "맨걸기 무루기"
|
unregister: "맨걸기 무루기"
|
||||||
|
passwordLessLogin: "비밀번호 없시 로그인"
|
||||||
|
passwordLessLoginDescription: "비밀번호 말고 보안키나 패스키 같은 것만 써 가 로그인합니다."
|
||||||
|
resetPassword: "비밀번호 재설정"
|
||||||
|
newPasswordIs: "새 비밀번호는 \"{password}\" 입니다"
|
||||||
|
reduceUiAnimation: "화면 움직임 효과들을 수ᇚ후기"
|
||||||
share: "노누기"
|
share: "노누기"
|
||||||
notFound: "몬 찾앗십니다"
|
notFound: "몬 찾앗십니다"
|
||||||
|
notFoundDescription: "고런 주소로 들어가는 하멘은 없십니다."
|
||||||
|
uploadFolder: "기본 업로드 위치"
|
||||||
|
markAsReadAllNotifications: "모든 알림 이럿다고 표시"
|
||||||
|
markAsReadAllUnreadNotes: "모든 글 이럿다고 표시"
|
||||||
|
markAsReadAllTalkMessages: "모든 대화 이럿다고 표시"
|
||||||
help: "도움말"
|
help: "도움말"
|
||||||
|
inputMessageHere: "여따가 메시지를 입력해주이소"
|
||||||
|
close: "닫기"
|
||||||
invites: "초대하기"
|
invites: "초대하기"
|
||||||
|
members: "멤버"
|
||||||
|
transfer: "양도"
|
||||||
|
title: "제목"
|
||||||
|
text: "글"
|
||||||
|
enable: "키기"
|
||||||
|
next: "다음"
|
||||||
retype: "다시 서기"
|
retype: "다시 서기"
|
||||||
noteOf: "{user}님으 노트"
|
noteOf: "{user}님으 노트"
|
||||||
|
quoteAttached: "따옴"
|
||||||
|
quoteQuestion: "따와가 작성하겠십니까?"
|
||||||
|
noMessagesYet: "아직 대화가 없십니다"
|
||||||
|
newMessageExists: "새 메시지가 있십니다"
|
||||||
|
onlyOneFileCanBeAttached: "메시지엔 파일 하나까제밖에 몬 넣십니다"
|
||||||
invitations: "초대하기"
|
invitations: "초대하기"
|
||||||
|
invitationCode: "초대장"
|
||||||
checking: "학인하고 잇십니다"
|
checking: "학인하고 잇십니다"
|
||||||
passwordMatched: "맞십니다"
|
passwordMatched: "맞십니다"
|
||||||
passwordNotMatched: "안 맞십니다"
|
passwordNotMatched: "안 맞십니다"
|
||||||
|
signinFailed: "로그인 몬 했십니다. 고 이름이랑 비밀번호 제대로 썼는가 확인해 주이소."
|
||||||
|
or: "아니면"
|
||||||
language: "언어"
|
language: "언어"
|
||||||
|
uiLanguage: "UI 표시 언어"
|
||||||
|
aboutX: "{x}에 대해서"
|
||||||
|
emojiStyle: "이모지 모양"
|
||||||
|
native: "기본"
|
||||||
|
disableDrawer: "드로어 메뉴 쓰지 않기"
|
||||||
|
showNoteActionsOnlyHover: "마우스 올맀을 때만 노트 액션 버턴 보이기"
|
||||||
|
noHistory: "기록이 없십니다"
|
||||||
|
signinHistory: "로그인 기록"
|
||||||
|
enableAdvancedMfm: "복잡한 MFM 키기"
|
||||||
|
enableAnimatedMfm: "정신사나운 MFM 키기"
|
||||||
|
doing: "잠만예"
|
||||||
|
category: "카테고리"
|
||||||
|
tags: "태그"
|
||||||
|
docSource: "요 문서의 원본"
|
||||||
|
createAccount: "게정 맨걸기"
|
||||||
|
existingAccount: "원래 게정"
|
||||||
|
regenerate: "엎고 다시 맨걸기"
|
||||||
|
fontSize: "글자 크기"
|
||||||
|
mediaListWithOneImageAppearance: "사진 하나짜리 미디어 목록의 높이"
|
||||||
|
limitTo: "{x}로 제한"
|
||||||
|
noFollowRequests: "지둘리는 팔로우 요청이 없십니다"
|
||||||
|
openImageInNewTab: "새 탭서 사진 열기"
|
||||||
|
dashboard: "대시보드"
|
||||||
|
local: "로컬"
|
||||||
remote: "웬겍"
|
remote: "웬겍"
|
||||||
|
total: "합계"
|
||||||
|
weekOverWeekChanges: "저번주보다"
|
||||||
|
dayOverDayChanges: "어제보다"
|
||||||
|
appearance: "모냥"
|
||||||
|
clientSettings: "클라이언트 설정"
|
||||||
|
accountSettings: "게정 설정"
|
||||||
|
promotion: "선전"
|
||||||
|
promote: "선전하기"
|
||||||
|
numberOfDays: "며칠동안"
|
||||||
|
hideThisNote: "요 노트를 수ᇚ후기"
|
||||||
|
showFeaturedNotesInTimeline: "타임라인에다 추천 노트 보이기"
|
||||||
|
objectStorage: "오브젝트 스토리지"
|
||||||
|
useObjectStorage: "오브젝트 스토리지 키기"
|
||||||
|
objectStorageBaseUrl: "Base URL"
|
||||||
|
objectStorageBaseUrlDesc: "오브젝트 (미디어) 참조 링크 만들 때 쓰는 URL임다. CDN 내지 프락시를 쓴다 카멘은 그 URL을 갖다 늫고, 아이면 써먹을 서비스네 가이드를 봐봐가 공개적으로 접근할 수 있는 주소를 여 넣어 주이소. 그니께, 내가 AWS S3을 쓴다 카면은 'https://<bucket>.s3.amazonaws.com', GCS를 쓴다 카면 'https://storage.googleapis.com/<bucket>' 처럼 쓰믄 되입니더."
|
||||||
|
objectStorageBucket: "Bucket"
|
||||||
|
objectStorageBucketDesc: "써먹을 서비스의 바께쓰 이름을 여 써 주이소."
|
||||||
|
objectStoragePrefix: "Prefix"
|
||||||
|
objectStoragePrefixDesc: "요 Prefix 디렉토리 안에다가 파일이 들어감다."
|
||||||
|
objectStorageEndpoint: "Endpoint"
|
||||||
|
objectStorageEndpointDesc: "AWS S3을 쓸라멘 요는 비워두고, 아이멘은 그 서비스 가이드에 맞게 endpoint를 넣어 주이소. '<host>' 내지 '<host>:<port>'처럼 넣십니다."
|
||||||
|
objectStorageRegion: "Region"
|
||||||
|
objectStorageRegionDesc: "'xx-east-1' 같은 region 이름을 옇어 주이소. 써먹을 서비스에 region 개념 같은 게 읎다! 카면은 대신에 'us-east-1'을 옇어 놓으이소. AWS 설정 파일이나 환경 변수를 갖다 끌어다 쓸 거면은 요는 비워 두이소."
|
||||||
|
objectStorageUseSSL: "SSL 쓰기"
|
||||||
|
objectStorageUseSSLDesc: "API 호출할 때 HTTPS 안 쓸거면은 꺼 두이소"
|
||||||
|
objectStorageUseProxy: "연결에 프락시 사용"
|
||||||
|
objectStorageUseProxyDesc: "오브젝트 스토리지 API 호출에 프락시 안 쓸 거면 꺼 두이소"
|
||||||
|
objectStorageSetPublicRead: "업로드할 때 'public-read' 설정하기"
|
||||||
|
s3ForcePathStyleDesc: "s3ForcePathStyle을 키면, 바께쓰 이름을 URL의 호스트명 말고 경로의 일부로써 취급합니다. 셀프 호스트 Minio 같은 걸 굴릴라믄 켜놔야 될 수도 있십니다."
|
||||||
|
serverLogs: "서버 로그"
|
||||||
|
deleteAll: "말캉 뭉캐기"
|
||||||
|
showFixedPostForm: "타임라인 우에 글 작성 칸 박기"
|
||||||
|
showFixedPostFormInChannel: "채널 타임라인 우에 글 작성 칸 박기"
|
||||||
|
withRepliesByDefaultForNewlyFollowed: "팔로우 할 때 기본적으로 답걸도 타임라인에 나오게 하기"
|
||||||
|
newNoteRecived: "새 노트 있어예"
|
||||||
|
sounds: "소리"
|
||||||
|
sound: "소리"
|
||||||
|
listen: "듣기"
|
||||||
|
none: "없음"
|
||||||
|
showInPage: "바닥서 보기"
|
||||||
|
popout: "새 창 열기"
|
||||||
|
volume: "음량"
|
||||||
|
masterVolume: "대빵 음량"
|
||||||
|
notUseSound: "음소거하기"
|
||||||
|
useSoundOnlyWhenActive: "Misskey가 활성화되어 있을 때만 소리 내기"
|
||||||
|
details: "좀 더"
|
||||||
|
chooseEmoji: "이모지 선택"
|
||||||
|
unableToProcess: "작업 다 몬 했십니다"
|
||||||
|
recentUsed: "최근 쓴 놈"
|
||||||
|
install: "설치"
|
||||||
|
uninstall: "삭제"
|
||||||
|
installedApps: "설치된 애플리케이션"
|
||||||
|
nothing: "뭣도 없어예"
|
||||||
|
installedDate: "설치한 날"
|
||||||
|
lastUsedDate: "마지막 사용"
|
||||||
|
state: "상태"
|
||||||
|
sort: "정렬하기"
|
||||||
|
ascendingOrder: "작은 순"
|
||||||
|
descendingOrder: "큰 순"
|
||||||
|
scratchpad: "스크래치 패드"
|
||||||
|
scratchpadDescription: "스크래치 패드는 AiScript를 끼적거리는 창입니더. Misskey랑 갖다 이리저리 상호작용하는 코드를 서가 굴리멘은 그 결과도 바로 확인할 수 있십니다."
|
||||||
|
output: "출력"
|
||||||
script: "스크립트"
|
script: "스크립트"
|
||||||
|
disablePagesScript: "온갖 바닥서 AiScript를 쓰지 않음"
|
||||||
|
updateRemoteUser: "원겍 사용자 근황 알아오기"
|
||||||
|
unsetUserAvatar: "아바타 치우기"
|
||||||
|
unsetUserAvatarConfirm: "아바타 갖다 치울까예?"
|
||||||
|
unsetUserBanner: "배너 치우기"
|
||||||
|
unsetUserBannerConfirm: "배너 갖다 치울까예?"
|
||||||
|
deleteAllFiles: "파일 말캉 뭉캐기"
|
||||||
|
deleteAllFilesConfirm: "파일을 싸그리 다 뭉캐삐릴까예?"
|
||||||
|
removeAllFollowing: "팔로잉 말캉 무루기"
|
||||||
|
removeAllFollowingDescription: "{host} 서버랑 걸어놓은 모든 팔로잉을 무룹니다. 고 서버가 아예 없어지삐맀든가, 그런 경우에 하이소."
|
||||||
|
userSuspended: "요 게정은... 얼어 있십니다."
|
||||||
|
userSilenced: "요 게정은... 수ᇚ혀 있십니다."
|
||||||
|
relays: "릴레이"
|
||||||
|
addRelay: "릴레이 옇기"
|
||||||
|
addedRelays: "옇은 릴레이"
|
||||||
|
enableInfiniteScroll: "알아서 더 보기"
|
||||||
|
author: "맨던 사람"
|
||||||
manage: "간리"
|
manage: "간리"
|
||||||
emailServer: "전자우펜 서버"
|
emailServer: "전자우펜 서버"
|
||||||
email: "전자우펜"
|
email: "전자우펜"
|
||||||
|
@ -447,6 +579,8 @@ smtpHost: "호스트 이럼"
|
||||||
smtpPort: "포트"
|
smtpPort: "포트"
|
||||||
smtpUser: "사용자 이럼"
|
smtpUser: "사용자 이럼"
|
||||||
smtpPass: "비밀번호"
|
smtpPass: "비밀번호"
|
||||||
|
display: "보기"
|
||||||
|
create: "맨걸기"
|
||||||
abuseReports: "신고하기"
|
abuseReports: "신고하기"
|
||||||
reportAbuse: "신고하기"
|
reportAbuse: "신고하기"
|
||||||
reportAbuseRenote: "리노트 신고하기"
|
reportAbuseRenote: "리노트 신고하기"
|
||||||
|
@ -458,6 +592,7 @@ forwardReport: "웬겍 서버에 신고 보내기"
|
||||||
random: "무작이"
|
random: "무작이"
|
||||||
system: "시스템"
|
system: "시스템"
|
||||||
clip: "클립 맨걸기"
|
clip: "클립 맨걸기"
|
||||||
|
createNew: "새로 맨걸기"
|
||||||
notesCount: "노트 수"
|
notesCount: "노트 수"
|
||||||
renotesCount: "리노트한 수"
|
renotesCount: "리노트한 수"
|
||||||
renotedCount: "리노트덴 수"
|
renotedCount: "리노트덴 수"
|
||||||
|
@ -483,6 +618,7 @@ tools: "도구"
|
||||||
like: "좋네예!"
|
like: "좋네예!"
|
||||||
unlike: "좋네예 무루기"
|
unlike: "좋네예 무루기"
|
||||||
numberOfLikes: "좋네예 수"
|
numberOfLikes: "좋네예 수"
|
||||||
|
show: "보기"
|
||||||
roles: "옉할"
|
roles: "옉할"
|
||||||
role: "옉할"
|
role: "옉할"
|
||||||
noRole: "옉할이 없십니다"
|
noRole: "옉할이 없십니다"
|
||||||
|
@ -512,6 +648,8 @@ _gallery:
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "새 팔로워가 잇십니다"
|
title: "새 팔로워가 잇십니다"
|
||||||
|
_serverDisconnectedBehavior:
|
||||||
|
reload: "알아서 새로곤침"
|
||||||
_channel:
|
_channel:
|
||||||
removeBanner: "배너 뭉캐기"
|
removeBanner: "배너 뭉캐기"
|
||||||
_theme:
|
_theme:
|
||||||
|
@ -581,4 +719,5 @@ _moderationLogTypes:
|
||||||
suspend: "얼우기"
|
suspend: "얼우기"
|
||||||
deleteNote: "노트 뭉캐기"
|
deleteNote: "노트 뭉캐기"
|
||||||
deleteUserAnnouncement: "사용자 공지 걸 뭉캐기"
|
deleteUserAnnouncement: "사용자 공지 걸 뭉캐기"
|
||||||
|
resetPassword: "비밀번호 재설정"
|
||||||
resolveAbuseReport: "신고 해겔하기"
|
resolveAbuseReport: "신고 해겔하기"
|
||||||
|
|
|
@ -114,7 +114,7 @@ quote: "인용"
|
||||||
inChannelRenote: "채널 내 리노트"
|
inChannelRenote: "채널 내 리노트"
|
||||||
inChannelQuote: "채널 내 인용"
|
inChannelQuote: "채널 내 인용"
|
||||||
pinnedNote: "고정된 노트"
|
pinnedNote: "고정된 노트"
|
||||||
pinned: "프로필에 고정"
|
pinned: "고정하기"
|
||||||
you: "나"
|
you: "나"
|
||||||
clickToShow: "클릭하여 보기"
|
clickToShow: "클릭하여 보기"
|
||||||
sensitive: "열람 주의"
|
sensitive: "열람 주의"
|
||||||
|
@ -425,9 +425,9 @@ setupOf2fa: "2단계 인증 설정"
|
||||||
totp: "인증 앱"
|
totp: "인증 앱"
|
||||||
totpDescription: "인증 앱을 사용하여 일회성 비밀번호 입력"
|
totpDescription: "인증 앱을 사용하여 일회성 비밀번호 입력"
|
||||||
moderator: "모더레이터"
|
moderator: "모더레이터"
|
||||||
moderation: "모더레이션"
|
moderation: "조정"
|
||||||
moderationNote: "모더레이션 노트"
|
moderationNote: "조정 기록"
|
||||||
addModerationNote: "모더레이션 노트 추가하기"
|
addModerationNote: "조정 기록 추가하기"
|
||||||
moderationLogs: "모더레이션 로그"
|
moderationLogs: "모더레이션 로그"
|
||||||
nUsersMentioned: "{n}명이 언급함"
|
nUsersMentioned: "{n}명이 언급함"
|
||||||
securityKeyAndPasskey: "보안 키 또는 패스 키"
|
securityKeyAndPasskey: "보안 키 또는 패스 키"
|
||||||
|
@ -513,7 +513,7 @@ dayOverDayChanges: "어제보다"
|
||||||
appearance: "모양"
|
appearance: "모양"
|
||||||
clientSettings: "클라이언트 설정"
|
clientSettings: "클라이언트 설정"
|
||||||
accountSettings: "계정 설정"
|
accountSettings: "계정 설정"
|
||||||
promotion: "프로모션"
|
promotion: "홍보"
|
||||||
promote: "프로모션하기"
|
promote: "프로모션하기"
|
||||||
numberOfDays: "며칠동안"
|
numberOfDays: "며칠동안"
|
||||||
hideThisNote: "이 노트를 숨기기"
|
hideThisNote: "이 노트를 숨기기"
|
||||||
|
@ -863,8 +863,8 @@ devMode: "개발자 모드"
|
||||||
keepCw: "CW 유지하기"
|
keepCw: "CW 유지하기"
|
||||||
pubSub: "Pub/Sub 계정"
|
pubSub: "Pub/Sub 계정"
|
||||||
lastCommunication: "마지막 통신"
|
lastCommunication: "마지막 통신"
|
||||||
resolved: "해결됨"
|
resolved: "처리함"
|
||||||
unresolved: "해결되지 않음"
|
unresolved: "처리되지 않음"
|
||||||
breakFollow: "팔로워 해제"
|
breakFollow: "팔로워 해제"
|
||||||
breakFollowConfirm: "팔로우를 해제하시겠습니까?"
|
breakFollowConfirm: "팔로우를 해제하시겠습니까?"
|
||||||
itsOn: "켜져 있습니다"
|
itsOn: "켜져 있습니다"
|
||||||
|
@ -1179,8 +1179,10 @@ code: "문자열"
|
||||||
reloadRequiredToApplySettings: "설정을 적용하려면 새로고침을 해야 합니다."
|
reloadRequiredToApplySettings: "설정을 적용하려면 새로고침을 해야 합니다."
|
||||||
remainingN: "나머지: {n}"
|
remainingN: "나머지: {n}"
|
||||||
overwriteContentConfirm: "현재 내용을 덮어쓰기 합니다. 계속 진행하시겠습니까?"
|
overwriteContentConfirm: "현재 내용을 덮어쓰기 합니다. 계속 진행하시겠습니까?"
|
||||||
seasonalScreenEffect: "철에 맞는 화면으로 꾸미기"
|
seasonalScreenEffect: "계절에 따른 효과 보이기"
|
||||||
decorate: "장식하기"
|
decorate: "장식하기"
|
||||||
|
addMfmFunction: "장식 추가하기"
|
||||||
|
enableQuickAddMfmFunction: "상급자용 MFM 선택기 표시하기"
|
||||||
_announcement:
|
_announcement:
|
||||||
forExistingUsers: "기존 유저에게만 알림"
|
forExistingUsers: "기존 유저에게만 알림"
|
||||||
forExistingUsersDescription: "활성화하면 이 공지사항을 게시한 시점에서 이미 가입한 유저에게만 표시합니다. 비활성화하면 게시 후에 가입한 유저에게도 표시합니다."
|
forExistingUsersDescription: "활성화하면 이 공지사항을 게시한 시점에서 이미 가입한 유저에게만 표시합니다. 비활성화하면 게시 후에 가입한 유저에게도 표시합니다."
|
||||||
|
@ -1557,7 +1559,7 @@ _role:
|
||||||
name: "역할 이름"
|
name: "역할 이름"
|
||||||
description: "역할 설명"
|
description: "역할 설명"
|
||||||
permission: "역할 권한"
|
permission: "역할 권한"
|
||||||
descriptionOfPermission: "<b>모더레이터</b>는 기본적인 중재와 관련된 작업을 수행할 수 있습니다.\n<b>관리자</b>는 서버의 모든 설정을 변경할 수 있습니다."
|
descriptionOfPermission: "<b>조정자</b>는 기본적인 조정 작업을 진행할 수 있습니다.\n<b>관리자</b>는 서버의 모든 설정을 변경할 수 있습니다."
|
||||||
assignTarget: "할당 대상"
|
assignTarget: "할당 대상"
|
||||||
descriptionOfAssignTarget: "<b>수동</b>을 선택하면 누가 이 역할에 포함되는지를 수동으로 관리할 수 있습니다.\n<b>조건부</b>를 선택하면 조건을 설정해 일치하는 사용자를 자동으로 포함되게 할 수 있습니다."
|
descriptionOfAssignTarget: "<b>수동</b>을 선택하면 누가 이 역할에 포함되는지를 수동으로 관리할 수 있습니다.\n<b>조건부</b>를 선택하면 조건을 설정해 일치하는 사용자를 자동으로 포함되게 할 수 있습니다."
|
||||||
manual: "수동"
|
manual: "수동"
|
||||||
|
@ -1628,7 +1630,7 @@ _role:
|
||||||
or: "다음을 하나라도 만족"
|
or: "다음을 하나라도 만족"
|
||||||
not: "다음을 만족하지 않음"
|
not: "다음을 만족하지 않음"
|
||||||
_sensitiveMediaDetection:
|
_sensitiveMediaDetection:
|
||||||
description: "기계학습을 통해 자동으로 민감한 미디어를 탐지하여, 모더레이션에 참고할 수 있도록 합니다. 서버의 부하를 약간 증가시킵니다."
|
description: "기계 학습으로 민감한 미디어를 알아서 찾아내어 조정에 참고하도록 합니다. 서버가 부하를 다소 받습니다."
|
||||||
sensitivity: "탐지 민감도"
|
sensitivity: "탐지 민감도"
|
||||||
sensitivityDescription: "민감도가 낮을수록 안전한 미디어가 잘못 탐지될 확률이 줄어들며, 높을수록 민감한 미디어가 탐지되지 않을 확률이 줄어듭니다."
|
sensitivityDescription: "민감도가 낮을수록 안전한 미디어가 잘못 탐지될 확률이 줄어들며, 높을수록 민감한 미디어가 탐지되지 않을 확률이 줄어듭니다."
|
||||||
setSensitiveFlagAutomatically: "자동으로 NSFW로 설정하기"
|
setSensitiveFlagAutomatically: "자동으로 NSFW로 설정하기"
|
||||||
|
@ -1641,6 +1643,7 @@ _emailUnavailable:
|
||||||
disposable: "임시 이메일 주소는 사용할 수 없습니다"
|
disposable: "임시 이메일 주소는 사용할 수 없습니다"
|
||||||
mx: "메일 서버가 올바르지 않습니다"
|
mx: "메일 서버가 올바르지 않습니다"
|
||||||
smtp: "메일 서버가 응답하지 않습니다"
|
smtp: "메일 서버가 응답하지 않습니다"
|
||||||
|
banned: "이 메일 주소는 사용할 수 없습니다"
|
||||||
_ffVisibility:
|
_ffVisibility:
|
||||||
public: "공개"
|
public: "공개"
|
||||||
followers: "팔로워에게만 공개"
|
followers: "팔로워에게만 공개"
|
||||||
|
@ -1932,6 +1935,55 @@ _permissions:
|
||||||
"write:flash": "Play를 조작합니다"
|
"write:flash": "Play를 조작합니다"
|
||||||
"read:flash-likes": "Play의 좋아요를 봅니다"
|
"read:flash-likes": "Play의 좋아요를 봅니다"
|
||||||
"write:flash-likes": "Play의 좋아요를 조작합니다"
|
"write:flash-likes": "Play의 좋아요를 조작합니다"
|
||||||
|
"read:admin:abuse-user-reports": "사용자 신고 보기"
|
||||||
|
"write:admin:delete-account": "사용자 계정 삭제하기"
|
||||||
|
"write:admin:delete-all-files-of-a-user": "모든 사용자 파일 삭제하기"
|
||||||
|
"read:admin:index-stats": "데이터베이스 색인 정보 보기"
|
||||||
|
"read:admin:table-stats": "데이터베이스 테이블 정보 보기"
|
||||||
|
"read:admin:user-ips": "사용자 IP 주소 보기"
|
||||||
|
"read:admin:meta": "인스턴스 메타데이터 보기"
|
||||||
|
"write:admin:reset-password": "사용자 비밀번호 재설정하기"
|
||||||
|
"write:admin:resolve-abuse-user-report": "사용자 신고 처리하기"
|
||||||
|
"write:admin:send-email": "이메일 보내기"
|
||||||
|
"read:admin:server-info": "서버 정보 보기"
|
||||||
|
"read:admin:show-moderation-log": "조정 기록 보기"
|
||||||
|
"read:admin:show-user": "사용자 개인정보 보기"
|
||||||
|
"read:admin:show-users": "사용자 개인정보 보기"
|
||||||
|
"write:admin:suspend-user": "사용자 정지하기"
|
||||||
|
"write:admin:unset-user-avatar": "사용자 아바타 삭제하기"
|
||||||
|
"write:admin:unset-user-banner": "사용자 배너 삭제하기"
|
||||||
|
"write:admin:unsuspend-user": "사용자 정지 해제하기"
|
||||||
|
"write:admin:meta": "인스턴스 메타데이터 수정하기"
|
||||||
|
"write:admin:user-note": "조정 기록 수정하기"
|
||||||
|
"write:admin:roles": "역할 수정하기"
|
||||||
|
"read:admin:roles": "역할 보기"
|
||||||
|
"write:admin:relays": "릴레이 수정하기"
|
||||||
|
"read:admin:relays": "릴레이 보기"
|
||||||
|
"write:admin:invite-codes": "초대 코드 수정하기"
|
||||||
|
"read:admin:invite-codes": "초대 코드 보기"
|
||||||
|
"write:admin:announcements": "공지사항 수정하기"
|
||||||
|
"read:admin:announcements": "공지사항 보기"
|
||||||
|
"write:admin:avatar-decorations": "아바타 꾸미기 수정하기"
|
||||||
|
"read:admin:avatar-decorations": "아바타 꾸미기 보기"
|
||||||
|
"write:admin:federation": "연합 정보 수정하기"
|
||||||
|
"write:admin:account": "사용자 계정 수정하기"
|
||||||
|
"read:admin:account": "사용자 정보 보기"
|
||||||
|
"write:admin:emoji": "이모지 수정하기"
|
||||||
|
"read:admin:emoji": "이모지 보기"
|
||||||
|
"write:admin:queue": "작업 대기열 수정하기"
|
||||||
|
"read:admin:queue": "작업 대기열 정보 보기"
|
||||||
|
"write:admin:promo": "홍보 기록 수정하기"
|
||||||
|
"write:admin:drive": "사용자 드라이브 수정하기"
|
||||||
|
"read:admin:drive": "사용자 드라이브 정보 보기"
|
||||||
|
"read:admin:stream": "관리자용 Websocket API 사용하기"
|
||||||
|
"write:admin:ad": "광고 수정하기"
|
||||||
|
"read:admin:ad": "광고 보기"
|
||||||
|
"write:invite-codes": "초대 코드 만들기"
|
||||||
|
"read:invite-codes": "초대 코드 불러오기"
|
||||||
|
"write:clip-favorite": "클립의 좋아요 수정하기"
|
||||||
|
"read:clip-favorite": "클립의 좋아요 보기"
|
||||||
|
"read:federation": "연합 정보 불러오기"
|
||||||
|
"write:report-abuse": "위반 내용 신고하기"
|
||||||
_auth:
|
_auth:
|
||||||
shareAccessTitle: "어플리케이션의 접근 허가"
|
shareAccessTitle: "어플리케이션의 접근 허가"
|
||||||
shareAccess: "\"{name}\" 이 계정에 접근하는 것을 허용하시겠습니까?"
|
shareAccess: "\"{name}\" 이 계정에 접근하는 것을 허용하시겠습니까?"
|
||||||
|
@ -2266,21 +2318,21 @@ _moderationLogTypes:
|
||||||
updateCustomEmoji: "커스텀 이모지 수정"
|
updateCustomEmoji: "커스텀 이모지 수정"
|
||||||
deleteCustomEmoji: "커스텀 이모지 삭제"
|
deleteCustomEmoji: "커스텀 이모지 삭제"
|
||||||
updateServerSettings: "서버 설정 갱신"
|
updateServerSettings: "서버 설정 갱신"
|
||||||
updateUserNote: "모더레이션 노트 갱신"
|
updateUserNote: "조정 기록 갱신"
|
||||||
deleteDriveFile: "파일 삭제"
|
deleteDriveFile: "파일 삭제"
|
||||||
deleteNote: "노트 삭제"
|
deleteNote: "노트 삭제"
|
||||||
createGlobalAnnouncement: "전역 공지사항 생성"
|
createGlobalAnnouncement: "모든 공지사항 만들기"
|
||||||
createUserAnnouncement: "유저 공지사항 생성"
|
createUserAnnouncement: "사용자 공지사항 만들기"
|
||||||
updateGlobalAnnouncement: "전역 공지사항 수정"
|
updateGlobalAnnouncement: "모든 공지사항 수정"
|
||||||
updateUserAnnouncement: "유저 공지사항 수정"
|
updateUserAnnouncement: "사용자 공지사항 수정"
|
||||||
deleteGlobalAnnouncement: "전역 공지사항 삭제"
|
deleteGlobalAnnouncement: "모든 공지사항 삭제"
|
||||||
deleteUserAnnouncement: "유저 공지사항 삭제"
|
deleteUserAnnouncement: "사용자 공지사항 삭제"
|
||||||
resetPassword: "비밀번호 재설정"
|
resetPassword: "비밀번호 재설정"
|
||||||
suspendRemoteInstance: "리모트 서버를 정지"
|
suspendRemoteInstance: "리모트 서버를 정지"
|
||||||
unsuspendRemoteInstance: "리모트 서버의 정지를 해제"
|
unsuspendRemoteInstance: "리모트 서버의 정지를 해제"
|
||||||
markSensitiveDriveFile: "파일에 열람주의를 설정"
|
markSensitiveDriveFile: "파일에 열람주의를 설정"
|
||||||
unmarkSensitiveDriveFile: "파일에 열람주의를 해제"
|
unmarkSensitiveDriveFile: "파일에 열람주의를 해제"
|
||||||
resolveAbuseReport: "신고 해결"
|
resolveAbuseReport: "신고 처리"
|
||||||
createInvitation: "초대 코드 생성"
|
createInvitation: "초대 코드 생성"
|
||||||
createAd: "광고 생성"
|
createAd: "광고 생성"
|
||||||
deleteAd: "광고 삭제"
|
deleteAd: "광고 삭제"
|
||||||
|
|
|
@ -120,6 +120,12 @@ sensitive: "Содержимое не для всех"
|
||||||
add: "Добавить"
|
add: "Добавить"
|
||||||
reaction: "Реакции"
|
reaction: "Реакции"
|
||||||
reactions: "Реакции"
|
reactions: "Реакции"
|
||||||
|
emojiPicker: "Палитра эмодзи"
|
||||||
|
pinnedEmojisForReactionSettingDescription: "Здесь можно закрепить эмодзи для реакций"
|
||||||
|
pinnedEmojisSettingDescription: "Здесь можно закрепить эмодзи в общей палитре"
|
||||||
|
emojiPickerDisplay: "Внешний вид палитры"
|
||||||
|
overwriteFromPinnedEmojisForReaction: "Заменить на эмодзи из списка реакций"
|
||||||
|
overwriteFromPinnedEmojis: "Заменить на эмодзи из общего списка закреплённых"
|
||||||
reactionSettingDescription2: "Расставляйте перетаскиванием, удаляйте нажатием, добавляйте кнопкой «+»."
|
reactionSettingDescription2: "Расставляйте перетаскиванием, удаляйте нажатием, добавляйте кнопкой «+»."
|
||||||
rememberNoteVisibility: "Запоминать видимость заметок"
|
rememberNoteVisibility: "Запоминать видимость заметок"
|
||||||
attachCancel: "Удалить вложение"
|
attachCancel: "Удалить вложение"
|
||||||
|
@ -1053,6 +1059,8 @@ options: "Настройки ролей"
|
||||||
specifyUser: "Указанный пользователь"
|
specifyUser: "Указанный пользователь"
|
||||||
failedToPreviewUrl: "Предварительный просмотр недоступен"
|
failedToPreviewUrl: "Предварительный просмотр недоступен"
|
||||||
update: "Обновить"
|
update: "Обновить"
|
||||||
|
rolesThatCanBeUsedThisEmojiAsReaction: "Роли тех, кому можно использовать эти эмодзи как реакцию"
|
||||||
|
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "Если здесь ничего не указать, в качестве реакции эту эмодзи сможет использовать каждый."
|
||||||
later: "Позже"
|
later: "Позже"
|
||||||
goToMisskey: "К Misskey"
|
goToMisskey: "К Misskey"
|
||||||
additionalEmojiDictionary: "Дополнительные словари эмодзи"
|
additionalEmojiDictionary: "Дополнительные словари эмодзи"
|
||||||
|
|
|
@ -632,11 +632,11 @@ tokenRequested: "允許存取帳戶"
|
||||||
pluginTokenRequestedDescription: "此外掛將擁有在此設定的權限。"
|
pluginTokenRequestedDescription: "此外掛將擁有在此設定的權限。"
|
||||||
notificationType: "通知形式"
|
notificationType: "通知形式"
|
||||||
edit: "編輯"
|
edit: "編輯"
|
||||||
emailServer: "電郵伺服器"
|
emailServer: "電子郵件伺服器"
|
||||||
enableEmail: "啟用發送電郵功能"
|
enableEmail: "啟用發送電子郵件功能"
|
||||||
emailConfigInfo: "用於確認電郵地址及密碼重置"
|
emailConfigInfo: "用於確認電子郵件地址及密碼重置"
|
||||||
email: "電子郵件"
|
email: "電子郵件"
|
||||||
emailAddress: "電郵地址"
|
emailAddress: "電子郵件位址"
|
||||||
smtpConfig: "SMTP 伺服器設定"
|
smtpConfig: "SMTP 伺服器設定"
|
||||||
smtpHost: "主機"
|
smtpHost: "主機"
|
||||||
smtpPort: "埠"
|
smtpPort: "埠"
|
||||||
|
@ -731,7 +731,7 @@ disableShowingAnimatedImages: "不播放動態圖檔"
|
||||||
highlightSensitiveMedia: "強調敏感標記"
|
highlightSensitiveMedia: "強調敏感標記"
|
||||||
verificationEmailSent: "已發送驗證電子郵件。請點擊進入電子郵件中的鏈接完成驗證。"
|
verificationEmailSent: "已發送驗證電子郵件。請點擊進入電子郵件中的鏈接完成驗證。"
|
||||||
notSet: "未設定"
|
notSet: "未設定"
|
||||||
emailVerified: "已成功驗證您的電郵"
|
emailVerified: "已成功驗證您的電子郵件地址"
|
||||||
noteFavoritesCount: "我的最愛貼文的數目"
|
noteFavoritesCount: "我的最愛貼文的數目"
|
||||||
pageLikesCount: "頁面被按讚次數"
|
pageLikesCount: "頁面被按讚次數"
|
||||||
pageLikedCount: "頁面被按讚次數"
|
pageLikedCount: "頁面被按讚次數"
|
||||||
|
@ -783,7 +783,7 @@ capacity: "容量"
|
||||||
inUse: "已使用"
|
inUse: "已使用"
|
||||||
editCode: "編輯代碼"
|
editCode: "編輯代碼"
|
||||||
apply: "套用"
|
apply: "套用"
|
||||||
receiveAnnouncementFromInstance: "接收由本實例發出的電郵通知"
|
receiveAnnouncementFromInstance: "接收來自伺服器的通知"
|
||||||
emailNotification: "郵件通知"
|
emailNotification: "郵件通知"
|
||||||
publish: "發布"
|
publish: "發布"
|
||||||
inChannelSearch: "頻道内搜尋"
|
inChannelSearch: "頻道内搜尋"
|
||||||
|
@ -955,7 +955,7 @@ cannotUploadBecauseExceedsFileSizeLimit: "由於超過了檔案大小的限制
|
||||||
beta: "測試版"
|
beta: "測試版"
|
||||||
enableAutoSensitive: "自動 NSFW 判定"
|
enableAutoSensitive: "自動 NSFW 判定"
|
||||||
enableAutoSensitiveDescription: "如果可用,它將使用機器學習技術判斷檔案是否需要標記為敏感。即使關閉此功能,也可能會依實例規則而自動啟用。"
|
enableAutoSensitiveDescription: "如果可用,它將使用機器學習技術判斷檔案是否需要標記為敏感。即使關閉此功能,也可能會依實例規則而自動啟用。"
|
||||||
activeEmailValidationDescription: "積極驗證使用者的電郵地址,以判斷它是否可以通訊。關閉此選項代表只會檢查地址是否符合格式。"
|
activeEmailValidationDescription: "主動地驗證使用者的電子郵件地址,以確定是否是一次性地址以及是否可以真正與其進行通訊。關閉時,僅檢查格式是否正確。"
|
||||||
navbar: "導覽列"
|
navbar: "導覽列"
|
||||||
shuffle: "隨機"
|
shuffle: "隨機"
|
||||||
account: "帳戶"
|
account: "帳戶"
|
||||||
|
@ -1181,6 +1181,8 @@ remainingN: "剩餘:{n}"
|
||||||
overwriteContentConfirm: "確定要覆蓋目前的內容嗎?"
|
overwriteContentConfirm: "確定要覆蓋目前的內容嗎?"
|
||||||
seasonalScreenEffect: "隨季節變換畫面的呈現"
|
seasonalScreenEffect: "隨季節變換畫面的呈現"
|
||||||
decorate: "設置頭像裝飾"
|
decorate: "設置頭像裝飾"
|
||||||
|
addMfmFunction: "插入MFM功能語法"
|
||||||
|
enableQuickAddMfmFunction: "顯示高級MFM選擇器"
|
||||||
_announcement:
|
_announcement:
|
||||||
forExistingUsers: "僅限既有的使用者"
|
forExistingUsers: "僅限既有的使用者"
|
||||||
forExistingUsersDescription: "啟用代表僅向現存使用者顯示;停用代表張貼後註冊的新使用者也會看到。"
|
forExistingUsersDescription: "啟用代表僅向現存使用者顯示;停用代表張貼後註冊的新使用者也會看到。"
|
||||||
|
@ -1641,6 +1643,7 @@ _emailUnavailable:
|
||||||
disposable: "不是永久可用的地址"
|
disposable: "不是永久可用的地址"
|
||||||
mx: "郵件伺服器不正確"
|
mx: "郵件伺服器不正確"
|
||||||
smtp: "郵件伺服器沒有應答"
|
smtp: "郵件伺服器沒有應答"
|
||||||
|
banned: "無法使用此電子郵件地址註冊"
|
||||||
_ffVisibility:
|
_ffVisibility:
|
||||||
public: "公開"
|
public: "公開"
|
||||||
followers: "只有關注您的使用者能看到"
|
followers: "只有關注您的使用者能看到"
|
||||||
|
|
|
@ -24,9 +24,11 @@ export class ffVisibility1702718871541 {
|
||||||
async down(queryRunner) {
|
async down(queryRunner) {
|
||||||
await queryRunner.query(`CREATE TYPE "public"."user_profile_ffvisibility_enum" AS ENUM('public', 'followers', 'private')`);
|
await queryRunner.query(`CREATE TYPE "public"."user_profile_ffvisibility_enum" AS ENUM('public', 'followers', 'private')`);
|
||||||
await queryRunner.query(`ALTER TABLE "user_profile" ADD "ffVisibility" "public"."user_profile_ffvisibility_enum" NOT NULL DEFAULT 'public'`);
|
await queryRunner.query(`ALTER TABLE "user_profile" ADD "ffVisibility" "public"."user_profile_ffvisibility_enum" NOT NULL DEFAULT 'public'`);
|
||||||
|
|
||||||
await queryRunner.query(`CREATE CAST ("public"."user_profile_followingvisibility_enum" AS "public"."user_profile_ffvisibility_enum") WITH INOUT AS ASSIGNMENT`);
|
await queryRunner.query(`CREATE CAST ("public"."user_profile_followingvisibility_enum" AS "public"."user_profile_ffvisibility_enum") WITH INOUT AS ASSIGNMENT`);
|
||||||
await queryRunner.query(`UPDATE "user_profile" SET ffVisibility = "user_profile"."followingVisibility"`);
|
await queryRunner.query(`UPDATE "user_profile" SET "ffVisibility" = "followingVisibility"`);
|
||||||
await queryRunner.query(`DROP CAST ("public"."user_profile_followingvisibility_enum" AS "public"."user_profile_ffvisibility_enum")`);
|
await queryRunner.query(`DROP CAST ("public"."user_profile_followingvisibility_enum" AS "public"."user_profile_ffvisibility_enum")`);
|
||||||
|
|
||||||
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "followersVisibility"`);
|
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "followersVisibility"`);
|
||||||
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "followingVisibility"`);
|
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "followingVisibility"`);
|
||||||
await queryRunner.query(`DROP TYPE "public"."user_profile_followersVisibility_enum"`);
|
await queryRunner.query(`DROP TYPE "public"."user_profile_followersVisibility_enum"`);
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
"@discordapp/twemoji": "15.0.2",
|
"@discordapp/twemoji": "15.0.2",
|
||||||
"@fastify/accepts": "4.3.0",
|
"@fastify/accepts": "4.3.0",
|
||||||
"@fastify/cookie": "9.2.0",
|
"@fastify/cookie": "9.2.0",
|
||||||
"@fastify/cors": "8.4.2",
|
"@fastify/cors": "8.5.0",
|
||||||
"@fastify/express": "2.3.0",
|
"@fastify/express": "2.3.0",
|
||||||
"@fastify/http-proxy": "9.3.0",
|
"@fastify/http-proxy": "9.3.0",
|
||||||
"@fastify/multipart": "8.0.0",
|
"@fastify/multipart": "8.0.0",
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
"@nestjs/core": "10.2.10",
|
"@nestjs/core": "10.2.10",
|
||||||
"@nestjs/testing": "10.2.10",
|
"@nestjs/testing": "10.2.10",
|
||||||
"@peertube/http-signature": "1.7.0",
|
"@peertube/http-signature": "1.7.0",
|
||||||
"@sharkey/sfm-js": "0.24.1",
|
"@sharkey/sfm-js": "0.24.3",
|
||||||
"@simplewebauthn/server": "8.3.5",
|
"@simplewebauthn/server": "8.3.5",
|
||||||
"@sinonjs/fake-timers": "11.2.2",
|
"@sinonjs/fake-timers": "11.2.2",
|
||||||
"@smithy/node-http-handler": "2.1.10",
|
"@smithy/node-http-handler": "2.1.10",
|
||||||
|
|
|
@ -7,7 +7,6 @@ import { URLSearchParams } from 'node:url';
|
||||||
import * as nodemailer from 'nodemailer';
|
import * as nodemailer from 'nodemailer';
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { validate as validateEmail } from 'deep-email-validator';
|
import { validate as validateEmail } from 'deep-email-validator';
|
||||||
import { SubOutputFormat } from 'deep-email-validator/dist/output/output.js';
|
|
||||||
import { MetaService } from '@/core/MetaService.js';
|
import { MetaService } from '@/core/MetaService.js';
|
||||||
import { UtilityService } from '@/core/UtilityService.js';
|
import { UtilityService } from '@/core/UtilityService.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
|
@ -166,7 +165,10 @@ export class EmailService {
|
||||||
email: emailAddress,
|
email: emailAddress,
|
||||||
});
|
});
|
||||||
|
|
||||||
let validated;
|
let validated: {
|
||||||
|
valid: boolean,
|
||||||
|
reason?: string | null,
|
||||||
|
};
|
||||||
|
|
||||||
if (meta.enableActiveEmailValidation) {
|
if (meta.enableActiveEmailValidation) {
|
||||||
if (meta.enableVerifymailApi && meta.verifymailAuthKey != null) {
|
if (meta.enableVerifymailApi && meta.verifymailAuthKey != null) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import { UserEntityService } from '@/core/entities/UserEntityService.js';
|
||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
import { FeaturedService } from '@/core/FeaturedService.js';
|
import { FeaturedService } from '@/core/FeaturedService.js';
|
||||||
import { MetaService } from '@/core/MetaService.js';
|
import { MetaService } from '@/core/MetaService.js';
|
||||||
|
import { UtilityService } from '@/core/UtilityService.js';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class HashtagService {
|
export class HashtagService {
|
||||||
|
@ -29,6 +30,7 @@ export class HashtagService {
|
||||||
private featuredService: FeaturedService,
|
private featuredService: FeaturedService,
|
||||||
private idService: IdService,
|
private idService: IdService,
|
||||||
private metaService: MetaService,
|
private metaService: MetaService,
|
||||||
|
private utilityService: UtilityService,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +163,7 @@ export class HashtagService {
|
||||||
const instance = await this.metaService.fetch();
|
const instance = await this.metaService.fetch();
|
||||||
const hiddenTags = instance.hiddenTags.map(t => normalizeForSearch(t));
|
const hiddenTags = instance.hiddenTags.map(t => normalizeForSearch(t));
|
||||||
if (hiddenTags.includes(hashtag)) return;
|
if (hiddenTags.includes(hashtag)) return;
|
||||||
|
if (this.utilityService.isSensitiveWordIncluded(hashtag, instance.sensitiveWords)) return;
|
||||||
|
|
||||||
// YYYYMMDDHHmm (10分間隔)
|
// YYYYMMDDHHmm (10分間隔)
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
|
|
@ -253,7 +253,7 @@ export class NoteCreateService implements OnApplicationShutdown {
|
||||||
|
|
||||||
if (data.visibility === 'public' && data.channel == null) {
|
if (data.visibility === 'public' && data.channel == null) {
|
||||||
const sensitiveWords = meta.sensitiveWords;
|
const sensitiveWords = meta.sensitiveWords;
|
||||||
if (this.isSensitive(data, sensitiveWords)) {
|
if (this.utilityService.isSensitiveWordIncluded(data.cw ?? data.text ?? '', sensitiveWords)) {
|
||||||
data.visibility = 'home';
|
data.visibility = 'home';
|
||||||
} else if ((await this.roleService.getUserPolicies(user.id)).canPublicNote === false) {
|
} else if ((await this.roleService.getUserPolicies(user.id)).canPublicNote === false) {
|
||||||
data.visibility = 'home';
|
data.visibility = 'home';
|
||||||
|
@ -422,7 +422,7 @@ export class NoteCreateService implements OnApplicationShutdown {
|
||||||
|
|
||||||
if (data.visibility === 'public' && data.channel == null) {
|
if (data.visibility === 'public' && data.channel == null) {
|
||||||
const sensitiveWords = meta.sensitiveWords;
|
const sensitiveWords = meta.sensitiveWords;
|
||||||
if (this.isSensitive(data, sensitiveWords)) {
|
if (this.utilityService.isSensitiveWordIncluded(data.cw ?? data.text ?? '', sensitiveWords)) {
|
||||||
data.visibility = 'home';
|
data.visibility = 'home';
|
||||||
} else if ((await this.roleService.getUserPolicies(user.id)).canPublicNote === false) {
|
} else if ((await this.roleService.getUserPolicies(user.id)).canPublicNote === false) {
|
||||||
data.visibility = 'home';
|
data.visibility = 'home';
|
||||||
|
@ -989,31 +989,6 @@ export class NoteCreateService implements OnApplicationShutdown {
|
||||||
if (!user.noindex) this.index(note);
|
if (!user.noindex) this.index(note);
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
|
||||||
private isSensitive(note: Option, sensitiveWord: string[]): boolean {
|
|
||||||
if (sensitiveWord.length > 0) {
|
|
||||||
const text = note.cw ?? note.text ?? '';
|
|
||||||
if (text === '') return false;
|
|
||||||
const matched = sensitiveWord.some(filter => {
|
|
||||||
// represents RegExp
|
|
||||||
const regexp = filter.match(/^\/(.+)\/(.*)$/);
|
|
||||||
// This should never happen due to input sanitisation.
|
|
||||||
if (!regexp) {
|
|
||||||
const words = filter.split(' ');
|
|
||||||
return words.every(keyword => text.includes(keyword));
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return new RE2(regexp[1], regexp[2]).test(text);
|
|
||||||
} catch (err) {
|
|
||||||
// This should never happen due to input sanitisation.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (matched) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
private isQuote(note: Option): note is Option & { renote: MiNote } {
|
private isQuote(note: Option): note is Option & { renote: MiNote } {
|
||||||
// sync with misc/is-quote.ts
|
// sync with misc/is-quote.ts
|
||||||
|
@ -1197,6 +1172,7 @@ export class NoteCreateService implements OnApplicationShutdown {
|
||||||
// ダイレクトのとき、そのリストが対象外のユーザーの場合
|
// ダイレクトのとき、そのリストが対象外のユーザーの場合
|
||||||
if (
|
if (
|
||||||
note.visibility === 'specified' &&
|
note.visibility === 'specified' &&
|
||||||
|
note.userId !== userListMembership.userListUserId &&
|
||||||
!note.visibleUserIds.some(v => v === userListMembership.userListUserId)
|
!note.visibleUserIds.some(v => v === userListMembership.userListUserId)
|
||||||
) continue;
|
) continue;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import * as Redis from 'ioredis';
|
import * as Redis from 'ioredis';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import type { EmojisRepository, NoteReactionsRepository, UsersRepository, NotesRepository } from '@/models/_.js';
|
import type { EmojisRepository, NoteReactionsRepository, UsersRepository, NotesRepository, NoteThreadMutingsRepository } from '@/models/_.js';
|
||||||
import { IdentifiableError } from '@/misc/identifiable-error.js';
|
import { IdentifiableError } from '@/misc/identifiable-error.js';
|
||||||
import type { MiRemoteUser, MiUser } from '@/models/User.js';
|
import type { MiRemoteUser, MiUser } from '@/models/User.js';
|
||||||
import type { MiNote } from '@/models/Note.js';
|
import type { MiNote } from '@/models/Note.js';
|
||||||
|
@ -81,6 +81,9 @@ export class ReactionService {
|
||||||
@Inject(DI.noteReactionsRepository)
|
@Inject(DI.noteReactionsRepository)
|
||||||
private noteReactionsRepository: NoteReactionsRepository,
|
private noteReactionsRepository: NoteReactionsRepository,
|
||||||
|
|
||||||
|
@Inject(DI.noteThreadMutingsRepository)
|
||||||
|
private noteThreadMutingsRepository: NoteThreadMutingsRepository,
|
||||||
|
|
||||||
@Inject(DI.emojisRepository)
|
@Inject(DI.emojisRepository)
|
||||||
private emojisRepository: EmojisRepository,
|
private emojisRepository: EmojisRepository,
|
||||||
|
|
||||||
|
@ -138,7 +141,7 @@ export class ReactionService {
|
||||||
reaction = reacterHost ? `:${name}@${reacterHost}:` : `:${name}:`;
|
reaction = reacterHost ? `:${name}@${reacterHost}:` : `:${name}:`;
|
||||||
|
|
||||||
// センシティブ
|
// センシティブ
|
||||||
if ((note.reactionAcceptance === 'nonSensitiveOnly') && emoji.isSensitive) {
|
if ((note.reactionAcceptance === 'nonSensitiveOnly' || note.reactionAcceptance === 'nonSensitiveOnlyForLocalLikeOnlyForRemote') && emoji.isSensitive) {
|
||||||
reaction = FALLBACK;
|
reaction = FALLBACK;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -244,10 +247,19 @@ export class ReactionService {
|
||||||
|
|
||||||
// リアクションされたユーザーがローカルユーザーなら通知を作成
|
// リアクションされたユーザーがローカルユーザーなら通知を作成
|
||||||
if (note.userHost === null) {
|
if (note.userHost === null) {
|
||||||
this.notificationService.createNotification(note.userId, 'reaction', {
|
const isThreadMuted = await this.noteThreadMutingsRepository.exist({
|
||||||
noteId: note.id,
|
where: {
|
||||||
reaction: reaction,
|
userId: note.userId,
|
||||||
}, user.id);
|
threadId: note.threadId ?? note.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!isThreadMuted) {
|
||||||
|
this.notificationService.createNotification(note.userId, 'reaction', {
|
||||||
|
noteId: note.id,
|
||||||
|
reaction: reaction,
|
||||||
|
}, user.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region 配信
|
//#region 配信
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
import { URL } from 'node:url';
|
import { URL } from 'node:url';
|
||||||
import { toASCII } from 'punycode';
|
import { toASCII } from 'punycode';
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
|
import RE2 from 're2';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import type { Config } from '@/config.js';
|
import type { Config } from '@/config.js';
|
||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
|
@ -41,6 +42,33 @@ export class UtilityService {
|
||||||
return silencedHosts.some(x => `.${host.toLowerCase()}`.endsWith(`.${x}`));
|
return silencedHosts.some(x => `.${host.toLowerCase()}`.endsWith(`.${x}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
public isSensitiveWordIncluded(text: string, sensitiveWords: string[]): boolean {
|
||||||
|
if (sensitiveWords.length === 0) return false;
|
||||||
|
if (text === '') return false;
|
||||||
|
|
||||||
|
const regexpregexp = /^\/(.+)\/(.*)$/;
|
||||||
|
|
||||||
|
const matched = sensitiveWords.some(filter => {
|
||||||
|
// represents RegExp
|
||||||
|
const regexp = filter.match(regexpregexp);
|
||||||
|
// This should never happen due to input sanitisation.
|
||||||
|
if (!regexp) {
|
||||||
|
const words = filter.split(' ');
|
||||||
|
return words.every(keyword => text.includes(keyword));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// TODO: RE2インスタンスをキャッシュ
|
||||||
|
return new RE2(regexp[1], regexp[2]).test(text);
|
||||||
|
} catch (err) {
|
||||||
|
// This should never happen due to input sanitisation.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return matched;
|
||||||
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public extractDbHost(uri: string): string {
|
public extractDbHost(uri: string): string {
|
||||||
const url = new URL(uri);
|
const url = new URL(uri);
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and other misskey contributors
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
export const kinds = [
|
|
||||||
'read:account',
|
|
||||||
'write:account',
|
|
||||||
'read:blocks',
|
|
||||||
'write:blocks',
|
|
||||||
'read:drive',
|
|
||||||
'write:drive',
|
|
||||||
'read:favorites',
|
|
||||||
'write:favorites',
|
|
||||||
'read:following',
|
|
||||||
'write:following',
|
|
||||||
'read:messaging',
|
|
||||||
'write:messaging',
|
|
||||||
'read:mutes',
|
|
||||||
'write:mutes',
|
|
||||||
'write:notes',
|
|
||||||
'read:notifications',
|
|
||||||
'write:notifications',
|
|
||||||
'read:reactions',
|
|
||||||
'write:reactions',
|
|
||||||
'write:votes',
|
|
||||||
'read:pages',
|
|
||||||
'write:pages',
|
|
||||||
'write:page-likes',
|
|
||||||
'read:page-likes',
|
|
||||||
'read:user-groups',
|
|
||||||
'write:user-groups',
|
|
||||||
'read:channels',
|
|
||||||
'write:channels',
|
|
||||||
'read:gallery',
|
|
||||||
'write:gallery',
|
|
||||||
'read:gallery-likes',
|
|
||||||
'write:gallery-likes',
|
|
||||||
];
|
|
||||||
// IF YOU ADD KINDS(PERMISSIONS), YOU MUST ADD TRANSLATIONS (under _permissions).
|
|
|
@ -110,7 +110,7 @@ export class ServerService implements OnApplicationShutdown {
|
||||||
fastify.register(this.activityPubServerService.createServer);
|
fastify.register(this.activityPubServerService.createServer);
|
||||||
fastify.register(this.nodeinfoServerService.createServer);
|
fastify.register(this.nodeinfoServerService.createServer);
|
||||||
fastify.register(this.wellKnownServerService.createServer);
|
fastify.register(this.wellKnownServerService.createServer);
|
||||||
fastify.register(this.oauth2ProviderService.createServer);
|
fastify.register(this.oauth2ProviderService.createServer, { prefix: '/oauth' });
|
||||||
|
|
||||||
fastify.get<{ Params: { path: string }; Querystring: { static?: any; badge?: any; }; }>('/emoji/:path(.*)', async (request, reply) => {
|
fastify.get<{ Params: { path: string }; Querystring: { static?: any; badge?: any; }; }>('/emoji/:path(.*)', async (request, reply) => {
|
||||||
const path = request.params.path;
|
const path = request.params.path;
|
||||||
|
|
|
@ -16,6 +16,7 @@ import * as Acct from '@/misc/acct.js';
|
||||||
import { UserEntityService } from '@/core/entities/UserEntityService.js';
|
import { UserEntityService } from '@/core/entities/UserEntityService.js';
|
||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
import { NodeinfoServerService } from './NodeinfoServerService.js';
|
import { NodeinfoServerService } from './NodeinfoServerService.js';
|
||||||
|
import { OAuth2ProviderService } from './oauth/OAuth2ProviderService.js';
|
||||||
import type { FindOptionsWhere } from 'typeorm';
|
import type { FindOptionsWhere } from 'typeorm';
|
||||||
import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
|
import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
|
||||||
|
|
||||||
|
@ -30,6 +31,7 @@ export class WellKnownServerService {
|
||||||
|
|
||||||
private nodeinfoServerService: NodeinfoServerService,
|
private nodeinfoServerService: NodeinfoServerService,
|
||||||
private userEntityService: UserEntityService,
|
private userEntityService: UserEntityService,
|
||||||
|
private oauth2ProviderService: OAuth2ProviderService,
|
||||||
) {
|
) {
|
||||||
//this.createServer = this.createServer.bind(this);
|
//this.createServer = this.createServer.bind(this);
|
||||||
}
|
}
|
||||||
|
@ -87,6 +89,10 @@ export class WellKnownServerService {
|
||||||
return { links: this.nodeinfoServerService.getLinks() };
|
return { links: this.nodeinfoServerService.getLinks() };
|
||||||
});
|
});
|
||||||
|
|
||||||
|
fastify.get('/.well-known/oauth-authorization-server', async () => {
|
||||||
|
return this.oauth2ProviderService.generateRFC8414();
|
||||||
|
});
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
fastify.get('/.well-known/change-password', async (request, reply) => {
|
fastify.get('/.well-known/change-password', async (request, reply) => {
|
||||||
});
|
});
|
||||||
|
|
|
@ -330,7 +330,8 @@ export class ApiCallService implements OnApplicationShutdown {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (token && ep.meta.kind && !token.permission.some(p => p === ep.meta.kind)) {
|
if (token && ((ep.meta.kind && !token.permission.some(p => p === ep.meta.kind))
|
||||||
|
|| (!ep.meta.kind && (ep.meta.requireCredential || ep.meta.requireModerator || ep.meta.requireAdmin)))) {
|
||||||
throw new ApiError({
|
throw new ApiError({
|
||||||
message: 'Your app does not have the necessary permissions to use this endpoint.',
|
message: 'Your app does not have the necessary permissions to use this endpoint.',
|
||||||
code: 'PERMISSION_DENIED',
|
code: 'PERMISSION_DENIED',
|
||||||
|
|
|
@ -71,6 +71,10 @@ export class StreamingApiServerService {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
[user, app] = await this.authenticateService.authenticate(token);
|
[user, app] = await this.authenticateService.authenticate(token);
|
||||||
|
|
||||||
|
if (app !== null && !app.permission.some(p => p === 'read:account')) {
|
||||||
|
throw new AuthenticationError('Your app does not have necessary permissions to use websocket API.');
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e instanceof AuthenticationError) {
|
if (e instanceof AuthenticationError) {
|
||||||
socket.write([
|
socket.write([
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { Schema } from '@/misc/json-schema.js';
|
import type { Schema } from '@/misc/json-schema.js';
|
||||||
|
import { permissions } from 'misskey-js';
|
||||||
import { RolePolicies } from '@/core/RoleService.js';
|
import { RolePolicies } from '@/core/RoleService.js';
|
||||||
|
|
||||||
import * as ep___admin_meta from './endpoints/admin/meta.js';
|
import * as ep___admin_meta from './endpoints/admin/meta.js';
|
||||||
|
@ -750,7 +751,7 @@ const eps = [
|
||||||
['sponsors', ep___sponsors],
|
['sponsors', ep___sponsors],
|
||||||
];
|
];
|
||||||
|
|
||||||
export interface IEndpointMeta {
|
interface IEndpointMetaBase {
|
||||||
readonly stability?: 'deprecated' | 'experimental' | 'stable';
|
readonly stability?: 'deprecated' | 'experimental' | 'stable';
|
||||||
|
|
||||||
readonly tags?: ReadonlyArray<string>;
|
readonly tags?: ReadonlyArray<string>;
|
||||||
|
@ -849,6 +850,23 @@ export interface IEndpointMeta {
|
||||||
readonly cacheSec?: number;
|
readonly cacheSec?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type IEndpointMeta = (Omit<IEndpointMetaBase, 'requireCrential' | 'requireModerator' | 'requireAdmin'> & {
|
||||||
|
requireCredential?: false,
|
||||||
|
requireAdmin?: false,
|
||||||
|
requireModerator?: false,
|
||||||
|
}) | (Omit<IEndpointMetaBase, 'secure'> & {
|
||||||
|
secure: true,
|
||||||
|
}) | (Omit<IEndpointMetaBase, 'requireCredential' | 'kind'> & {
|
||||||
|
requireCredential: true,
|
||||||
|
kind: (typeof permissions)[number],
|
||||||
|
}) | (Omit<IEndpointMetaBase, 'requireModerator' | 'kind'> & {
|
||||||
|
requireModerator: true,
|
||||||
|
kind: (typeof permissions)[number],
|
||||||
|
}) | (Omit<IEndpointMetaBase, 'requireAdmin' | 'kind'> & {
|
||||||
|
requireAdmin: true,
|
||||||
|
kind: (typeof permissions)[number],
|
||||||
|
})
|
||||||
|
|
||||||
export interface IEndpoint {
|
export interface IEndpoint {
|
||||||
name: string;
|
name: string;
|
||||||
meta: IEndpointMeta;
|
meta: IEndpointMeta;
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { AbuseUserReportEntityService } from '@/core/entities/AbuseUserReportEnt
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:abuse-user-reports',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -15,8 +15,6 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
|
@ -48,12 +46,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
private userEntityService: UserEntityService,
|
private userEntityService: UserEntityService,
|
||||||
private signupService: SignupService,
|
private signupService: SignupService,
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, _me) => {
|
super(meta, paramDef, async (ps, _me, token) => {
|
||||||
const me = _me ? await this.usersRepository.findOneByOrFail({ id: _me.id }) : null;
|
const me = _me ? await this.usersRepository.findOneByOrFail({ id: _me.id }) : null;
|
||||||
const noUsers = (await this.usersRepository.countBy({
|
const noUsers = (await this.usersRepository.countBy({
|
||||||
host: IsNull(),
|
host: IsNull(),
|
||||||
})) === 0;
|
})) === 0;
|
||||||
if (!noUsers && !me?.isRoot) throw new Error('access denied');
|
if ((!noUsers && !me?.isRoot) || token !== null) throw new Error('access denied');
|
||||||
|
|
||||||
const { account, secret } = await this.signupService.signup({
|
const { account, secret } = await this.signupService.signup({
|
||||||
username: ps.username,
|
username: ps.username,
|
||||||
|
|
|
@ -14,10 +14,9 @@ import { UserEntityService } from '@/core/entities/UserEntityService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'write:admin:account',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ApiError } from '@/server/api/error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'read:admin:account',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
userNotFound: {
|
userNotFound: {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:ad',
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
optional: false,
|
optional: false,
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:ad',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchAd: {
|
noSuchAd: {
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:ad',
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
optional: false,
|
optional: false,
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:ad',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchAd: {
|
noSuchAd: {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { AnnouncementService } from '@/core/AnnouncementService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:announcements',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:announcements',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchAnnouncement: {
|
noSuchAnnouncement: {
|
||||||
|
|
|
@ -14,10 +14,9 @@ import { IdService } from '@/core/IdService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:announcements',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:announcements',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchAnnouncement: {
|
noSuchAnnouncement: {
|
||||||
|
|
|
@ -10,6 +10,7 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:approve-user',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { AvatarDecorationService } from '@/core/AvatarDecorationService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageAvatarDecorations',
|
requireRolePolicy: 'canManageAvatarDecorations',
|
||||||
|
kind: 'write:admin:avatar-decorations',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageAvatarDecorations',
|
requireRolePolicy: 'canManageAvatarDecorations',
|
||||||
|
kind: 'write:admin:avatar-decorations',
|
||||||
errors: {
|
errors: {
|
||||||
},
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
|
@ -15,10 +15,9 @@ import { AvatarDecorationService } from '@/core/AvatarDecorationService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageAvatarDecorations',
|
requireRolePolicy: 'canManageAvatarDecorations',
|
||||||
|
kind: 'read:admin:avatar-decorations',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageAvatarDecorations',
|
requireRolePolicy: 'canManageAvatarDecorations',
|
||||||
|
kind: 'write:admin:avatar-decorations',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'write:admin:delete-account',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'write:admin:delete-all-files-of-a-user',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { QueueService } from '@/core/QueueService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:drive',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:drive',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.j
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:drive',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -14,10 +14,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:drive',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchFile: {
|
noSuchFile: {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -14,10 +14,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchFile: {
|
noSuchFile: {
|
||||||
|
|
|
@ -17,10 +17,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchEmoji: {
|
noSuchEmoji: {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchEmoji: {
|
noSuchEmoji: {
|
||||||
|
|
|
@ -8,7 +8,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
import { QueueService } from '@/core/QueueService.js';
|
import { QueueService } from '@/core/QueueService.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
kind: 'write:admin',
|
secure: true,
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
|
@ -15,10 +15,9 @@ import { sqlLikeEscape } from '@/misc/sql-like-escape.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'read:admin:emoji',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -15,10 +15,9 @@ import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'read:admin:emoji',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireRolePolicy: 'canManageCustomEmojis',
|
requireRolePolicy: 'canManageCustomEmojis',
|
||||||
|
kind: 'write:admin:emoji',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchEmoji: {
|
noSuchEmoji: {
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:federation',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:federation',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { QueueService } from '@/core/QueueService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:federation',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -14,10 +14,9 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:federation',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -11,8 +11,7 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'read:admin:index-stats',
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
res: {
|
res: {
|
||||||
|
|
|
@ -11,8 +11,7 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'read:admin:table-stats',
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { IdService } from '@/core/IdService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:user-ips',
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
optional: false,
|
optional: false,
|
||||||
|
@ -34,7 +33,7 @@ export const meta = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -16,10 +16,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:invite-codes',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
invalidDateTime: {
|
invalidDateTime: {
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:invite-codes',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { DEFAULT_POLICIES } from '@/core/RoleService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['meta'],
|
tags: ['meta'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'read:admin:meta',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
@ -400,6 +399,10 @@ export const meta = {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
optional: false, nullable: true,
|
optional: false, nullable: true,
|
||||||
},
|
},
|
||||||
|
shortName: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false, nullable: true,
|
||||||
|
},
|
||||||
objectStorageS3ForcePathStyle: {
|
objectStorageS3ForcePathStyle: {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
|
|
|
@ -8,6 +8,7 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:nsfw-user',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:promo',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchNote: {
|
noSuchNote: {
|
||||||
|
|
|
@ -11,10 +11,9 @@ import { QueueService } from '@/core/QueueService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:queue',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -11,10 +11,9 @@ import type { DeliverQueue } from '@/core/QueueModule.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:queue',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -11,10 +11,9 @@ import type { InboxQueue } from '@/core/QueueModule.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:queue',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -11,10 +11,9 @@ import { QueueService } from '@/core/QueueService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:queue',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import type { DbQueue, DeliverQueue, EndedPollNotificationQueue, InboxQueue, Obj
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:emoji',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:relays',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
invalidUrl: {
|
invalidUrl: {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { RelayService } from '@/core/RelayService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:relays',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { RelayService } from '@/core/RelayService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:relays',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -15,10 +15,9 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:reset-password',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
|
|
@ -15,10 +15,9 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:resolve-abuse-user-report',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { RoleService } from '@/core/RoleService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:roles',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchRole: {
|
noSuchRole: {
|
||||||
|
|
|
@ -11,10 +11,9 @@ import { RoleService } from '@/core/RoleService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'write:admin:roles',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { RoleService } from '@/core/RoleService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'write:admin:roles',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchRole: {
|
noSuchRole: {
|
||||||
|
|
|
@ -12,10 +12,9 @@ import { RoleEntityService } from '@/core/entities/RoleEntityService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:roles',
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { RoleEntityService } from '@/core/entities/RoleEntityService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:roles',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchRole: {
|
noSuchRole: {
|
||||||
|
|
|
@ -13,10 +13,9 @@ import { RoleService } from '@/core/RoleService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:roles',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchRole: {
|
noSuchRole: {
|
||||||
|
|
|
@ -11,10 +11,9 @@ import { MetaService } from '@/core/MetaService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'write:admin:roles',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -14,10 +14,9 @@ import { RoleService } from '@/core/RoleService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role'],
|
tags: ['admin', 'role'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'write:admin:roles',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchRole: {
|
noSuchRole: {
|
||||||
|
|
|
@ -16,10 +16,9 @@ import { ApiError } from '../../../error.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin', 'role', 'users'],
|
tags: ['admin', 'role', 'users'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'read:admin:roles',
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchRole: {
|
noSuchRole: {
|
||||||
|
|
|
@ -10,10 +10,9 @@ import { EmailService } from '@/core/EmailService.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
||||||
kind: 'write:admin',
|
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:send-email',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
|
@ -14,11 +14,10 @@ import { DI } from '@/di-symbols.js';
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:server-info',
|
||||||
|
|
||||||
tags: ['admin', 'meta'],
|
tags: ['admin', 'meta'],
|
||||||
|
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
|
|
|
@ -15,8 +15,7 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireAdmin: true,
|
requireAdmin: true,
|
||||||
|
kind: 'read:admin:show-moderation-log',
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -16,8 +16,7 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:show-user',
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
|
|
@ -16,8 +16,7 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'read:admin:show-users',
|
||||||
kind: 'read:admin',
|
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
|
|
|
@ -9,6 +9,7 @@ export const meta = {
|
||||||
|
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
requireModerator: true,
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:silence-user',
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue