funpay-client
Неофициальный асинхронный клиент для FunPay. Авторизация по golden_key, получение событий чатов и заказов в реальном времени.
Установка
[dependencies]
funpay-client = "0.1"
tokio = { version = "1", features = ["full"] }
Простой пример
use funpay_client::events::Event;
use funpay_client::types::FunPayAccount;
#[tokio::main]
async fn main() -> std::io::Result<()> {
let golden_key = std::env::var("FUNPAY_GOLDEN_KEY").unwrap_or_else(|_| String::from("YOUR_KEY"));
let mut account = FunPayAccount::new(golden_key);
let mut rx = account.subscribe();
tokio::spawn(async move {
loop {
match rx.recv().await {
Ok(ev) => match ev {
Event::InitialChat { .. } => println!("InitialChat"),
Event::ChatsListChanged => println!("ChatsListChanged"),
Event::LastChatMessageChanged { .. } => println!("LastChatMessageChanged"),
Event::NewMessage { .. } => println!("NewMessage"),
Event::InitialOrder { .. } => println!("InitialOrder"),
Event::OrdersListChanged { purchases, sales } => println!("OrdersListChanged {purchases} {sales}"),
Event::NewOrder { .. } => println!("NewOrder"),
Event::OrderStatusChanged { .. } => println!("OrderStatusChanged"),
},
Err(_) => break,
}
}
});
account.start_polling_loop().await
}
События
- InitialChat
- ChatsListChanged
- LastChatMessageChanged
- NewMessage
- InitialOrder
- OrdersListChanged
- NewOrder
- OrderStatusChanged
Требования
Примеры фильтрации и реакции
Только сообщения с ключевым словом
use funpay_client::events::Event;
use funpay_client::types::FunPayAccount;
#[tokio::main]
async fn main() -> std::io::Result<()> {
let mut account = FunPayAccount::new(std::env::var("FUNPAY_GOLDEN_KEY").unwrap());
let mut rx = account.subscribe();
tokio::spawn(async move {
loop {
if let Ok(Event::NewMessage { message }) = rx.recv().await {
if message.text.as_deref().map(|t| t.to_lowercase().contains("оплатил")).unwrap_or(false) {
println!("msg {}: {:?}", message.chat_id, message.text);
}
}
}
});
account.start_polling_loop().await
}
Реакция на изменение статуса заказа
use funpay_client::events::Event;
use funpay_client::types::{FunPayAccount, OrderStatus};
#[tokio::main]
async fn main() -> std::io::Result<()> {
let mut account = FunPayAccount::new(std::env::var("FUNPAY_GOLDEN_KEY").unwrap());
let mut rx = account.subscribe();
tokio::spawn(async move {
loop {
match rx.recv().await {
Ok(Event::OrderStatusChanged { order }) => {
match order.status {
OrderStatus::Paid => println!("paid {}", order.id),
OrderStatus::Closed => println!("closed {}", order.id),
OrderStatus::Refunded => println!("refunded {}", order.id),
}
}
_ => {}
}
}
});
account.start_polling_loop().await
}