koishi-plugin-adapter-iirose
Version:
[IIROSE-蔷薇花园](https://iirose.com/)适配器
79 lines (65 loc) • 2.09 kB
text/typescript
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 };
};