Skip to main content

bpi_rs/login/member_center/
sign.rs

1//! 修改签名
2//!
3//! [查看 API 文档](https://github.com/Yuelioi/bilibili-API-collect/tree/cfc5fddcc8a94b74d91970bb5b4eaeb349addc47/docs/login/member_center.md)
4
5use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
6
7impl BpiClient {
8    /// 修改个人签名
9    ///
10    /// # 参数
11    /// * `user_sign` - 要设置的签名内容,最多70个字符。留空表示删除签名
12    pub async fn member_center_update_user_sign(
13        &self,
14        user_sign: &str
15    ) -> Result<BpiResponse<serde_json::Value>, BpiError> {
16        // 验证签名长度
17        if user_sign.len() > 70 {
18            return Err(BpiError::InvalidParameter {
19                field: "user_sign",
20                message: "签名长度不能超过70个字符",
21            });
22        }
23
24        // 发送POST请求
25        let result = self
26            .post("https://api.bilibili.com/x/member/web/sign/update")
27            .form(
28                &[
29                    ("user_sign", user_sign.to_string()),
30                    ("csrf", self.csrf().unwrap_or_default()),
31                ]
32            )
33            .send_bpi("设置个人签名").await?;
34
35        Ok(result)
36    }
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[tokio::test]
44    /// 更新签名测试
45    async fn test_update_user_sign() -> Result<(), Box<BpiError>> {
46        let bpi = BpiClient::new();
47
48        // 测试修改签名
49        let test_sign = "这是一个测试签名 - Powered by Rust";
50        let _result = bpi.member_center_update_user_sign(test_sign).await?;
51
52        Ok(())
53    }
54
55    #[tokio::test]
56    async fn test_sign_length_validation() {
57        let bpi = BpiClient::new();
58
59        // 测试超长签名
60        let long_sign = "a".repeat(71);
61        let result = bpi.member_center_update_user_sign(&long_sign).await;
62
63        assert!(result.is_err());
64        assert!(result.unwrap_err().to_string().contains("签名长度不能超过70个字符"));
65    }
66}