/** * Tone profiles for subreddit-specific message style guidance. * * Each profile defines body-language instructions the LLM uses to adapt the * message to the subreddit's culture. Profiles are applied AFTER the base * prompt and strategy override, so they act as a tone mic rather than * redefining the entire message. */ export const TONE_KEYS = [ 'default', 'dominant', 'submissive', 'playful', 'direct', 'gentle', 'kink-friendly', 'teasing', ] as const; export type ToneKey = (typeof TONE_KEYS)[number]; export interface ToneProfile { id: ToneKey; /** One-line label shown in logs. */ label: string; /** Instructions injected into the prompt to shape the AI's tone. */ promptGuidance: string; } export const TONE_PROFILES: Record = { default: { id: 'default', label: 'Standard', promptGuidance: '', }, dominant: { id: 'dominant', label: 'Dominant', promptGuidance: 'STYLE TONE: Be direct, firm, and commanding. Use imperative language ("send me", "I want", "show me"). ' + 'Don\'t ask hesitantly — tell. Don\'t apologise or hedge. ' + 'Be clear about what you want from her. Make it feel like an order wrapped in lust, not a request.', }, submissive: { id: 'submissive', label: 'Submissive', promptGuidance: 'STYLE TONE: Be deferential and eager to please. Ask what she wants and how you can make her feel good. ' + 'Use language like "I\'d love to" "please" "if you\'d let me". ' + 'Show enthusiasm for following her lead. Be warm, attentive, and completely focused on her pleasure.', }, playful: { id: 'playful', label: 'Playful', promptGuidance: 'STYLE TONE: Be fun, teasing, and light-hearted. Make her smile. Use playful challenges, light teasing, ' + 'and cheeky banter. Keep it hot but with a grin — like you\'re having fun while flirting.', }, direct: { id: 'direct', label: 'Direct', promptGuidance: 'STYLE TONE: Cut straight to the point. No preamble, no dance. Say exactly what you noticed and what you want. ' + 'Be honest and raw — she posted nudes to get a reaction, give her one. One or two sentences max.', }, gentle: { id: 'gentle', label: 'Gentle', promptGuidance: 'STYLE TONE: Be warm, complimenting, and let her feel desired without being crude. ' + 'Focus on how her body makes you feel rather than explicit demands. ' + 'Use phrases like "you\'re amazing", "I love your curves", "you look incredible". ' + 'Still flirty and sexual but in a softer, more admiring way.', }, 'kink-friendly': { id: 'kink-friendly', label: 'Kink-Friendly', promptGuidance: 'STYLE TONE: Be shameless and open about kinks. This is a kink-friendly subspace — ' + 'don\'t hold back. Use explicit language freely. If the post hints at something specific, ' + 'respond to that directly. Be bold about desires, into anything vibe. ' + 'Reference kink-aware language naturally (dom/sub, bdsm, control, discipline, force) if it fits.', }, teasing: { id: 'teasing', label: 'Teasing', promptGuidance: 'STYLE TONE: Set up a payoff but don\'t deliver it straight away. Tease, provoke, make her ask for more. ' + 'Use challenges ("bet you won\'t"), withhold compliments slightly, make her work for it. ' + 'Leave her wanting to prove something or respond.', }, }; export function resolveTone(tone: string): ToneProfile { const key = TONE_KEYS.find((k) => k === tone) ?? 'default'; return TONE_PROFILES[key]; }