mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-27 15:53:09 +02:00
メンションを処理
This commit is contained in:
parent
b77cbeca22
commit
1f018d87f2
2 changed files with 43 additions and 7 deletions
|
@ -4,7 +4,7 @@ import webFinger from './webfinger';
|
||||||
import config from '../config';
|
import config from '../config';
|
||||||
import { createPerson } from './activitypub/models/person';
|
import { createPerson } from './activitypub/models/person';
|
||||||
|
|
||||||
export default async (username, _host, option) => {
|
export default async (username, _host, option?) => {
|
||||||
const usernameLower = username.toLowerCase();
|
const usernameLower = username.toLowerCase();
|
||||||
const hostAscii = toASCII(_host).toLowerCase();
|
const hostAscii = toASCII(_host).toLowerCase();
|
||||||
const host = toUnicode(hostAscii);
|
const host = toUnicode(hostAscii);
|
||||||
|
|
|
@ -17,6 +17,7 @@ import event from '../../publishers/stream';
|
||||||
import parse from '../../text/parse';
|
import parse from '../../text/parse';
|
||||||
import { IApp } from '../../models/app';
|
import { IApp } from '../../models/app';
|
||||||
import UserList from '../../models/user-list';
|
import UserList from '../../models/user-list';
|
||||||
|
import resolveUser from '../../remote/resolve-user';
|
||||||
|
|
||||||
export default async (user: IUser, data: {
|
export default async (user: IUser, data: {
|
||||||
createdAt?: Date;
|
createdAt?: Date;
|
||||||
|
@ -119,6 +120,13 @@ export default async (user: IUser, data: {
|
||||||
// Serialize
|
// Serialize
|
||||||
const noteObj = await pack(note);
|
const noteObj = await pack(note);
|
||||||
|
|
||||||
|
const render = async () => {
|
||||||
|
const content = data.renote && data.text == null
|
||||||
|
? renderAnnounce(data.renote.uri ? data.renote.uri : await renderNote(data.renote))
|
||||||
|
: renderCreate(await renderNote(note));
|
||||||
|
return packAp(content);
|
||||||
|
};
|
||||||
|
|
||||||
// タイムラインへの投稿
|
// タイムラインへの投稿
|
||||||
if (note.channelId == null) {
|
if (note.channelId == null) {
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
|
@ -190,12 +198,6 @@ export default async (user: IUser, data: {
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region リプライとAnnounceのAP配送
|
//#region リプライとAnnounceのAP配送
|
||||||
const render = async () => {
|
|
||||||
const content = data.renote && data.text == null
|
|
||||||
? renderAnnounce(data.renote.uri ? data.renote.uri : await renderNote(data.renote))
|
|
||||||
: renderCreate(await renderNote(note));
|
|
||||||
return packAp(content);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 投稿がリプライかつ投稿者がローカルユーザーかつリプライ先の投稿の投稿者がリモートユーザーなら配送
|
// 投稿がリプライかつ投稿者がローカルユーザーかつリプライ先の投稿の投稿者がリモートユーザーなら配送
|
||||||
if (data.reply && isLocalUser(user) && isRemoteUser(data.reply._user)) {
|
if (data.reply && isLocalUser(user) && isRemoteUser(data.reply._user)) {
|
||||||
|
@ -243,6 +245,40 @@ export default async (user: IUser, data: {
|
||||||
);
|
);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
//#region メンション
|
||||||
|
if (data.text) {
|
||||||
|
// TODO: Drop dupulicates
|
||||||
|
const mentions = tokens
|
||||||
|
.filter(t => t.type == 'mention');
|
||||||
|
|
||||||
|
mentions.forEach(async m => {
|
||||||
|
const u = await resolveUser(m.username, m.host);
|
||||||
|
|
||||||
|
if (isLocalUser(u)) {
|
||||||
|
// Fetch mentioned user
|
||||||
|
const mentionee = await User
|
||||||
|
.findOne({
|
||||||
|
usernameLower: m.username.toLowerCase()
|
||||||
|
}, { _id: true });
|
||||||
|
|
||||||
|
// When mentioned user not found
|
||||||
|
if (mentionee == null) return;
|
||||||
|
|
||||||
|
// 既に言及されたユーザーに対する返信や引用renoteの場合も無視
|
||||||
|
if (data.reply && data.reply.userId.equals(mentionee._id)) return;
|
||||||
|
if (data.renote && data.renote.userId.equals(mentionee._id)) return;
|
||||||
|
|
||||||
|
// Create notification
|
||||||
|
notify(mentionee._id, user._id, 'mention', {
|
||||||
|
noteId: note._id
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
deliver(user, await render(), u.inbox);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
const mentions = [];
|
const mentions = [];
|
||||||
|
|
||||||
async function addMention(mentionee, reason) {
|
async function addMention(mentionee, reason) {
|
||||||
|
|
Loading…
Reference in a new issue