New Crowdin updates (#7036)

* New translations pages.md (English)

* New translations pages.md (English)

* New translations pages.md (English)

* New translations deck.md (English)

* New translations deck.md (English)

* New translations deck.md (English)

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

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

* New translations keyboard-shortcut.md (English)

* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (English)

* New translations keyboard-shortcut.md (English)

* New translations api.md (English)

* New translations create-plugin.md (English)

* New translations stream.md (English)

* New translations deck.md (English)

* New translations api.md (English)

* New translations reversi-bot.md (English)

* New translations reversi-bot.md (English)

* New translations reversi-bot.md (English)

* New translations reversi-bot.md (English)

* New translations stream.md (English)

* New translations reversi-bot.md (English)

* New translations reversi-bot.md (English)

* New translations stream.md (English)

* New translations api.md (English)

* New translations stream.md (English)

* New translations create-plugin.md (English)

* New translations create-plugin.md (English)

* New translations create-plugin.md (English)

* New translations create-plugin.md (English)

* New translations create-plugin.md (English)

* New translations aiscript.md (English)

* New translations create-plugin.md (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Kannada)

* New translations ja-JP.yml (Kabyle)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations api.md (English)

* New translations api.md (English)

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

* New translations api.md (English)

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

* New translations api.md (English)

* New translations stream.md (English)

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

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

* New translations stream.md (English)

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

* New translations stream.md (English)

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

* New translations stream.md (English)

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

* New translations stream.md (English)

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

* New translations stream.md (English)

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

* New translations stream.md (English)

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

* New translations reaction.md (Chinese Traditional)

* New translations stream.md (English)

* New translations stream.md (English)

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

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

* New translations stream.md (English)

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

* New translations stream.md (English)

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

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

* New translations timelines.md (Chinese Simplified)

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

* New translations create-plugin.md (Chinese Simplified)

* New translations follow.md (Chinese Simplified)

* New translations timelines.md (Chinese Simplified)

* New translations deck.md (Chinese Simplified)

* New translations follow.md (Chinese Simplified)

* New translations deck.md (Chinese Simplified)

* New translations mfm.md (Chinese Simplified)

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

* New translations follow.md (Chinese Simplified)

* New translations keyboard-shortcut.md (Chinese Simplified)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Thai)

* New translations aiscript.md (Thai)

* New translations api.md (Thai)

* New translations create-plugin.md (Thai)

* New translations custom-emoji.md (Thai)

* New translations follow.md (Thai)

* New translations keyboard-shortcut.md (Thai)

* New translations mute.md (Thai)

* New translations pages.md (Thai)

* New translations reaction.md (Thai)

* New translations reversi-bot.md (Thai)

* New translations stream.md (Thai)

* New translations theme.md (Thai)

* New translations timelines.md (Thai)

* New translations deck.md (Thai)

* New translations mfm.md (Thai)

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

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

* New translations keyboard-shortcut.md (Chinese Simplified)

* New translations keyboard-shortcut.md (Chinese Simplified)

* New translations stream.md (Chinese Simplified)

* New translations keyboard-shortcut.md (Chinese Simplified)

* New translations keyboard-shortcut.md (Chinese Simplified)

* New translations keyboard-shortcut.md (Chinese Simplified)

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

* New translations custom-emoji.md (Chinese Simplified)

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

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

* New translations mute.md (Chinese Simplified)

* New translations pages.md (Chinese Simplified)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Chinese Traditional)
This commit is contained in:
syuilo 2020-12-31 19:45:30 +09:00 committed by GitHub
parent 078b043cae
commit d6e3ec3218
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
48 changed files with 1359 additions and 400 deletions

View file

@ -45,6 +45,7 @@ copyUsername: "انسخ اسم المستخدم"
searchUser: "ابحث عن مستخدمين"
reply: "رد"
loadMore: "عرض المزيد"
showMore: "عرض المزيد"
youGotNewFollower: "يتابعك"
receiveFollowRequest: "تلقيت طلب متابعة"
followRequestAccepted: "قُبل طلب المتابعة"

View file

@ -1,5 +1,6 @@
---
_lang_: "Deutsch"
headlineMisskey: "Durch Notizen verbundenes Netzwerk"
introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microblogging-Platform.\nVerfasse \"Notizen\" um mitzuteilen, was gerade passiert oder um Ereignisse mit Anderen zu teilen. 📡\nMit \"Reaktionen\" kannst du außerdem schnell deine Gefühle über Notizen anderer Benutzer zum Ausdruck bringen. 👍\nLass uns eine neue Welt erforschen! 🚀"
monthAndDay: "{day}/{month}"
search: "Suchen"
@ -49,6 +50,7 @@ copyUsername: "Benutzernamen kopieren"
searchUser: "Benutzersuche"
reply: "Antworten"
loadMore: "Mehr anzeigen"
showMore: "Mehr anzeigen"
youGotNewFollower: "Du hast einen neuen Follower"
receiveFollowRequest: "Follow-Anfrage erhalten"
followRequestAccepted: "Follow-Anfrage akzeptiert"
@ -671,6 +673,10 @@ wide: "Breit"
narrow: "Schmal"
reloadToApplySetting: "Diese Einstellung tritt nach einer Aktualisierung der Seite in Kraft. Jetzt aktualisieren?"
showTitlebar: "Titelleiste anzeigen"
clearCache: "Cache leeren"
onlineUsersCount: "{n} Benutzer sind online"
nUsers: "{n} Benutzer"
nNotes: "{n} Notizen"
_aboutMisskey:
about: "Misskey ist Open-Source-Software die von syuilo seit 2014 entwickelt wird."
contributors: "Hauptmitwirkende"
@ -732,6 +738,14 @@ _mfm:
twitchDescription: "Verleiht eine sehr stark zuckende Animation."
spin: "Animation (Rotieren)"
spinDescription: "Verleiht eine rotierende Animation."
x2: "Groß"
x2Description: "Lässt Inhalte größer angezeigt werden."
x3: "Sehr groß"
x3Description: "Lässt Inhalte noch größer angezeigt werden."
x4: "Am größten"
x4Description: "Lässt Inhalte noch größer als größer als groß angezeigt werden."
blur: "Weichzeichner"
blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen des Mauszeigers auf den Inhalt wird er klar angezeigt."
_reversi:
reversi: "Reversi"
gameSettings: "Spieleinstellungen"
@ -992,6 +1006,7 @@ _widgets:
postForm: "Neue Notiz anfertigen"
slideshow: "Diashow"
button: "Knopf"
onlineUsers: "Benutzer die Online sind"
_cw:
hide: "Ausblenden"
show: "Mehr anzeigen"
@ -1481,7 +1496,7 @@ _deck:
swapRight: "Nach rechts verschieben"
swapUp: "Nach oben verschieben"
swapDown: "Nach unten verschieben"
stackLeft: "Nach links stapeln"
stackLeft: "Auf linke Spalte stapeln"
popRight: "Nach rechts vom Stapel nehmen"
_columns:
main: "Hauptspalte"

View file

@ -1,5 +1,6 @@
---
_lang_: "English"
headlineMisskey: "Network connected by notes"
introMisskey: "Welcome! Misskey is an open source, and also a decentralized microblogging service.\nCreate \"notes\" to share what is happening now, or to share it with everyone around you 📡\nWith \"reactions\", you can also quickly express your feelings about everyone's notes 👍\nLet's explore a new world 🚀"
monthAndDay: "{month}/{day}"
search: "Search"
@ -49,6 +50,7 @@ copyUsername: "Copy username"
searchUser: "User search"
reply: "Reply"
loadMore: "Load more"
showMore: "Load more"
youGotNewFollower: "Followed you"
receiveFollowRequest: "Follow request received"
followRequestAccepted: "Follow request accepted"
@ -671,6 +673,10 @@ wide: "Wide"
narrow: "Narrow"
reloadToApplySetting: "This setting will be applied upon page reload. Reload now?"
showTitlebar: "Show title bar"
clearCache: "Clear cache"
onlineUsersCount: "{n} people are online"
nUsers: "{n} Users"
nNotes: "{n} Notes"
_aboutMisskey:
about: "Misskey is open-source software being developed by syuilo since 2014."
contributors: "Main contributors"
@ -732,6 +738,15 @@ _mfm:
twitchDescription: "Infuses a strongly twitching animation."
spin: "Animation (Spin)"
spinDescription: "Infuses a spinning animation."
x2: "Big"
x2Description: "Displays content bigger."
x3: "Very big"
x3Description: "Displays content even bigger."
x4: "Extremely big"
x4Description: "Displays content even bigger than bigger than big."
blur: "Blur"
blurDescription: "Content can be blurred via this effect. It will be clearly displayed by hovering your cursor above it."
font: "Font"
_reversi:
reversi: "Reversi"
gameSettings: "Game settings"
@ -992,6 +1007,7 @@ _widgets:
postForm: "Compose a note"
slideshow: "Slideshow"
button: "Button"
onlineUsers: "Online users"
_cw:
hide: "Hide"
show: "Load more"
@ -1481,7 +1497,7 @@ _deck:
swapRight: "Swap to right"
swapUp: "Swap with above"
swapDown: "Swap with below"
stackLeft: "Stack on the left"
stackLeft: "Stack on left column"
popRight: "Pop to the right"
_columns:
main: "Main"

View file

@ -49,6 +49,7 @@ copyUsername: "Copiar nombre de usuario"
searchUser: "Búsqueda de usuarios"
reply: "Responder"
loadMore: "Ver más"
showMore: "Ver más"
youGotNewFollower: "te ha seguido"
receiveFollowRequest: "Recibiste una solicitud de seguimiento"
followRequestAccepted: "La solicitud de seguimiento fue aceptada"
@ -646,6 +647,7 @@ driveUsage: "Uso del drive"
noCrawle: "Rechazar indexación del crawler"
noCrawleDescription: "Pedir a los motores de búsqueda que no indexen tu perfil, notas, páginas, etc."
clips: "Clip"
clearCache: "Limpiar caché"
_mfm:
cheatSheet: "Hoja de referencia de MFM"
intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares dentro de Misskey. Aquí puede ver una lista de sintaxis disponibles en MFM."

View file

@ -46,6 +46,7 @@ copyUsername: "Copier le nom dutilisateur·rice"
searchUser: "Chercher un·e utilisateur·rice"
reply: "Répondre"
loadMore: "Afficher plus …"
showMore: "Afficher plus …"
youGotNewFollower: "Vous suit"
receiveFollowRequest: "Demande dabonnement reçue"
followRequestAccepted: "La demande dabonnement a été acceptée"
@ -577,6 +578,7 @@ fileIdOrUrl: "ID du fichier ou URL"
chatOpenBehavior: "Comportement de la fenêtre de discussion lors de son ouverture"
random: "Aléatoire"
public: "Public"
clearCache: "Vider le cache"
_mfm:
mention: "Mentionner"
hashtag: "Hashtags"
@ -585,6 +587,7 @@ _mfm:
quote: "Citer"
emoji: "Émojis personnalisés"
search: "Rechercher"
font: "Police de caractères"
_reversi:
total: "Total"
_serverDisconnectedBehavior:

View file

@ -49,6 +49,7 @@ copyUsername: "ユーザー名をコピー"
searchUser: "ユーザーを検索"
reply: "返す"
loadMore: "もっとあるやろ!"
showMore: "もっとあるやろ!"
youGotNewFollower: "フォローされたで"
receiveFollowRequest: "フォローリクエストされたで"
followRequestAccepted: "フォローが承認されたで"
@ -454,6 +455,7 @@ remote: "リモート"
smtpHost: "ホスト"
smtpUser: "ユーザー名"
smtpPass: "パスワード"
clearCache: "キャッシュにさいなら"
_mfm:
mention: "メンション"
quote: "引用"

View file

@ -13,6 +13,7 @@ delete: "Kkes"
addToList: "Rnu ɣer tebdart"
reply: "Err"
loadMore: "Wali ugar"
showMore: "Wali ugar"
youGotNewFollower: "Yeṭṭafaṛ-ik·em-id"
mention: "Bder"
import: "Kter"

View file

@ -40,6 +40,7 @@ sendMessage: "ಸಂದೇಶ ಕಳುಹಿಸು"
copyUsername: "ಬಳಕೆಹೆಸರು ನಕಲಿಸು"
reply: "ಉತ್ತರಿಸು"
loadMore: "ಇನ್ನಷ್ಟು ನೋಡು"
showMore: "ಇನ್ನಷ್ಟು ನೋಡು"
youGotNewFollower: "ಹಿಂಬಾಲಿಸಿದರು"
receiveFollowRequest: "ಹಿಂಬಾಲನೆ ವಿನಂತಿ ಬಂದಿದೆ"
followRequestAccepted: "ಹಿಂಬಾಲನೆ ವಿನಂತಿ ಸ್ವೀಕರಿಸಲಾಯಿತು"

View file

@ -46,6 +46,7 @@ copyUsername: "유저명 복사"
searchUser: "사용자 검색"
reply: "답글"
loadMore: "더 보기"
showMore: "더 보기"
youGotNewFollower: "새로운 팔로워가 있습니다"
receiveFollowRequest: "새로운 팔로우 요청이 있습니다"
followRequestAccepted: "팔로우가 수락되었습니다"
@ -612,6 +613,7 @@ lockedAccountInfo: "팔로우를 승인으로 승인받더라도 노트의 공
alwaysMarkSensitive: "미디어를 항상 열람 주의로 설정"
emailVerified: "메일 주소가 확인되었습니다."
clips: "클립"
clearCache: "캐시 비우기"
_nsfw:
ignore: "열람 주의 미디어 항상 표시"
_mfm:

View file

@ -49,6 +49,7 @@ copyUsername: "Скопировать имя пользователя"
searchUser: "Поиск людей"
reply: "Ответить"
loadMore: "Показать еще"
showMore: "Показать еще"
youGotNewFollower: "Новый подписчик"
receiveFollowRequest: "Получен запрос на подписку"
followRequestAccepted: "Запрос на подписку принят"
@ -667,6 +668,12 @@ showGapBetweenNotesInTimeline: "Показывать разделитель ме
duplicate: "Дубликат"
left: "Влево"
center: "По центру"
reloadToApplySetting: "Это настройка вступает в силу при загрузке страницы. Перезагрузить сейчас?"
showTitlebar: "Показать заголовок"
clearCache: "Очистить кэш"
onlineUsersCount: "Пользователей сейчас в сети: {n}"
nUsers: "Пользователей: {n}"
nNotes: "Заметок: {n}"
_aboutMisskey:
about: "Misskey — программа с открытым исходным кодом, которую разрабатывает syuilo с 2014 года."
contributors: "Основные соавторы"
@ -988,6 +995,7 @@ _widgets:
postForm: "Форма отправки"
slideshow: "Показ слайдов"
button: "Кнопка"
onlineUsers: "Пользователи сейчас с сети"
_cw:
hide: "Спрятать"
show: "Показать еще"

1
locales/th-TH.yml Normal file
View file

@ -0,0 +1 @@
---

View file

@ -46,6 +46,7 @@ copyUsername: "Скопіювати ім’я користувача"
searchUser: "Пошук користувачів"
reply: "Відповісти"
loadMore: "Показати більше"
showMore: "Показати більше"
youGotNewFollower: "Новий підписник"
receiveFollowRequest: "Отримано запит на підписку"
followRequestAccepted: "Підписка прийнята"
@ -611,6 +612,7 @@ useSystemFont: "Використовувати стандартний шрифт
clips: "Добірка"
experimentalFeatures: "Експериментальні функції"
developer: "Розробник"
clearCache: "Очистити кеш"
_aboutMisskey:
about: "Misskey - це програмне забезпечення з відкритим кодом, яке розробляє syuilo з 2014 року."
contributors: "Головні помічники"
@ -664,6 +666,7 @@ _mfm:
shake: "Анімація (Shake)"
twitch: "Анімація (Twitch)"
spin: "Анімація (Spin)"
font: "Шрифт"
_reversi:
reversi: "Реверсі"
gameSettings: "Налаштування гри"

View file

@ -1,5 +1,6 @@
---
_lang_: "中文(简体)"
headlineMisskey: "通过帖子连接在一起的网络"
introMisskey: "欢迎Misskey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖文」来和大家分享你的以及你周围的事情吧📡\n通过「回应」功能可以让你快速地对大家的帖文表达反馈👍\n来探索新的世界吧🚀"
monthAndDay: "{month}月 {day}日"
search: "搜索"
@ -49,6 +50,7 @@ copyUsername: "复制用户名"
searchUser: "搜索用户"
reply: "回复"
loadMore: "查看更多"
showMore: "查看更多"
youGotNewFollower: "你有新的关注者"
receiveFollowRequest: "您收到了关注请求"
followRequestAccepted: "您的关注请求被通过了"
@ -109,12 +111,12 @@ unmarkAsSensitive: "取消标记为敏感内容"
enterFileName: "请输入文件名"
mute: "屏蔽"
unmute: "解除屏蔽"
block: "屏蔽"
unblock: "取消屏蔽"
block: "拉黑"
unblock: "取消拉黑"
suspend: "冻结"
unsuspend: "解除冻结"
blockConfirm: "确定要屏蔽吗?"
unblockConfirm: "确定要解除屏蔽吗?"
blockConfirm: "确定要拉黑吗?"
unblockConfirm: "确定要解除拉黑吗?"
suspendConfirm: "要冻结吗?"
unsuspendConfirm: "要解除冻结吗?"
selectList: "选择列表"
@ -183,8 +185,8 @@ clearCachedFilesConfirm: "确定要清除缓存文件?"
blockedInstances: "被阻拦的实例"
blockedInstancesDescription: "设定要阻拦的实例,以换行来进行分割。被阻拦的实例将无法与本实例进行交换通讯。"
muteAndBlock: "屏蔽/拉黑"
mutedUsers: "禁言用户"
blockedUsers: "已屏蔽用户"
mutedUsers: "已屏蔽用户"
blockedUsers: "被拉黑的用户"
noUsers: "无用户"
editProfile: "编辑资料"
noteDeleteConfirm: "要删除该帖子吗?"
@ -197,7 +199,7 @@ default: "默认"
noCustomEmojis: "没有自定义表情符号"
noJobs: "没有任务"
federating: "联合中"
blocked: "已拦截"
blocked: "已拉黑"
suspended: "停止推流"
all: "全部"
subscribing: "已订阅"
@ -671,6 +673,10 @@ wide: "宽"
narrow: "窄"
reloadToApplySetting: "页面刷新后设置才会生效。是否现在刷新页面?"
showTitlebar: "显示标题栏"
clearCache: "清除缓存"
onlineUsersCount: "{n}人在线"
nUsers: "{n}用户"
nNotes: "{n}帖子"
_aboutMisskey:
about: "Misskey是由syuilo于2014年开发的开源软件。"
contributors: "主要贡献者"
@ -732,6 +738,15 @@ _mfm:
twitchDescription: "显示强烈颤抖的动画效果。"
spin: "动画(回转)"
spinDescription: "显示回转的动画效果。"
x2: "大"
x2Description: "以大尺寸显示内容。"
x3: "非常大"
x3Description: "以更大尺寸显示内容。"
x4: "最大"
x4Description: "以最大尺寸显示内容。"
blur: "模糊"
blurDescription: "产生模糊效果。将鼠标指针放在上面即可将内容显示出来。"
font: "字体"
_reversi:
reversi: "黑白棋"
gameSettings: "对局设置"
@ -992,6 +1007,7 @@ _widgets:
postForm: "投稿窗口"
slideshow: "幻灯片展示"
button: "按钮"
onlineUsers: "在线用户"
_cw:
hide: "隐藏"
show: "查看更多"
@ -1057,7 +1073,7 @@ _exportOrImport:
allNotes: "所有帖子"
followingList: "关注中"
muteList: "屏蔽"
blockingList: "屏蔽"
blockingList: "拉黑"
userLists: "列表"
_charts:
federationInstancesIncDec: "联合:增加/减少"

View file

@ -1,6 +1,6 @@
---
_lang_: "繁體中文"
introMisskey: "歡迎! Misskey是一個開源的去中心化的社群網站。\n通過「貼文」來分享現在發生的事情吧 📡\n「反應」功能可以讓你快速的對大家的「帖子」來表達感情👍\n一起來探索新的世界吧 🚀"
introMisskey: "歡迎! Misskey是一個開源且去中心化的社群網絡。\n通過「箋文」分享周邊新鮮事並告訴其他人您的想法📡\n透過「情感」功能對大家的箋文表達情感👍\n一起來探索這個新的世界吧🚀"
monthAndDay: "{month}月 {day}日"
search: "搜尋"
notifications: "通知"
@ -42,13 +42,14 @@ copyContent: "複製內容"
copyLink: "複製連結"
delete: "刪除"
deleteAndEdit: "刪除並編輯"
deleteAndEditConfirm: "要刪除並再次編輯嗎?此貼文的所有反應,轉發和回覆也將會消失。"
deleteAndEditConfirm: "要刪除並再次編輯嗎?此箋文的所有情感、轉發和回覆也將會消失。"
addToList: "添加至清單"
sendMessage: "發送訊息"
copyUsername: "複製用戶名"
searchUser: "搜尋用戶"
reply: "回覆"
loadMore: "瀏覽更多"
showMore: "瀏覽更多"
youGotNewFollower: "您有新的追隨者"
receiveFollowRequest: "收到追隨請求"
followRequestAccepted: "追隨請求已接受"
@ -60,7 +61,7 @@ import: "匯入"
export: "匯出"
files: "檔案"
download: "下載"
driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。"
driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的箋文也會跟著消失。\n"
unfollowConfirm: "確定要取消對{name}的追隨嗎?"
exportRequested: "已請求匯出。這可能會花一點時間。結束後檔案將會被放到雲端裡。"
importRequested: "已請求匯入。這可能會花一點時間"
@ -81,28 +82,28 @@ pageLoadErrorDescription: "這通常是因為網路錯誤或是瀏覽器快取
enterListName: "輸入清單名稱"
privacy: "隱私"
makeFollowManuallyApprove: "手動審核追隨請求"
defaultNoteVisibility: "預設的筆記隱私權"
defaultNoteVisibility: "預設可見性"
follow: "追隨"
followRequest: "追隨請求"
followRequests: "追隨請求"
unfollow: "取消追隨"
followRequestPending: "追隨許可批准中"
enterEmoji: "輸入表情符號"
renote: "轉發貼文"
unrenote: "取消轉發貼文"
renote: "轉"
unrenote: "取消轉"
renoted: "轉發成功"
cantRenote: "這篇貼文無法轉發。"
cantRenote: "無法轉發此箋文。"
cantReRenote: "無法轉發之前已經轉發過的內容"
quote: "引用"
pinnedNote: "已置頂的文"
pinnedNote: "已置頂的文"
you: "您"
clickToShow: "按一下以顯示"
sensitive: "敏感內容"
add: "新增"
reaction: "反應"
reaction: "情感"
reactionSettingDescription: "置頂「反應」表情符號\n"
reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。"
rememberNoteVisibility: "記住筆記隱私設定"
rememberNoteVisibility: "記住箋文可見性"
attachCancel: "移除附件"
markAsSensitive: "標記為敏感內容"
unmarkAsSensitive: "取消標記為敏感內容"
@ -186,8 +187,8 @@ mutedUsers: "已靜音用戶"
blockedUsers: "已封鎖用戶"
noUsers: "無用戶"
editProfile: "編輯個人檔案"
noteDeleteConfirm: "確定刪除此文嗎?"
pinLimitExceeded: "不能再置頂更多的貼文了"
noteDeleteConfirm: "確定刪除此文嗎?"
pinLimitExceeded: "不能置頂更多箋文了"
intro: "Misskey 部署完成!請開設管理員帳號!"
done: "完成"
processing: "處理中"
@ -325,7 +326,7 @@ pinnedUsers: "置頂用戶"
pinnedUsersDescription: "在「發現」頁面中使用換行標記想要置頂的用戶。"
pinnedPages: "釘選頁面"
pinnedPagesDescription: "輸入要固定至實例首頁的頁面路徑,以換行符分隔。"
pinnedNotes: "已置頂的文"
pinnedNotes: "已置頂的文"
hcaptcha: "hCaptcha"
enableHcaptcha: "啟用 hCaptcha"
hcaptchaSiteKey: "網站金鑰"
@ -342,7 +343,7 @@ antennaSource: "接收來源"
antennaKeywords: "包含關鍵字"
antennaExcludeKeywords: "排除關鍵字"
antennaKeywordsDescription: "用空格分隔指定AND、用換行符分隔指定OR"
notifyAntenna: "通知我有新的貼文"
notifyAntenna: "通知有新箋文"
withFileAntenna: "僅帶有附件的箋文"
serviceworker: "ServiceWorker"
enableServiceworker: "開啟 ServiceWorker"
@ -350,7 +351,7 @@ antennaUsersDescription: "指定用換行符分隔的用戶名"
caseSensitive: "區分大小寫"
withReplies: "包含回覆"
connectedTo: "您的帳號已連接到以下社交帳號"
notesAndReplies: "文與回覆"
notesAndReplies: "文與回覆"
withFiles: "附件"
silence: "禁言"
silenceConfirm: "確定要禁言此用戶嗎?"
@ -386,7 +387,7 @@ notFoundDescription: "找不到與指定URL回應的頁面"
uploadFolder: "預設上傳資料夾"
cacheClear: "清除快取"
markAsReadAllNotifications: "標記所有通知為已讀"
markAsReadAllUnreadNotes: "標記所有文為已讀"
markAsReadAllUnreadNotes: "標記所有文為已讀"
markAsReadAllTalkMessages: "標記所有訊息為已讀"
help: "幫助"
inputMessageHere: "在此輸入訊息"
@ -409,7 +410,7 @@ next: "下一步"
retype: "重新輸入"
noteOf: "{user}的箋文"
inviteToGroup: "邀請至群組"
maxNoteTextLength: "文的字數限制"
maxNoteTextLength: "文的字數限制"
quoteAttached: "引用"
quoteQuestion: "是否要引用?"
noMessagesYet: "沒有訊息"
@ -461,10 +462,10 @@ dayOverDayChanges: "與前一日相比"
appearance: "外觀"
clientSettings: "用戶端設定"
accountSettings: "帳號設定"
promotion: "推廣貼文"
promotion: "推廣"
promote: "推廣"
numberOfDays: "有效天數"
hideThisNote: "隱藏此文"
hideThisNote: "隱藏此文"
showFeaturedNotesInTimeline: "在時間軸上顯示熱門推薦"
objectStorageBaseUrl: "Base URL"
objectStorageBucket: "儲存空間Bucket"
@ -477,8 +478,8 @@ objectStorageUseProxy: "使用網路代理"
objectStorageSetPublicRead: "上載時設定為\"public-read\""
serverLogs: "伺服器日誌"
deleteAll: "刪除所有記錄"
showFixedPostForm: "在時間線頂部顯示貼文表格"
newNoteRecived: "新的箋文"
showFixedPostForm: "於時間軸頁頂顯示「發送箋文」方框"
newNoteRecived: "發現新的箋文"
sounds: "音效"
listen: "聆聽"
none: "無"
@ -520,10 +521,10 @@ addRelay: "添加中繼"
inboxUrl: "私信URL"
addedRelays: "已添加的中繼"
serviceworkerInfo: "您需要啟用推送通知"
deletedNote: "已删除的文"
deletedNote: "已删除的文"
invisibleNote: "隱藏的帖子"
enableInfiniteScroll: "啟用自動滾動頁面模式"
visibility: "公開範圍"
visibility: "可見性"
poll: "投票"
useCw: "隱藏內容"
enablePlayer: "打開播放器"
@ -539,6 +540,7 @@ pluginInstallWarn: "請不要安裝來源不明的插件。"
deck: "多欄模式"
undeck: "取消多欄模式"
useBlurEffectForModal: "在模態框使用模糊效果"
useFullReactionPicker: "使用大尺寸的情感選擇欄"
width: "寬度"
height: "高度"
large: "大"
@ -593,22 +595,33 @@ send: "發送"
abuseMarkAsResolved: "處理完畢"
openInNewTab: "在新分頁中開啟"
openInSideView: "在側欄中開啟"
instanceTicker: "箋文的實例資訊"
instanceTicker: "箋文的實例來源"
waitingFor: "等待{x}"
random: "隨機"
system: "系統"
switchUi: "切換界面"
desktop: "桌面"
clip: "片段"
createNew: "新建"
optional: "可選"
public: "公開"
i18nInfo: "Misskey已經被志願者們翻譯成各種語言版本如果想要幫忙的話可以進入{link}幫助翻譯。"
accountInfo: "帳戶資訊"
notesCount: "箋文數量"
repliesCount: "回覆數量\n"
renotesCount: "轉發數量"
repliedCount: "回覆數量"
renotedCount: "轉發次數"
followingCount: "正在跟隨的用戶數量"
followersCount: "跟隨者數量"
sentReactionsCount: "情感發送次數"
receivedReactionsCount: "情感收到次數"
yes: "確定"
no: "取消"
driveFilesCount: "雲端硬碟檔案數量"
driveUsage: "雲端硬碟使用量"
noCrawleDescription: "請求網路搜尋引擎不要索引你的個人資料頁、箋文及頁面等。"
lockedAccountInfo: "即使你通過了追隨者請求,除非你將筆記的公開範圍設定為 「追隨者」,否則任何人都能看見你的箋文。"
lockedAccountInfo: "即使你通過了追隨者請求,除非你將箋文的可見性設定為 「追隨者」,否則任何人都能看見你的箋文。"
notSet: "未設定"
noteFavoritesCount: "收藏箋文的數目"
pageLikesCount: "頁面被喜歡次數"
@ -625,6 +638,7 @@ wide: "寬"
narrow: "窄"
reloadToApplySetting: "設定將會在頁面重新載入之後生效。要現在就重載頁面嗎?"
showTitlebar: "顯示標題列"
clearCache: "清除快取資料"
_aboutMisskey:
about: "Misskey是由syuilo於2014年開發的開源軟件。"
contributors: "主要貢獻者"
@ -649,12 +663,22 @@ _mfm:
quote: "引用"
emoji: "自訂表情符號"
search: "搜尋"
bounce: "動畫(反彈)"
shake: "動畫(搖晃)"
spin: "動畫(旋轉)"
spinDescription: "顯示旋轉的動畫效果。"
font: "字型"
_reversi:
reversi: "黑白棋"
gameSettings: "對弈設定"
chooseBoard: "選擇棋盤"
blackOrWhite: "黑棋/白棋"
blackIs: "{name}在玩黑棋"
rules: "規則"
botSettings: "機器人設定"
waitingBoth: "請準備"
ready: "已就緒"
cancelReady: "重新準備"
opponentTurn: "對手回合"
myTurn: "你的回合"
turnOf: "{name}的回合"
@ -666,22 +690,25 @@ _reversi:
ended: "已結束"
playing: "正在對弈"
_instanceTicker:
none: "隱藏"
remote: "向遠端使用者顯示"
always: "總是顯示"
_serverDisconnectedBehavior:
reload: "自動重載"
dialog: "以對話框警告"
quiet: "適當地警告"
dialog: "彈出式警告"
quiet: "非侵入式警告"
_channel:
create: "建立頻道"
edit: "編輯頻道"
setBanner: "設定橫幅"
removeBanner: "移除封面圖"
featured: "流行"
featured: "發燒內容"
owned: "管理中"
following: "關注中"
usersCount: "有{n}人參與"
notesCount: "有{n}個帖子"
_sidebar:
full: "全部"
icon: "頭像"
hide: "隱藏"
_wordMute:
@ -689,6 +716,9 @@ _wordMute:
softDescription: "隱藏時間軸中指定條件的箋文。"
mutedNotes: "已靜音的箋文"
_theme:
explore: "取得佈景主題"
install: "安裝佈景主題"
manage: "佈景主題管理員"
constant: "常數"
defaultValue: "預設值"
color: "顏色"
@ -705,7 +735,7 @@ _theme:
hashtag: "#tag"
mention: "提及"
mentionMe: "提及我"
renote: "轉發文"
renote: "轉發文"
divider: "分割線"
infoBg: "資訊背景"
infoFg: "資訊內容"
@ -736,23 +766,22 @@ _time:
_tutorial:
title: "Misskey使用方法"
step1_1: "歡迎!"
step1_2: "此為「時間軸」頁面,它會按照時間順序顯示你「追隨」的人的「貼文」"
step1_3: "由於你沒有發布任何筆記,也沒有追隨任何人,所以你的時間軸目前是空的。"
step1_2: "此為「時間軸」頁面,它會按照時間順序顯示你「追隨」的人發出的「箋文」"
step1_3: "由於你沒有發佈任何箋文,也沒有追隨任何人,所以你的時間軸目前是空的。"
step2_1: "在發文或追隨其他人之前先讓我們設定一下個人資料吧。"
step2_2: "提供一些關於自己的資訊來讓其他人更有追隨你的意願。"
step3_1: "個人資料都打理好了嗎?"
step3_2: "下一步讓我們來試試看發個文,按一下畫面上的鉛筆圖示來開始"
step3_3: "輸入完內容後,按視窗右上角的按鈕來發文"
step3_4: "不知道該寫什麼內容嗎試試看「開始使用Misskey了」如何。"
step4_1: "筆記發出去了嗎?"
step4_1: "箋文發出去了嗎?"
step4_2: "如果你的箋文出現在時間軸上,就代表發文成功。"
step5_1: "現在試試看追隨其他人來讓你的時間軸變得更生動吧。"
step5_2: "你可以在{featured}上看到受歡迎的貼文,你也可以選擇從列表中追隨你喜歡的人,或者在{explore}上找到熱門使用者。"
step5_2: "你會在{featured}上看到受歡迎的箋文,你也可以從列表中追隨你喜歡的人,或者在{explore}上找到熱門使用者。"
step5_3: "想要追隨其他人,只要點擊他們的頭像並按「追隨」即可。"
step5_4: "如果使用者的名字旁有鎖頭的圖示,代表他們需要手動核准你的追隨請求。"
step6_1: "現在你可以在時間軸上看到其他用戶的貼文"
step6_2: "你也可以在其他人的貼文上進行「反應」來表達簡單的回覆。"
step6_3: "在他人的貼文按下「+」的圖示即可選擇想要的表情符號來進行「反應」。"
step6_1: "現在你可以在時間軸上看到其他用戶的箋文。"
step6_2: "你也可以對別人的箋文作出「情感」,作出簡單的回覆。"
step7_1: "以上為Misskey的基本操作說明教學在此告一段落。辛苦了。"
step7_2: "歡迎到{help}來瞭解更多Misskey相關介紹。"
_2fa:
@ -772,8 +801,8 @@ _permissions:
"write:notes": "撰寫或刪除箋文"
"read:notifications": "查看通知"
"write:notifications": "編輯通知"
"read:reactions": "查看反應"
"write:reactions": "編輯反應"
"read:reactions": "查看情感"
"write:reactions": "編輯情感"
"write:votes": "投票"
"read:pages": "顯示頁面"
"write:pages": "編輯頁面"
@ -804,7 +833,7 @@ _widgets:
notifications: "通知"
timeline: "時間軸"
calendar: "行事曆"
trends: "發燒文"
trends: "發燒文"
clock: "時鐘"
rss: "RSS閱讀器"
activity: "動態"
@ -842,7 +871,7 @@ _visibility:
localOnlyDescription: "對遠端使用者隱藏"
_postForm:
replyPlaceholder: "回覆此箋文..."
quotePlaceholder: "引用此文..."
quotePlaceholder: "引用此文..."
channelPlaceholder: "發佈到頻道"
_placeholders:
a: "今天過得如何?"
@ -859,7 +888,7 @@ _profile:
metadataLabel: "標籤"
metadataContent: "内容"
_exportOrImport:
allNotes: "全部箋文"
allNotes: "所有箋文"
followingList: "追隨中"
muteList: "靜音"
blockingList: "封鎖"
@ -1200,7 +1229,7 @@ _relayStatus:
accepted: "已通過核准"
rejected: "已拒絕"
_notification:
youRenoted: "{name} 轉發了你的文"
youRenoted: "{name} 轉發了你的文"
youGotPoll: "{name}已投票"
youWereFollowed: "您有新的追隨者"
yourFollowRequestAccepted: "您的追隨請求已通過"
@ -1210,9 +1239,9 @@ _notification:
follow: "追隨中"
mention: "提及"
reply: "回覆"
renote: "轉發文"
renote: "轉發文"
quote: "引用"
reaction: "反應"
reaction: "情感"
receiveFollowRequest: "已收到追隨請求"
followRequestAccepted: "追隨請求已接受"
app: "應用程式通知"

View file

@ -1,4 +1,4 @@
# AiScript
## Functions
デフォルトで値渡しです。
Behave as pass by value by default.

View file

@ -1,58 +1,58 @@
# Misskey API
MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
Using the Misskey API you can develop Misskey clients, Webservices integrating with Misskey, Bots (later called "Applications" here) etc. The streaming API also exists, so it is also possible to create real-time applications.
APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
To starting using the API, you first need to get an access token. This page will explain how to acquire an access token and then give basic API usage instructions.
## アクセストークンの取得
基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
## Obtaining an access token
Fundamentally, all API requests require an access token. The method of acquiring such an access token will vary depending on whether you yourself are sending API requests or requests are being sent through an application used by an end-user.
* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
* In case of the former: Move on to [ "Manually issuing your own access token" ](#自分自身のアクセストークンを手動発行する)
* In case of the latter: Move on to [ "Requesting the application user to generate an access token" ](#アプリケーション利用者にアクセストークンの発行をリクエストする)
### 自分自身のアクセストークンを手動発行する
「設定 > API」で、自分のアクセストークンを発行できます。
### Manually issuing your own access token
You can create an access token in Settings > API
[「APIの使い方」へ進む](#APIの使い方)
[Proceed to using the API.](#APIの使い方)
### アプリケーション利用者にアクセストークンの発行をリクエストする
アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
### Requesting the application user to generate an access token
To obtain the access token of the end user for your app, request permissions for it via the below process.
#### Step 1
UUIDを生成する。以後これをセッションIDと呼びます。
Generate a UUID.We will call it the session ID from here on.
> このセッションIDは毎回生成し、使いまわさないようにしてください。
> The same session ID should not be used for multiple plugins, so please generate a new UUID for each plugin.
#### Step 2
`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
> : `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
Open the URL `{_URL_}/miauth/{session}` in the user's browser.Replace the `{session}` part with your previously generated session ID.
> E.g.: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
* `name` ... アプリケーション名
* > : `MissDeck`
* `icon` ... アプリケーションのアイコン画像URL
* > : `https://missdeck.example.com/icon.png`
* `callback` ... 認証が終わった後にリダイレクトするURL
* > : `https://missdeck.example.com/callback`
* リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
* `permission` ... アプリケーションが要求する権限
* > : `write:notes,write:following,read:drive`
* 要求する権限を`,`で区切って列挙します
* どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
When opening this URL, you can set various settings via query prameters:
* `name` ... Application name
* > E.g.: `MissDeck`
* `icon` ... Icon URL of the application
* > E.g.: `https://missdeck.example.com/icon.png`
* `callback` ... URL to redirect to after authorization
* > E.g.: `https://missdeck.example.com/callback`
* In the redirect a `session` query parameter containing the session ID will be attached.
* `permission` ... Permissions requested by the application
* > E.g.: `write:notes,write:following,read:drive`
* List the requested permissions separated with a `,` character.
* You can check all available permissions at the [API Reference](/api-doc)
#### Step 3
ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
If you send a POST request to `{_URL_}/api/miauth/{session}/check` after the user has authorized the access token, the response will be a JSON object containing said token.
レスポンスに含まれるプロパティ:
* `token` ... ユーザーのアクセストークン
* `user` ... ユーザーの情報
Properties included in the response:
* `token` ... Access token of the user
* `user` ... User data
[「APIの使い方」へ進む](#APIの使い方)
[Proceed to using the API.](#APIの使い方)
## APIの使い方
**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
## Using the API
**All API requests are POST, and all request and response data is formatted in JSON.There is no REST support.** The access token must be included in the request parameter called `i`.
* [APIリファレンス](/api-doc)
* [ストリーミングAPI](./stream)
* [API Reference](/api-doc)
* [Streaming API](./stream)

View file

@ -1,74 +1,74 @@
# プラグインの作成
Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
# Creating plugins
If you use the plugin function of the Misskey web client, you can expand the web client with a variety of different functionality. This page will list metadata definitions for plugin creation as well as an AiScript API reference for plugins.
## Metadata
プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
Plugins must define default plugin metadata via the AiScript metadata format. Metadata is an object containing the following properties:
### name
プラグイン名
Plugin name
### author
プラグイン作者
Plugin author
### version
プラグインバージョン。数値を指定してください。
Plugin version.Please enter a number.
### description
プラグインの説明
Plugin description
### permissions
プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
Permissions required by the plugin.Used when making requests to the Misskey API.
### config
プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
An object representing the plugin's settings. Set the keys to setting names and the values to one of the below properties.
#### type
設定値の種類を表す文字列。以下から選択します。 string number boolean
A string representing the setting's value type.Selected from one of the below types. string number boolean
#### label
ユーザーに表示する設定名
Setting name to do display to the user
#### description
設定の説明
Description of the setting
#### default
設定のデフォルト値
Default value of the setting
## APIリファレンス
AiScript標準で組み込まれているAPIは掲載しません。
## API Reference
API built directly into the AiScript standard itself will not be listed.
### Mk:dialog(title text type)
ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
Display a dialog.You can select one of the below types. info success warn error question If no type is selected, "info" is chosen by default.
### Mk:confirm(title text type)
確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
Display a confirmation dialog.You can select one of the below types. info success warn error question If no type is selected, "question" is chosen by default. If the user presses "OK" true will be returned, if they press "Cancel" false will be returned.
### Mk:api(endpoint params)
Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
Sends a request to the Misskey API.Specify the endpoint name as the first parameter and the request parameters as the second argument.
### Mk:save(key value)
任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
Persistently saves any given value under a given key.The saved value will remain even after the AiScript context ends and can be loaded with Mk:load.
### Mk:load(key)
Mk:saveで永続化した指定の名前の値を読み取ります。
Reads the value of the given key that was previously saved with Mk:save.
### Plugin:register_post_form_action(title fn)
投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
Add an action to the post form.Enter an action name as the first parameter, and a callback function for when the action is executed as second parameter. A post form object is passed to the callback function as first argument.
### Plugin:register_note_action(title fn)
ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
Add an item to the note menu.Enter an item name as the first parameter, and a callback function for when the menu item is pressed as second parameter. A note object of the targeted note is passed to the callback function as first parameter.
### Plugin:register_user_action(title fn)
ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
Add an item to the user menu.Enter an item name as the first parameter, and a callback function for when the menu item is pressed as second parameter. A user object of the selected user is passed to the callback function as first parameter.
### Plugin:register_note_view_interruptor(fn)
UIに表示されるート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
Modify the data of notes displayed in the UI. A note object is passed to the callback function as first parameter. The note will be modified based on the note object returned by the callback function.
### Plugin:register_note_post_interruptor(fn)
ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
Modify the data of notes about to be posted. A note object is passed to the callback function as first parameter. The note will be modified based on the note object returned by the callback function.
### Plugin:open_url(url)
第一引数に渡されたURLをブラウザの新しいタブで開きます。
Opens the URL given as first argument in a new browser tab.
### Plugin:config
プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。
An object containing the plugin settings.The values entered in the plugin definition are saved under the setting keys.

View file

@ -1,18 +1,18 @@
# Deck
デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
Deck is one of the available UI types.By displaying several views called "Columns" next to another, it provides high customizability and can display high amounts of information at once.
## カラムの追加
デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
## Adding columns
You can add additional columns by right-clicking the Deck background and pressing "Add column".
## カラムの移動
カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
## Moving columns
You can switch the positions of two columns via drag-and-dropping them or change a column's position from its column menu (accesible by right-clicking the column header).
## カラムの水平分割
カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
## Horizontally dividing columns
Columns can not only be arranged vertically, but also horizontally. If you click "Stack on left column" when opening the column menu, the column will be moved below the column to the left of the current one. To cancel the stacking, press the "Pop to the right" button in the column menu.
## カラムの設定
カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
## Column settings
You can edit individual column settings by clicking "Edit" in the column menu.You can edit a column's name and width.
## デッキの設定
デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
## Deck settings
Deck-related settings can be found in [settings/deck](/settings/deck).

View file

@ -1,68 +1,68 @@
# キーボードショートカット
# Keyboard shortcuts
## Global
これらのショートカットは基本的にどこでも使えます。
The shortcuts listed here can be used basically everywhere.
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
<tr><th>Shortcut</th><th>Effect</th><th>Origin</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
<tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>New post</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
<tr><td><kbd class="key">T</kbd></td><td>Focus newest post on timeline</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>Show/hide notifications</td><td><b>N</b>otifications</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>Search</td><td><b>S</b>earch</td></tr>
<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>Show help</td><td><b>H</b>elp</td></tr>
</tbody>
</table>
## 投稿にフォーカスされた状態
## Shortcuts related to posts
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
<tr><th>Shortcut</th><th>Effect</th><th>Origin</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
<tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
<tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>Move focus to above post</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>Move focus to below post</td><td>-</td></tr>
<tr><td><kbd class="key">R</kbd></td><td>Open reply form</td><td><b>R</b>eply</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>Open renote form</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>Immediately renote (without opening form)</td><td>-</td></tr>
<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>Open reaction form</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>React with the emote in nth place of the reaction picker</td><td>-</td></tr>
<tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>Add to favorites</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
<tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>Delete post</td><td><b>D</b>elete</tr>
<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>Open post context menu</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>Toggle show or hide of content marked with CW</td><td><b>S</b>how, <b>S</b>ee</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>Unfocus</td><td>-</td></tr>
</tbody>
</table>
## Renoteフォーム
## Renote form
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
<tr><th>Shortcut</th><th>Effect</th><th>Origin</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd></td><td>Renote</td><td>-</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>Expand form</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>Close form</td><td>-</td></tr>
</tbody>
</table>
## リアクションフォーム
デフォルトで「👍」にフォーカスが当たっている状態です。
## Reaction form
By default, the "👍" reaction is focused.
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
<tr><th>Shortcut</th><th>Effect</th><th>Origin</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd></td><td>Move focus to above reaction</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd></td><td>Move focus to below reaction</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>Move focus to left reaction</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>Move focus to right reaction</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>React with focused reaction</td><td>-</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>React with the reaction at nth place in the reaction picker</td><td>-</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>Cancel reacting</td><td>-</td></tr>
</tbody>
</table>

View file

@ -1,10 +1,10 @@
# Pages
## Variables
変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
You can create dynamic pages using variables.By writing <b>{ variable-name }</b> in your text, the value of that variable can be embedded.For example, if the value of the variable thing in the text <b>Hello { thing } world!</b> is <b>ai</b>, then the text will turn into <b>Hello ai world!</b>.
変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b><b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b><b>C</b>を参照することはできません。
Variables are evaluated from top to bottom, so referencing variables not yet declared is not possible.For example, when declaring the three variables <b>A, B, C</b> in the given order, referencing <b>A</b> or <b>B</b> from within <b>C</b> is possible, but referencing <b>B</b> or <b>C</b> from within <b>A</b> is not.
ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
To receive user input on your page, include a "User input" block and set it to store the user's input in a variable name (the variable will automatically be created).You can then activate different actions depending on the user input stored in that variable.
関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。
Using functions allows you to create a reusable way of calculating values.To use functions, create a variable of the type "function".Functions can use slots (arguments), which are then available as variables within the function.In addition, functions whose arguments are functions ("higher-order functions") are also possible.Besides predefining functions, you can also define functions in the slots of higher-order functions on the fly.

View file

@ -1,33 +1,33 @@
# MisskeyリバーシBotの開発
Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
# Development of Misskey Reversi Bots
This page will explain how to develop an interactive bot for Misskey's Reversi function.
1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
* `i`: botアカウントのAPIキー
1. Connect to the `games/reversi` stream with the following parameters:
* `i`: API key of the bot account
2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
* イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
2. When an invitation to a game arrives, an `invited` event is emitted from the stream.
* Information about the user who sent the invitation is included in the event as `parent`.
3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
3. Send a request to `games/reversi/match` including the `id` of the `parent` as `user_id`
4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
* `i`: botアカウントのAPIキー
* `game`: `game`の`id`
4. If the request suceeds, information about the game will be returned. Then, send a request to the `games/reversi-game` stream with the following parameters:
* `i`: API key of the bot account
* `game`: The `id` of the `game`
5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
5. In the meanwhile, the opponent can modify the game's settings. Each time this happens, a `update-settings` event is emitted, so implement logic to handle these events if necessary.
6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
6. Once satisfied with the settings, send a `{ type: 'accept' }` message to the stream.
7. ゲームが開始すると、`started`イベントが流れてくる
* イベントの中身にはゲーム情報が含まれている
7. When the game starts, a `started` event is emitted.
* Information about the game's state is included in this event
8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
8. To place a stone, send `{ type: 'set', pos: <Position> }` to the stream (how to calculate positions will be explained later).
9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
* `color`として石の色が含まれている
* `pos`として位置情報が含まれている
9. When the opponent or you place a stone, the `set` event is emitted.
* Contains the color of the placed stone as `color`
* Contains the position the stone was placed at as `pos`
## 位置の計算法
8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
## Calculating positions
In the case of an 8x8 map, the squares on the board are arranged like this (squares are marked with their respective index):
```
+--+--+--+--+--+--+--+--+
| 0| 1| 2| 3| 4| 5| 6| 7|
@ -38,29 +38,29 @@ Misskeyのリバーシ機能に対応したBotの開発方法をここに記し
...
```
### X,Y座標 から インデックス に変換する
### Find indices from X, Y coordinates
```
pos = x + (y * mapWidth)
```
`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
`mapWidth` can be acquired from the `map` information as follows:
```
mapWidth = map[0].length
```
### インデックス から X,Y座標 に変換する
### Find X, Y coordinates from indices
```
x = pos % mapWidth
y = Math.floor(pos / mapWidth)
```
## マップ情報
マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
* `(スペース)` ... マス無し
* `-` ... マス
* `b` ... 初期配置される黒石
* `w` ... 初期配置される白石
## Map information
Map data is included within `map` of the game data. As the data is represented as an array of strings, each character represents a piece. Based on this data, you can reconstruct the map state:
* `(Space)` ... No piece
* `-` ... Piece
* `b` ... Piece placed first was black
* `w` ... Piece placed first was white
例えば、4*4の次のような単純なマップがあるとします:
For example, suppose a situation with the following 4*4 board:
```text
+---+---+---+---+
| | | | |
@ -73,23 +73,23 @@ y = Math.floor(pos / mapWidth)
+---+---+---+---+
```
この場合、マップデータはこのようになります:
In this case, the map data look like this:
```javascript
['----', '-wb-', '-bw-', '----']
```
## ユーザーにフォームを提示して対話可能Botを作成する
ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
## Creating an interactive bot showing a form to the user
To communicate with the user, you can show them a form in the settings screen. For example, to let the user select the strength of the Bot.
フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
To display a form, send the following message to the `reversi-game` stream:
```javascript
{
type: 'init-form',
body: [フォームコントロールの配列]
body: [Array of form control fields]
}
```
フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
From here on, the structure of form control elements will be explained. Form controls are objects arranged as follows:
```javascript
{
id: 'switch1',
@ -98,10 +98,10 @@ y = Math.floor(pos / mapWidth)
value: false
}
```
`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
`id` ... The ID of the control element. `type` ... The type of the control element.Explained later. `label` ... Text displayed alongside the control element. `value` ... Default value of the control element.
### フォームの操作を受け取る
ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
### Handling form interactions
When the user interacts with the form, an `update-form` event is emitted. Included in this event is the control element's ID as well as the value of the setting the user changed. For example, if the user flipped the switch from above to on, the following event would be emitted:
```javascript
{
id: 'switch1',
@ -109,52 +109,52 @@ y = Math.floor(pos / mapWidth)
}
```
### フォームコントロールの種類
### Types of form control elements
#### Switch
type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
type: `switch` Shows a slider.These can be helpful for functions that can be turned either on or off.
##### プロパティ
`label` ... スイッチに表記するテキスト。
##### Properties
`label` ... The text written on the switch.
#### ラジオボタン
type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
#### Radio button
type: `radio` Shows a radio button.These can be useful for choices.For example to choose the strength of the Bot.
##### プロパティ
`items` ... ラジオボタンの選択肢。例:
##### Properties
`items` ... The options of the radio button.E.g.:
```javascript
items: [{
label: '',
label: 'Weak',
value: 1
}, {
label: '',
label: 'Moderate',
value: 2
}, {
label: '',
label: 'Strong',
value: 3
}]
```
#### スライダー
type: `slider` スライダーを表示します。
#### Slider
type: `slider` Shows a slider.
##### プロパティ
`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
##### Properties
`min` ... The minimum value of the slider. `max` ... The maximum value of the slider. `step` ... The step between each value on the slider.
#### テキストボックス
type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
#### Textbox
type: `textbox` Shows a textbox.These can be used for all general purposes which require user input.
## ユーザーにメッセージを表示する
設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
## Showing a message to a user
This is another way to interact with the user from the settings screen, separate from showing them a form.It's possible to display a message to the user. For example, when the user selects a map that the bot does not support, a warning can be displayed. To display a message, send the following message to the stream:
```javascript
{
type: 'message',
body: {
text: 'メッセージ内容',
type: 'メッセージの種類'
text: 'Message contents',
type: 'Message type'
}
}
```
メッセージの種類: `success`, `info`, `warning`, `error`
Message types: `success`, `info`, `warning`, `error`
## 投了する
投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。
## Give up
To give up, send a request to <a href="./api/endpoints/games/reversi/games/surrender">this endpoint</a>.

View file

@ -1,25 +1,25 @@
# ストリーミングAPI
# Streaming API
ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
By using the streaming API, you can receive various data (such as new posts arriving on the timeline, receiving direct messages, notifications about being followed, etc) in real-time and perform various different actions based on it.
## ストリームに接続する
## Connecting to streams
ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
To use the streaming API, you must first connect to the **websocket** of the Misskey server.
以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
Connect to the websocket located at the below URL, including your credentials within the `i` parameter.E.g.:
```
%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
```
認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
Credentials refer to your own API key or the access token granted to an application by a user.
<div class="ui info">
<p><i class="fas fa-info-circle"></i> 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</p>
<p><i class="fas fa-info-circle"></i> To read about acquiring such credentials, please refer to <a href="./api">this document</a>.</p>
</div>
---
認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
It's possible to omit the credentials and use the Streaming API without logging in, but doing so will limit the data that can be received and the functions that can be used.E.g.:
```
%WS_URL%/streaming
@ -27,15 +27,15 @@
---
ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
To connect to the stream, using the later-mentioned API or subscribing to individual posts is possible. At this stage however it is not possible to receive timeline information about things such as new posts arriving yet. To do this, connecting to later-mentioned **Channels** is required.
**ストリームでのやり取りはすべてJSONです。**
**All interactions of sending to and receiving from the Stream are done in JSON format.**
## Channels
MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
Within the Misskey Streaming API, a concept called Channels exists.These are used for the purpose of separating which data to receive. When first connecting to the Misskey Stream, you can not receive real-time updates yet. By connecting to channels in the stream, both sending and receiving various information related to said channels becomes possible.
### チャンネルに接続する
チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
### Connecting to a channel
To connect to a channel, send a message in JSON format like the following to the stream:
```json
{
@ -50,19 +50,19 @@ MisskeyのストリーミングAPIにはチャンネルという概念があり
}
```
ここで、
* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
Here,
* `channel` specifies the name of the channel to connect to.A list of valid channels will be given later.
* `id` contains an arbitrary ID for both sending to and receiving from this channel.The stream sends out various different messages, so to differentiate which channel a message came from, such an ID is required.This ID can be something such as an UUID or a simple random number generator output.
* `params` include the parameters for connecting to the channel.Which parameters are required for connecting varies by channel.For channels which do not require any parameters, this property can be omitted.
<div class="ui info">
<p><i class="fas fa-info-circle"></i> IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</p>
<p><i class="fas fa-info-circle"></i> These IDs should be unique for each individual connection to a channel, not for each channel only.This is for cases in which multiple different connections with different parameters are made to the same channel.</p>
</div>
### チャンネルからのメッセージを受け取る
例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
### Receiving messages from channels
For example, when an event is emitted in one of the timeline channels due to a new post being made.By receiving such messages, it's possible to become aware of new posts being made in a timeline in real-time.
チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
When a channel sends a message, a JSON message like the following will be transmitted:
```json
{
type: 'channel',
@ -76,15 +76,15 @@ MisskeyのストリーミングAPIにはチャンネルという概念があり
}
```
ここで、
* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
Here,
* `id` refers to the ID that was previously set when connecting to the channel.Using this, it is possible to figure out which channel a message came from.
* `type` contains the type of this message.Which types of messages are sent varies depending on the channel the message came from.
* `body` contains the actual contents of this message.What kind of data is included varies depending on the channel the message came from.
### チャンネルに向けてメッセージを送信する
チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
### Sending messages to channels
Depending on the channel, it is not only possible to receive messages, but also to send messages to the channel which can then trigger various different actions.
チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
To send a message to a channel, send a message in JSON format like the following one to the stream:
```json
{
type: 'channel',
@ -98,13 +98,13 @@ MisskeyのストリーミングAPIにはチャンネルという概念があり
}
```
ここで、
* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
Here,
* `id` refers to the ID that was previously set when connecting to the channel.Using this, it is possible to tell for which channel a message is intended.
* `type` sets the type of this message.The types of messages a channel accepts varies depending on the channel the message is being sent to.
* `body` sets the actual contents of the message.The types of content a channel accepts varies depending on which channel it is being sent to.
### チャンネルから切断する
チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
### Disconnecting from a channel
To connect to a channel, send a JSON message like the following to the stream:
```json
{
@ -115,14 +115,14 @@ MisskeyのストリーミングAPIにはチャンネルという概念があり
}
```
ここで、
* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
Here,
* `id` refers to the ID that was previously set when connecting to the channel.
## ストリームを経由してAPIリクエストする
## Making API requests via streams
ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
It is possible to send requests to the API without a HTTP request by using the Stream.Doing so might help with keeping code cleaner and more efficient.
ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
To send an API request through the stream, send a JSON message like the following to the stream:
```json
{
type: 'api',
@ -136,18 +136,18 @@ MisskeyのストリーミングAPIにはチャンネルという概念があり
}
```
ここで、
* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
* `data`には、エンドポイントのパラメータを含めます。
Here,
* `id` must be set to an unique ID with which to identify separate request responses.This can be something such as an UUID or a simple random number generator output.
* `endpoint` contains the API endpoint to which the request is sent.
* `data` contains the endpoint parameters to send.
<div class="ui info">
<p><i class="fas fa-info-circle"></i> APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</p>
<p><i class="fas fa-info-circle"></i> Please check the API reference for possible API endpoints and parameters.</p>
</div>
### レスポンスの受信
### Receiving responses
APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
Once you send a request to the API, the stream will send a response message similar to the following:
```json
{
@ -158,23 +158,23 @@ APIへリクエストすると、レスポンスがストリームから次の
}
```
ここで、
* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
* `body`には、レスポンスが含まれています。
Here,
* the `xxxxxxxxxxxxxxxx` part will normally be replaced with that request's previously set `id`.Due to this, it is easy to tell which response corresponds to which request.
* the actual response data is included as `body`.
## 投稿のキャプチャ
## Post capturing
Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
Misskey provides a structure called Post capturing".This structure makes it possible to receive events about a targeted post from the stream.
例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
For example, to fetch and display a timeline to a user.Imagine that someone reacts to a post on this timeline.
しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
Since the client does not have any way of knowing that a certain post has received a reaction, it is not possible to reflect the reaction on this post in real-time.
この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
To solve this problem, Misskey introduced the feature of Post capturing.If you capture a post, events related to said post will be transmitted in real-time, allowing you to reflect the reaction to it on the timeline immediately.
### 投稿をキャプチャする
### Capturing a post
投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
To capture a post, send a message like the following to the stream:
```json
{
@ -185,12 +185,12 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
}
```
ここで、
* `id`にキャプチャしたい投稿の`id`を設定します。
Here,
* the value of `id` must be the `id` of the post to capture.
このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
Sending this message requests Misskey to capture it and thus events related to this post will start to be emitted.
例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
For example, when a reaction is added to the post, the following message will be emitted:
```json
{
@ -206,20 +206,20 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
}
```
ここで、
* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
* `body`内の`type`に、イベントの種類が設定されます。
* `body`内の`body`に、イベントの詳細が設定されます。
Here,
* the ID of the note that caused the event is included in the `id` of the `body`.
* the type of the event is included in the `type` of the `body`.
* the details of the event are included in the `body` of the `body`.
#### イベントの種類
#### Types of events
##### `reacted`
その投稿にリアクションがされた時に発生します。
This event is emitted when a reaction is added to the captured post.
* `reaction`に、リアクションの種類が設定されます。
* `userId`に、リアクションを行ったユーザーのIDが設定されます。
* the type of reaction is included as `reaction`.
* the ID of the user who sent the reaction is included as `userId`.
:
E.g.:
```json
{
type: 'noteUpdated',
@ -235,11 +235,11 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
```
##### `deleted`
その投稿が削除された時に発生します。
This event is emitted when the captured post is deleted.
* `deletedAt`に、削除日時が設定されます。
* The date and time of deletion is included within `deletedAt`.
:
E.g.:
```json
{
type: 'noteUpdated',
@ -254,12 +254,12 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
```
##### `pollVoted`
その投稿に添付されたアンケートに投票された時に発生します。
This event is emitted when a vote is submitted to a poll attached to the captured post.
* `choice`に、選択肢IDが設定されます。
* `userId`に、投票を行ったユーザーのIDが設定されます。
* the ID of the selected option is included as `choice`.
* the ID of the user who sent the vote is included as `userId`.
:
E.g.:
```json
{
type: 'noteUpdated',
@ -274,11 +274,11 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
}
```
### 投稿のキャプチャを解除する
### Canceling post capturing
その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
Once a post is no longer displayed on the screen and events related to it do not need to be received any longer, please cancel post capturing on it.
次のメッセージを送信します:
Send the following message:
```json
{
@ -289,66 +289,66 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
}
```
ここで、
* `id`にキャプチャを解除したい投稿の`id`を設定します。
Here,
* the value of `id` must be the `id` of the post for which to cancel capturing.
このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
Once you send this message, events related to this post will no longer be transmitted.
# チャンネル一覧
# List of channels
## `main`
アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
Basic information related to the account will be transmitted here.This channel does not have any parameters.
### 流れてくるイベント一覧
### List of sent events
#### `renote`
自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
This event will be emitted when one of your posts is renoted.If you renote your own post, it will not be emitted.
#### `mention`
誰かからメンションされたときに発生するイベントです。
This event will be emitted when someone mentions you.
#### `readAllNotifications`
自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
This event indicates that all your notifications have been set to read.It is expected to be used in cases such as turning off the indicator that there are unread notifications.
#### `meUpdated`
自分の情報が更新されたことを表すイベントです。
This event indicates that your profile information has been updated.
#### `follow`
自分が誰かをフォローしたときに発生するイベントです。
This event will be emitted when you follow someone.
#### `unfollow`
自分が誰かのフォローを解除したときに発生するイベントです。
This event will be emitted when you unfollow someone.
#### `followed`
自分が誰かにフォローされたときに発生するイベントです。
This event will be emitted when someone follows you.
## `homeTimeline`
ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
Information about posts on the home timeline will be transmitted here.This channel does not have any parameters.
### 流れてくるイベント一覧
### List of sent events
#### `note`
タイムラインに新しい投稿が流れてきたときに発生するイベントです。
This event will be emitted when a new post arrives in the timeline.
## `localTimeline`
ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
Information about posts on the local timeline will be transmitted here.This channel does not have any parameters.
### 流れてくるイベント一覧
### List of sent events
#### `note`
ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
This event will be emitted when a new post arrives in the local timeline.
## `hybridTimeline`
ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
Information about posts on the social timeline will be transmitted here.This channel does not have any parameters.
### 流れてくるイベント一覧
### List of sent events
#### `note`
ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
This event will be emitted when a new post arrives in the social timeline.
## `globalTimeline`
グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
Information about posts on the global timeline will be transmitted here.This channel does not have any parameters.
### 流れてくるイベント一覧
### List of sent events
#### `note`
グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
This event will be emitted when a new post arrives in the global timeline.

View file

@ -0,0 +1,4 @@
# AiScript
## 関数
デフォルトで値渡しです。

58
src/docs/th-TH/api.md Normal file
View file

@ -0,0 +1,58 @@
# Misskey API
MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。
APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。
## アクセストークンの取得
基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。
* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む
* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む
### 自分自身のアクセストークンを手動発行する
「設定 > API」で、自分のアクセストークンを発行できます。
[「APIの使い方」へ進む](#APIの使い方)
### アプリケーション利用者にアクセストークンの発行をリクエストする
アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
#### Step 1
UUIDを生成する。以後これをセッションIDと呼びます。
> このセッションIDは毎回生成し、使いまわさないようにしてください。
#### Step 2
`{_URL_}/miauth/{session}`をユーザーのブラウザで表示させる。`{session}`の部分は、セッションIDに置き換えてください。
> 例: `{_URL_}/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f`
表示する際、URLにクエリパラメータとしていくつかのオプションを設定できます:
* `name` ... アプリケーション名
* > 例: `MissDeck`
* `icon` ... アプリケーションのアイコン画像URL
* > 例: `https://missdeck.example.com/icon.png`
* `callback` ... 認証が終わった後にリダイレクトするURL
* > 例: `https://missdeck.example.com/callback`
* リダイレクト時には、`session`というクエリパラメータでセッションIDが付きます
* `permission` ... アプリケーションが要求する権限
* > 例: `write:notes,write:following,read:drive`
* 要求する権限を`,`で区切って列挙します
* どのような権限があるかは[APIリファレンス](/api-doc)で確認できます
#### Step 3
ユーザーが発行を許可した後、`{_URL_}/api/miauth/{session}/check`にPOSTリクエストすると、レスポンスとしてアクセストークンを含むJSONが返ります。
レスポンスに含まれるプロパティ:
* `token` ... ユーザーのアクセストークン
* `user` ... ユーザーの情報
[「APIの使い方」へ進む](#APIの使い方)
## APIの使い方
**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。
* [APIリファレンス](/api-doc)
* [ストリーミングAPI](./stream)

View file

@ -0,0 +1,74 @@
# プラグインの作成
Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
## メタデータ
プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
### name
プラグイン名
### author
プラグイン作者
### version
プラグインバージョン。数値を指定してください。
### description
プラグインの説明
### permissions
プラグインが要求する権限。MisskeyAPIにリクエストする際に用いられます。
### config
プラグインの設定情報を表すオブジェクト。 キーに設定名、値に以下のプロパティを含めます。
#### type
設定値の種類を表す文字列。以下から選択します。 string number boolean
#### label
ユーザーに表示する設定名
#### description
設定の説明
#### default
設定のデフォルト値
## APIリファレンス
AiScript標準で組み込まれているAPIは掲載しません。
### Mk:dialog(title text type)
ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると info になります。
### Mk:confirm(title text type)
確認ダイアログを表示します。typeには以下の値が設定できます。 info success warn error question 省略すると question になります。 ユーザーが"OK"を選択した場合は true を、"キャンセル"を選択した場合は false が返ります。
### Mk:api(endpoint params)
Misskey APIにリクエストします。第一引数にエンドポイント名、第二引数にパラメータオブジェクトを渡します。
### Mk:save(key value)
任意の値に任意の名前を付けて永続化します。永続化した値は、AiScriptコンテキストが終了しても残り、Mk:loadで読み取ることができます。
### Mk:load(key)
Mk:saveで永続化した指定の名前の値を読み取ります。
### Plugin:register_post_form_action(title fn)
投稿フォームにアクションを追加します。第一引数にアクション名、第二引数にアクションが選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に投稿フォームオブジェクトが渡されます。
### Plugin:register_note_action(title fn)
ノートメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
### Plugin:register_user_action(title fn)
ユーザーメニューに項目を追加します。第一引数に項目名、第二引数に項目が選択された際のコールバック関数を渡します。 コールバック関数には、第一引数に対象のユーザーオブジェクトが渡されます。
### Plugin:register_note_view_interruptor(fn)
UIに表示されるート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
### Plugin:register_note_post_interruptor(fn)
ノート投稿時にノート情報を書き換えます。 コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。 コールバック関数の返り値でノートが書き換えられます。
### Plugin:open_url(url)
第一引数に渡されたURLをブラウザの新しいタブで開きます。
### Plugin:config
プラグインの設定が格納されるオブジェクト。プラグイン定義のconfigで設定したキーで値が入ります。

View file

@ -0,0 +1,2 @@
# カスタム絵文字
カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。

18
src/docs/th-TH/deck.md Normal file
View file

@ -0,0 +1,18 @@
# デッキ
デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
## カラムの追加
デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
## カラムの移動
カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
## カラムの水平分割
カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
## カラムの設定
カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
## デッキの設定
デッキに関する設定は、[settings/deck](/settings/deck)で行えます。

2
src/docs/th-TH/follow.md Normal file
View file

@ -0,0 +1,2 @@
# フォロー
ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。

View file

@ -0,0 +1,68 @@
# キーボードショートカット
## グローバル
これらのショートカットは基本的にどこでも使えます。
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
<tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>検索</td><td><b>S</b>earch</td></tr>
<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
</tbody>
</table>
## 投稿にフォーカスされた状態
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
<tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
<tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
</tbody>
</table>
## Renoteフォーム
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
</tbody>
</table>
## リアクションフォーム
デフォルトで「👍」にフォーカスが当たっている状態です。
<table>
<thead>
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
</tbody>
</table>

2
src/docs/th-TH/mfm.md Normal file
View file

@ -0,0 +1,2 @@
# MFM
MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。

13
src/docs/th-TH/mute.md Normal file
View file

@ -0,0 +1,13 @@
# ミュート
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
* そのユーザーからの通知
* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。

10
src/docs/th-TH/pages.md Normal file
View file

@ -0,0 +1,10 @@
# Pages
## 変数
変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b><b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b><b>C</b>を参照することはできません。
ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。
関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。

View file

@ -0,0 +1,11 @@
# リアクション
他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
## リアクションピッカーのカスタマイズ
ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
## リモート投稿へのリアクションについて
リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。 また、相手がMisskeyであったとしても、カスタム絵文字リアクションは伝わらず、自動的に「👍」等にフォールバックされます。
## リモートからのリアクションについて
リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。

View file

@ -0,0 +1,160 @@
# MisskeyリバーシBotの開発
Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。
1. `games/reversi`ストリームに以下のパラメータを付けて接続する:
* `i`: botアカウントのAPIキー
2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる
* イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている
3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する
4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する:
* `i`: botアカウントのAPIキー
* `game`: `game`の`id`
5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う
6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する
7. ゲームが開始すると、`started`イベントが流れてくる
* イベントの中身にはゲーム情報が含まれている
8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述)
9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる
* `color`として石の色が含まれている
* `pos`として位置情報が含まれている
## 位置の計算法
8x8のマップを考える場合、各マスの位置(インデックスと呼びます)は次のようになっています:
```
+--+--+--+--+--+--+--+--+
| 0| 1| 2| 3| 4| 5| 6| 7|
+--+--+--+--+--+--+--+--+
| 8| 9|10|11|12|13|14|15|
+--+--+--+--+--+--+--+--+
|16|17|18|19|20|21|22|23|
...
```
### X,Y座標 から インデックス に変換する
```
pos = x + (y * mapWidth)
```
`mapWidth`は、ゲーム情報の`map`から、次のようにして計算できます:
```
mapWidth = map[0].length
```
### インデックス から X,Y座標 に変換する
```
x = pos % mapWidth
y = Math.floor(pos / mapWidth)
```
## マップ情報
マップ情報は、ゲーム情報の`map`に入っています。 文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 それをもとにマップのデザインを知る事が出来ます:
* `(スペース)` ... マス無し
* `-` ... マス
* `b` ... 初期配置される黒石
* `w` ... 初期配置される白石
例えば、4*4の次のような単純なマップがあるとします:
```text
+---+---+---+---+
| | | | |
+---+---+---+---+
| | ○ | ● | |
+---+---+---+---+
| | ● | ○ | |
+---+---+---+---+
| | | | |
+---+---+---+---+
```
この場合、マップデータはこのようになります:
```javascript
['----', '-wb-', '-bw-', '----']
```
## ユーザーにフォームを提示して対話可能Botを作成する
ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。
フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します:
```javascript
{
type: 'init-form',
body: [フォームコントロールの配列]
}
```
フォームコントロールの配列については今から説明します。 フォームコントロールは、次のようなオブジェクトです:
```javascript
{
id: 'switch1',
type: 'switch',
label: 'Enable hoge',
value: false
}
```
`id` ... コントロールのID。 `type` ... コントロールの種類。後述します。 `label` ... コントロールと一緒に表記するテキスト。 `value` ... コントロールのデフォルト値。
### フォームの操作を受け取る
ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます:
```javascript
{
id: 'switch1',
value: true
}
```
### フォームコントロールの種類
#### スイッチ
type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
##### プロパティ
`label` ... スイッチに表記するテキスト。
#### ラジオボタン
type: `radio` ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。
##### プロパティ
`items` ... ラジオボタンの選択肢。例:
```javascript
items: [{
label: '弱',
value: 1
}, {
label: '中',
value: 2
}, {
label: '強',
value: 3
}]
```
#### スライダー
type: `slider` スライダーを表示します。
##### プロパティ
`min` ... スライダーの下限。 `max` ... スライダーの上限。 `step` ... 入力欄で刻むステップ値。
#### テキストボックス
type: `textbox` テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。
## ユーザーにメッセージを表示する
設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 メッセージを表示するには、次のメッセージをストリームに送信します:
```javascript
{
type: 'message',
body: {
text: 'メッセージ内容',
type: 'メッセージの種類'
}
}
```
メッセージの種類: `success`, `info`, `warning`, `error`
## 投了する
投了をするには、<a href="./api/endpoints/games/reversi/games/surrender">このエンドポイント</a>にリクエストします。

354
src/docs/th-TH/stream.md Normal file
View file

@ -0,0 +1,354 @@
# ストリーミングAPI
ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
## ストリームに接続する
ストリーミングAPIを利用するには、まずMisskeyサーバーに**websocket**接続する必要があります。
以下のURLに、`i`というパラメータ名で認証情報を含めて、websocket接続してください。例:
```
%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
```
認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。
<div class="ui info">
<p><i class="fas fa-info-circle"></i> 認証情報の取得については、<a href="./api">こちらのドキュメント</a>をご確認ください。</p>
</div>
---
認証情報は省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。例:
```
%WS_URL%/streaming
```
---
ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述する**チャンネル**に接続する必要があります。
**ストリームでのやり取りはすべてJSONです。**
## チャンネル
MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
### チャンネルに接続する
チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
```json
{
type: 'connect',
body: {
channel: 'xxxxxxxx',
id: 'foobar',
params: {
...
}
}
}
```
ここで、
* `channel`には接続したいチャンネル名を設定します。チャンネルの種類については後述します。
* `id`にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。
* `params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
<div class="ui info">
<p><i class="fas fa-info-circle"></i> IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。</p>
</div>
### チャンネルからのメッセージを受け取る
例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
```json
{
type: 'channel',
body: {
id: 'foobar',
type: 'something',
body: {
some: 'thing'
}
}
}
```
ここで、
* `id`には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。
* `type`にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。
* `body`にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
### チャンネルに向けてメッセージを送信する
チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
```json
{
type: 'channel',
body: {
id: 'foobar',
type: 'something',
body: {
some: 'thing'
}
}
}
```
ここで、
* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。
* `type`にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。
* `body`にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
### チャンネルから切断する
チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
```json
{
type: 'disconnect',
body: {
id: 'foobar'
}
}
```
ここで、
* `id`には前述したそのチャンネルに接続する際に設定したIDを設定します。
## ストリームを経由してAPIリクエストする
ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
```json
{
type: 'api',
body: {
id: 'xxxxxxxxxxxxxxxx',
endpoint: 'notes/create',
data: {
text: 'yee haw!'
}
}
}
```
ここで、
* `id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。
* `endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。
* `data`には、エンドポイントのパラメータを含めます。
<div class="ui info">
<p><i class="fas fa-info-circle"></i> APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。</p>
</div>
### レスポンスの受信
APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
```json
{
type: 'api:xxxxxxxxxxxxxxxx',
body: {
...
}
}
```
ここで、
* `xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。
* `body`には、レスポンスが含まれています。
## 投稿のキャプチャ
Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。
しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
### 投稿をキャプチャする
投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
```json
{
type: 'subNote',
body: {
id: 'xxxxxxxxxxxxxxxx'
}
}
```
ここで、
* `id`にキャプチャしたい投稿の`id`を設定します。
このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
```json
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'reacted',
body: {
reaction: 'like',
userId: 'yyyyyyyyyyyyyyyy'
}
}
}
```
ここで、
* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます。
* `body`内の`type`に、イベントの種類が設定されます。
* `body`内の`body`に、イベントの詳細が設定されます。
#### イベントの種類
##### `reacted`
その投稿にリアクションがされた時に発生します。
* `reaction`に、リアクションの種類が設定されます。
* `userId`に、リアクションを行ったユーザーのIDが設定されます。
例:
```json
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'reacted',
body: {
reaction: 'like',
userId: 'yyyyyyyyyyyyyyyy'
}
}
}
```
##### `deleted`
その投稿が削除された時に発生します。
* `deletedAt`に、削除日時が設定されます。
例:
```json
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'deleted',
body: {
deletedAt: '2018-10-22T02:17:09.703Z'
}
}
}
```
##### `pollVoted`
その投稿に添付されたアンケートに投票された時に発生します。
* `choice`に、選択肢IDが設定されます。
* `userId`に、投票を行ったユーザーのIDが設定されます。
例:
```json
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'pollVoted',
body: {
choice: 2,
userId: 'yyyyyyyyyyyyyyyy'
}
}
}
```
### 投稿のキャプチャを解除する
その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
次のメッセージを送信します:
```json
{
type: 'unsubNote',
body: {
id: 'xxxxxxxxxxxxxxxx'
}
}
```
ここで、
* `id`にキャプチャを解除したい投稿の`id`を設定します。
このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
# チャンネル一覧
## `main`
アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
### 流れてくるイベント一覧
#### `renote`
自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
#### `mention`
誰かからメンションされたときに発生するイベントです。
#### `readAllNotifications`
自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
#### `meUpdated`
自分の情報が更新されたことを表すイベントです。
#### `follow`
自分が誰かをフォローしたときに発生するイベントです。
#### `unfollow`
自分が誰かのフォローを解除したときに発生するイベントです。
#### `followed`
自分が誰かにフォローされたときに発生するイベントです。
## `homeTimeline`
ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
### 流れてくるイベント一覧
#### `note`
タイムラインに新しい投稿が流れてきたときに発生するイベントです。
## `localTimeline`
ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
### 流れてくるイベント一覧
#### `note`
ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
## `hybridTimeline`
ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
### 流れてくるイベント一覧
#### `note`
ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
## `globalTimeline`
グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
### 流れてくるイベント一覧
#### `note`
グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。

68
src/docs/th-TH/theme.md Normal file
View file

@ -0,0 +1,68 @@
# テーマ
テーマを設定して、Misskeyクライアントの見た目を変更できます。
## テーマの設定
設定 > テーマ
## テーマを作成する
テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
``` js
{
id: '17587283-dd92-4a2c-a22c-be0637c9e22a',
name: 'Danboard',
author: 'syuilo',
base: 'light',
props: {
accent: 'rgb(218, 141, 49)',
bg: 'rgb(218, 212, 190)',
fg: 'rgb(115, 108, 92)',
panel: 'rgb(236, 232, 220)',
renote: 'rgb(100, 152, 106)',
link: 'rgb(100, 152, 106)',
mention: '@accent',
hashtag: 'rgb(100, 152, 106)',
header: 'rgba(239, 227, 213, 0.75)',
navBg: 'rgb(216, 206, 182)',
inputBorder: 'rgba(0, 0, 0, 0.1)',
},
}
```
* `id` ... テーマの一意なID。UUIDをおすすめします。
* `name` ... テーマ名
* `author` ... テーマの作者
* `desc` ... テーマの説明(オプション)
* `base` ... 明るいテーマか、暗いテーマか
* `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
* テーマはここで設定されたベーステーマを継承します。
* `props` ... テーマのスタイル定義。これから説明します。
### テーマのスタイル定義
`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
#### バリューで使える構文
* 16進数で表された色
* 例: `#00ff00`
* `rgb(r, g, b)`形式で表された色
* 例: `rgb(0, 255, 0)`
* `rgb(r, g, b, a)`形式で表された透明度を含む色
* 例: `rgba(0, 255, 0, 0.5)`
* 他のキーの値の参照
* `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
* 例: `@panel`
* 定数(後述)の参照
* `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
* 例: `$main`
* 関数(後述)
* `:{関数名}<{引数}<{色}`
#### 定数
「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
#### 関数
wip

View file

@ -0,0 +1,15 @@
# タイムラインの比較
https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing
## ホーム
自分のフォローしているユーザーの投稿
## ローカル
全てのローカルユーザーの「ホーム」指定されていない投稿
## ソーシャル
自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿
## グローバル
全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿

View file

@ -53,13 +53,13 @@ Misskey API请求在第一个参数中传递终端名称在第二个参数中
读取由Mk:save生成的持久化的值。
### Plugin:register_post_form_action(title fn)
将操作添加到发布表单。第一个参数是操作名,在第二个参数中选择操作时传入回调函数。 帖子表单对象作为第一个参数传给回调函数。
将操作添加到发布表单。第一个参数是操作名,第二个参数是该操作对应的回调函数。 帖子表单对象作为第一个参数传给回调函数。
### Plugin:register_note_action(title fn)
将项目添加到帖子菜单。第一个参数是项目名,在第二个参数中选择项目时传入回调函数。 目标项目对象作为第一个参数传给回调函数。
将项目添加到帖子菜单。第一个参数是菜单项名字,第二个参数是该菜单项对应的回调函数。 目标项目对象作为第一个参数传给回调函数。
### Plugin:register_user_action(title fn)
将项目添加到用户菜单。第一个参数是项目名,在第二个参数中选择项目时传入回调函数。 目标用户对象作为第一个参数传给回调函数。
将项目添加到用户菜单。第一个参数是菜单项名字,第二个参数是该菜单项对应的回调函数。 目标用户对象作为第一个参数传给回调函数。
### Plugin:register_note_view_interruptor(fn)
改写显示在UI上的帖子信息。 目标帖子对象作为第一个参数传给回调函数。 该帖子将会使用回调函数的返回值进行改写。

View file

@ -1,2 +1,2 @@
# 自定义表情符号
カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります
表情符号功能可以让您在各个地方使用预置的图像表情。 它可以用于发帖,回应,聊天,自我介绍和姓名等地方。 要在这些位置使用自定义表情符号,请按表情符号选择按钮(如果有)或键入`:`以显示表情符号建议。 如果在文本中找到格式为`:foo:`的字符串,则将`foo`部分解释为自定义表情符号名称,并在显示时替换为相应的自定义表情符号

View file

@ -2,14 +2,14 @@
卡片是一种可用的用户界面。它的特点是能够通过并排显示多个视图(称为 "列")来构建高度可定制和信息丰富的用户界面。
## 列的新增
## 添加
您可以在卡牌背景上点击右键单击「添加列」来新增任意的列。
## 列的移动
可以通过拖放列来与其他列互换位置,也可以从列菜单中移动列(右键单击列)。
## 移动
可以通过拖放列来与其他列互换位置,也可以从列菜单中移动列(右键单击列标题)。
## 列的水平分割
列不仅可以从左到右叠加,还可以上下叠加。 如果打开列菜单,选择「向左折叠」,当前列将被移到左列下。 要解除垂直分割,请选择列菜单中的「向右弹出」。
## 水平拆分列
列不仅可以从左到右排列,还可以垂直叠加。 如果打开列菜单,选择「向左折叠」,当前列将被移到左列下方。 要取消垂直折叠,请选择列菜单中的「向右弹出」。
## 列的设置
选择列菜单的「编辑」时,可编辑当前列的设置。您可以重新命名列,或是改变列的宽度。

View file

@ -1,2 +1,2 @@
# 关注中
ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします
当您关注一名用户时,您可以在您的时间线上看到该用户的帖子。但是不包含该用户对其他用户的回复。 要关注一名用户,请点击该用户页面上的“关注”按钮。如果需要取消关注,请再次点击该按钮

View file

@ -1,68 +1,68 @@
# キーボードショートカット
# 键盘快捷键
## 全局
これらのショートカットは基本的にどこでも使えます。
这些快捷键基本上可以在任何地方使用
<table>
<thead>
<tr><th>ショートカット</th><th></th><th></th></tr>
<tr><th>快捷键</th><th></th><th></th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
<tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>发新帖</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
<tr><td><kbd class="key">T</kbd></td><td>转到时间线最新发布的内容</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>显示/隐藏通知</td><td><b>N</b>otifications</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>搜索</td><td><b>S</b>earch</td></tr>
<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>显示帮助</td><td><b>H</b>elp</td></tr>
</tbody>
</table>
## 投稿にフォーカスされた状態
## 帖子相关操作
<table>
<thead>
<tr><th>ショートカット</th><th></th><th></th></tr>
<tr><th>快捷键</th><th></th><th></th></tr>
</thead>
<tbody>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
<tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
<tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>移动到上一个帖子</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>移动到下一个帖子</td><td>-</td></tr>
<tr><td><kbd class="key">R</kbd></td><td>打开回复框</td><td><b>R</b>eply</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>打开转发框</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>快速转发(不打开转发框)</td><td>-</td></tr>
<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>打开回应框</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>根据相应数字发表回应(详情请参考相关说明)</td><td>-</td></tr>
<tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>添加到收藏夹</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
<tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>删除帖子</td><td><b>D</b>elete</tr>
<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>打开帖子菜单</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>显示或隐藏CW隐藏的部分</td><td><b>S</b>how, <b>S</b>ee</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>取消选中</td><td>-</td></tr>
</tbody>
</table>
## Renoteフォーム
## 转发框
<table>
<thead>
<tr><th>ショートカット</th><th></th><th></th></tr>
<tr><th>快捷键</th><th></th><th></th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd></td><td>转发</td><td>-</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>打开转发框</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>关闭转发框</td><td>-</td></tr>
</tbody>
</table>
## リアクションフォーム
デフォルトで「👍」にフォーカスが当たっている状態です
## 回应框
默认使用“👍”作为回应
<table>
<thead>
<tr><th>ショートカット</th><th></th><th></th></tr>
<tr><th>快捷键</th><th></th><th></th></tr>
</thead>
<tbody>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定</td><td>-</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">K</kbd></td><td>移动到上一个回应</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">J</kbd></td><td>移动到下一个回应</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>移动到左边一个回应</td><td>-</td></tr>
<tr><td><kbd class="key"></kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>移动到右边一个回应</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>回应确认</td><td>-</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>根据相应数字发表回应</td><td>-</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>取消回应</td><td>-</td></tr>
</tbody>
</table>

View file

@ -1,2 +1,2 @@
# MFM
MFM是Misskey Flavored Markdown的缩写是一种专用的标记语言可以用在Misskey的任何地方。 MFM中可用的语法可以在[MFMチートシート](/mfm-cheat-sheet)中找到。
MFM是Misskey Flavored Markdown的缩写是一种专用的标记语言可以用在Misskey的任何地方。 MFM中可用的语法可以在[MFM代码速查表](/mfm-cheat-sheet)中找到。

View file

@ -1,13 +1,13 @@
# 屏蔽
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
当您屏蔽用户时Misskey不再显示有关该用户的以下内容
* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
* そのユーザーからの通知
* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
* 时间线帖子搜索结果中的该用户的帖子(以及对这些帖子的回复和转发)。
* 该用户的通知
* 用户在消息历史记录列表中的消息历史记录
ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します
要屏蔽用户,请在该用户页面上点击该用户的“屏蔽”按钮
ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません
不会通知对方您已将其屏蔽,并且对方也不知道自己被屏蔽
設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます
您可以在“设置”>“屏蔽”下查看被屏蔽的用户列表

View file

@ -1,7 +1,7 @@
# Pages
# 页面
## 变量
変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
您可以使用变量创建动态页面。您可以在文本中使用<b>{变量名}</b>的格式来引用变量的值。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。
変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b><b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b><b>C</b>を参照することはできません。

View file

@ -300,7 +300,7 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
### 流れてくるイベント一覧
#### `renote`
#### `转发`
自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
#### `mention`

View file

@ -1,15 +1,15 @@
# タイムラインの比較
# 时间线的比较
https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing
https://docs.google.com/spreadsheets/d/1YIfTiY6-XccWLYR8SBnJWcY642Rq_jkTEL06BVlPYlQ/edit?usp=sharing
## 首页
自分のフォローしているユーザーの投稿
您关注的用户的帖文
## 本地
全てのローカルユーザーの「ホーム」指定されていない投稿
所有非指定为「首页」的本地用户的帖文
## 社交
自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿
您关注的用户的帖文,和所有未指定为「首页」的本地用户的帖文
## 全局
全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿
所有本地用户的未指定为「首页」的帖文,和所有到达服务器的远程用户的未指定为「首页」的帖文

View file

@ -1,4 +1,4 @@
# 反應
# 情感
他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
## リアクションピッカーのカスタマイズ