import { Context, NextFunction } from "./deps.deno.ts";import getEmoji from "./emoji.ts";import type { EmojiName } from "./emoji.ts";
export type EmojiFlavor<C extends Context = Context> = C & { emoji: (name: TemplateStringsArray, ...emojis: EmojiName[]) => string; replyWithEmoji: ( string: TemplateStringsArray, ...emojis: EmojiName[] ) => ReturnType<C['reply']>;};
function withEmoji(string: TemplateStringsArray, ...emojis: EmojiName[]) { return string.reduce((acc, str, index) => { const emoji = getEmoji(emojis[index]); return acc + str + (emoji ? emoji.emoji : ""); }, "");}
export function emojiParser<C extends EmojiFlavor>() { return async (ctx: C, next: NextFunction) => { ctx.emoji = withEmoji; ctx.replyWithEmoji = ( text: TemplateStringsArray, ...emojis: EmojiName[] ) => ctx.reply(withEmoji(text, ...emojis)); await next(); };}
export function emoji(name: EmojiName): string { return getEmoji(name)?.emoji ?? "";}