Function libawr::login::login_with_qrcode
source · pub async fn login_with_qrcode(
uin: i64,
show_qrcode: impl FnMut(Bytes) -> Result<(), Box<dyn Error + Send + Sync>>,
data_folder: impl AsRef<Path>
) -> Result<(Arc<Client>, AliveHandle), LoginError>
Expand description
使用二维码登录。
二维码图片会通过 show_qrcode
回调函数传递给调用者。
调用者需要自行实现二维码图片的显示。
Examples
Rust
下面是一个使用 image、rqrr 和 qrcode 库在控制台打印二维码的例子。
use anyhow::{bail, Result};
use libawr::{login, Protocol};
/// 将二维码图片转换为文本。
fn qrcode_text(qrcode: &[u8]) -> Result<String> {
let qrcode = image::load_from_memory(qrcode)?.to_luma8();
let mut qrcode = rqrr::PreparedImage::prepare(qrcode);
let grids = qrcode.detect_grids();
if grids.len() != 1 {
bail!("无法识别二维码");
}
let (_, content) = grids[0].decode()?;
let qrcode = qrcode::QrCode::new(content)?;
let qrcode = qrcode.render::<qrcode::render::unicode::Dense1x2>().build();
Ok(qrcode)
}
let (client, alive) = login!(
12345678,
show_qrcode = |img| {
println!("{}", qrcode_text(&img)?);
Ok(())
}
).await?;
alive.auto_reconnect().await?;
Python
下面是一个使用 Pillow 显示二维码图片的例子。
from io import BytesIO
from PIL import Image
client, alive = await awr.login(
12345678,
show_qrcode = lambda img: Image.open(BytesIO(img)).show(),
)
Python
async def login_with_qrcode(
uin: int,
show_qrcode: Callable[[bytes], None],
data_folder: str = "./bots",
) -> Tuple[Client, AliveHandle]: ...