UNPKG

koishi-plugin-adapter-iirose

Version:
107 lines (101 loc) 3.33 kB
import { IIROSE_Bot } from "../../bot/bot"; // 用户资料数据结构 export interface UserProfileByName { gender: 'male' | 'female' | 'unknown'; nickname: string; username: string; birthday: string; age: number; residence: string; tag: string; hobby: string; sandbox: string; registrationTime: string; id: string; isCertified: boolean; impression: { percentage: number; count: number; multiplier: number; }; credit: number; money: number; following: number; followers: number; visits: number; lastLoginTime: string; todayActivity: number; activity: number; onlineDuration: number; communities: string[]; backgroundMusic: { name: string; artist: string; }; bio: string; location: string; locationId: string; status: string; dislikes: number; likes: number; comments: string[]; album: string; } // 解析通过用户名获取的用户资料 export function parseUserProfileByName(data: string, bot: IIROSE_Bot): UserProfileByName | null { try { const p = data.slice(1).split('>'); const basicInfo = p[0].split('"'); const musicInfo = (p[11] || '').split('@|'); const impressionData = (p[42] || p[30] || '').split(','); const profile: UserProfileByName = { gender: basicInfo[0] === '1' ? 'male' : (basicInfo[0] === '2' ? 'female' : 'unknown'), nickname: basicInfo[1] || '', username: basicInfo[2] || '', birthday: basicInfo[3] ? new Date(parseInt(basicInfo[3]) * 1000).toLocaleDateString() : '', age: basicInfo[3] ? Math.floor((Date.now() - new Date(parseInt(basicInfo[3]) * 1000).getTime()) / (1000 * 60 * 60 * 24 * 365.25)) : 0, residence: basicInfo[4] || '', tag: p[15] || '', hobby: p[6] || '', sandbox: p[28] || '', registrationTime: p[12] ? new Date(parseInt(p[12]) * 1000).toLocaleString() : '', id: p[25] || '', isCertified: (p[20] || '').includes('1'), impression: { percentage: impressionData[1] ? parseInt(impressionData[1]) : 0, count: impressionData[0] ? parseInt(impressionData[0].slice(1)) : 0, multiplier: impressionData[2] ? parseFloat(impressionData[2]) : 0 }, credit: p[34] ? parseInt(p[34]) : 0, money: p[17] ? parseFloat(p[17]) : 0, following: p[18] ? parseInt(p[18].split('<')[0]) : 0, followers: p[18] ? parseInt(p[18].split('<')[1]) : 0, visits: p[13] ? parseInt(p[13]) : 0, lastLoginTime: p[23] ? new Date(parseInt(p[23]) * 1000).toLocaleTimeString() : '', todayActivity: p[36] ? parseInt(p[36]) : 0, activity: p[41] ? parseInt(p[41]) : 0, onlineDuration: p[24] ? parseInt(p[24]) : 0, communities: (p[26] || '').slice(1, -1).split('"@').filter(c => c.length > 0), backgroundMusic: { name: musicInfo[1] || '', artist: musicInfo[2] || '' }, bio: p[8] || '', location: p[21] || '', locationId: (p[26] || '').split('"@')[1] || '', status: p[20] || '', dislikes: p[35] ? parseInt(p[35]) : 0, likes: p[16] ? parseInt(p[16].split("'")[0]) : 0, comments: (p[16] || '').split("'").slice(1), album: p[9] || '' }; return profile; } catch (error) { bot.logger.error("Failed to parse user profile by name:", error); return null; } }