UNPKG

wechat-emojis

Version:

完整的微信内置表情资源库,包含 109 个高清 PNG 图片和类型安全的 TypeScript API

365 lines (340 loc) 17 kB
/** * 微信表情包 TypeScript 模块 * 提供类型安全的表情访问和图片路径获取功能 */ /** * 表情类别枚举 */ export enum EmojiCategory { /** 人脸表情 */ FACE = 'face', /** 手势表情 */ GESTURE = 'gesture', /** 动物表情 */ ANIMAL = 'animal', /** 祝福表情 */ BLESSING = 'blessing', /** 其他表情 */ OTHER = 'other' } /** * 表情信息接口 */ export interface EmojiInfo { /** 表情名称 */ name: string; /** 表情类别 */ category: EmojiCategory; /** 图片文件路径 */ path: string; /** 英文名称(可选) */ englishName?: string; } /** * 表情名称类型 */ export type EmojiName = // 人脸表情 | '微笑' | '撇嘴' | '色' | '发呆' | '得意' | '流泪' | '害羞' | '闭嘴' | '睡' | '大哭' | '尴尬' | '发怒' | '调皮' | '呲牙' | '惊讶' | '难过' | '囧' | '抓狂' | '吐' | '偷笑' | '愉快' | '白眼' | '傲慢' | '困' | '惊恐' | '憨笑' | '悠闲' | '咒骂' | '疑问' | '嘘' | '晕' | '衰' | '骷髅' | '敲打' | '再见' | '擦汗' | '抠鼻' | '鼓掌' | '坏笑' | '右哼哼' | '鄙视' | '委屈' | '快哭了' | '阴险' | '亲亲' | '可怜' | '笑脸' | '生病' | '脸红' | '破涕为笑' | '恐惧' | '失望' | '无语' | '嘿哈' | '捂脸' | '机智' | '皱眉' | '耶' | '吃瓜' | '加油' | '汗' | '天啊' | 'Emm' | '社会社会' | '旺柴' | '好的' | '打脸' | '哇' | '翻白眼' | '666' | '让我看看' | '叹气' | '苦涩' | '裂开' | '奸笑' // 手势表情 | '握手' | '胜利' | '抱拳' | '勾引' | '拳头' | 'OK' | '合十' | '强' | '拥抱' | '弱' // 动物表情 | '猪头' | '跳跳' | '发抖' | '转圈' // 祝福表情 | '庆祝' | '礼物' | '红包' | '發' | '福' | '烟花' | '爆竹' // 其他表情 | '嘴唇' | '爱心' | '心碎' | '啤酒' | '咖啡' | '蛋糕' | '凋谢' | '菜刀' | '炸弹' | '便便' | '太阳' | '月亮' | '玫瑰'; /** * 表情数据映射 * 将表情名称映射到完整的表情信息 */ const EMOJI_DATA: Record<EmojiName, EmojiInfo> = { // 人脸表情 '微笑': { name: '微笑', category: EmojiCategory.FACE, path: 'assets/face/微笑.png' }, '撇嘴': { name: '撇嘴', category: EmojiCategory.FACE, path: 'assets/face/撇嘴.png' }, '色': { name: '色', category: EmojiCategory.FACE, path: 'assets/face/色.png' }, '发呆': { name: '发呆', category: EmojiCategory.FACE, path: 'assets/face/发呆.png' }, '得意': { name: '得意', category: EmojiCategory.FACE, path: 'assets/face/得意.png' }, '流泪': { name: '流泪', category: EmojiCategory.FACE, path: 'assets/face/流泪.png' }, '害羞': { name: '害羞', category: EmojiCategory.FACE, path: 'assets/face/害羞.png' }, '闭嘴': { name: '闭嘴', category: EmojiCategory.FACE, path: 'assets/face/闭嘴.png' }, '睡': { name: '睡', category: EmojiCategory.FACE, path: 'assets/face/睡.png' }, '大哭': { name: '大哭', category: EmojiCategory.FACE, path: 'assets/face/大哭.png' }, '尴尬': { name: '尴尬', category: EmojiCategory.FACE, path: 'assets/face/尴尬.png' }, '发怒': { name: '发怒', category: EmojiCategory.FACE, path: 'assets/face/发怒.png' }, '调皮': { name: '调皮', category: EmojiCategory.FACE, path: 'assets/face/调皮.png' }, '呲牙': { name: '呲牙', category: EmojiCategory.FACE, path: 'assets/face/呲牙.png' }, '惊讶': { name: '惊讶', category: EmojiCategory.FACE, path: 'assets/face/惊讶.png' }, '难过': { name: '难过', category: EmojiCategory.FACE, path: 'assets/face/难过.png' }, '囧': { name: '囧', category: EmojiCategory.FACE, path: 'assets/face/囧.png' }, '抓狂': { name: '抓狂', category: EmojiCategory.FACE, path: 'assets/face/抓狂.png' }, '吐': { name: '吐', category: EmojiCategory.FACE, path: 'assets/face/吐.png' }, '偷笑': { name: '偷笑', category: EmojiCategory.FACE, path: 'assets/face/偷笑.png' }, '愉快': { name: '愉快', category: EmojiCategory.FACE, path: 'assets/face/愉快.png' }, '白眼': { name: '白眼', category: EmojiCategory.FACE, path: 'assets/face/白眼.png' }, '傲慢': { name: '傲慢', category: EmojiCategory.FACE, path: 'assets/face/傲慢.png' }, '困': { name: '困', category: EmojiCategory.FACE, path: 'assets/face/困.png' }, '惊恐': { name: '惊恐', category: EmojiCategory.FACE, path: 'assets/face/惊恐.png' }, '憨笑': { name: '憨笑', category: EmojiCategory.FACE, path: 'assets/face/憨笑.png' }, '悠闲': { name: '悠闲', category: EmojiCategory.FACE, path: 'assets/face/悠闲.png' }, '咒骂': { name: '咒骂', category: EmojiCategory.FACE, path: 'assets/face/咒骂.png' }, '疑问': { name: '疑问', category: EmojiCategory.FACE, path: 'assets/face/疑问.png' }, '嘘': { name: '嘘', category: EmojiCategory.FACE, path: 'assets/face/嘘.png' }, '晕': { name: '晕', category: EmojiCategory.FACE, path: 'assets/face/晕.png' }, '衰': { name: '衰', category: EmojiCategory.FACE, path: 'assets/face/衰.png' }, '骷髅': { name: '骷髅', category: EmojiCategory.FACE, path: 'assets/face/骷髅.png' }, '敲打': { name: '敲打', category: EmojiCategory.FACE, path: 'assets/face/敲打.png' }, '再见': { name: '再见', category: EmojiCategory.FACE, path: 'assets/face/再见.png' }, '擦汗': { name: '擦汗', category: EmojiCategory.FACE, path: 'assets/face/擦汗.png' }, '抠鼻': { name: '抠鼻', category: EmojiCategory.FACE, path: 'assets/face/抠鼻.png' }, '鼓掌': { name: '鼓掌', category: EmojiCategory.FACE, path: 'assets/face/鼓掌.png' }, '坏笑': { name: '坏笑', category: EmojiCategory.FACE, path: 'assets/face/坏笑.png' }, '右哼哼': { name: '右哼哼', category: EmojiCategory.FACE, path: 'assets/face/右哼哼.png' }, '鄙视': { name: '鄙视', category: EmojiCategory.FACE, path: 'assets/face/鄙视.png' }, '委屈': { name: '委屈', category: EmojiCategory.FACE, path: 'assets/face/委屈.png' }, '快哭了': { name: '快哭了', category: EmojiCategory.FACE, path: 'assets/face/快哭了.png' }, '阴险': { name: '阴险', category: EmojiCategory.FACE, path: 'assets/face/阴险.png' }, '亲亲': { name: '亲亲', category: EmojiCategory.FACE, path: 'assets/face/亲亲.png' }, '可怜': { name: '可怜', category: EmojiCategory.FACE, path: 'assets/face/可怜.png' }, '笑脸': { name: '笑脸', category: EmojiCategory.FACE, path: 'assets/face/笑脸.png' }, '生病': { name: '生病', category: EmojiCategory.FACE, path: 'assets/face/生病.png' }, '脸红': { name: '脸红', category: EmojiCategory.FACE, path: 'assets/face/脸红.png' }, '破涕为笑': { name: '破涕为笑', category: EmojiCategory.FACE, path: 'assets/face/破涕为笑.png' }, '恐惧': { name: '恐惧', category: EmojiCategory.FACE, path: 'assets/face/恐惧.png' }, '失望': { name: '失望', category: EmojiCategory.FACE, path: 'assets/face/失望.png' }, '无语': { name: '无语', category: EmojiCategory.FACE, path: 'assets/face/无语.png' }, '嘿哈': { name: '嘿哈', category: EmojiCategory.FACE, path: 'assets/face/嘿哈.png' }, '捂脸': { name: '捂脸', category: EmojiCategory.FACE, path: 'assets/face/捂脸.png' }, '机智': { name: '机智', category: EmojiCategory.FACE, path: 'assets/face/机智.png' }, '皱眉': { name: '皱眉', category: EmojiCategory.FACE, path: 'assets/face/皱眉.png' }, '耶': { name: '耶', category: EmojiCategory.FACE, path: 'assets/face/耶.png' }, '吃瓜': { name: '吃瓜', category: EmojiCategory.FACE, path: 'assets/face/吃瓜.png' }, '加油': { name: '加油', category: EmojiCategory.FACE, path: 'assets/face/加油.png' }, '汗': { name: '汗', category: EmojiCategory.FACE, path: 'assets/face/汗.png' }, '天啊': { name: '天啊', category: EmojiCategory.FACE, path: 'assets/face/天啊.png' }, 'Emm': { name: 'Emm', category: EmojiCategory.FACE, path: 'assets/face/Emm.png' }, '社会社会': { name: '社会社会', category: EmojiCategory.FACE, path: 'assets/face/社会社会.png' }, '旺柴': { name: '旺柴', category: EmojiCategory.FACE, path: 'assets/face/旺柴.png' }, '好的': { name: '好的', category: EmojiCategory.FACE, path: 'assets/face/好的.png' }, '打脸': { name: '打脸', category: EmojiCategory.FACE, path: 'assets/face/打脸.png' }, '哇': { name: '哇', category: EmojiCategory.FACE, path: 'assets/face/哇.png' }, '翻白眼': { name: '翻白眼', category: EmojiCategory.FACE, path: 'assets/face/翻白眼.png' }, '666': { name: '666', category: EmojiCategory.FACE, path: 'assets/face/666.png' }, '让我看看': { name: '让我看看', category: EmojiCategory.FACE, path: 'assets/face/让我看看.png' }, '叹气': { name: '叹气', category: EmojiCategory.FACE, path: 'assets/face/叹气.png' }, '苦涩': { name: '苦涩', category: EmojiCategory.FACE, path: 'assets/face/苦涩.png' }, '裂开': { name: '裂开', category: EmojiCategory.FACE, path: 'assets/face/裂开.png' }, '奸笑': { name: '奸笑', category: EmojiCategory.FACE, path: 'assets/face/奸笑.png' }, // 手势表情 '握手': { name: '握手', category: EmojiCategory.GESTURE, path: 'assets/gesture/握手.png' }, '胜利': { name: '胜利', category: EmojiCategory.GESTURE, path: 'assets/gesture/胜利.png' }, '抱拳': { name: '抱拳', category: EmojiCategory.GESTURE, path: 'assets/gesture/抱拳.png' }, '勾引': { name: '勾引', category: EmojiCategory.GESTURE, path: 'assets/gesture/勾引.png' }, '拳头': { name: '拳头', category: EmojiCategory.GESTURE, path: 'assets/gesture/拳头.png' }, 'OK': { name: 'OK', category: EmojiCategory.GESTURE, path: 'assets/gesture/OK.png' }, '合十': { name: '合十', category: EmojiCategory.GESTURE, path: 'assets/gesture/合十.png' }, '强': { name: '强', category: EmojiCategory.GESTURE, path: 'assets/gesture/强.png' }, '拥抱': { name: '拥抱', category: EmojiCategory.GESTURE, path: 'assets/gesture/拥抱.png' }, '弱': { name: '弱', category: EmojiCategory.GESTURE, path: 'assets/gesture/弱.png' }, // 动物表情 '猪头': { name: '猪头', category: EmojiCategory.ANIMAL, path: 'assets/animal/猪头.png' }, '跳跳': { name: '跳跳', category: EmojiCategory.ANIMAL, path: 'assets/animal/跳跳.png' }, '发抖': { name: '发抖', category: EmojiCategory.ANIMAL, path: 'assets/animal/发抖.png' }, '转圈': { name: '转圈', category: EmojiCategory.ANIMAL, path: 'assets/animal/转圈.png' }, // 祝福表情 '庆祝': { name: '庆祝', category: EmojiCategory.BLESSING, path: 'assets/blessing/庆祝.png' }, '礼物': { name: '礼物', category: EmojiCategory.BLESSING, path: 'assets/blessing/礼物.png' }, '红包': { name: '红包', category: EmojiCategory.BLESSING, path: 'assets/blessing/红包.png' }, '發': { name: '發', category: EmojiCategory.BLESSING, path: 'assets/blessing/發.png' }, '福': { name: '福', category: EmojiCategory.BLESSING, path: 'assets/blessing/福.png' }, '烟花': { name: '烟花', category: EmojiCategory.BLESSING, path: 'assets/blessing/烟花.png' }, '爆竹': { name: '爆竹', category: EmojiCategory.BLESSING, path: 'assets/blessing/爆竹.png' }, // 其他表情 '嘴唇': { name: '嘴唇', category: EmojiCategory.OTHER, path: 'assets/other/嘴唇.png' }, '爱心': { name: '爱心', category: EmojiCategory.OTHER, path: 'assets/other/爱心.png' }, '心碎': { name: '心碎', category: EmojiCategory.OTHER, path: 'assets/other/心碎.png' }, '啤酒': { name: '啤酒', category: EmojiCategory.OTHER, path: 'assets/other/啤酒.png' }, '咖啡': { name: '咖啡', category: EmojiCategory.OTHER, path: 'assets/other/咖啡.png' }, '蛋糕': { name: '蛋糕', category: EmojiCategory.OTHER, path: 'assets/other/蛋糕.png' }, '凋谢': { name: '凋谢', category: EmojiCategory.OTHER, path: 'assets/other/凋谢.png' }, '菜刀': { name: '菜刀', category: EmojiCategory.OTHER, path: 'assets/other/菜刀.png' }, '炸弹': { name: '炸弹', category: EmojiCategory.OTHER, path: 'assets/other/炸弹.png' }, '便便': { name: '便便', category: EmojiCategory.OTHER, path: 'assets/other/便便.png' }, '太阳': { name: '太阳', category: EmojiCategory.OTHER, path: 'assets/other/太阳.png' }, '月亮': { name: '月亮', category: EmojiCategory.OTHER, path: 'assets/other/月亮.png' }, '玫瑰': { name: '玫瑰', category: EmojiCategory.OTHER, path: 'assets/other/玫瑰.png' } }; /** * 获取所有表情数据的辅助函数 */ function getAllEmojiData(): EmojiInfo[] { const result: EmojiInfo[] = []; for (const key in EMOJI_DATA) { if (EMOJI_DATA.hasOwnProperty(key)) { result.push(EMOJI_DATA[key as EmojiName]); } } return result; } /** * 按类别分组的表情数据 */ export const EMOJI_CATEGORIES = { [EmojiCategory.FACE]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.FACE), [EmojiCategory.GESTURE]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.GESTURE), [EmojiCategory.ANIMAL]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.ANIMAL), [EmojiCategory.BLESSING]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.BLESSING), [EmojiCategory.OTHER]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.OTHER) } as const; /** * 获取表情图片路径 * @param name 表情名称 * @returns 图片路径,如果表情不存在则返回 null * * @example * ```typescript * const path = getEmojiPath('微笑'); // 'assets/face/微笑.png' * const invalidPath = getEmojiPath('不存在'); // null * ``` */ export function getEmojiPath(name: EmojiName): string | null { const emoji = EMOJI_DATA[name]; return emoji ? emoji.path : null; } /** * 获取表情信息 * @param name 表情名称 * @returns 表情信息对象,如果表情不存在则返回 null * * @example * ```typescript * const emoji = getEmojiInfo('微笑'); * // { name: '微笑', category: EmojiCategory.FACE, path: 'assets/face/微笑.png' } * ``` */ export function getEmojiInfo(name: EmojiName): EmojiInfo | null { return EMOJI_DATA[name] || null; } /** * 根据类别获取表情列表 * @param category 表情类别 * @returns 该类别下的所有表情信息 * * @example * ```typescript * const faceEmojis = getEmojisByCategory(EmojiCategory.FACE); * ``` */ export function getEmojisByCategory(category: EmojiCategory): EmojiInfo[] { return EMOJI_CATEGORIES[category]; } /** * 获取所有表情信息 * @returns 所有表情的信息数组 * * @example * ```typescript * const allEmojis = getAllEmojis(); * console.log(`总共有 ${allEmojis.length} 个表情`); * ``` */ export function getAllEmojis(): EmojiInfo[] { return getAllEmojiData(); } /** * 搜索表情 * @param keyword 搜索关键词 * @returns 匹配的表情信息数组 * * @example * ```typescript * const results = searchEmojis('笑'); * // 返回包含 '微笑', '偷笑', '坏笑' 等的表情 * ``` */ export function searchEmojis(keyword: string): EmojiInfo[] { const lowerKeyword = keyword.toLowerCase(); return getAllEmojiData().filter(emoji => emoji.name.toLowerCase().includes(lowerKeyword) ); } /** * 检查表情是否存在 * @param name 表情名称 * @returns 是否存在该表情 * * @example * ```typescript * const exists = hasEmoji('微笑'); // true * const notExists = hasEmoji('不存在的表情'); // false * ``` */ export function hasEmoji(name: string): name is EmojiName { return name in EMOJI_DATA; } /** * 获取表情名称列表 * @param category 可选的类别筛选 * @returns 表情名称数组 * * @example * ```typescript * const allNames = getEmojiNames(); * const faceNames = getEmojiNames(EmojiCategory.FACE); * ``` */ export function getEmojiNames(category?: EmojiCategory): string[] { if (category) { return getEmojisByCategory(category).map(emoji => emoji.name); } const names: string[] = []; for (const key in EMOJI_DATA) { if (EMOJI_DATA.hasOwnProperty(key)) { names.push(key); } } return names; } /** * 随机获取表情 * @param category 可选的类别筛选 * @returns 随机表情信息 * * @example * ```typescript * const randomEmoji = getRandomEmoji(); * const randomFaceEmoji = getRandomEmoji(EmojiCategory.FACE); * ``` */ export function getRandomEmoji(category?: EmojiCategory): EmojiInfo { const emojis = category ? getEmojisByCategory(category) : getAllEmojis(); const randomIndex = Math.floor(Math.random() * emojis.length); return emojis[randomIndex]; } /** * 默认导出对象,包含所有主要功能 */ const WeChatEmojis = { // 枚举和类型 EmojiCategory, // 数据 EMOJI_CATEGORIES, // 工具函数 getEmojiPath, getEmojiInfo, getEmojisByCategory, getAllEmojis, searchEmojis, hasEmoji, getEmojiNames, getRandomEmoji } as const; export default WeChatEmojis;