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