Emoji support in profile (#3514)
* Emoji in profile * Add emojis to fields
This commit is contained in:
@@ -164,7 +164,7 @@ export async function resolveNote(value: string | IObject, resolver?: Resolver):
|
||||
return await createNote(uri, resolver);
|
||||
}
|
||||
|
||||
async function extractEmojis(tags: ITag[], host_: string) {
|
||||
export async function extractEmojis(tags: ITag[], host_: string) {
|
||||
const host = toUnicode(host_.toLowerCase());
|
||||
|
||||
if (!tags) return [];
|
||||
|
@@ -12,10 +12,11 @@ import Meta from '../../../models/meta';
|
||||
import htmlToMFM from '../../../mfm/html-to-mfm';
|
||||
import usersChart from '../../../chart/users';
|
||||
import { URL } from 'url';
|
||||
import { resolveNote } from './note';
|
||||
import { resolveNote, extractEmojis } from './note';
|
||||
import registerInstance from '../../../services/register-instance';
|
||||
import Instance from '../../../models/instance';
|
||||
import getDriveFileUrl from '../../../misc/get-drive-file-url';
|
||||
import { IEmoji } from '../../../models/emoji';
|
||||
|
||||
const log = debug('misskey:activitypub');
|
||||
|
||||
@@ -234,6 +235,21 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
|
||||
user.bannerColor = bannerColor;
|
||||
//#endregion
|
||||
|
||||
//#region カスタム絵文字取得
|
||||
const emojis = await extractEmojis(person.tag, host).catch(e => {
|
||||
console.log(`extractEmojis: ${e}`);
|
||||
return [] as IEmoji[];
|
||||
});
|
||||
|
||||
const emojiNames = emojis.map(emoji => emoji.name);
|
||||
|
||||
await User.update({ _id: user._id }, {
|
||||
$set: {
|
||||
emojis: emojiNames
|
||||
}
|
||||
});
|
||||
//#endregion
|
||||
|
||||
await updateFeatured(user._id).catch(err => console.log(err));
|
||||
|
||||
return user;
|
||||
@@ -301,6 +317,14 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
|
||||
: resolveImage(exist, img).catch(() => null)
|
||||
)));
|
||||
|
||||
// カスタム絵文字取得
|
||||
const emojis = await extractEmojis(person.tag, exist.host).catch(e => {
|
||||
console.log(`extractEmojis: ${e}`);
|
||||
return [] as IEmoji[];
|
||||
});
|
||||
|
||||
const emojiNames = emojis.map(emoji => emoji.name);
|
||||
|
||||
// Update user
|
||||
await User.update({ _id: exist._id }, {
|
||||
$set: {
|
||||
@@ -314,6 +338,7 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
|
||||
bannerUrl: getDriveFileUrl(banner, false),
|
||||
avatarColor: avatar && avatar.metadata.properties.avgColor ? avatar.metadata.properties.avgColor : null,
|
||||
bannerColor: banner && banner.metadata.properties.avgColor ? banner.metadata.properties.avgColor : null,
|
||||
emojis: emojiNames,
|
||||
description: htmlToMFM(person.summary),
|
||||
followersCount,
|
||||
followingCount,
|
||||
|
@@ -137,7 +137,7 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
|
||||
};
|
||||
}
|
||||
|
||||
async function getEmojis(names: string[]): Promise<IEmoji[]> {
|
||||
export async function getEmojis(names: string[]): Promise<IEmoji[]> {
|
||||
if (names == null || names.length < 1) return [];
|
||||
|
||||
const emojis = await Promise.all(
|
||||
|
@@ -5,6 +5,8 @@ import { ILocalUser } from '../../../models/user';
|
||||
import toHtml from '../../../mfm/html';
|
||||
import parse from '../../../mfm/parse';
|
||||
import DriveFile from '../../../models/drive-file';
|
||||
import { getEmojis } from './note';
|
||||
import renderEmoji from './emoji';
|
||||
|
||||
export default async (user: ILocalUser) => {
|
||||
const id = `${config.url}/users/${user._id}`;
|
||||
@@ -36,6 +38,13 @@ export default async (user: ILocalUser) => {
|
||||
value: `<a href="https://discordapp.com/users/${user.discord.id}" rel="me nofollow noopener" target="_blank"><span>@${user.discord.username}#${user.discord.discriminator}</span></a>`
|
||||
});
|
||||
|
||||
const emojis = await getEmojis(user.emojis);
|
||||
const apemojis = emojis.map(emoji => renderEmoji(emoji));
|
||||
|
||||
const tag = [
|
||||
...apemojis,
|
||||
];
|
||||
|
||||
return {
|
||||
type: user.isBot ? 'Service' : 'Person',
|
||||
id,
|
||||
@@ -51,6 +60,7 @@ export default async (user: ILocalUser) => {
|
||||
summary: toHtml(parse(user.description)),
|
||||
icon: user.avatarId && renderImage(avatar),
|
||||
image: user.bannerId && renderImage(banner),
|
||||
tag,
|
||||
manuallyApprovesFollowers: user.isLocked,
|
||||
publicKey: renderKey(user),
|
||||
isCat: user.isCat,
|
||||
|
Reference in New Issue
Block a user