Refactor (#7394)
* wip * wip * wip * wip * wip * Update define.ts * Update update.ts * Update user.ts * wip * wip * Update request.ts * URL * wip * wip * wip * wip * Update invite.ts * Update create.ts
This commit is contained in:
@ -2,7 +2,7 @@ import { User } from '../../../models/entities/user';
|
||||
import { Blockings } from '../../../models';
|
||||
import { SelectQueryBuilder } from 'typeorm';
|
||||
|
||||
export function generateBlockQueryForUsers(q: SelectQueryBuilder<any>, me: User) {
|
||||
export function generateBlockQueryForUsers(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
|
||||
const blockingQuery = Blockings.createQueryBuilder('blocking')
|
||||
.select('blocking.blockeeId')
|
||||
.where('blocking.blockerId = :blockerId', { blockerId: me.id });
|
||||
|
@ -2,7 +2,7 @@ import { User } from '../../../models/entities/user';
|
||||
import { ChannelFollowings } from '../../../models';
|
||||
import { Brackets, SelectQueryBuilder } from 'typeorm';
|
||||
|
||||
export function generateChannelQuery(q: SelectQueryBuilder<any>, me?: User | null) {
|
||||
export function generateChannelQuery(q: SelectQueryBuilder<any>, me?: { id: User['id'] } | null) {
|
||||
if (me == null) {
|
||||
q.andWhere('note.channelId IS NULL');
|
||||
} else {
|
||||
|
@ -2,7 +2,7 @@ import { User } from '../../../models/entities/user';
|
||||
import { MutedNotes } from '../../../models';
|
||||
import { SelectQueryBuilder } from 'typeorm';
|
||||
|
||||
export function generateMutedNoteQuery(q: SelectQueryBuilder<any>, me: User) {
|
||||
export function generateMutedNoteQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
|
||||
const mutedQuery = MutedNotes.createQueryBuilder('muted')
|
||||
.select('muted.noteId')
|
||||
.where('muted.userId = :userId', { userId: me.id });
|
||||
|
@ -2,7 +2,7 @@ import { User } from '../../../models/entities/user';
|
||||
import { Mutings } from '../../../models';
|
||||
import { SelectQueryBuilder, Brackets } from 'typeorm';
|
||||
|
||||
export function generateMutedUserQuery(q: SelectQueryBuilder<any>, me: User, exclude?: User) {
|
||||
export function generateMutedUserQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }, exclude?: User) {
|
||||
const mutingQuery = Mutings.createQueryBuilder('muting')
|
||||
.select('muting.muteeId')
|
||||
.where('muting.muterId = :muterId', { muterId: me.id });
|
||||
@ -28,7 +28,7 @@ export function generateMutedUserQuery(q: SelectQueryBuilder<any>, me: User, exc
|
||||
q.setParameters(mutingQuery.getParameters());
|
||||
}
|
||||
|
||||
export function generateMutedUserQueryForUsers(q: SelectQueryBuilder<any>, me: User) {
|
||||
export function generateMutedUserQueryForUsers(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
|
||||
const mutingQuery = Mutings.createQueryBuilder('muting')
|
||||
.select('muting.muteeId')
|
||||
.where('muting.muterId = :muterId', { muterId: me.id });
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { User } from '../../../models/entities/user';
|
||||
import { Brackets, SelectQueryBuilder } from 'typeorm';
|
||||
|
||||
export function generateRepliesQuery(q: SelectQueryBuilder<any>, me?: User | null) {
|
||||
export function generateRepliesQuery(q: SelectQueryBuilder<any>, me?: { id: User['id'] } | null) {
|
||||
if (me == null) {
|
||||
q.andWhere(new Brackets(qb => { qb
|
||||
.where(`note.replyId IS NULL`) // 返信ではない
|
||||
|
@ -2,7 +2,7 @@ import { User } from '../../../models/entities/user';
|
||||
import { Followings } from '../../../models';
|
||||
import { Brackets, SelectQueryBuilder } from 'typeorm';
|
||||
|
||||
export function generateVisibilityQuery(q: SelectQueryBuilder<any>, me?: User | null) {
|
||||
export function generateVisibilityQuery(q: SelectQueryBuilder<any>, me?: { id: User['id'] } | null) {
|
||||
if (me == null) {
|
||||
q.andWhere(new Brackets(qb => { qb
|
||||
.where(`note.visibility = 'public'`)
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { publishMainStream, publishGroupMessagingStream } from '../../../services/stream';
|
||||
import { publishMessagingStream } from '../../../services/stream';
|
||||
import { publishMessagingIndexStream } from '../../../services/stream';
|
||||
import { User, ILocalUser, IRemoteUser } from '../../../models/entities/user';
|
||||
import { User, IRemoteUser } from '../../../models/entities/user';
|
||||
import { MessagingMessage } from '../../../models/entities/messaging-message';
|
||||
import { MessagingMessages, UserGroupJoinings, Users } from '../../../models';
|
||||
import { In } from 'typeorm';
|
||||
@ -107,7 +107,7 @@ export async function readGroupMessagingMessage(
|
||||
}
|
||||
}
|
||||
|
||||
export async function deliverReadActivity(user: ILocalUser, recipient: IRemoteUser, messages: MessagingMessage | MessagingMessage[]) {
|
||||
export async function deliverReadActivity(user: { id: User['id']; host: null; }, recipient: IRemoteUser, messages: MessagingMessage | MessagingMessage[]) {
|
||||
messages = toArray(messages).filter(x => x.uri);
|
||||
const contents = messages.map(x => renderReadActivity(user, x));
|
||||
|
||||
|
@ -5,6 +5,18 @@ import { ApiError } from './error';
|
||||
import { SchemaType } from '@/misc/schema';
|
||||
import { AccessToken } from '../../models/entities/access-token';
|
||||
|
||||
type SimpleUserInfo = {
|
||||
id: ILocalUser['id'];
|
||||
host: ILocalUser['host'];
|
||||
username: ILocalUser['username'];
|
||||
uri: ILocalUser['uri'];
|
||||
inbox: ILocalUser['inbox'];
|
||||
sharedInbox: ILocalUser['sharedInbox'];
|
||||
isAdmin: ILocalUser['isAdmin'];
|
||||
isModerator: ILocalUser['isModerator'];
|
||||
isSilenced: ILocalUser['isSilenced'];
|
||||
};
|
||||
|
||||
// TODO: defaultが設定されている場合はその型も考慮する
|
||||
type Params<T extends IEndpointMeta> = {
|
||||
[P in keyof T['params']]: NonNullable<T['params']>[P]['transform'] extends Function
|
||||
@ -15,13 +27,12 @@ type Params<T extends IEndpointMeta> = {
|
||||
export type Response = Record<string, any> | void;
|
||||
|
||||
type executor<T extends IEndpointMeta> =
|
||||
(params: Params<T>, user: T['requireCredential'] extends true ? ILocalUser : ILocalUser | null, token: AccessToken | null, file?: any, cleanup?: Function) =>
|
||||
(params: Params<T>, user: T['requireCredential'] extends true ? SimpleUserInfo : SimpleUserInfo | null, token: AccessToken | null, file?: any, cleanup?: Function) =>
|
||||
Promise<T['res'] extends undefined ? Response : SchemaType<NonNullable<T['res']>>>;
|
||||
|
||||
// TODO: API関数に user まるごと渡すのではなくユーザーIDなどの最小限のプロパティだけ渡すようにしたい(キャッシュとか考えないでよくなるため)
|
||||
export default function <T extends IEndpointMeta>(meta: T, cb: executor<T>)
|
||||
: (params: any, user: T['requireCredential'] extends true ? ILocalUser : ILocalUser | null, token: AccessToken | null, file?: any) => Promise<any> {
|
||||
return (params: any, user: T['requireCredential'] extends true ? ILocalUser : ILocalUser | null, token: AccessToken | null, file?: any) => {
|
||||
: (params: any, user: T['requireCredential'] extends true ? SimpleUserInfo : SimpleUserInfo | null, token: AccessToken | null, file?: any) => Promise<any> {
|
||||
return (params: any, user: T['requireCredential'] extends true ? SimpleUserInfo : SimpleUserInfo | null, token: AccessToken | null, file?: any) => {
|
||||
function cleanup() {
|
||||
fs.unlink(file.path, () => {});
|
||||
}
|
||||
|
@ -34,7 +34,8 @@ export const meta = {
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, me) => {
|
||||
export default define(meta, async (ps, _me) => {
|
||||
const me = _me ? await Users.findOneOrFail(_me.id) : null;
|
||||
const noUsers = (await Users.count({
|
||||
host: null,
|
||||
})) === 0;
|
||||
|
@ -96,9 +96,9 @@ export default define(meta, async (ps) => {
|
||||
emojis = await q.getMany();
|
||||
|
||||
emojis = emojis.filter(emoji =>
|
||||
emoji.name.includes(ps.query) ||
|
||||
emoji.aliases.some(a => a.includes(ps.query)) ||
|
||||
emoji.category?.includes(ps.query));
|
||||
emoji.name.includes(ps.query!) ||
|
||||
emoji.aliases.some(a => a.includes(ps.query!)) ||
|
||||
emoji.category?.includes(ps.query!));
|
||||
|
||||
emojis.splice(ps.limit! + 1);
|
||||
} else {
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { URL } from 'url';
|
||||
import define from '../../../define';
|
||||
import { deliverQueue } from '../../../../../queue';
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { URL } from 'url';
|
||||
import define from '../../../define';
|
||||
import { inboxQueue } from '../../../../../queue';
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { URL } from 'url';
|
||||
import $ from 'cafy';
|
||||
import define from '../../../define';
|
||||
import { addRelay } from '../../../../../services/relay';
|
||||
|
@ -89,7 +89,7 @@ export default define(meta, async (ps, user) => {
|
||||
let userList;
|
||||
let userGroupJoining;
|
||||
|
||||
if (ps.src === 'list') {
|
||||
if (ps.src === 'list' && ps.userListId) {
|
||||
userList = await UserLists.findOne({
|
||||
id: ps.userListId,
|
||||
userId: user.id,
|
||||
@ -98,7 +98,7 @@ export default define(meta, async (ps, user) => {
|
||||
if (userList == null) {
|
||||
throw new ApiError(meta.errors.noSuchUserList);
|
||||
}
|
||||
} else if (ps.src === 'group') {
|
||||
} else if (ps.src === 'group' && ps.userGroupId) {
|
||||
userGroupJoining = await UserGroupJoinings.findOne({
|
||||
userGroupId: ps.userGroupId,
|
||||
userId: user.id,
|
||||
|
@ -108,7 +108,7 @@ export default define(meta, async (ps, user) => {
|
||||
let userList;
|
||||
let userGroupJoining;
|
||||
|
||||
if (ps.src === 'list') {
|
||||
if (ps.src === 'list' && ps.userListId) {
|
||||
userList = await UserLists.findOne({
|
||||
id: ps.userListId,
|
||||
userId: user.id,
|
||||
@ -117,7 +117,7 @@ export default define(meta, async (ps, user) => {
|
||||
if (userList == null) {
|
||||
throw new ApiError(meta.errors.noSuchUserList);
|
||||
}
|
||||
} else if (ps.src === 'group') {
|
||||
} else if (ps.src === 'group' && ps.userGroupId) {
|
||||
userGroupJoining = await UserGroupJoinings.findOne({
|
||||
userGroupId: ps.userGroupId,
|
||||
userId: user.id,
|
||||
|
@ -46,6 +46,6 @@ export default define(meta, async (ps, user, token) => {
|
||||
|
||||
return await Apps.pack(ap, user, {
|
||||
detail: true,
|
||||
includeSecret: isSecure && (ap.userId === user.id)
|
||||
includeSecret: isSecure && (ap.userId === user!.id)
|
||||
});
|
||||
});
|
||||
|
@ -62,7 +62,7 @@ export const meta = {
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, user) => {
|
||||
const blocker = user;
|
||||
const blocker = await Users.findOneOrFail(user.id);
|
||||
|
||||
// 自分自身
|
||||
if (user.id === ps.userId) {
|
||||
@ -93,7 +93,7 @@ export default define(meta, async (ps, user) => {
|
||||
noteUserId: blockee.id
|
||||
});
|
||||
|
||||
return await Users.pack(blockee.id, user, {
|
||||
return await Users.pack(blockee.id, blocker, {
|
||||
detail: true
|
||||
});
|
||||
});
|
||||
|
@ -126,7 +126,7 @@ export const meta = {
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, user) => {
|
||||
const blocker = user;
|
||||
const blocker = await Users.findOneOrFail(user.id);
|
||||
|
||||
// Check if the blockee is yourself
|
||||
if (user.id === ps.userId) {
|
||||
@ -152,7 +152,7 @@ export default define(meta, async (ps, user) => {
|
||||
// Delete blocking
|
||||
await deleteBlocking(blocker, blockee);
|
||||
|
||||
return await Users.pack(blockee.id, user, {
|
||||
return await Users.pack(blockee.id, blocker, {
|
||||
detail: true
|
||||
});
|
||||
});
|
||||
|
@ -97,7 +97,7 @@ export default define(meta, async (ps, user) => {
|
||||
|
||||
const timeline = await query.take(ps.limit!).getMany();
|
||||
|
||||
activeUsersChart.update(user);
|
||||
if (user) activeUsersChart.update(user);
|
||||
|
||||
return await Notes.packMany(timeline, user);
|
||||
});
|
||||
|
@ -32,14 +32,14 @@ export const meta = {
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, user) => {
|
||||
const clip = await Clips.save({
|
||||
const clip = await Clips.insert({
|
||||
id: genId(),
|
||||
createdAt: new Date(),
|
||||
userId: user.id,
|
||||
name: ps.name,
|
||||
isPublic: ps.isPublic,
|
||||
description: ps.description,
|
||||
});
|
||||
}).then(x => Clips.findOneOrFail(x.identifiers[0]));
|
||||
|
||||
return await Clips.pack(clip);
|
||||
});
|
||||
|
@ -34,7 +34,7 @@ export default define(meta, async (ps, user) => {
|
||||
const instance = await fetchMeta(true);
|
||||
|
||||
// Calculate drive usage
|
||||
const usage = await DriveFiles.calcDriveUsageOf(user);
|
||||
const usage = await DriveFiles.calcDriveUsageOf(user.id);
|
||||
|
||||
return {
|
||||
capacity: 1024 * 1024 * instance.localDriveCapacityMb,
|
||||
|
@ -68,13 +68,13 @@ export default define(meta, async (ps, user) => {
|
||||
}
|
||||
|
||||
// Create folder
|
||||
const folder = await DriveFolders.save({
|
||||
const folder = await DriveFolders.insert({
|
||||
id: genId(),
|
||||
createdAt: new Date(),
|
||||
name: ps.name,
|
||||
parentId: parent !== null ? parent.id : null,
|
||||
userId: user.id
|
||||
});
|
||||
}).then(x => DriveFolders.findOneOrFail(x.identifiers[0]));
|
||||
|
||||
const folderObj = await DriveFolders.pack(folder);
|
||||
|
||||
|
@ -2,7 +2,6 @@ import $ from 'cafy';
|
||||
import define from '../../define';
|
||||
import { Instances } from '../../../../models';
|
||||
import { toPuny } from '@/misc/convert-host';
|
||||
import config from '@/config';
|
||||
|
||||
export const meta = {
|
||||
tags: ['federation'],
|
||||
|
@ -140,7 +140,7 @@ export default define(meta, async (ps, user) => {
|
||||
const query = makePaginationQuery(ReversiGames.createQueryBuilder('game'), ps.sinceId, ps.untilId)
|
||||
.andWhere('game.isStarted = TRUE');
|
||||
|
||||
if (ps.my) {
|
||||
if (ps.my && user) {
|
||||
query.andWhere(new Brackets(qb => { qb
|
||||
.where('game.user1Id = :userId', { userId: user.id })
|
||||
.orWhere('game.user2Id = :userId', { userId: user.id });
|
||||
|
@ -72,7 +72,7 @@ export default define(meta, async (ps, user) => {
|
||||
isLlotheo: false
|
||||
} as Partial<ReversiGame>);
|
||||
|
||||
publishReversiStream(exist.parentId, 'matched', await ReversiGames.pack(game, exist.parentId));
|
||||
publishReversiStream(exist.parentId, 'matched', await ReversiGames.pack(game, { id: exist.parentId }));
|
||||
|
||||
const other = await ReversiMatchings.count({
|
||||
childId: user.id
|
||||
|
@ -61,7 +61,7 @@ export default define(meta, async (ps, user) => {
|
||||
throw e;
|
||||
});
|
||||
|
||||
return await Users.pack(user, user, {
|
||||
return await Users.pack(user.id, user, {
|
||||
detail: true
|
||||
});
|
||||
});
|
||||
|
@ -1,4 +1,3 @@
|
||||
import $ from 'cafy';
|
||||
import define from '../../../define';
|
||||
import { RegistryItems } from '../../../../../models';
|
||||
|
||||
|
@ -47,7 +47,7 @@ export default define(meta, async (ps, user) => {
|
||||
throw e;
|
||||
});
|
||||
|
||||
return await Users.pack(user, user, {
|
||||
return await Users.pack(user.id, user, {
|
||||
detail: true
|
||||
});
|
||||
});
|
||||
|
@ -205,7 +205,8 @@ export const meta = {
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, user, token) => {
|
||||
export default define(meta, async (ps, _user, token) => {
|
||||
const user = await Users.findOneOrFail(_user.id);
|
||||
const isSecure = token == null;
|
||||
|
||||
const updates = {} as Partial<User>;
|
||||
|
@ -5,7 +5,7 @@ import define from '../../define';
|
||||
import * as ms from 'ms';
|
||||
import { getNote } from '../../common/getters';
|
||||
import { ApiError } from '../../error';
|
||||
import { Notes } from '../../../../models';
|
||||
import { Notes, Users } from '../../../../models';
|
||||
|
||||
export const meta = {
|
||||
desc: {
|
||||
@ -55,6 +55,6 @@ export default define(meta, async (ps, user) => {
|
||||
});
|
||||
|
||||
for (const note of renotes) {
|
||||
deleteNote(user, note);
|
||||
deleteNote(await Users.findOneOrFail(user.id), note);
|
||||
}
|
||||
});
|
||||
|
@ -43,7 +43,7 @@ export default define(meta, async (ps, user) => {
|
||||
event: ps.event,
|
||||
var: ps.var,
|
||||
userId: user.id,
|
||||
user: await Users.pack(user, page.userId, {
|
||||
user: await Users.pack(user.id, { id: page.userId }, {
|
||||
detail: true
|
||||
})
|
||||
});
|
||||
|
@ -31,12 +31,12 @@ export const meta = {
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, user) => {
|
||||
const userGroup = await UserGroups.save({
|
||||
const userGroup = await UserGroups.insert({
|
||||
id: genId(),
|
||||
createdAt: new Date(),
|
||||
userId: user.id,
|
||||
name: ps.name,
|
||||
} as UserGroup);
|
||||
} as UserGroup).then(x => UserGroups.findOneOrFail(x.identifiers[0]));
|
||||
|
||||
// Push the owner
|
||||
await UserGroupJoinings.insert({
|
||||
|
@ -96,12 +96,12 @@ export default define(meta, async (ps, me) => {
|
||||
throw new ApiError(meta.errors.alreadyInvited);
|
||||
}
|
||||
|
||||
const invitation = await UserGroupInvitations.save({
|
||||
const invitation = await UserGroupInvitations.insert({
|
||||
id: genId(),
|
||||
createdAt: new Date(),
|
||||
userId: user.id,
|
||||
userGroupId: userGroup.id
|
||||
} as UserGroupInvitation);
|
||||
} as UserGroupInvitation).then(x => UserGroupInvitations.findOneOrFail(x.identifiers[0]));
|
||||
|
||||
// 通知を作成
|
||||
createNotification(user.id, 'groupInvited', {
|
||||
|
@ -30,12 +30,12 @@ export const meta = {
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, user) => {
|
||||
const userList = await UserLists.save({
|
||||
const userList = await UserLists.insert({
|
||||
id: genId(),
|
||||
createdAt: new Date(),
|
||||
userId: user.id,
|
||||
name: ps.name,
|
||||
} as UserList);
|
||||
} as UserList).then(x => UserLists.findOneOrFail(x.identifiers[0]));
|
||||
|
||||
return await UserLists.pack(userList);
|
||||
});
|
||||
|
@ -6,6 +6,7 @@ import { ApiError } from '../../error';
|
||||
import { ID } from '@/misc/cafy-id';
|
||||
import { Users } from '../../../../models';
|
||||
import { In } from 'typeorm';
|
||||
import { User } from '@/models/entities/user';
|
||||
|
||||
export const meta = {
|
||||
desc: {
|
||||
@ -81,9 +82,9 @@ export default define(meta, async (ps, me) => {
|
||||
});
|
||||
|
||||
// リクエストされた通りに並べ替え
|
||||
const _users = [];
|
||||
const _users: User[] = [];
|
||||
for (const id of ps.userIds) {
|
||||
_users.push(users.find(x => x.id === id));
|
||||
_users.push(users.find(x => x.id === id)!);
|
||||
}
|
||||
|
||||
return await Promise.all(_users.map(u => Users.pack(u, me, {
|
||||
|
@ -7,7 +7,7 @@ import Logger from '../../services/logger';
|
||||
|
||||
const logger = new Logger('limiter');
|
||||
|
||||
export default (endpoint: IEndpoint, user: User) => new Promise((ok, reject) => {
|
||||
export default (endpoint: IEndpoint, user: User) => new Promise<void>((ok, reject) => {
|
||||
const limitation = endpoint.meta.limit!;
|
||||
|
||||
const key = limitation.hasOwnProperty('key')
|
||||
|
@ -26,7 +26,7 @@ export default class extends Channel {
|
||||
childId: body.id
|
||||
});
|
||||
if (matching == null) return;
|
||||
publishMainStream(matching.childId, 'reversiInvited', await ReversiMatchings.pack(matching, matching.childId));
|
||||
publishMainStream(matching.childId, 'reversiInvited', await ReversiMatchings.pack(matching, { id: matching.childId }));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -42,8 +42,9 @@ export default class extends Channel {
|
||||
|
||||
// 関係ない返信は除外
|
||||
if (note.reply) {
|
||||
const reply = note.reply as PackedNote;
|
||||
// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
|
||||
if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return;
|
||||
if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
|
||||
}
|
||||
|
||||
// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
|
||||
|
@ -50,8 +50,9 @@ export default class extends Channel {
|
||||
|
||||
// 関係ない返信は除外
|
||||
if (note.reply) {
|
||||
const reply = note.reply as PackedNote;
|
||||
// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
|
||||
if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return;
|
||||
if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
|
||||
}
|
||||
|
||||
// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
|
||||
|
@ -59,8 +59,9 @@ export default class extends Channel {
|
||||
|
||||
// 関係ない返信は除外
|
||||
if (note.reply) {
|
||||
const reply = note.reply as PackedNote;
|
||||
// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
|
||||
if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return;
|
||||
if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
|
||||
}
|
||||
|
||||
// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
|
||||
|
@ -44,8 +44,9 @@ export default class extends Channel {
|
||||
|
||||
// 関係ない返信は除外
|
||||
if (note.reply) {
|
||||
const reply = note.reply as PackedNote;
|
||||
// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
|
||||
if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return;
|
||||
if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
|
||||
}
|
||||
|
||||
// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
|
||||
|
@ -156,8 +156,8 @@ export default class Connection {
|
||||
};
|
||||
|
||||
add(note);
|
||||
if (note.reply) add(note.reply);
|
||||
if (note.renote) add(note.renote);
|
||||
if (note.reply) add(note.reply as PackedNote);
|
||||
if (note.renote) add(note.renote as PackedNote);
|
||||
}
|
||||
|
||||
@autobind
|
||||
|
@ -89,7 +89,7 @@ router.get('/verify-email/:code', async ctx => {
|
||||
emailVerifyCode: null
|
||||
});
|
||||
|
||||
publishMainStream(profile.userId, 'meUpdated', await Users.pack(profile.userId, profile.userId, {
|
||||
publishMainStream(profile.userId, 'meUpdated', await Users.pack(profile.userId, { id: profile.userId }, {
|
||||
detail: true,
|
||||
includeSecrets: true
|
||||
}));
|
||||
|
Reference in New Issue
Block a user