add instance custom emojis to responses

This commit is contained in:
2025-07-06 14:39:45 +00:00
parent 9a7cd118b3
commit e2ce397118
2 changed files with 40 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import {
NewStatusBody,
Notification,
OllamaConfigOptions,
PleromaEmoji,
} from "../types.js";
import striptags from "striptags";
import { PrismaClient } from "../generated/prisma/client.js";
@ -53,6 +54,30 @@ const getNotifications = async () => {
}
};
const getInstanceEmojis = async () => {
const { bearerToken, pleromaInstanceUrl } = envConfig;
try {
const request = await fetch(`${pleromaInstanceUrl}/api/v1/pleroma/emoji`, {
method: "GET",
headers: {
Authorization: `Bearer ${bearerToken}`,
},
});
if (!request.ok) {
console.error(`Emoji GET failed: ${request.status}`);
return;
}
const emojis: PleromaEmoji[] = await request.json();
return Object.keys(emojis);
} catch (error: any) {
console.error(`Could not fetch emojis: ${error.message}`);
}
};
const selectRandomEmoji = (emojiList: string[]) => {
return emojiList[Math.floor(Math.random() * emojiList.length)];
};
const storeUserData = async (notification: Notification): Promise<void> => {
try {
await prisma.user.upsert({
@ -192,11 +217,16 @@ const postReplyToStatus = async (
ollamaResponseBody: OllamaResponse
) => {
const { pleromaInstanceUrl, bearerToken } = envConfig;
const emojiList = await getInstanceEmojis();
let randomEmoji;
if (emojiList) {
randomEmoji = selectRandomEmoji(emojiList);
}
try {
let mentions: string[];
const statusBody: NewStatusBody = {
content_type: "text/markdown",
status: ollamaResponseBody.response,
status: `${ollamaResponseBody.response} :${randomEmoji}:`,
in_reply_to_id: notification.status.id,
};
if (

9
types.d.ts vendored
View File

@ -73,6 +73,15 @@ export interface Mention {
username: string;
}
export interface PleromaEmoji {
[emojiName: string]: PleromaEmojiMetadata;
}
interface PleromaEmojiMetadata {
image_url: string;
tags: string[];
}
/**
* Experimental settings, I wouldn't recommend messing with these if you don't know how they work (I don't either)
*/