use crate::chat::{
constants::user_flags,
parser::{types::UserFlags, util::is},
types::UserStatus,
};
pub fn parse_user_status(flag_str: &str) -> UserStatus {
let flags = parse_user_flags(flag_str);
UserStatus {
follow_level: get_follow_level(flags.follow_bits),
fan_level: get_fan_level(flags.combined),
is_bj: is(flags.combined, user_flags::BJ),
is_manager: is(flags.combined, user_flags::MANAGER),
is_supporter: is(flags.combined, user_flags::SUPPORTER),
}
}
fn parse_user_flags(flag_str: &str) -> UserFlags {
let flags_str: Vec<&str> = flag_str.split("|").collect();
if flags_str.len() != 2 {
return UserFlags {
follow_bits: 0,
combined: 0,
};
}
UserFlags {
follow_bits: flags_str[1].parse::<u32>().unwrap_or(0),
combined: flags_str[0].parse::<u32>().unwrap_or(0),
}
}
fn get_follow_level(flags: u32) -> u8 {
if is(flags, user_flags::FOLLOWER_TIER1) {
1
} else if is(flags, user_flags::FOLLOWER_TIER2) {
2
} else {
0
}
}
fn get_fan_level(flags: u32) -> u8 {
if is(flags, user_flags::TOP_FAN) {
2
} else if is(flags, user_flags::FAN) {
1
} else {
0
}
}