@@ -11,6 +11,7 @@ use teloxide_core::types::*;
1111
1212use crate :: assets:: tarot;
1313use crate :: linquebot:: * ;
14+ use crate :: utils:: partition_results;
1415use crate :: utils:: telegram:: prelude:: WarnOnError ;
1516use crate :: Consumption ;
1617
@@ -46,40 +47,25 @@ struct AiResponseChoice {
4647 message : AiMessage ,
4748}
4849
49- async fn get_env_var ( key : & str ) -> anyhow:: Result < String > {
50- match env:: var ( key) {
51- Ok ( val) => Ok ( val) ,
52- Err ( err) => {
53- warn ! ( "get-env-var-error, please specify {key}:\n {err}" ) ;
54- Err ( err. into ( ) )
55- }
56- }
50+ fn get_env_var ( key : & str ) -> Result < String , String > {
51+ env:: var ( key) . map_err ( |err| format ! ( "{key}: {err}" ) )
5752}
5853
5954async fn get_tarot ( question : & str ) -> anyhow:: Result < String > {
6055 let client = reqwest:: Client :: new ( ) ;
6156
6257 let tarots = tarot:: n_random_majors ( 3 )
6358 . into_iter ( )
64- . map ( |t| {
65- format ! (
66- "序号:{},是否反转:{}" ,
67- t. id,
68- if t. is_reverse { "是" } else { "否" }
69- )
70- } )
59+ . map ( |t| t. to_string ( ) )
7160 . collect :: < Vec < _ > > ( )
7261 . join ( "\n " ) ;
7362
74- let url = get_env_var ( "AI_API_URL" ) . await ;
75- let token = get_env_var ( "AI_API_TOKEN" ) . await ;
76- let model = get_env_var ( "AI_API_MODEL" ) . await ;
77-
78- // 这样写是为了让一个环境变量未找到时,也尝试查找剩余的几个。
79- // 让报错更全面,避免反复重启看报错。
80- let url = url?;
81- let token = token?;
82- let model = model?;
63+ let [ url, token, model] = partition_results ( [
64+ get_env_var ( "AI_API_URL" ) ,
65+ get_env_var ( "AI_API_TOKEN" ) ,
66+ get_env_var ( "AI_API_MODEL" ) ,
67+ ] )
68+ . map_err ( |errs| anyhow:: anyhow!( errs. join( "\n " ) ) ) ?;
8369
8470 let prompt = match env:: var ( "TAROT_AI_PROMPT" ) {
8571 Ok ( val) => val,
0 commit comments