Merge branch 'develop'
This commit is contained in:
commit
9fd0e90850
|
@ -1 +1 @@
|
||||||
v16.2.0
|
v16.6.2
|
||||||
|
|
24
CHANGELOG.md
24
CHANGELOG.md
|
@ -1,3 +1,25 @@
|
||||||
|
<!--
|
||||||
|
## 12.x.x (unreleased)
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
## 12.87.0 (2021/08/12)
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
- 絵文字オートコンプリートで一文字目は最近使った絵文字をサジェストするように
|
||||||
|
- 絵文字オートコンプリートのパフォーマンスを改善
|
||||||
|
- about-misskeyページにドキュメントへのリンクを追加
|
||||||
|
- Docker: Node.jsを16.6.2に
|
||||||
|
- 依存関係の更新
|
||||||
|
- 翻訳の更新
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
- Misskey更新時、テーマキャッシュの影響でスタイルがおかしくなる問題を修正
|
||||||
|
|
||||||
## 12.86.0 (2021/08/11)
|
## 12.86.0 (2021/08/11)
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
@ -9,4 +31,4 @@
|
||||||
|
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
- ハッシュタグ入力が空のときに#が付くのを修正
|
- ハッシュタグ入力が空のときに#が付くのを修正
|
||||||
- フォロー通知のEメール通知を修正
|
- フォローリクエストのEメール通知を修正
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM node:16.2.0-alpine3.13 AS base
|
FROM node:16.6.2-alpine3.13 AS base
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
|
|
|
@ -771,6 +771,7 @@ received: "Erhalten"
|
||||||
searchResult: "Suchergebnisse"
|
searchResult: "Suchergebnisse"
|
||||||
hashtags: "Hashtags"
|
hashtags: "Hashtags"
|
||||||
troubleshooting: "Problembehandlung"
|
troubleshooting: "Problembehandlung"
|
||||||
|
useBlurEffect: "Weichzeichnungseffekt in der Benutzeroberfläche verwenden"
|
||||||
_docs:
|
_docs:
|
||||||
continueReading: "Mehr lesen"
|
continueReading: "Mehr lesen"
|
||||||
features: "Funktionen"
|
features: "Funktionen"
|
||||||
|
|
|
@ -249,7 +249,7 @@ agreeTo: "I agree to {0}"
|
||||||
tos: "Terms of Service"
|
tos: "Terms of Service"
|
||||||
start: "Begin"
|
start: "Begin"
|
||||||
home: "Home"
|
home: "Home"
|
||||||
remoteUserCaution: "As this user is from a renote instance, the shown information may be incomplete."
|
remoteUserCaution: "As this user is from a remote instance, the shown information may be incomplete."
|
||||||
activity: "Activity"
|
activity: "Activity"
|
||||||
images: "Images"
|
images: "Images"
|
||||||
birthday: "Birthday"
|
birthday: "Birthday"
|
||||||
|
@ -771,6 +771,7 @@ received: "Received"
|
||||||
searchResult: "Search results"
|
searchResult: "Search results"
|
||||||
hashtags: "Hashtags"
|
hashtags: "Hashtags"
|
||||||
troubleshooting: "Troubleshooting"
|
troubleshooting: "Troubleshooting"
|
||||||
|
useBlurEffect: "Use blur effects in the UI"
|
||||||
_docs:
|
_docs:
|
||||||
continueReading: "Read more"
|
continueReading: "Read more"
|
||||||
features: "Features"
|
features: "Features"
|
||||||
|
|
|
@ -772,6 +772,7 @@ searchResult: "検索結果"
|
||||||
hashtags: "ハッシュタグ"
|
hashtags: "ハッシュタグ"
|
||||||
troubleshooting: "トラブルシューティング"
|
troubleshooting: "トラブルシューティング"
|
||||||
useBlurEffect: "UIにぼかし効果を使用"
|
useBlurEffect: "UIにぼかし効果を使用"
|
||||||
|
learnMore: "詳しく"
|
||||||
|
|
||||||
_docs:
|
_docs:
|
||||||
continueReading: "続きを読む"
|
continueReading: "続きを読む"
|
||||||
|
|
|
@ -771,12 +771,14 @@ received: "수신"
|
||||||
searchResult: "검색 결과"
|
searchResult: "검색 결과"
|
||||||
hashtags: "해시태그"
|
hashtags: "해시태그"
|
||||||
troubleshooting: "트러블 슈팅"
|
troubleshooting: "트러블 슈팅"
|
||||||
|
useBlurEffect: "UI에 흐림 효과 사용"
|
||||||
_docs:
|
_docs:
|
||||||
continueReading: "계속 읽기"
|
continueReading: "계속 읽기"
|
||||||
features: "기능"
|
features: "기능"
|
||||||
generalTopics: "일반 주제"
|
generalTopics: "일반 주제"
|
||||||
advancedTopics: "심화 주제"
|
advancedTopics: "심화 주제"
|
||||||
admin: "관리"
|
admin: "관리"
|
||||||
|
translateWarn: "이 문서는 번역되었기 때문에 원본과는 내용이 다를 수 있습니다."
|
||||||
_ad:
|
_ad:
|
||||||
back: "뒤로"
|
back: "뒤로"
|
||||||
reduceFrequencyOfThisAd: "이 광고의 표시 빈도 낮추기"
|
reduceFrequencyOfThisAd: "이 광고의 표시 빈도 낮추기"
|
||||||
|
|
|
@ -529,6 +529,7 @@ removeAllFollowing: "Удалить всех подписчиков"
|
||||||
removeAllFollowingDescription: "Отменить все подписки с домена {host}? Пожалуйста, применяйте это действие, если инстанс больше не существует."
|
removeAllFollowingDescription: "Отменить все подписки с домена {host}? Пожалуйста, применяйте это действие, если инстанс больше не существует."
|
||||||
userSuspended: "Эта учётная запись заморожена"
|
userSuspended: "Эта учётная запись заморожена"
|
||||||
userSilenced: "Этот пользователь был заглушен"
|
userSilenced: "Этот пользователь был заглушен"
|
||||||
|
menu: "Меню"
|
||||||
divider: "Линия-разделитель"
|
divider: "Линия-разделитель"
|
||||||
addItem: "Добавить элемент"
|
addItem: "Добавить элемент"
|
||||||
rooms: "Комната"
|
rooms: "Комната"
|
||||||
|
@ -761,15 +762,23 @@ middle: "Средне"
|
||||||
low: "Низкий"
|
low: "Низкий"
|
||||||
emailNotConfiguredWarning: "Не указан адрес электронной почты"
|
emailNotConfiguredWarning: "Не указан адрес электронной почты"
|
||||||
ratio: "Соотношение"
|
ratio: "Соотношение"
|
||||||
|
customCss: "Индивидуальный CSS"
|
||||||
|
customCssWarn: "Используйте эту настройку только если знаете, что делаете. Ошибки здесь чреваты тем, что сайт перестанет нормально работать у вас."
|
||||||
global: "Всеобщая"
|
global: "Всеобщая"
|
||||||
|
squareAvatars: "Квадратные аватарки"
|
||||||
sent: "Отправить"
|
sent: "Отправить"
|
||||||
|
received: "Получено"
|
||||||
|
searchResult: "Результаты поиска"
|
||||||
hashtags: "Хэштег"
|
hashtags: "Хэштег"
|
||||||
|
troubleshooting: "Разрешение проблем"
|
||||||
|
useBlurEffect: "Размытие в интерфейсе"
|
||||||
_docs:
|
_docs:
|
||||||
continueReading: "Читать подробнее"
|
continueReading: "Читать подробнее"
|
||||||
features: "Возможности"
|
features: "Возможности"
|
||||||
generalTopics: "Основные темы"
|
generalTopics: "Основные темы"
|
||||||
advancedTopics: "Дополнительные темы"
|
advancedTopics: "Дополнительные темы"
|
||||||
admin: "Управление"
|
admin: "Управление"
|
||||||
|
translateWarn: "Это перевод документа. Он может неточно отражать содержимое оригинала."
|
||||||
_ad:
|
_ad:
|
||||||
back: "Выход"
|
back: "Выход"
|
||||||
reduceFrequencyOfThisAd: "Реже показывать эту рекламу"
|
reduceFrequencyOfThisAd: "Реже показывать эту рекламу"
|
||||||
|
|
|
@ -771,6 +771,8 @@ received: "收取"
|
||||||
searchResult: "搜索结果"
|
searchResult: "搜索结果"
|
||||||
hashtags: "话题标签"
|
hashtags: "话题标签"
|
||||||
troubleshooting: "故障排除"
|
troubleshooting: "故障排除"
|
||||||
|
useBlurEffect: "在UI上使用模糊效果"
|
||||||
|
learnMore: "更多信息"
|
||||||
_docs:
|
_docs:
|
||||||
continueReading: "继续阅读"
|
continueReading: "继续阅读"
|
||||||
features: "特性"
|
features: "特性"
|
||||||
|
|
82
package.json
82
package.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <syuilotan@yahoo.co.jp>",
|
"author": "syuilo <syuilotan@yahoo.co.jp>",
|
||||||
"version": "12.86.0",
|
"version": "12.87.0",
|
||||||
"codename": "indigo",
|
"codename": "indigo",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
"@sinonjs/fake-timers": "7.1.2",
|
"@sinonjs/fake-timers": "7.1.2",
|
||||||
"@syuilo/aiscript": "0.11.1",
|
"@syuilo/aiscript": "0.11.1",
|
||||||
"@types/bcryptjs": "2.4.2",
|
"@types/bcryptjs": "2.4.2",
|
||||||
"@types/bull": "3.15.2",
|
"@types/bull": "3.15.3",
|
||||||
"@types/cbor": "6.0.0",
|
"@types/cbor": "6.0.0",
|
||||||
"@types/dateformat": "3.0.1",
|
"@types/dateformat": "3.0.1",
|
||||||
"@types/escape-regexp": "0.0.0",
|
"@types/escape-regexp": "0.0.0",
|
||||||
|
@ -57,8 +57,8 @@
|
||||||
"@types/jsonld": "1.5.6",
|
"@types/jsonld": "1.5.6",
|
||||||
"@types/katex": "0.11.1",
|
"@types/katex": "0.11.1",
|
||||||
"@types/koa": "2.13.4",
|
"@types/koa": "2.13.4",
|
||||||
"@types/koa-bodyparser": "4.3.2",
|
"@types/koa-bodyparser": "4.3.3",
|
||||||
"@types/koa-cors": "0.0.1",
|
"@types/koa-cors": "0.0.2",
|
||||||
"@types/koa-favicon": "2.0.21",
|
"@types/koa-favicon": "2.0.21",
|
||||||
"@types/koa-logger": "3.1.1",
|
"@types/koa-logger": "3.1.1",
|
||||||
"@types/koa-mount": "4.0.0",
|
"@types/koa-mount": "4.0.0",
|
||||||
|
@ -68,10 +68,10 @@
|
||||||
"@types/koa__multer": "2.0.3",
|
"@types/koa__multer": "2.0.3",
|
||||||
"@types/koa__router": "8.0.7",
|
"@types/koa__router": "8.0.7",
|
||||||
"@types/markdown-it": "12.0.3",
|
"@types/markdown-it": "12.0.3",
|
||||||
"@types/matter-js": "0.17.3",
|
"@types/matter-js": "0.17.5",
|
||||||
"@types/mocha": "8.2.3",
|
"@types/mocha": "8.2.3",
|
||||||
"@types/node": "16.3.3",
|
"@types/node": "16.6.0",
|
||||||
"@types/node-fetch": "2.5.11",
|
"@types/node-fetch": "2.5.12",
|
||||||
"@types/nodemailer": "6.4.4",
|
"@types/nodemailer": "6.4.4",
|
||||||
"@types/nprogress": "0.2.0",
|
"@types/nprogress": "0.2.0",
|
||||||
"@types/oauth": "0.9.1",
|
"@types/oauth": "0.9.1",
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
"@types/request-stats": "3.0.0",
|
"@types/request-stats": "3.0.0",
|
||||||
"@types/rimraf": "3.0.1",
|
"@types/rimraf": "3.0.1",
|
||||||
"@types/seedrandom": "2.4.28",
|
"@types/seedrandom": "2.4.28",
|
||||||
"@types/sharp": "0.28.4",
|
"@types/sharp": "0.28.5",
|
||||||
"@types/sinonjs__fake-timers": "6.0.3",
|
"@types/sinonjs__fake-timers": "6.0.3",
|
||||||
"@types/speakeasy": "2.0.6",
|
"@types/speakeasy": "2.0.6",
|
||||||
"@types/throttle-debounce": "2.1.0",
|
"@types/throttle-debounce": "2.1.0",
|
||||||
|
@ -98,40 +98,40 @@
|
||||||
"@types/web-push": "3.3.2",
|
"@types/web-push": "3.3.2",
|
||||||
"@types/webpack": "5.28.0",
|
"@types/webpack": "5.28.0",
|
||||||
"@types/webpack-stream": "3.2.12",
|
"@types/webpack-stream": "3.2.12",
|
||||||
"@types/websocket": "1.0.3",
|
"@types/websocket": "1.0.4",
|
||||||
"@types/ws": "7.4.6",
|
"@types/ws": "7.4.7",
|
||||||
"@typescript-eslint/parser": "4.28.3",
|
"@typescript-eslint/parser": "4.29.1",
|
||||||
"@vue/compiler-sfc": "3.2.1",
|
"@vue/compiler-sfc": "3.2.2",
|
||||||
"abort-controller": "3.0.0",
|
"abort-controller": "3.0.0",
|
||||||
"apexcharts": "3.27.2",
|
"apexcharts": "3.27.3",
|
||||||
"autobind-decorator": "2.4.0",
|
"autobind-decorator": "2.4.0",
|
||||||
"autosize": "4.0.4",
|
"autosize": "4.0.4",
|
||||||
"autwh": "0.1.0",
|
"autwh": "0.1.0",
|
||||||
"aws-sdk": "2.948.0",
|
"aws-sdk": "2.966.0",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
"blurhash": "1.1.3",
|
"blurhash": "1.1.3",
|
||||||
"broadcast-channel": "3.7.0",
|
"broadcast-channel": "3.7.0",
|
||||||
"bull": "3.26.0",
|
"bull": "3.26.0",
|
||||||
"cafy": "15.2.1",
|
"cafy": "15.2.1",
|
||||||
"cbor": "7.0.6",
|
"cbor": "8.0.0",
|
||||||
"chalk": "4.1.1",
|
"chalk": "4.1.2",
|
||||||
"chart.js": "2.9.4",
|
"chart.js": "2.9.4",
|
||||||
"cli-highlight": "2.1.11",
|
"cli-highlight": "2.1.11",
|
||||||
"commander": "7.2.0",
|
"commander": "7.2.0",
|
||||||
"concurrently": "6.2.0",
|
"concurrently": "6.2.0",
|
||||||
"content-disposition": "0.5.3",
|
"content-disposition": "0.5.3",
|
||||||
"core-js": "3.15.2",
|
"core-js": "3.16.1",
|
||||||
"crc-32": "1.2.0",
|
"crc-32": "1.2.0",
|
||||||
"css-loader": "6.0.0",
|
"css-loader": "6.2.0",
|
||||||
"cssnano": "5.0.6",
|
"cssnano": "5.0.7",
|
||||||
"dateformat": "4.5.1",
|
"dateformat": "4.5.1",
|
||||||
"diskusage": "1.1.3",
|
"diskusage": "1.1.3",
|
||||||
"escape-regexp": "0.0.1",
|
"escape-regexp": "0.0.1",
|
||||||
"eslint": "7.30.0",
|
"eslint": "7.32.0",
|
||||||
"eslint-plugin-vue": "7.13.0",
|
"eslint-plugin-vue": "7.16.0",
|
||||||
"eventemitter3": "4.0.7",
|
"eventemitter3": "4.0.7",
|
||||||
"feed": "4.2.2",
|
"feed": "4.2.2",
|
||||||
"file-type": "16.5.1",
|
"file-type": "16.5.3",
|
||||||
"fluent-ffmpeg": "2.1.2",
|
"fluent-ffmpeg": "2.1.2",
|
||||||
"glob": "7.1.7",
|
"glob": "7.1.7",
|
||||||
"got": "11.8.2",
|
"got": "11.8.2",
|
||||||
|
@ -146,17 +146,17 @@
|
||||||
"http-proxy-agent": "4.0.1",
|
"http-proxy-agent": "4.0.1",
|
||||||
"http-signature": "1.3.5",
|
"http-signature": "1.3.5",
|
||||||
"https-proxy-agent": "5.0.0",
|
"https-proxy-agent": "5.0.0",
|
||||||
"idb-keyval": "5.0.6",
|
"idb-keyval": "5.1.3",
|
||||||
"insert-text-at-cursor": "0.3.0",
|
"insert-text-at-cursor": "0.3.0",
|
||||||
"is-root": "2.1.0",
|
"is-root": "2.1.0",
|
||||||
"is-svg": "4.3.1",
|
"is-svg": "4.3.1",
|
||||||
"js-yaml": "4.1.0",
|
"js-yaml": "4.1.0",
|
||||||
"jsdom": "16.6.0",
|
"jsdom": "16.7.0",
|
||||||
"json5": "2.2.0",
|
"json5": "2.2.0",
|
||||||
"json5-loader": "4.0.1",
|
"json5-loader": "4.0.1",
|
||||||
"jsonld": "5.2.0",
|
"jsonld": "5.2.0",
|
||||||
"jsrsasign": "8.0.20",
|
"jsrsasign": "8.0.20",
|
||||||
"katex": "0.13.11",
|
"katex": "0.13.13",
|
||||||
"koa": "2.13.1",
|
"koa": "2.13.1",
|
||||||
"koa-bodyparser": "4.3.0",
|
"koa-bodyparser": "4.3.0",
|
||||||
"koa-favicon": "2.1.0",
|
"koa-favicon": "2.1.0",
|
||||||
|
@ -168,7 +168,7 @@
|
||||||
"koa-views": "7.0.1",
|
"koa-views": "7.0.1",
|
||||||
"langmap": "0.0.16",
|
"langmap": "0.0.16",
|
||||||
"lookup-dns-cache": "2.1.0",
|
"lookup-dns-cache": "2.1.0",
|
||||||
"markdown-it": "12.1.0",
|
"markdown-it": "12.2.0",
|
||||||
"markdown-it-anchor": "7.1.0",
|
"markdown-it-anchor": "7.1.0",
|
||||||
"matter-js": "0.17.1",
|
"matter-js": "0.17.1",
|
||||||
"mfm-js": "0.19.0",
|
"mfm-js": "0.19.0",
|
||||||
|
@ -176,7 +176,7 @@
|
||||||
"mocha": "8.4.0",
|
"mocha": "8.4.0",
|
||||||
"moji": "0.5.1",
|
"moji": "0.5.1",
|
||||||
"ms": "2.1.3",
|
"ms": "2.1.3",
|
||||||
"multer": "1.4.2",
|
"multer": "1.4.3",
|
||||||
"nested-property": "4.0.0",
|
"nested-property": "4.0.0",
|
||||||
"node-fetch": "2.6.1",
|
"node-fetch": "2.6.1",
|
||||||
"nodemailer": "6.6.3",
|
"nodemailer": "6.6.3",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"parse5": "6.0.1",
|
"parse5": "6.0.1",
|
||||||
"pg": "8.6.0",
|
"pg": "8.6.0",
|
||||||
"portscanner": "2.2.0",
|
"portscanner": "2.2.0",
|
||||||
"postcss": "8.3.5",
|
"postcss": "8.3.6",
|
||||||
"postcss-loader": "6.1.1",
|
"postcss-loader": "6.1.1",
|
||||||
"prismjs": "1.24.1",
|
"prismjs": "1.24.1",
|
||||||
"probe-image-size": "7.2.1",
|
"probe-image-size": "7.2.1",
|
||||||
|
@ -202,32 +202,32 @@
|
||||||
"redis": "3.1.2",
|
"redis": "3.1.2",
|
||||||
"redis-lock": "0.1.4",
|
"redis-lock": "0.1.4",
|
||||||
"reflect-metadata": "0.1.13",
|
"reflect-metadata": "0.1.13",
|
||||||
"regenerator-runtime": "0.13.7",
|
"regenerator-runtime": "0.13.9",
|
||||||
"rename": "1.0.4",
|
"rename": "1.0.4",
|
||||||
"request-stats": "3.0.0",
|
"request-stats": "3.0.0",
|
||||||
"require-all": "3.0.0",
|
"require-all": "3.0.0",
|
||||||
"rimraf": "3.0.2",
|
"rimraf": "3.0.2",
|
||||||
"rndstr": "1.0.0",
|
"rndstr": "1.0.0",
|
||||||
"s-age": "1.1.2",
|
"s-age": "1.1.2",
|
||||||
"sass": "1.35.2",
|
"sass": "1.37.5",
|
||||||
"sass-loader": "12.1.0",
|
"sass-loader": "12.1.0",
|
||||||
"seedrandom": "3.0.5",
|
"seedrandom": "3.0.5",
|
||||||
"sharp": "0.28.3",
|
"sharp": "0.28.3",
|
||||||
"speakeasy": "2.0.0",
|
"speakeasy": "2.0.0",
|
||||||
"stringz": "2.1.0",
|
"stringz": "2.1.0",
|
||||||
"style-loader": "3.1.0",
|
"style-loader": "3.2.1",
|
||||||
"summaly": "2.4.0",
|
"summaly": "2.4.1",
|
||||||
"syslog-pro": "1.0.0",
|
"syslog-pro": "1.0.0",
|
||||||
"systeminformation": "5.7.7",
|
"systeminformation": "5.8.0",
|
||||||
"syuilo-password-strength": "0.0.1",
|
"syuilo-password-strength": "0.0.1",
|
||||||
"textarea-caret": "3.1.0",
|
"textarea-caret": "3.1.0",
|
||||||
"three": "0.117.1",
|
"three": "0.117.1",
|
||||||
"throttle-debounce": "3.0.1",
|
"throttle-debounce": "3.0.1",
|
||||||
"tinycolor2": "1.4.2",
|
"tinycolor2": "1.4.2",
|
||||||
"tmp": "0.2.1",
|
"tmp": "0.2.1",
|
||||||
"ts-loader": "9.2.3",
|
"ts-loader": "9.2.5",
|
||||||
"ts-node": "10.1.0",
|
"ts-node": "10.2.0",
|
||||||
"tsc-alias": "1.3.7",
|
"tsc-alias": "1.3.8",
|
||||||
"tsconfig-paths": "3.10.1",
|
"tsconfig-paths": "3.10.1",
|
||||||
"tslint": "6.1.3",
|
"tslint": "6.1.3",
|
||||||
"tslint-sonarts": "1.9.0",
|
"tslint-sonarts": "1.9.0",
|
||||||
|
@ -237,21 +237,21 @@
|
||||||
"ulid": "2.3.0",
|
"ulid": "2.3.0",
|
||||||
"uuid": "8.3.2",
|
"uuid": "8.3.2",
|
||||||
"v-debounce": "0.1.2",
|
"v-debounce": "0.1.2",
|
||||||
"vanilla-tilt": "1.7.0",
|
"vanilla-tilt": "1.7.1",
|
||||||
"vue": "3.2.1",
|
"vue": "3.2.2",
|
||||||
"vue-color": "2.8.1",
|
"vue-color": "2.8.1",
|
||||||
"vue-json-pretty": "1.8.1",
|
"vue-json-pretty": "1.8.1",
|
||||||
"vue-loader": "16.3.1",
|
"vue-loader": "16.5.0",
|
||||||
"vue-prism-editor": "2.0.0-alpha.2",
|
"vue-prism-editor": "2.0.0-alpha.2",
|
||||||
"vue-router": "4.0.5",
|
"vue-router": "4.0.5",
|
||||||
"vue-style-loader": "4.1.3",
|
"vue-style-loader": "4.1.3",
|
||||||
"vue-svg-loader": "0.17.0-beta.2",
|
"vue-svg-loader": "0.17.0-beta.2",
|
||||||
"vuedraggable": "4.0.1",
|
"vuedraggable": "4.0.1",
|
||||||
"web-push": "3.4.5",
|
"web-push": "3.4.5",
|
||||||
"webpack": "5.45.1",
|
"webpack": "5.50.0",
|
||||||
"webpack-cli": "4.7.2",
|
"webpack-cli": "4.7.2",
|
||||||
"websocket": "1.0.34",
|
"websocket": "1.0.34",
|
||||||
"ws": "7.5.3",
|
"ws": "8.1.0",
|
||||||
"xev": "2.0.1"
|
"xev": "2.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -35,6 +35,7 @@ import { twemojiSvgBase } from '@/misc/twemoji-base';
|
||||||
import { getStaticImageUrl } from '@client/scripts/get-static-image-url';
|
import { getStaticImageUrl } from '@client/scripts/get-static-image-url';
|
||||||
import { acct } from '@client/filters/user';
|
import { acct } from '@client/filters/user';
|
||||||
import * as os from '@client/os';
|
import * as os from '@client/os';
|
||||||
|
import { instance } from '@client/instance';
|
||||||
|
|
||||||
type EmojiDef = {
|
type EmojiDef = {
|
||||||
emoji: string;
|
emoji: string;
|
||||||
|
@ -75,6 +76,36 @@ for (const x of lib) {
|
||||||
|
|
||||||
emjdb.sort((a, b) => a.name.length - b.name.length);
|
emjdb.sort((a, b) => a.name.length - b.name.length);
|
||||||
|
|
||||||
|
//#region Construct Emoji DB
|
||||||
|
const customEmojis = instance.emojis;
|
||||||
|
const emojiDefinitions: EmojiDef[] = [];
|
||||||
|
|
||||||
|
for (const x of customEmojis) {
|
||||||
|
emojiDefinitions.push({
|
||||||
|
name: x.name,
|
||||||
|
emoji: `:${x.name}:`,
|
||||||
|
url: x.url,
|
||||||
|
isCustomEmoji: true
|
||||||
|
});
|
||||||
|
|
||||||
|
if (x.aliases) {
|
||||||
|
for (const alias of x.aliases) {
|
||||||
|
emojiDefinitions.push({
|
||||||
|
name: alias,
|
||||||
|
aliasOf: x.name,
|
||||||
|
emoji: `:${x.name}:`,
|
||||||
|
url: x.url,
|
||||||
|
isCustomEmoji: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
emojiDefinitions.sort((a, b) => a.name.length - b.name.length);
|
||||||
|
|
||||||
|
const emojiDb = markRaw(emojiDefinitions.concat(emjdb));
|
||||||
|
//#endregion
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
props: {
|
props: {
|
||||||
type: {
|
type: {
|
||||||
|
@ -124,7 +155,6 @@ export default defineComponent({
|
||||||
emojis: [],
|
emojis: [],
|
||||||
items: [],
|
items: [],
|
||||||
select: -1,
|
select: -1,
|
||||||
emojiDb: [] as EmojiDef[]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -144,36 +174,6 @@ export default defineComponent({
|
||||||
mounted() {
|
mounted() {
|
||||||
this.setPosition();
|
this.setPosition();
|
||||||
|
|
||||||
//#region Construct Emoji DB
|
|
||||||
const customEmojis = this.$instance.emojis;
|
|
||||||
const emojiDefinitions: EmojiDef[] = [];
|
|
||||||
|
|
||||||
for (const x of customEmojis) {
|
|
||||||
emojiDefinitions.push({
|
|
||||||
name: x.name,
|
|
||||||
emoji: `:${x.name}:`,
|
|
||||||
url: x.url,
|
|
||||||
isCustomEmoji: true
|
|
||||||
});
|
|
||||||
|
|
||||||
if (x.aliases) {
|
|
||||||
for (const alias of x.aliases) {
|
|
||||||
emojiDefinitions.push({
|
|
||||||
name: alias,
|
|
||||||
aliasOf: x.name,
|
|
||||||
emoji: `:${x.name}:`,
|
|
||||||
url: x.url,
|
|
||||||
isCustomEmoji: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
emojiDefinitions.sort((a, b) => a.name.length - b.name.length);
|
|
||||||
|
|
||||||
this.emojiDb = markRaw(emojiDefinitions.concat(emjdb));
|
|
||||||
//#endregion
|
|
||||||
|
|
||||||
this.textarea.addEventListener('keydown', this.onKeydown);
|
this.textarea.addEventListener('keydown', this.onKeydown);
|
||||||
|
|
||||||
for (const el of Array.from(document.querySelectorAll('body *'))) {
|
for (const el of Array.from(document.querySelectorAll('body *'))) {
|
||||||
|
@ -203,6 +203,13 @@ export default defineComponent({
|
||||||
complete(type, value) {
|
complete(type, value) {
|
||||||
this.$emit('done', { type, value });
|
this.$emit('done', { type, value });
|
||||||
this.$emit('closed');
|
this.$emit('closed');
|
||||||
|
|
||||||
|
if (type === 'emoji') {
|
||||||
|
let recents = this.$store.state.recentlyUsedEmojis;
|
||||||
|
recents = recents.filter((e: any) => e !== value);
|
||||||
|
recents.unshift(value);
|
||||||
|
this.$store.set('recentlyUsedEmojis', recents.splice(0, 32));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setPosition() {
|
setPosition() {
|
||||||
|
@ -281,29 +288,26 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
} else if (this.type == 'emoji') {
|
} else if (this.type == 'emoji') {
|
||||||
if (this.q == null || this.q == '') {
|
if (this.q == null || this.q == '') {
|
||||||
this.emojis = this.emojiDb.filter(x => x.isCustomEmoji && !x.aliasOf).sort((a, b) => {
|
// 最近使った絵文字をサジェスト
|
||||||
var textA = a.name.toUpperCase();
|
this.emojis = this.$store.state.recentlyUsedEmojis.map(emoji => emojiDb.find(e => e.emoji == emoji)).filter(x => x != null);
|
||||||
var textB = b.name.toUpperCase();
|
|
||||||
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const matched = [];
|
const matched = [];
|
||||||
const max = 30;
|
const max = 30;
|
||||||
|
|
||||||
this.emojiDb.some(x => {
|
emojiDb.some(x => {
|
||||||
if (x.name.startsWith(this.q) && !x.aliasOf && !matched.some(y => y.emoji == x.emoji)) matched.push(x);
|
if (x.name.startsWith(this.q) && !x.aliasOf && !matched.some(y => y.emoji == x.emoji)) matched.push(x);
|
||||||
return matched.length == max;
|
return matched.length == max;
|
||||||
});
|
});
|
||||||
if (matched.length < max) {
|
if (matched.length < max) {
|
||||||
this.emojiDb.some(x => {
|
emojiDb.some(x => {
|
||||||
if (x.name.startsWith(this.q) && !matched.some(y => y.emoji == x.emoji)) matched.push(x);
|
if (x.name.startsWith(this.q) && !matched.some(y => y.emoji == x.emoji)) matched.push(x);
|
||||||
return matched.length == max;
|
return matched.length == max;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (matched.length < max) {
|
if (matched.length < max) {
|
||||||
this.emojiDb.some(x => {
|
emojiDb.some(x => {
|
||||||
if (x.name.includes(this.q) && !matched.some(y => y.emoji == x.emoji)) matched.push(x);
|
if (x.name.includes(this.q) && !matched.some(y => y.emoji == x.emoji)) matched.push(x);
|
||||||
return matched.length == max;
|
return matched.length == max;
|
||||||
});
|
});
|
||||||
|
|
|
@ -16,7 +16,7 @@ import { router } from '@client/router';
|
||||||
import { applyTheme } from '@client/scripts/theme';
|
import { applyTheme } from '@client/scripts/theme';
|
||||||
import { isDeviceDarkmode } from '@client/scripts/is-device-darkmode';
|
import { isDeviceDarkmode } from '@client/scripts/is-device-darkmode';
|
||||||
import { i18n } from '@client/i18n';
|
import { i18n } from '@client/i18n';
|
||||||
import { stream, dialog, post } from '@client/os';
|
import { stream, dialog, post, popup } from '@client/os';
|
||||||
import * as sound from '@client/scripts/sound';
|
import * as sound from '@client/scripts/sound';
|
||||||
import { $i, refreshAccount, login, updateAccount, signout } from '@client/account';
|
import { $i, refreshAccount, login, updateAccount, signout } from '@client/account';
|
||||||
import { defaultStore, ColdDeviceStorage } from '@client/store';
|
import { defaultStore, ColdDeviceStorage } from '@client/store';
|
||||||
|
@ -198,6 +198,19 @@ if (splash) {
|
||||||
splash.style.pointerEvents = 'none';
|
splash.style.pointerEvents = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// クライアントが更新されたか?
|
||||||
|
const lastVersion = localStorage.getItem('lastVersion');
|
||||||
|
if (lastVersion !== version) {
|
||||||
|
localStorage.setItem('lastVersion', version);
|
||||||
|
|
||||||
|
// テーマリビルドするため
|
||||||
|
localStorage.removeItem('theme');
|
||||||
|
|
||||||
|
// TODO: バージョンが新しくなった時だけダイアログ出す
|
||||||
|
//popup();
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: この処理は必ず↑のクライアント更新時処理より後に来ること(テーマ再構築のため)
|
||||||
watch(defaultStore.reactiveState.darkMode, (darkMode) => {
|
watch(defaultStore.reactiveState.darkMode, (darkMode) => {
|
||||||
applyTheme(darkMode ? ColdDeviceStorage.get('darkTheme') : ColdDeviceStorage.get('lightTheme'));
|
applyTheme(darkMode ? ColdDeviceStorage.get('darkTheme') : ColdDeviceStorage.get('lightTheme'));
|
||||||
}, { immediate: localStorage.theme == null });
|
}, { immediate: localStorage.theme == null });
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
<div id="debug"></div>
|
<div id="debug"></div>
|
||||||
<section class="_formItem about">
|
<section class="_formItem about">
|
||||||
<div class="_formPanel panel" :class="{ playing: easterEggEngine != null }" ref="about">
|
<div class="_formPanel panel" :class="{ playing: easterEggEngine != null }" ref="about">
|
||||||
<img src="/static-assets/client/about-icon.png" alt="" class="icon" ref="icon" @load="iconLoaded" draggable="false"/>
|
<img src="/static-assets/client/about-icon.png" alt="" class="icon" @load="iconLoaded" draggable="false" @click="gravity"/>
|
||||||
<div class="misskey">Misskey</div>
|
<div class="misskey">Misskey</div>
|
||||||
<div class="version">v{{ version }}</div>
|
<div class="version">v{{ version }}</div>
|
||||||
<span class="emoji" v-for="emoji in easterEggEmojis" :key="emoji.id" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"><MkEmoji class="emoji" :emoji="emoji.emoji" :custom-emojis="$instance.emojis" :is-reaction="false" :normal="true" :no-style="true"/></span>
|
<span class="emoji" v-for="emoji in easterEggEmojis" :key="emoji.id" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"><MkEmoji class="emoji" :emoji="emoji.emoji" :custom-emojis="$instance.emojis" :is-reaction="false" :normal="true" :no-style="true"/></span>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section class="_formItem" style="text-align: center; padding: 0 16px;" @click="gravity">
|
<section class="_formItem" style="text-align: center; padding: 0 16px;">
|
||||||
{{ $ts._aboutMisskey.about }}
|
{{ $ts._aboutMisskey.about }}<br><MkA class="_link" to="/docs/general/misskey">{{ $ts.learnMore }}</MkA>
|
||||||
</section>
|
</section>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<FormLink to="https://github.com/misskey-dev/misskey" external>
|
<FormLink to="https://github.com/misskey-dev/misskey" external>
|
||||||
|
@ -54,7 +54,6 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
import VanillaTilt from 'vanilla-tilt';
|
|
||||||
import { version } from '@client/config';
|
import { version } from '@client/config';
|
||||||
import FormLink from '@client/components/form/link.vue';
|
import FormLink from '@client/components/form/link.vue';
|
||||||
import FormBase from '@client/components/form/base.vue';
|
import FormBase from '@client/components/form/base.vue';
|
||||||
|
@ -62,7 +61,6 @@ import FormGroup from '@client/components/form/group.vue';
|
||||||
import FormKeyValueView from '@client/components/form/key-value-view.vue';
|
import FormKeyValueView from '@client/components/form/key-value-view.vue';
|
||||||
import MkLink from '@client/components/link.vue';
|
import MkLink from '@client/components/link.vue';
|
||||||
import { physics } from '@client/scripts/physics.ts';
|
import { physics } from '@client/scripts/physics.ts';
|
||||||
import * as os from '@client/os';
|
|
||||||
import * as symbols from '@client/symbols';
|
import * as symbols from '@client/symbols';
|
||||||
|
|
||||||
const patrons = [
|
const patrons = [
|
||||||
|
@ -145,15 +143,6 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
|
||||||
VanillaTilt.init(this.$refs.icon, {
|
|
||||||
max: 30,
|
|
||||||
perspective: 500,
|
|
||||||
scale: 1.125,
|
|
||||||
speed: 1000,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeUnmount() {
|
beforeUnmount() {
|
||||||
if (this.easterEggEngine) {
|
if (this.easterEggEngine) {
|
||||||
this.easterEggEngine.stop();
|
this.easterEggEngine.stop();
|
||||||
|
@ -181,7 +170,6 @@ export default defineComponent({
|
||||||
gravity() {
|
gravity() {
|
||||||
if (!this.easterEggReady) return;
|
if (!this.easterEggReady) return;
|
||||||
this.easterEggReady = false;
|
this.easterEggReady = false;
|
||||||
this.$refs.icon.vanillaTilt.destroy();
|
|
||||||
this.easterEggEngine = physics(this.$refs.about);
|
this.easterEggEngine = physics(this.$refs.about);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,4 +51,4 @@ If you enable this option, your note won't be federated to remote instances.
|
||||||
By pinning a note to your profile it will be constantly displayed on your profile page. To pin a note, open the note menu and press "Pin to profile". It's also possible to pin multiple notes to your profile.
|
By pinning a note to your profile it will be constantly displayed on your profile page. To pin a note, open the note menu and press "Pin to profile". It's also possible to pin multiple notes to your profile.
|
||||||
|
|
||||||
## Watch
|
## Watch
|
||||||
ノートをウォッチすると、自分以外のノートへのリアクションや返信などの通知を受け取ることができます。 ノートのメニューを開き、「ウォッチ」を選択してウォッチできます。
|
You can get notifications for replies, reactions etc. for a note that is not yours by watching it. To watch a note, select "Watch" from the respective note's menu.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# A collection of links
|
# A collection of links
|
||||||
|
|
||||||
## Websites
|
## Websites
|
||||||
|
- [Official Discord](https://discord.gg/Wp8gVStHW3) - The official Discord server for Misskey
|
||||||
- [Misskey Forum](https://forum.misskey.io/) - A forum used for questions surrounding Misskey
|
- [Misskey Forum](https://forum.misskey.io/) - A forum used for questions surrounding Misskey
|
||||||
- [Misskey Forum](https://forum.misskey.io/) - Misskeyに関する話題を扱うフォーラム
|
|
||||||
|
|
||||||
## Accounts
|
## Accounts
|
||||||
- [@repo@misskey.io](https://misskey.io/@repo) - A bot that publishes posts about updates to the Misskey repository
|
- [@repo@misskey.io](https://misskey.io/@repo) - A bot that publishes posts about updates to the Misskey repository
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# トラブルシューティング
|
# Разрешение проблем
|
||||||
<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
|
<div class="info">ℹ️ <a href="./faq">よくある質問</a>も合わせてお役立てください。</div>
|
||||||
|
|
||||||
問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
|
問題が発生したときは、まずこちらをご確認ください。 該当する項目が無い、もしくは手順を試しても効果がない場合は、サーバーの管理者に連絡するか[不具合を報告](./report-issue)してください。
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# 禁用 LTL/STL/GTL
|
# 禁用 LTL/STL/GTL
|
||||||
Misskey 允许您禁用 LTL/STL/GTL。如果需要启用/禁用,请在实例控制面板中进行设置。
|
Misskey 允许您禁用 LTL/STL/GTL。如果需要启用/禁用,请在实例控制面板中进行设置。
|
||||||
|
|
||||||
LTLやSTLは、そのインスタンス全員の投稿が見れるため、新規のユーザーにとってはユーザーを探す必要がなくなり、興味のあるユーザーを見つけやすいという利点があります。 しかし同時に、フォロー機能が活用されなくなったり、不適切な投稿が目につきやすくなったり、チャットのようになることで内輪感が生じて逆に新規ユーザーが参加しにくくなるといったデメリットも持ち合わせています。 サーバーによってメリット/デメリットどちらが優勢かは異なるので、オプションとして無効にできるようになっています。 もしデメリットの方が上回っていると感じたら、それらのタイムラインを無効化することも検討してください。
|
LTL 和 STL 的优点是新用户不必寻找用户,因为他们可以查看来自所有实例的帖子,从而更容易找到感兴趣的用户。 但同时它也存在着诸多缺点,例如无法使用关注,容易看到不适宜的帖子,感觉像小圈子内部对话一样而使新用户难以参与等等。 不同的服务器会有不同的优缺点,因此可以选择禁用它们。 如果您认为弊大于利,请考虑禁用这些时间线。
|
||||||
|
|
||||||
<div class="warn">⚠️ 無効化を行うと、ユーザーが困惑し、短期的に見て利用者が減る可能性があります。そのため、無効化の際は影響を慎重に検討し、事前に説明してフォローを整える期間を一定程度設けることを推奨します。</div>
|
<div class="warn">⚠️ 禁用后可能会使用户感到困惑,并导致短期内的用户数量减少。因此,建议在禁用时慎重考虑影响。建议事先发布声明并留出一定时间作为过渡。</div>
|
||||||
|
|
||||||
なお、管理者/モデレーターは、これらのタイムラインの無効化状態は適用されず、引き続き利用することが可能です。
|
请注意,这些时间线的禁用状态不适用于管理员/版主,这些用户可以继续使用。
|
||||||
|
|
|
@ -1,58 +1,58 @@
|
||||||
# Misskey API
|
# Misskey API
|
||||||
|
|
||||||
MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
|
您可以使用Misskey API来开发Misskey客户端、与Misskey链接的Web服务、Bot等应用(以下称为“应用程序”)。 另外还有一个流式API,因此还可以用来创建实时性的应用程序。
|
||||||
|
|
||||||
APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
|
开始使用API前,您首先需要获取访问令牌。 本文档将向您介绍获取访问令牌所需的步骤,以及API的基本使用方法。
|
||||||
|
|
||||||
## アクセストークンの取得
|
## 访问令牌的获取
|
||||||
基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
|
总的来说,API请求需要访问令牌。 获取方式则根据请求的API或者非特定用户所使用的应用程序而有所不同。
|
||||||
|
|
||||||
* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
|
* 对于前者:请转到[“手动发放自己的访问令牌”](#自分自身のアクセストークンを手動発行する)
|
||||||
* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
|
* 对于后者:请转到[“请求应用程序用户发放访问令牌”](#アプリケーション利用者にアクセストークンの発行をリクエストする)
|
||||||
|
|
||||||
### 自分自身のアクセストークンを手動発行する
|
### 手动发放自己的访问令牌
|
||||||
「設定 > API」で、自分のアクセストークンを発行できます。
|
您可以在“设置 > API”中发放自己的访问令牌。
|
||||||
|
|
||||||
[「APIの使い方」へ進む](#APIの使い方)
|
[请转到“API使用方法”](#APIの使い方)
|
||||||
|
|
||||||
### アプリケーション利用者にアクセストークンの発行をリクエストする
|
### 请求应用程序用户发放访问令牌
|
||||||
アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
|
要获取应用程序用户的访问令牌,请按照以下步骤请求发放。
|
||||||
|
|
||||||
#### Step 1
|
#### 步骤 1
|
||||||
|
|
||||||
UUIDを生成する。以後これをセッションIDと呼びます。
|
生成UUID。以下将其称为会话ID。
|
||||||
|
|
||||||
> このセッションIDは毎回生成し、使いまわさないようにしてください。
|
> 此会话ID需要每次重新生成,请勿重复使用。
|
||||||
|
|
||||||
#### Step 2
|
#### 步骤 2
|
||||||
|
|
||||||
`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
|
在用户的浏览器中显示`{_URL_}/miauth/{session}`。将`{session}`的部分替换为会话ID。
|
||||||
> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
|
> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
|
||||||
|
|
||||||
表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
|
显示时,可以在URL中设置一些选项作为查询参数:
|
||||||
* `name` ... アプリケーション名
|
* `name` ... 应用程序名称
|
||||||
* > 例: `MissDeck`
|
* > 例: `MissDeck`
|
||||||
* `icon` ... アプリケーションのアイコン画像URL
|
* `icon` ... 应用程序图标URL
|
||||||
* > 例: `https://missdeck.example.com/icon.png`
|
* > 例: `https://missdeck.example.com/icon.png`
|
||||||
* `callback` ... 認証が終わった後にリダイレクトするURL
|
* `callback` ... 认证后重定向的URL
|
||||||
* > 例: `https://missdeck.example.com/callback`
|
* > 例: `https://missdeck.example.com/callback`
|
||||||
* リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
|
* 重定向时,会话ID将添加查询参数`session`
|
||||||
* `permission` ... アプリケーションが要求する権限
|
* `permission` ... 应用程序要求的权限
|
||||||
* > 例: `write:notes,write:following,read:drive`
|
* > 例: `write:notes,write:following,read:drive`
|
||||||
* 要求する権限を`,`で区切って列挙します
|
* 要求的权限需要以`,`分隔
|
||||||
* どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
|
* 您可以在[API参考](/api-doc)中确认您所拥有的权限。
|
||||||
|
|
||||||
#### Step 3
|
#### 步骤 3
|
||||||
ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
|
用户允许发行后,对`{_URL_}/api/miauth/{session}/check`的POST请求所返回的是一个包含访问令牌的JSON格式的响应。
|
||||||
|
|
||||||
レスポンスに含まれるプロパティ:
|
响应中包含的属性:
|
||||||
* `token` ... ユーザーのアクセストークン
|
* `token` ... 用户的访问令牌
|
||||||
* `user` ... ユーザーの情報
|
* `user` ... 用户信息
|
||||||
|
|
||||||
[「APIの使い方」へ進む](#APIの使い方)
|
[请转到“API使用方法”](#APIの使い方)
|
||||||
|
|
||||||
## APIの使い方
|
## API使用方法
|
||||||
**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
|
**所有API均为POST,并且请求/响应均为JSON格式。不是REST。** 访问令牌包含在请求中,参数名为`i`。
|
||||||
|
|
||||||
* [APIリファレンス](/api-doc)
|
* [API 参考](/api-doc)
|
||||||
* [ストリーミングAPI](./stream)
|
* [流式API](./stream)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# プラグインの作成
|
# 插件开发
|
||||||
Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
|
Misskey Web客户端插件功能使您可以扩展客户端并添加各种功能。 我们在这里给出用于创建插件的元数据定义和AiScript API参考。
|
||||||
|
|
||||||
## 元数据
|
## 元数据
|
||||||
プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
|
プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
|
||||||
|
@ -34,7 +34,7 @@ Misskey Webクライアントのプラグイン機能を使うと、クライア
|
||||||
#### default
|
#### default
|
||||||
設定のデフォルト値
|
設定のデフォルト値
|
||||||
|
|
||||||
## APIリファレンス
|
## API 参考
|
||||||
AiScript標準で組み込まれているAPIは掲載しません。
|
AiScript標準で組み込まれているAPIは掲載しません。
|
||||||
|
|
||||||
### Mk:dialog(title text type)
|
### Mk:dialog(title text type)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# ストリーミングAPI
|
# 流式API
|
||||||
|
|
||||||
ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
|
ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue