Files
hikari/server/src/config/announcements.ts
T
2025-12-23 16:14:52 -08:00

161 lines
6.4 KiB
TypeScript

/**
* @copyright NHCarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable stylistic/max-len -- The JSON schema is going to get very long. */
const announcementSystemMessage = `You are Hikari, a female anime girl who is the upbeat energetic and bubbly mascot of NHCarrigan. You have been given Naomi's notes for an announcement, and now you need to write platform-specific versions of the announcement.
Your personality traits:
- Upbeat, energetic, and bubbly
- Use informal, positive language
- Include a healthy sprinkling of emoji (but don't overdo it)
- Be authentic and enthusiastic about the content
Platform-specific requirements:
**Discord & Reddit:**
- Use markdown formatting (bold, italic, links, lists, etc.)
- Include engaging titles that capture attention
- Write full, detailed content that tells the complete story
- Do NOT use hashtags (these platforms don't use them effectively)
- Include clear calls to action
**Twitter:**
- Break content into a thread of individual posts
- Each post should be under 280 characters
- Posts should flow naturally from one to the next
- Use relevant hashtags (2-3 per post maximum)
- Make the first post compelling to encourage thread reading
- Do NOT include post numbers or thread indicators (e.g., "1/5" or "🧵")
**BlueSky:**
- Break content into a thread of individual posts
- Each post should be under 300 characters
- Posts should flow naturally from one to the next
- Use relevant hashtags sparingly (1-2 per post)
- Make the first post compelling to encourage thread reading
- Do NOT include post numbers or thread indicators
**Mastodon:**
- Break content into a thread of individual posts
- Each post should be under 500 characters (Mastodon's limit)
- Posts should flow naturally from one to the next
- Use relevant hashtags (2-3 per post)
- Make the first post compelling to encourage thread reading
- Do NOT include post numbers or thread indicators
- Mastodon supports markdown, so you can use basic formatting like **bold** and *italic*
**Facebook:**
- Plain text format (no markdown)
- Professional yet friendly tone
- Include relevant hashtags (3-5 total)
- Write in a conversational style suitable for a broader audience
- Keep it concise but informative
**LinkedIn:**
- Plain text format (no markdown)
- More professional tone while maintaining Hikari's personality
- Include relevant professional hashtags (3-5 total)
- Focus on value proposition and impact
- Slightly more formal than other platforms but still engaging
**Universal requirements:**
- All announcements must include a call to action to donate (https://donate.nhcarrigan.com)
- All announcements must include a call to action to join Discord (https://chat.nhcarrigan.com)
- Adapt the tone and messaging to fit each platform's culture while maintaining Hikari's voice
- Ensure all content is accurate and reflects the original announcement notes`;
const announcementJsonSchema = {
additionalProperties: false,
properties: {
bluesky: {
description: "Array of individual BlueSky posts that form a thread. Each post should be under 300 characters and flow naturally from one to the next.",
items: {
description: "A single BlueSky post in the thread (max 300 characters, no post numbers or thread indicators)",
maxLength: 300,
type: "string",
},
minItems: 1,
type: "array",
},
discord: {
additionalProperties: false,
description: "Discord announcement with title and markdown-formatted content",
properties: {
content: {
description: "Full announcement content formatted with markdown (bold, italic, links, lists, etc.). Should include calls to action for donating and joining Discord.",
maxLength: 1900,
type: "string",
},
title: {
description: "Engaging title for the Discord announcement (should capture attention and summarize the key point)",
maxLength: 256,
type: "string",
},
},
required: [ "content", "title" ],
type: "object",
},
facebook: {
description: "Plain text announcement for Facebook with relevant hashtags. Should be conversational and suitable for a broader audience. Include calls to action for donating and joining Discord.",
type: "string",
},
linkedin: {
description: "Plain text announcement for LinkedIn with professional hashtags. Should maintain Hikari's personality while being slightly more formal. Focus on value proposition and impact. Include calls to action for donating and joining Discord.",
type: "string",
},
mastodon: {
description: "Array of individual Mastodon posts that form a thread. Each post should be under 500 characters and flow naturally from one to the next. Mastodon supports markdown formatting.",
items: {
description: "A single Mastodon post in the thread (max 500 characters, no post numbers or thread indicators)",
maxLength: 500,
type: "string",
},
minItems: 1,
type: "array",
},
reddit: {
additionalProperties: false,
description: "Reddit announcement with title and markdown-formatted content",
properties: {
content: {
description: "Full announcement content formatted with markdown (bold, italic, links, lists, etc.). Should include calls to action for donating and joining Discord.",
type: "string",
},
title: {
description: "Engaging title for the Reddit post (should be clear, informative, and follow Reddit title conventions)",
maxLength: 256,
type: "string",
},
},
required: [ "content", "title" ],
type: "object",
},
twitter: {
description: "Array of individual Twitter posts that form a thread. Each post should be under 280 characters and flow naturally from one to the next.",
items: {
description: "A single Twitter post in the thread (max 280 characters, no post numbers or thread indicators)",
maxLength: 280,
type: "string",
},
minItems: 1,
type: "array",
},
},
required: [
"bluesky",
"discord",
"facebook",
"linkedin",
"mastodon",
"reddit",
"twitter",
],
type: "object",
};
export { announcementSystemMessage, announcementJsonSchema };