Merge pull request #375

* fix(backend): Troubleshoot Messaging Not Working

* cleanup imports
This commit is contained in:
Caipira 2023-09-23 16:41:44 +09:00 committed by GitHub
parent 75948695cc
commit 4c298f3706
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 25 additions and 14 deletions

View file

@ -9,13 +9,13 @@ import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
import type { MiMessagingMessage } from '@/models/MessagingMessage.js';
import type { MiNote } from '@/models/Note.js';
import type { MiNote, IMentionedRemoteUsers } from '@/models/Note.js';
import type { MiUser, MiRemoteUser } from '@/models/User.js';
import type { MiUserGroup } from '@/models/UserGroup.js';
import { QueueService } from '@/core/QueueService.js';
import { toArray } from '@/misc/prelude/array.js';
import { IdentifiableError } from '@/misc/identifiable-error.js';
import type { MessagingMessagesRepository, MutingsRepository, UserGroupJoiningsRepository, UsersRepository } from '@/models/_.js';
import type { MessagingMessagesRepository, MutingsRepository, UserGroupJoiningsRepository, UsersRepository, UserProfilesRepository } from '@/models/_.js';
import { IdService } from '@/core/IdService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
@ -33,6 +33,9 @@ export class MessagingService {
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
@Inject(DI.userProfilesRepository)
private userProfilesRepository: UserProfilesRepository,
@Inject(DI.messagingMessagesRepository)
private messagingMessagesRepository: MessagingMessagesRepository,
@ -41,7 +44,6 @@ export class MessagingService {
@Inject(DI.mutingsRepository)
private mutingsRepository: MutingsRepository,
private userEntityService: UserEntityService,
private messagingMessageEntityService: MessagingMessageEntityService,
private idService: IdService,
@ -53,10 +55,12 @@ export class MessagingService {
}
@bindThis
public async createMessage(user: { id: MiUser['id']; host: MiUser['host']; }, recipientUser: MiUser | undefined, recipientGroup: MiUserGroup | undefined, text: string | null | undefined, file: MiDriveFile | null, uri?: string) {
public async createMessage(user: { id: MiUser['id']; host: MiUser['host']; }, recipientUser: MiUser | null, recipientGroup: MiUserGroup | null, text: string | null | undefined, file: MiDriveFile | null, uri?: string) {
const data = new Date();
const message = {
id: this.idService.genId(),
createdAt: new Date(),
id: this.idService.genId(data),
createdAt: data,
fileId: file ? file.id : null,
recipientId: recipientUser ? recipientUser.id : null,
groupId: recipientGroup ? recipientGroup.id : null,
@ -125,6 +129,10 @@ export class MessagingService {
}, 2000);
if (recipientUser && this.userEntityService.isLocalUser(user) && this.userEntityService.isRemoteUser(recipientUser)) {
const profiles = await this.userProfilesRepository.findBy({ userId: In([recipientUser.id]) });
const profile = profiles.find(p => p.userId === recipientUser.id);
const url = profile != null ? profile.url : null;
const note = {
id: message.id,
createdAt: message.createdAt,
@ -132,12 +140,15 @@ export class MessagingService {
text: message.text,
userId: message.userId,
visibility: 'specified',
emojis: [{}],
mentions: [recipientUser].map(u => u.id),
mentionedRemoteUsers: JSON.stringify([recipientUser].map(u => ({
uri: u.uri,
url: url,
username: u.username,
host: u.host,
}))),
} as IMentionedRemoteUsers[0]
))),
} as MiNote;
const activity = this.apRendererService.addContext(this.apRendererService.renderCreate(await this.apRendererService.renderNote(note, false, true), note));

View file

@ -659,7 +659,7 @@ export class NoteCreateService implements OnApplicationShutdown {
//#region AP deliver
if (this.userEntityService.isLocalUser(user)) {
(async () => {
await (async () => {
const noteActivity = await this.renderNoteOrRenoteActivity(data, note);
const dm = this.apDeliverManagerService.createDeliverManager(user, noteActivity);
@ -670,13 +670,13 @@ export class NoteCreateService implements OnApplicationShutdown {
// 投稿がリプライかつ投稿者がローカルユーザーかつリプライ先の投稿の投稿者がリモートユーザーなら配送
if (data.reply && data.reply.userHost !== null) {
const u = await this.usersRepository.findOneBy({ id: data.reply.userId });
const u = await this.usersRepository.findOneBy({id: data.reply.userId});
if (u && this.userEntityService.isRemoteUser(u)) dm.addDirectRecipe(u);
}
// 投稿がRenoteかつ投稿者がローカルユーザーかつRenote元の投稿の投稿者がリモートユーザーなら配送
if (data.renote && data.renote.userHost !== null) {
const u = await this.usersRepository.findOneBy({ id: data.renote.userId });
const u = await this.usersRepository.findOneBy({id: data.renote.userId});
if (u && this.userEntityService.isRemoteUser(u)) dm.addDirectRecipe(u);
}

View file

@ -727,7 +727,7 @@ export class ApRendererService {
* @param orderedItems attached objects (optional)
*/
@bindThis
public renderOrderedCollection(id: string, totalItems: number, first?: string, last?: string, orderedItems?: IObject[]) {
public renderOrderedCollection(id: string | null, totalItems: number, first?: string, last?: string, orderedItems?: IObject[]) {
const page: any = {
id,
type: 'OrderedCollection',

View file

@ -294,7 +294,7 @@ export class ApNoteService {
if (isMessaging) {
for (const recipient of visibleUsers) {
await this.messagingService.createMessage(actor, recipient, undefined, text ?? undefined, (files && files.length > 0) ? files[0] : null, object.id);
await this.messagingService.createMessage(actor, recipient, null, text ?? undefined, (files && files.length > 0) ? files[0] : null, object.id);
return null;
}
}

View file

@ -110,8 +110,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private messagingService: MessagingService,
) {
super(meta, paramDef, async (ps, me) => {
let recipientUser: MiUser | null;
let recipientGroup: MiUserGroup | null;
let recipientUser: MiUser | null = null;
let recipientGroup: MiUserGroup | null = null;
if (ps.userId != null) {
// Myself