soup-sdk 0.3.2

채팅 이벤트 수신 SDK
Documentation
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 {
    // 1티어
    if is(flags, user_flags::FOLLOWER_TIER1) {
        1
        // 2티어
    } 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
    }
}