Merge branch 'develop'

This commit is contained in:
syuilo 2021-05-21 17:27:47 +09:00
commit dd2c21ab92
33 changed files with 2330 additions and 524 deletions

View File

@ -1 +1 @@
v16.0.0 v16.2.0

View File

@ -1,4 +1,4 @@
FROM node:16.0.0-alpine3.13 AS base FROM node:16.2.0-alpine3.13 AS base
ENV NODE_ENV=production ENV NODE_ENV=production

View File

@ -731,9 +731,11 @@ active: "Aktiv"
offline: "Offline" offline: "Offline"
notRecommended: "Nicht empfohlen" notRecommended: "Nicht empfohlen"
botProtection: "Bot-Schutz" botProtection: "Bot-Schutz"
instanceBlocking: "Blockierte Instanzen"
selectAccount: "Benutzerkonto auswählen" selectAccount: "Benutzerkonto auswählen"
enabled: "Aktiviert" enabled: "Aktiviert"
disabled: "Deaktiviert" disabled: "Deaktiviert"
quickAction: "Schnellaktionen"
user: "Benutzer" user: "Benutzer"
administration: "Verwaltung" administration: "Verwaltung"
accounts: "Benutzerkonten" accounts: "Benutzerkonten"

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,3 @@
--- ---
_lang_: "Nederlands" _lang_: "Nederlands"
headlineMisskey: "Netwerk verbonden door notities"

View File

@ -7,6 +7,7 @@ search: "Szukaj"
notifications: "Powiadomienia" notifications: "Powiadomienia"
username: "Nazwa użytkownika" username: "Nazwa użytkownika"
password: "Hasło" password: "Hasło"
forgotPassword: "Nie pamiętam hasła"
fetchingAsApObject: "Pobieranie z Fediwersum…" fetchingAsApObject: "Pobieranie z Fediwersum…"
ok: "OK" ok: "OK"
gotIt: "Rozumiem!" gotIt: "Rozumiem!"
@ -65,6 +66,7 @@ download: "Pobierz"
driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Zniknie również notatka, do której dołączony jest ten plik." driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Zniknie również notatka, do której dołączony jest ten plik."
unfollowConfirm: "Czy na pewno chcesz przestać obserwować {name}?" unfollowConfirm: "Czy na pewno chcesz przestać obserwować {name}?"
exportRequested: "Zażądałeś eksportu. Może to zająć trochę czasu. Po zakończeniu eksportu zostanie on dodany do Twoich \"dysków\"." exportRequested: "Zażądałeś eksportu. Może to zająć trochę czasu. Po zakończeniu eksportu zostanie on dodany do Twoich \"dysków\"."
importRequested: "Zażądano importu. Może to zająć chwilę."
lists: "Listy" lists: "Listy"
noLists: "Nie masz żadnych list" noLists: "Nie masz żadnych list"
note: "Utwórz wpis" note: "Utwórz wpis"
@ -136,6 +138,7 @@ flagAsBot: "To konto jest botem"
flagAsCat: "To konto jest kotem" flagAsCat: "To konto jest kotem"
flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot." flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot."
autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz" autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz"
addAccount: "Dodaj konto"
loginFailed: "Nie udało się zalogować" loginFailed: "Nie udało się zalogować"
showOnRemote: "Zobacz na zdalnej instancji" showOnRemote: "Zobacz na zdalnej instancji"
general: "Ogólne" general: "Ogólne"
@ -291,12 +294,15 @@ reject: "Odrzuć"
normal: "Normalny" normal: "Normalny"
instanceName: "Nazwa instancji" instanceName: "Nazwa instancji"
instanceDescription: "Opis instancji" instanceDescription: "Opis instancji"
maintainerName: "Administrator"
maintainerEmail: "E-mail administratora"
tosUrl: "Adres URL regulaminu" tosUrl: "Adres URL regulaminu"
thisYear: "Rok" thisYear: "Rok"
thisMonth: "Miesiąc" thisMonth: "Miesiąc"
today: "Dziś" today: "Dziś"
dayX: "{day}" dayX: "{day}"
monthX: "{month}" monthX: "{month}"
yearX: "{year}"
pages: "Strony" pages: "Strony"
integration: "Integracja" integration: "Integracja"
connectSerice: "Połącz" connectSerice: "Połącz"
@ -332,6 +338,7 @@ manageAntennas: "Zarządzaj Antenami"
name: "Nazwa" name: "Nazwa"
antennaSource: "Źródło Anteny" antennaSource: "Źródło Anteny"
antennaExcludeKeywords: "Wykluczone słowa kluczowe" antennaExcludeKeywords: "Wykluczone słowa kluczowe"
notifyAntenna: "Powiadamiaj o nowych wpisach"
withFileAntenna: "Filtruj tylko wpisy z załączonym plikiem" withFileAntenna: "Filtruj tylko wpisy z załączonym plikiem"
enableServiceworker: "Włącz ServiceWorker" enableServiceworker: "Włącz ServiceWorker"
antennaUsersDescription: "Wypisz po jednej nazwie użytkownika w linii" antennaUsersDescription: "Wypisz po jednej nazwie użytkownika w linii"
@ -358,6 +365,7 @@ administrator: "Admin"
token: "Token" token: "Token"
twoStepAuthentication: "Uwierzytelnianie dwuskładnikowe" twoStepAuthentication: "Uwierzytelnianie dwuskładnikowe"
moderator: "Moderator" moderator: "Moderator"
nUsersMentioned: "{n} wspomnianych użytkowników"
securityKey: "Klucz bezpieczeństwa" securityKey: "Klucz bezpieczeństwa"
securityKeyName: "Nazwa klucza" securityKeyName: "Nazwa klucza"
registerSecurityKey: "Zarejestruj klucz bezpieczeństwa" registerSecurityKey: "Zarejestruj klucz bezpieczeństwa"
@ -397,6 +405,7 @@ retype: "Wprowadź ponownie"
noteOf: "Wpisy {user}" noteOf: "Wpisy {user}"
inviteToGroup: "Zaproś do grupy" inviteToGroup: "Zaproś do grupy"
maxNoteTextLength: "Limit znaków dla wpisów" maxNoteTextLength: "Limit znaków dla wpisów"
quoteAttached: "Zacytowano"
quoteQuestion: "Czy na pewno chcesz umieścić cytat?" quoteQuestion: "Czy na pewno chcesz umieścić cytat?"
noMessagesYet: "Nie napisano jeszcze wiadomości" noMessagesYet: "Nie napisano jeszcze wiadomości"
newMessageExists: "Masz nową wiadomość" newMessageExists: "Masz nową wiadomość"
@ -419,6 +428,7 @@ signinWith: "Zaloguj się z {x}"
signinFailed: "Nie udało się zalogować. Wprowadzona nazwa użytkownika lub hasło są nieprawidłowe." signinFailed: "Nie udało się zalogować. Wprowadzona nazwa użytkownika lub hasło są nieprawidłowe."
tapSecurityKey: "Wybierz swój klucz bezpieczeństwa" tapSecurityKey: "Wybierz swój klucz bezpieczeństwa"
or: "Lub" or: "Lub"
language: "Język"
uiLanguage: "Język wyświetlania UI" uiLanguage: "Język wyświetlania UI"
groupInvited: "Zaproszony(-a) do grupy" groupInvited: "Zaproszony(-a) do grupy"
aboutX: "O {x}" aboutX: "O {x}"
@ -432,6 +442,7 @@ category: "Kategoria"
tags: "Tagi" tags: "Tagi"
docSource: "Źródło tego dokumentu" docSource: "Źródło tego dokumentu"
createAccount: "Utwórz konto" createAccount: "Utwórz konto"
existingAccount: "Istniejące konto"
regenerate: "Wygeneruj ponownie" regenerate: "Wygeneruj ponownie"
fontSize: "Rozmiar czcionki" fontSize: "Rozmiar czcionki"
noFollowRequests: "Nie masz żadnych oczekujących próśb o możliwość obserwacji" noFollowRequests: "Nie masz żadnych oczekujących próśb o możliwość obserwacji"
@ -453,6 +464,8 @@ showFeaturedNotesInTimeline: "Pokazuj wyróżnione wpisy w osi czasu"
objectStorage: "Pamięć obiektowa" objectStorage: "Pamięć obiektowa"
useObjectStorage: "Używaj pamięci obiektowej" useObjectStorage: "Używaj pamięci obiektowej"
objectStorageBaseUrl: "Podstawowy URL" objectStorageBaseUrl: "Podstawowy URL"
objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Podaj nazwę „wiadra” używaną przez konfigurowaną usługę."
objectStoragePrefix: "Prefiks" objectStoragePrefix: "Prefiks"
objectStoragePrefixDesc: "Pliki będą przechowywane w katalogu z tym prefiksem." objectStoragePrefixDesc: "Pliki będą przechowywane w katalogu z tym prefiksem."
objectStorageEndpoint: "Punkt końcowy" objectStorageEndpoint: "Punkt końcowy"
@ -540,6 +553,7 @@ pluginTokenRequestedDescription: "Ta wtyczka będzie mogła korzystać z ustawio
notificationType: "Rodzaj powiadomień" notificationType: "Rodzaj powiadomień"
edit: "Edytuj" edit: "Edytuj"
useStarForReactionFallback: "Użyj ★ jako zapasowego emoji, gdy emoji reakcji jest nieznane" useStarForReactionFallback: "Użyj ★ jako zapasowego emoji, gdy emoji reakcji jest nieznane"
emailServer: "Serwer poczty e-mail"
enableEmail: "Włącz dostarczanie wiadomości e-mail" enableEmail: "Włącz dostarczanie wiadomości e-mail"
emailConfigInfo: "Wykorzystywany do potwierdzenia adresu e-mail w trakcie rejestracji, lub gdy zapomnisz hasła" emailConfigInfo: "Wykorzystywany do potwierdzenia adresu e-mail w trakcie rejestracji, lub gdy zapomnisz hasła"
email: "Adres e-mail" email: "Adres e-mail"
@ -552,6 +566,7 @@ smtpPass: "Hasło"
emptyToDisableSmtpAuth: "Pozostaw adres e-mail i hasło puste, aby wyłączyć weryfikację SMTP" emptyToDisableSmtpAuth: "Pozostaw adres e-mail i hasło puste, aby wyłączyć weryfikację SMTP"
smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS" smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS"
testEmail: "Przetestuj dostarczanie wiadomości e-mail" testEmail: "Przetestuj dostarczanie wiadomości e-mail"
wordMute: "Wyciszenie słowa"
userSaysSomething: "{name} powiedział(-a) coś" userSaysSomething: "{name} powiedział(-a) coś"
makeActive: "Aktywuj" makeActive: "Aktywuj"
display: "Wyświetlanie" display: "Wyświetlanie"
@ -622,6 +637,7 @@ emailVerified: "Adres e-mail został potwierdzony"
noteFavoritesCount: "Liczba polubionych wpisów" noteFavoritesCount: "Liczba polubionych wpisów"
pageLikesCount: "Liczba otrzymanych polubień stron" pageLikesCount: "Liczba otrzymanych polubień stron"
pageLikedCount: "Liczba polubionych stron" pageLikedCount: "Liczba polubionych stron"
reversiCount: "Liczba rozgrywek Reversi"
contact: "Kontakt" contact: "Kontakt"
useSystemFont: "Używaj domyślnej czcionki systemu" useSystemFont: "Używaj domyślnej czcionki systemu"
experimentalFeatures: "Eksperymentalne funkcje" experimentalFeatures: "Eksperymentalne funkcje"
@ -630,6 +646,7 @@ makeExplorable: "Pokazuj konto na stronie „Eksploruj”"
makeExplorableDescription: "Jeżeli wyłączysz tę opcję, Twoje konto nie będzie wyświetlać się w sekcji „Eksploruj”." makeExplorableDescription: "Jeżeli wyłączysz tę opcję, Twoje konto nie będzie wyświetlać się w sekcji „Eksploruj”."
showGapBetweenNotesInTimeline: "Pokazuj odstęp między wpisami na osi czasu." showGapBetweenNotesInTimeline: "Pokazuj odstęp między wpisami na osi czasu."
duplicate: "Duplikuj" duplicate: "Duplikuj"
left: "Lewo"
center: "Wyśsrodkuj" center: "Wyśsrodkuj"
wide: "Szerokie" wide: "Szerokie"
narrow: "Wąskie" narrow: "Wąskie"
@ -639,26 +656,107 @@ clearCache: "Wyczyść pamięć podręczną"
onlineUsersCount: "{n} osób jest online" onlineUsersCount: "{n} osób jest online"
nUsers: "{n} użytkowników" nUsers: "{n} użytkowników"
nNotes: "{n} wpisów" nNotes: "{n} wpisów"
sendErrorReports: "Wyślij raporty o błędach"
myTheme: "Mój motyw"
backgroundColor: "Tło" backgroundColor: "Tło"
accentColor: "Akcent" accentColor: "Akcent"
textColor: "Tekst" textColor: "Tekst"
saveAs: "Zapisz jako…"
advanced: "Zaawansowane"
value: "Wartość" value: "Wartość"
createdAt: "Utworzono"
updatedAt: "Zaktualizowano"
saveConfirm: "Zapisać zmiany?"
deleteConfirm: "Na pewno usunąć?"
invalidValue: "Nieprawidłowa wartość."
registry: "Rejestr"
closeAccount: "Zamknij konto"
currentVersion: "Bieżąca wersja"
latestVersion: "Najnowsza wersja"
youAreRunningUpToDateClient: "Korzystasz z najnowszej wersji klienta."
newVersionOfClientAvailable: "Nowsza wersja klienta jest dostępna."
usageAmount: "Użycie"
capacity: "Pojemność"
inUse: "Użyto"
editCode: "Edytuj kod"
apply: "Zastosuj"
receiveAnnouncementFromInstance: "Otrzymuj powiadomienia e-mail z tej instancji"
emailNotification: "Powiadomienia e-mail"
publish: "Publikuj"
inChannelSearch: "Szukaj na kanale"
useReactionPickerForContextMenu: "Otwórz wybornik reakcji prawym kliknięciem"
typingUsers: "{users} pisze(-ą)..."
jumpToSpecifiedDate: "Przejdź do określonej daty"
showingPastTimeline: "Obecnie wyświetla starą oś czasu"
clear: "Wróć"
markAllAsRead: "Oznacz wszystkie jako przeczytane"
goBack: "Wróć" goBack: "Wróć"
unlikeConfirm: "Na pewno chcesz usunąć polubienie?"
fullView: "Pełny widok"
quitFullView: "Opuść pełny widok"
addDescription: "Dodaj opis"
info: "Informacje" info: "Informacje"
userInfo: "Informacje o użykowniku"
unknown: "Nieznane"
onlineStatus: "Status online"
hideOnlineStatus: "Ukryj status online"
hideOnlineStatusDescription: "Ukrywanie statusu online ogranicza wygody niektórych funkcji, tj. wyszukiwanie"
online: "Online"
active: "Aktywny"
offline: "Offline"
notRecommended: "Nie zalecane"
botProtection: "Zabezpieczenie przed botami"
instanceBlocking: "Zablokowane instancje"
selectAccount: "Wybierz konto"
enabled: "Właczono"
disabled: "Wyłączono"
quickAction: "Szybkie działania"
user: "Użytkownicy" user: "Użytkownicy"
administration: "Zarządzanie" administration: "Zarządzanie"
accounts: "Konta"
switch: "Przełącz"
noMaintainerInformationWarning: "Informacje o administratorze nie są skonfigurowane."
noBotProtectionWarning: "Zabezpieczenie przed botami nie jest skonfigurowane."
configure: "Skonfiguruj"
postToGallery: "Opublikuj w galerii"
gallery: "Galeria"
recentPosts: "Ostatnie wpisy"
popularPosts: "Popularne wpisy"
shareWithNote: "Udostępnij z wpisem"
ads: "Reklamy"
expiration: "Ankieta kończy się" expiration: "Ankieta kończy się"
memo: "Notatki"
priority: "Priorytet"
high: "Wysoki"
middle: "Średnie" middle: "Średnie"
low: "Niski"
emailNotConfiguredWarning: "Nie podano adresu e-mail"
ratio: "Stosunek"
_ad: _ad:
back: "Wróć" back: "Wróć"
reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej"
_forgotPassword:
ifNoEmail: "Jeżeli nie podano adresu e-mail podczas rejestracji, skontaktuj się z administratorem zamiast tego."
contactAdmin: "Jeżeli Twoja instancja nie obsługuje adresów e-mail, skontaktuj się zamiast tego z administratorem, aby zresetować hasło."
_gallery: _gallery:
my: "Moja galeria"
liked: "Polubione wpisy"
like: "Polub"
unlike: "Cofnij polubienie" unlike: "Cofnij polubienie"
_email: _email:
_follow: _follow:
title: "Zaobserwował(a) Cię" title: "Zaobserwował(a) Cię"
_receiveFollowRequest:
title: "Otrzymano prośbę o możliwość obserwacji"
_plugin:
install: "Zainstaluj wtyczki"
installWarn: "Nie instaluj niezaufanych wtyczek."
manage: "Zarządzanie wtyczkami"
_registry: _registry:
scope: "Zakres"
key: "Klucz" key: "Klucz"
keys: "Klucz" keys: "Klucz"
domain: "Domena"
createKey: "Utwórz klucz" createKey: "Utwórz klucz"
_aboutMisskey: _aboutMisskey:
about: "Misskey jest oprogramowanie open source rozwijanym przez syuilo od 2014." about: "Misskey jest oprogramowanie open source rozwijanym przez syuilo od 2014."
@ -708,6 +806,7 @@ _mfm:
x4Description: "Czyni treść jeszcze większą niż jeszcze większa." x4Description: "Czyni treść jeszcze większą niż jeszcze większa."
blur: "Rozmycie" blur: "Rozmycie"
font: "Czcionka" font: "Czcionka"
fontDescription: "Wybiera czcionkę do wyświetlania treści."
_reversi: _reversi:
reversi: "Reversi" reversi: "Reversi"
gameSettings: "Ustawienia gry" gameSettings: "Ustawienia gry"
@ -972,16 +1071,21 @@ _profile:
username: "Nazwa użytkownika" username: "Nazwa użytkownika"
description: "Opis" description: "Opis"
youCanIncludeHashtags: "Możesz umieścić hashtagi w swoim opisie." youCanIncludeHashtags: "Możesz umieścić hashtagi w swoim opisie."
metadata: "Dodatkowe informacje"
metadataEdit: "Edytuj dodatkowe informacje"
metadataDescription: "Możesz wyświetlać do czterech sekcji dodatkowych informacji na swoim profilu."
metadataLabel: "Etykieta" metadataLabel: "Etykieta"
metadataContent: "Treść" metadataContent: "Treść"
changeAvatar: "Zmień awatar" changeAvatar: "Zmień awatar"
changeBanner: "Zmień baner" changeBanner: "Zmień baner"
_exportOrImport: _exportOrImport:
allNotes: "Wszystkie wpisy"
followingList: "Obserwowani" followingList: "Obserwowani"
muteList: "Wycisz" muteList: "Wycisz"
blockingList: "Zablokuj" blockingList: "Zablokuj"
userLists: "Listy" userLists: "Listy"
_charts: _charts:
federationInstancesTotal: "Łącznie sfederowanych instancji"
usersTotal: "Łącznie # użytkowników" usersTotal: "Łącznie # użytkowników"
activeUsers: "Aktywni użytkownicy" activeUsers: "Aktywni użytkownicy"
_instanceCharts: _instanceCharts:
@ -996,6 +1100,7 @@ _instanceCharts:
_timelines: _timelines:
home: "Strona główna" home: "Strona główna"
local: "Lokalne" local: "Lokalne"
social: "Społeczność"
global: "Globalna" global: "Globalna"
_rooms: _rooms:
roomOf: "Pokój {user}" roomOf: "Pokój {user}"
@ -1366,6 +1471,8 @@ _deck:
swapRight: "Przesuń w prawo" swapRight: "Przesuń w prawo"
swapUp: "Zamień z powyższym" swapUp: "Zamień z powyższym"
swapDown: "Zamień z poniższym" swapDown: "Zamień z poniższym"
stackLeft: "Przypnij do lewej"
popRight: "Odepnij w prawo"
profile: "Profil" profile: "Profil"
_columns: _columns:
main: "Główna" main: "Główna"

View File

@ -0,0 +1,16 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class addNoteIndexes1621479946000 implements MigrationInterface {
name = 'addNoteIndexes1621479946000'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`CREATE INDEX "IDX_NOTE_MENTIONS" ON "note" USING gin ("mentions")`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_NOTE_VISIBLE_USER_IDS" ON "note" USING gin ("visibleUserIds")`, undefined);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP INDEX "IDX_NOTE_MENTIONS"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_NOTE_VISIBLE_USER_IDS"`, undefined);
}
}

View File

@ -1,7 +1,7 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <syuilotan@yahoo.co.jp>", "author": "syuilo <syuilotan@yahoo.co.jp>",
"version": "12.81.0", "version": "12.81.1",
"codename": "indigo", "codename": "indigo",
"repository": { "repository": {
"type": "git", "type": "git",
@ -36,7 +36,7 @@
"lodash": "^4.17.20" "lodash": "^4.17.20"
}, },
"dependencies": { "dependencies": {
"@babel/plugin-transform-runtime": "7.13.15", "@babel/plugin-transform-runtime": "7.14.3",
"@elastic/elasticsearch": "7.11.0", "@elastic/elasticsearch": "7.11.0",
"@koa/cors": "3.1.0", "@koa/cors": "3.1.0",
"@koa/multer": "3.0.0", "@koa/multer": "3.0.0",
@ -47,13 +47,13 @@
"@syuilo/aiscript": "0.11.1", "@syuilo/aiscript": "0.11.1",
"@types/bcryptjs": "2.4.2", "@types/bcryptjs": "2.4.2",
"@types/bull": "3.15.1", "@types/bull": "3.15.1",
"@types/cbor": "5.0.1", "@types/cbor": "6.0.0",
"@types/dateformat": "3.0.1", "@types/dateformat": "3.0.1",
"@types/escape-regexp": "0.0.0", "@types/escape-regexp": "0.0.0",
"@types/glob": "7.1.3", "@types/glob": "7.1.3",
"@types/gulp": "4.0.8", "@types/gulp": "4.0.8",
"@types/gulp-rename": "2.0.0", "@types/gulp-rename": "2.0.0",
"@types/is-url": "1.2.28", "@types/is-url": "1.2.29",
"@types/js-yaml": "4.0.1", "@types/js-yaml": "4.0.1",
"@types/jsdom": "16.2.10", "@types/jsdom": "16.2.10",
"@types/jsonld": "1.5.5", "@types/jsonld": "1.5.5",
@ -70,9 +70,9 @@
"@types/koa__multer": "2.0.2", "@types/koa__multer": "2.0.2",
"@types/koa__router": "8.0.4", "@types/koa__router": "8.0.4",
"@types/markdown-it": "12.0.1", "@types/markdown-it": "12.0.1",
"@types/matter-js": "0.14.11", "@types/matter-js": "0.14.12",
"@types/mocha": "8.2.2", "@types/mocha": "8.2.2",
"@types/node": "14.14.41", "@types/node": "15.3.1",
"@types/node-fetch": "2.5.10", "@types/node-fetch": "2.5.10",
"@types/nodemailer": "6.4.1", "@types/nodemailer": "6.4.1",
"@types/nprogress": "0.2.0", "@types/nprogress": "0.2.0",
@ -86,11 +86,11 @@
"@types/random-seed": "0.3.3", "@types/random-seed": "0.3.3",
"@types/ratelimiter": "3.4.1", "@types/ratelimiter": "3.4.1",
"@types/redis": "2.8.28", "@types/redis": "2.8.28",
"@types/rename": "1.0.2", "@types/rename": "1.0.3",
"@types/request-stats": "3.0.0", "@types/request-stats": "3.0.0",
"@types/rimraf": "3.0.0", "@types/rimraf": "3.0.0",
"@types/seedrandom": "2.4.28", "@types/seedrandom": "2.4.28",
"@types/sharp": "0.28.0", "@types/sharp": "0.28.1",
"@types/sinonjs__fake-timers": "6.0.2", "@types/sinonjs__fake-timers": "6.0.2",
"@types/speakeasy": "2.0.5", "@types/speakeasy": "2.0.5",
"@types/throttle-debounce": "2.1.0", "@types/throttle-debounce": "2.1.0",
@ -101,46 +101,46 @@
"@types/webpack": "5.28.0", "@types/webpack": "5.28.0",
"@types/webpack-stream": "3.2.12", "@types/webpack-stream": "3.2.12",
"@types/websocket": "1.0.2", "@types/websocket": "1.0.2",
"@types/ws": "7.4.1", "@types/ws": "7.4.4",
"@typescript-eslint/parser": "4.22.0", "@typescript-eslint/parser": "4.24.0",
"@vue/compiler-sfc": "3.0.11", "@vue/compiler-sfc": "3.0.11",
"abort-controller": "3.0.0", "abort-controller": "3.0.0",
"apexcharts": "3.26.1", "apexcharts": "3.26.3",
"autobind-decorator": "2.4.0", "autobind-decorator": "2.4.0",
"autosize": "4.0.2", "autosize": "4.0.4",
"autwh": "0.1.0", "autwh": "0.1.0",
"aws-sdk": "2.892.0", "aws-sdk": "2.910.0",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"blurhash": "1.1.3", "blurhash": "1.1.3",
"broadcast-channel": "3.5.3", "broadcast-channel": "3.6.0",
"bull": "3.22.3", "bull": "3.22.6",
"cafy": "15.2.1", "cafy": "15.2.1",
"cbor": "7.0.5", "cbor": "7.0.5",
"chalk": "4.1.1", "chalk": "4.1.1",
"chart.js": "2.9.4", "chart.js": "2.9.4",
"cli-highlight": "2.1.11", "cli-highlight": "2.1.11",
"commander": "7.2.0", "commander": "7.2.0",
"concurrently": "6.0.2", "concurrently": "6.1.0",
"content-disposition": "0.5.3", "content-disposition": "0.5.3",
"core-js": "3.11.0", "core-js": "3.12.1",
"crc-32": "1.2.0", "crc-32": "1.2.0",
"css-loader": "5.2.4", "css-loader": "5.2.4",
"cssnano": "5.0.1", "cssnano": "5.0.3",
"dateformat": "4.5.1", "dateformat": "4.5.1",
"diskusage": "1.1.3", "diskusage": "1.1.3",
"escape-regexp": "0.0.1", "escape-regexp": "0.0.1",
"eslint": "7.25.0", "eslint": "7.26.0",
"eslint-plugin-vue": "7.9.0", "eslint-plugin-vue": "7.9.0",
"eventemitter3": "4.0.7", "eventemitter3": "4.0.7",
"feed": "4.2.2", "feed": "4.2.2",
"file-type": "16.3.0", "file-type": "16.4.0",
"fluent-ffmpeg": "2.1.2", "fluent-ffmpeg": "2.1.2",
"glob": "7.1.6", "glob": "7.1.7",
"got": "11.8.2", "got": "11.8.2",
"gulp": "4.0.2", "gulp": "4.0.2",
"gulp-cssnano": "2.1.3", "gulp-cssnano": "2.1.3",
"gulp-rename": "2.0.0", "gulp-rename": "2.0.0",
"gulp-replace": "1.1.1", "gulp-replace": "1.1.3",
"gulp-terser": "2.0.1", "gulp-terser": "2.0.1",
"gulp-tslint": "8.1.4", "gulp-tslint": "8.1.4",
"hard-source-webpack-plugin": "0.13.1", "hard-source-webpack-plugin": "0.13.1",
@ -158,7 +158,7 @@
"json5-loader": "4.0.1", "json5-loader": "4.0.1",
"jsonld": "4.0.1", "jsonld": "4.0.1",
"jsrsasign": "8.0.20", "jsrsasign": "8.0.20",
"katex": "0.13.3", "katex": "0.13.11",
"koa": "2.13.1", "koa": "2.13.1",
"koa-bodyparser": "4.3.0", "koa-bodyparser": "4.3.0",
"koa-favicon": "2.1.0", "koa-favicon": "2.1.0",
@ -173,21 +173,21 @@
"markdown-it": "12.0.6", "markdown-it": "12.0.6",
"markdown-it-anchor": "7.1.0", "markdown-it-anchor": "7.1.0",
"matter-js": "0.17.1", "matter-js": "0.17.1",
"mfm-js": "0.16.3", "mfm-js": "0.16.4",
"mocha": "8.3.2", "mocha": "8.4.0",
"moji": "0.5.1", "moji": "0.5.1",
"ms": "2.1.3", "ms": "2.1.3",
"multer": "1.4.2", "multer": "1.4.2",
"nested-property": "4.0.0", "nested-property": "4.0.0",
"node-fetch": "2.6.1", "node-fetch": "2.6.1",
"nodemailer": "6.5.0", "nodemailer": "6.6.0",
"object-assign-deep": "0.4.0", "object-assign-deep": "0.4.0",
"os-utils": "0.0.14", "os-utils": "0.0.14",
"parse5": "6.0.1", "parse5": "6.0.1",
"pg": "8.6.0", "pg": "8.6.0",
"portscanner": "2.2.0", "portscanner": "2.2.0",
"postcss": "8.2.12", "postcss": "8.2.15",
"postcss-loader": "5.2.0", "postcss-loader": "5.3.0",
"prismjs": "1.23.0", "prismjs": "1.23.0",
"probe-image-size": "7.1.0", "probe-image-size": "7.1.0",
"promise-limit": "2.7.0", "promise-limit": "2.7.0",
@ -198,7 +198,7 @@
"qrcode": "1.4.4", "qrcode": "1.4.4",
"random-seed": "0.3.0", "random-seed": "0.3.0",
"ratelimiter": "3.4.1", "ratelimiter": "3.4.1",
"re2": "1.15.9", "re2": "1.16.0",
"reconnecting-websocket": "4.4.0", "reconnecting-websocket": "4.4.0",
"redis": "3.1.2", "redis": "3.1.2",
"redis-lock": "0.1.4", "redis-lock": "0.1.4",
@ -210,25 +210,25 @@
"rimraf": "3.0.2", "rimraf": "3.0.2",
"rndstr": "1.0.0", "rndstr": "1.0.0",
"s-age": "1.1.2", "s-age": "1.1.2",
"sass": "1.32.11", "sass": "1.32.13",
"sass-loader": "11.0.1", "sass-loader": "11.1.1",
"seedrandom": "3.0.5", "seedrandom": "3.0.5",
"sharp": "0.28.1", "sharp": "0.28.2",
"speakeasy": "2.0.0", "speakeasy": "2.0.0",
"stringz": "2.1.0", "stringz": "2.1.0",
"style-loader": "2.0.0", "style-loader": "2.0.0",
"summaly": "2.4.0", "summaly": "2.4.0",
"syslog-pro": "1.0.0", "syslog-pro": "1.0.0",
"systeminformation": "5.6.12", "systeminformation": "5.6.22",
"syuilo-password-strength": "0.0.1", "syuilo-password-strength": "0.0.1",
"textarea-caret": "3.1.0", "textarea-caret": "3.1.0",
"three": "0.117.1", "three": "0.117.1",
"throttle-debounce": "3.0.1", "throttle-debounce": "3.0.1",
"tinycolor2": "1.4.2", "tinycolor2": "1.4.2",
"tmp": "0.2.1", "tmp": "0.2.1",
"ts-loader": "9.1.1", "ts-loader": "9.2.1",
"ts-node": "9.1.1", "ts-node": "9.1.1",
"tsc-alias": "1.2.10", "tsc-alias": "1.2.11",
"tsconfig-paths": "3.9.0", "tsconfig-paths": "3.9.0",
"tslint": "6.1.3", "tslint": "6.1.3",
"tslint-sonarts": "1.9.0", "tslint-sonarts": "1.9.0",
@ -248,8 +248,8 @@
"vue-svg-loader": "0.17.0-beta.2", "vue-svg-loader": "0.17.0-beta.2",
"vuedraggable": "4.0.1", "vuedraggable": "4.0.1",
"web-push": "3.4.4", "web-push": "3.4.4",
"webpack": "5.35.1", "webpack": "5.37.1",
"webpack-cli": "4.6.0", "webpack-cli": "4.7.0",
"websocket": "1.0.34", "websocket": "1.0.34",
"ws": "7.4.5", "ws": "7.4.5",
"xev": "2.0.1" "xev": "2.0.1"

View File

@ -1,5 +1,5 @@
<template> <template>
<MkModal ref="modal" :manual-showing="manualShowing" :src="src" @click="$refs.modal.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')"> <MkModal ref="modal" :manual-showing="manualShowing" :src="src" :front="true" @click="$refs.modal.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')">
<MkEmojiPicker :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/> <MkEmojiPicker :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/>
</MkModal> </MkModal>
</template> </template>

View File

@ -1,6 +1,6 @@
<template> <template>
<transition :name="$store.state.animation ? popup ? 'modal-popup' : 'modal' : ''" :duration="$store.state.animation ? popup ? 500 : 300 : 0" appear @after-leave="onClosed" @enter="$emit('opening')" @after-enter="childRendered"> <transition :name="$store.state.animation ? popup ? 'modal-popup' : 'modal' : ''" :duration="$store.state.animation ? popup ? 500 : 300 : 0" appear @after-leave="onClosed" @enter="$emit('opening')" @after-enter="childRendered">
<div v-show="manualShowing != null ? manualShowing : showing" class="mk-modal" v-hotkey.global="keymap" :style="{ pointerEvents: (manualShowing != null ? manualShowing : showing) ? 'auto' : 'none', '--transformOrigin': transformOrigin }"> <div v-show="manualShowing != null ? manualShowing : showing" class="qzhlnise" :class="{ front }" v-hotkey.global="keymap" :style="{ pointerEvents: (manualShowing != null ? manualShowing : showing) ? 'auto' : 'none', '--transformOrigin': transformOrigin }">
<div class="bg _modalBg" @click="onBgClick" @contextmenu.prevent.stop="() => {}"></div> <div class="bg _modalBg" @click="onBgClick" @contextmenu.prevent.stop="() => {}"></div>
<div class="content" :class="{ popup, fixed, top: position === 'top' }" @click.self="onBgClick" ref="content"> <div class="content" :class="{ popup, fixed, top: position === 'top' }" @click.self="onBgClick" ref="content">
<slot></slot> <slot></slot>
@ -41,6 +41,11 @@ export default defineComponent({
}, },
position: { position: {
required: false required: false
},
front: {
type: Boolean,
required: false,
default: false,
} }
}, },
emits: ['opening', 'click', 'esc', 'close', 'closed'], emits: ['opening', 'click', 'esc', 'close', 'closed'],
@ -224,14 +229,14 @@ export default defineComponent({
} }
} }
.mk-modal { .qzhlnise {
> .bg { > .bg {
z-index: 20000; z-index: 10000;
} }
> .content:not(.popup) { > .content:not(.popup) {
position: fixed; position: fixed;
z-index: 20000; z-index: 10000;
top: 0; top: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
@ -263,11 +268,25 @@ export default defineComponent({
> .content.popup { > .content.popup {
position: absolute; position: absolute;
z-index: 20000; z-index: 10000;
&.fixed { &.fixed {
position: fixed; position: fixed;
} }
} }
&.front {
> .bg {
z-index: 20000;
}
> .content:not(.popup) {
z-index: 20000;
}
> .content.popup {
z-index: 20000;
}
}
} }
</style> </style>

View File

@ -1,4 +1,4 @@
# AiScript # AiScript
## 関数 ## Fungsi
デフォルトで値渡しです。 Secara bawaan, berjalan sebagai pass dari value.

View File

@ -1,19 +1,19 @@
# Misskey API # Misskey API
MisskeyAPIを使ってMisskeyクライアント、Misskey連携Webサービス、Bot等(以下「アプリケーション」と呼びます)を開発できます。 ストリーミングAPIもあるので、リアルタイム性のあるアプリケーションを作ることも可能です。 Dengan menggunakan Misskey API kamu dapat mengembangkan klien Misskey, Webservice yang terintegrasi dengan Misskey, Bots (nantinya akan disebut "Aplikasi" disini), dll. Terdapat juga streaming API, yang memungkinan untuk membuat aplikasi real-time.
APIを使い始めるには、まずアクセストークンを取得する必要があります。 このドキュメントでは、アクセストークンを取得する手順を説明した後、基本的なAPIの使い方を説明します。 Untuk memulai menggunakin API, kamu harus memiliki access token terlebih dahulu. Halaman ini akan menjelaskan bagaimana untuk mendapatkan access token dan menjelaskan instruksi penggunaan dasar dari Misskey API.
## アクセストークンの取得 ## Mendapatkan access token
基本的に、APIはリクエストにはアクセストークンが必要となります。 APIにリクエストするのが自分自身なのか、不特定の利用者に使ってもらうアプリケーションなのかによって取得手順は異なります。 Pada dasarnya, semua request API membutuhkan access token. Metode untuk mendapatkan sebuah access token bermacam-macam bergantung pada kamu sendiri yang mengirim request API atau request tersebut dikirim melalui aplikasi yang dipakai oleh pengguna akhir.
* 前者の場合: [「自分自身のアクセストークンを手動発行する」](#自分自身のアクセストークンを手動発行する)に進む * Apabila kamu pengguna lama: Langsung saja menuju [ "Menerbitkan access token untuk akun kamu sendiri secara manual" ](#自分自身のアクセストークンを手動発行する)
* 後者の場合: [「アプリケーション利用者にアクセストークンの発行をリクエストする」](#アプリケーション利用者にアクセストークンの発行をリクエストする)に進む * Apabila kamu pengguna baru: Langsung saja menuju [ "Meminta aplikasi pengguna untuk menghasilkan access token" ](#アプリケーション利用者にアクセストークンの発行をリクエストする)
### 自分自身のアクセストークンを手動発行する ### Menerbitkan access token untuk akun kamu sendiri secara manual
「設定 > API」で、自分のアクセストークンを発行できます。 Kamu dapat membuat access token untuk akun milikmu di Pengaturan > API.
[「APIの使い方」へ進む](#APIの使い方) [Lanjutkan untuk menggunakan API.](#APIの使い方)
### アプリケーション利用者にアクセストークンの発行をリクエストする ### アプリケーション利用者にアクセストークンの発行をリクエストする
アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。 アプリケーション利用者のアクセストークンを取得するには、以下の手順で発行をリクエストします。
@ -49,7 +49,7 @@ UUIDを生成する。以後これをセッションIDと呼びます。
* `token` ... ユーザーのアクセストークン * `token` ... ユーザーのアクセストークン
* `user` ... ユーザーの情報 * `user` ... ユーザーの情報
[「APIの使い方」へ進む](#APIの使い方) [Lanjutkan untuk menggunakan API.](#APIの使い方)
## APIの使い方 ## APIの使い方
**APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。 **APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式です。RESTではありません。** アクセストークンは、`i`というパラメータ名でリクエストに含めます。

View File

@ -1,7 +1,7 @@
# プラグインの作成 # プラグインの作成
Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。 Misskey Webクライアントのプラグイン機能を使うと、クライアントを拡張し、様々な機能を追加できます。 ここではプラグインの作成にあたってのメタデータ定義や、AiScript APIリファレンスを掲載します。
## メタデータ ## Metadata
プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。 プラグインは、AiScriptのメタデータ埋め込み機能を使って、デフォルトとしてプラグインのメタデータを定義する必要があります。 メタデータは次のプロパティを含むオブジェクトです。
### name ### name

View File

@ -1,2 +1,2 @@
# Emoji kustom # Emoji kustom
カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。 Emoji kustom merupakan fungsi yang menyediakan gambar terunggah ke server untuk digunakan seperti emoji. Emoji kustom ini dapt digunakan pada note, reaksi, obrolan, profil, dan bahkan username serta tempat-tempat lainnya. Untuk menggunakan emoji kustom pada tempat yang disebutkan di atas, tekan tombol pemilih Emoji (bila ada) atau ketik sebuah `:` dan jendela saran emoji akan muncul. Jika sebuah string yang terlihat seperti `:foo:` ditemukan dalam text apapun, maka sebagian dari `foo` diinterpretaskan sebagai nama emoji kustom dan akan digantikan dengan gambar emoji kustom ketika ditampilkan.

View File

@ -1,4 +1,4 @@
# デッキ # Dek
デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。 デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。

View File

@ -1,2 +1,2 @@
# Ikuti # Ikuti
ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。 Jika kamu mengikuti seorang pengguna, postingan dari pengguna tersebut akan muncul pada linimasa kamu.Akan tetapi, balasan dari mereka kepada pengguna lain tidak akan ditampilkan. Untuk mengikuti seorang pengguna, klik tombol "Ikuti" pada halaman pengguna mereka.Untuk berhenti mengikuti seorang pengguna, klik tombol tersebut sekali lagi.

View File

@ -1,6 +1,6 @@
# キーボードショートカット # キーボードショートカット
## グローバル ## Global
これらのショートカットは基本的にどこでも使えます。 これらのショートカットは基本的にどこでも使えます。
<table> <table>
<thead> <thead>

View File

@ -1,6 +1,6 @@
# Pages # Pages
## 変数 ## Variabel
変数を使うことで動的なページを作成できます。テキスト内で <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>を参照することはできません。 変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <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

@ -110,7 +110,7 @@ y = Math.floor(pos / mapWidth)
``` ```
### フォームコントロールの種類 ### フォームコントロールの種類
#### スイッチ #### Beralih
type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。 type: `switch` スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。
##### プロパティ ##### プロパティ

View File

@ -31,7 +31,7 @@
**ストリームでのやり取りはすべてJSONです。** **ストリームでのやり取りはすべてJSONです。**
## チャンネル ## Kanal
MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。 MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
### チャンネルに接続する ### チャンネルに接続する

View File

@ -1,4 +1,4 @@
# テーマ # Tema
テーマを設定して、Misskeyクライアントの見た目を変更できます。 テーマを設定して、Misskeyクライアントの見た目を変更できます。
@ -61,8 +61,8 @@
* 関数(後述) * 関数(後述)
* `:{関数名}<{引数}<{色}` * `:{関数名}<{引数}<{色}`
#### 定数 #### Konstanta
「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。 「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。
#### 関数 #### Fungsi
wip wip

View File

@ -1,15 +1,15 @@
# タイムラインの比較 # Perbandingan Linimasa
https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing
## ホーム ## Beranda
自分のフォローしているユーザーの投稿 Postingan dari pengguna yang kamu ikuti
## ローカル ## Lokal
全てのローカルユーザーの「ホーム」指定されていない投稿 Seluruh postingan dari pengguna lokal yang tidak ditandai sebagai "Hanya Beranda"
## ソーシャル ## Sosial
自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿 Postingan dari pengguna yang kamu ikuti beserta dengan semua postingan dari pengguna lokal yang tidak ditandai sebagai "Hanya Beranda"
## グローバル ## Global
全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿 Seluruh postingan dari pengguna lokal yang tidak ditandai sebagai "Hanya Beranda" dan juga pesan yang diterima oleh server yang tidak ditandai sebagai "Hanya Beranda"

View File

@ -8,7 +8,7 @@ Wpisy użytkowników, których obserwujesz
## Lokalne ## Lokalne
全てのローカルユーザーの「ホーム」指定されていない投稿 全てのローカルユーザーの「ホーム」指定されていない投稿
## ソーシャル ## Społeczność
自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿 自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿
## Globalne ## Globalne

View File

@ -55,7 +55,8 @@ export async function getHtml(url: string, accept = 'text/html, */*', timeout =
const _http = new http.Agent({ const _http = new http.Agent({
keepAlive: true, keepAlive: true,
keepAliveMsecs: 30 * 1000, keepAliveMsecs: 30 * 1000,
}); lookup: cache.lookup,
} as http.AgentOptions);
/** /**
* Get https non-proxy agent * Get https non-proxy agent
@ -70,14 +71,14 @@ const _https = new https.Agent({
* Get http proxy or non-proxy agent * Get http proxy or non-proxy agent
*/ */
export const httpAgent = config.proxy export const httpAgent = config.proxy
? new HttpProxyAgent(config.proxy) as unknown as http.Agent ? new HttpProxyAgent(config.proxy)
: _http; : _http;
/** /**
* Get https proxy or non-proxy agent * Get https proxy or non-proxy agent
*/ */
export const httpsAgent = config.proxy export const httpsAgent = config.proxy
? new HttpsProxyAgent(config.proxy) as unknown as https.Agent ? new HttpsProxyAgent(config.proxy)
: _https; : _https;
/** /**

View File

@ -7,6 +7,8 @@ import { Channel } from './channel';
@Entity() @Entity()
@Index('IDX_NOTE_TAGS', { synchronize: false }) @Index('IDX_NOTE_TAGS', { synchronize: false })
@Index('IDX_NOTE_MENTIONS', { synchronize: false })
@Index('IDX_NOTE_VISIBLE_USER_IDS', { synchronize: false })
export class Note { export class Note {
@PrimaryColumn(id()) @PrimaryColumn(id())
public id: string; public id: string;

View File

@ -71,6 +71,7 @@ export function deliver(user: ThinUser, content: unknown, to: string | null) {
return deliverQueue.add(data, { return deliverQueue.add(data, {
attempts: config.deliverJobMaxAttempts || 12, attempts: config.deliverJobMaxAttempts || 12,
timeout: 1 * 60 * 1000, // 1min
backoff: { backoff: {
type: 'exponential', type: 'exponential',
delay: 60 * 1000 delay: 60 * 1000
@ -88,6 +89,7 @@ export function inbox(activity: IActivity, signature: httpSignature.IParsedSigna
return inboxQueue.add(data, { return inboxQueue.add(data, {
attempts: config.inboxJobMaxAttempts || 8, attempts: config.inboxJobMaxAttempts || 8,
timeout: 5 * 60 * 1000, // 5min
backoff: { backoff: {
type: 'exponential', type: 'exponential',
delay: 60 * 1000 delay: 60 * 1000

View File

@ -511,6 +511,10 @@ const activitystreams = {
"shares": { "shares": {
"@id": "as:shares", "@id": "as:shares",
"@type": "@id" "@type": "@id"
},
"alsoKnownAs": {
"@id": "as:alsoKnownAs",
"@type": "@id"
} }
} }
}; };

View File

@ -15,17 +15,8 @@ export const renderActivity = (x: any): IActivity | null => {
return Object.assign({ return Object.assign({
'@context': [ '@context': [
'https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/activitystreams',
'https://w3id.org/security/v1' 'https://w3id.org/security/v1',
] {
}, x);
};
export const attachLdSignature = async (activity: any, user: { id: User['id']; host: null; }): Promise<IActivity | null> => {
if (activity == null) return null;
const keypair = await getUserKeypair(user.id);
const obj = {
// as non-standards // as non-standards
manuallyApprovesFollowers: 'as:manuallyApprovesFollowers', manuallyApprovesFollowers: 'as:manuallyApprovesFollowers',
sensitive: 'as:sensitive', sensitive: 'as:sensitive',
@ -50,9 +41,15 @@ export const attachLdSignature = async (activity: any, user: { id: User['id']; h
'isCat': 'misskey:isCat', 'isCat': 'misskey:isCat',
// vcard // vcard
vcard: 'http://www.w3.org/2006/vcard/ns#', vcard: 'http://www.w3.org/2006/vcard/ns#',
}
]
}, x);
}; };
activity['@context'].push(obj); export const attachLdSignature = async (activity: any, user: { id: User['id']; host: null; }): Promise<IActivity | null> => {
if (activity == null) return null;
const keypair = await getUserKeypair(user.id);
const ldSignature = new LdSignature(); const ldSignature = new LdSignature();
ldSignature.debug = false; ldSignature.debug = false;

View File

@ -1,8 +1,12 @@
import config from '@/config'; import config from '@/config';
import { ILocalUser, User } from '../../../models/entities/user'; import { ILocalUser, User } from '../../../models/entities/user';
export default (object: any, user: { id: User['id'] }) => ({ export default (object: any, user: { id: User['id'] }) => {
if (object == null) return null;
return {
type: 'Undo', type: 'Undo',
actor: `${config.url}/users/${user.id}`, actor: `${config.url}/users/${user.id}`,
object object
}); };
};

View File

@ -22,7 +22,7 @@ export function generateVisibilityQuery(q: SelectQueryBuilder<any>, me?: { id: U
// または 自分自身 // または 自分自身
.orWhere('note.userId = :userId1', { userId1: me.id }) .orWhere('note.userId = :userId1', { userId1: me.id })
// または 自分宛て // または 自分宛て
.orWhere(':userId2 = ANY(note.visibleUserIds)', { userId2: me.id }) .orWhere(`'{"${me.id}"}' <@ note.visibleUserIds`)
.orWhere(new Brackets(qb => { qb .orWhere(new Brackets(qb => { qb
// または フォロワー宛ての投稿であり、 // または フォロワー宛ての投稿であり、
.where('note.visibility = \'followers\'') .where('note.visibility = \'followers\'')

View File

@ -60,8 +60,8 @@ export default define(meta, async (ps, user) => {
const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId) const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
.andWhere(new Brackets(qb => { qb .andWhere(new Brackets(qb => { qb
.where(`:meId = ANY(note.mentions)`, { meId: user.id }) .where(`'{"${user.id}"}' <@ note.mentions`)
.orWhere(`:meId = ANY(note.visibleUserIds)`, { meId: user.id }); .orWhere(`'{"${user.id}"}' <@ note.visibleUserIds`);
})) }))
.innerJoinAndSelect('note.user', 'user') .innerJoinAndSelect('note.user', 'user')
.leftJoinAndSelect('note.reply', 'reply') .leftJoinAndSelect('note.reply', 'reply')

View File

@ -35,7 +35,7 @@ export default async function(user: User, note: Note, quiet = false) {
}); });
//#region ローカルの投稿なら削除アクティビティを配送 //#region ローカルの投稿なら削除アクティビティを配送
if (Users.isLocalUser(user)) { if (Users.isLocalUser(user) && !note.localOnly) {
let renote: Note | undefined; let renote: Note | undefined;
// if deletd note is renote // if deletd note is renote

1077
yarn.lock

File diff suppressed because it is too large Load Diff