funpay-client 0.1.1

Unofficial async client for FunPay chats and orders polling
Documentation
# funpay-client


Неофициальный асинхронный клиент для FunPay. Авторизация по `golden_key`, получение событий чатов и заказов в реальном времени.

## Установка


```toml
[dependencies]
funpay-client = "0.1"
tokio = { version = "1", features = ["full"] }
```

## Простой пример


```rust
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

## Требования


- Rust 1.74+
- Tokio 1.x

## Примеры фильтрации и реакции


### Только сообщения с ключевым словом


```rust
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
}
```

### Реакция на изменение статуса заказа


```rust
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
}
```