rust 如何访问上下文后,设置'框架'在平静(宁静)的不和谐机器人?

vhipe2zx  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(129)

我想访问这个Context对象,并将它传递给不同的函数,然后在函数send_changes_via_bot中使用这个ctx对象,该函数将使用ctx.say()将更新发送到discord的API。
我也想知道我是否正确使用了rx,我想如果我递归调用函数,每次调用中传递的-rx会不同,因为它连续从main中的tx接收。但现在我想知道旧的rx是否会继续被复制,因为rx看起来不像指针。
Link to the GitHub repo

pub async fn bot(rx: &mpsc::Receiver<Value>) {
        let discord_token = fs::read_to_string("discordtoken.txt")
                               .expect("Issue with token");
        let framework = poise::Framework::builder()
            .options(poise::FrameworkOptions {
                // Macro takes care of ctx and user
                commands: vec![account_age(), set_gdrive_channel(),
                               spawn_watcher()], 
                ..Default::default()
            })
            .token(discord_token)
            .intents(serenity::GatewayIntents::non_privileged())
            .setup(|ctx, _ready, framework| {
                Box::pin(async move {
                    poise::builtins::register_globally(ctx, 
                         &framework.options().commands)
                    .await?;
                    Ok(Data {})
                })
            });

        // * ----------------------------------------------------------------
        // * ----------------------------------------------------------------
        // ! Don't know how to pass context here :(
        send_changes_via_bot(ctx, rx).await;
        // * ----------------------------------------------------------------
        // * ----------------------------------------------------------------

        framework.run().await.unwrap();
    }
yqkkidmi

yqkkidmi1#

这一招奏效了。

let metacat = framework.build().await.expect("Failed to init metacat");

    metacat.client().start().await;

    let global_ctx = &metacat.client().cache_and_http;

    send_changes_via_bot(global_ctx, rx);

相关问题