UNPKG

koishi-plugin-adapter-iirose

Version:
79 lines (65 loc) 2.09 kB
import { parseAvatar } from '../../../utils/utils'; import { decode } from '../../../utils/entities'; // 定义关注/粉丝信息接口 export interface FollowInfo { name: string; avatar: string; } // 定义关注和粉丝列表接口 export interface FollowList { following: FollowInfo[]; fans: FollowInfo[]; } /** * 生成获取用户关注和粉丝列表的指令 * @param uid 用户uid * @returns {string} */ export const getFollowAndFansPacket = (uid: string): string => { return `+^${uid}`; }; /** * 解析服务器返回的关注和粉丝数据 * @param data 原始数据字符串 * @returns {FollowList | null} */ export const parseFollowAndFans = (data: string): FollowList | null => { if (!data.startsWith('|^')) { return null; } // 处理没有关注和粉丝的情况 if (data === '|^"<"<') { return { following: [], fans: [] }; } // 名字和头像由 '<' 分隔 const parts = data.split('<'); if (parts.length < 2) return { following: [], fans: [] }; const allNamesRaw = parts[0]; const allAvatarsRaw = parts[1]; // 从名字部分解析关注和粉丝 const namesPayload = allNamesRaw.substring(2); // 移除 '|^' const [followingNamesRaw, fanNamesRaw] = namesPayload.split('"'); const followingNames = followingNamesRaw.split("'").filter(Boolean); const fanNames = fanNamesRaw.split("'").filter(Boolean); // 从头像部分解析关注和粉丝 const [followingAvatarsRaw, fanAvatarsRaw] = allAvatarsRaw.split('"'); const followingAvatars = followingAvatarsRaw.split("'").filter(Boolean); const fanAvatars = fanAvatarsRaw.split("'").filter(Boolean); // 组合关注列表 const following = followingNames.map((name, i) => ({ name: decode(name), avatar: parseAvatar(decode(followingAvatars[i] || '')), })); // 组合粉丝列表 const fans = fanNames.map((name, i) => ({ name: decode(name), avatar: parseAvatar(decode(fanAvatars[i] || '')), })); return { following, fans }; };