Skip to content

Commit

Permalink
feat: support v11
Browse files Browse the repository at this point in the history
  • Loading branch information
Itsusinn逸新 committed Feb 7, 2024
1 parent 8f9144b commit a31e7e1
Show file tree
Hide file tree
Showing 12 changed files with 373 additions and 97 deletions.
70 changes: 65 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 22 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,33 @@ tokio-rt = ["tokio/rt-multi-thread"]


[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
rmp-serde = "1.0"
# logging
tracing = "0.1"
colored = "2"
uuid = { version = "1.0", optional = true }
hyper = { version = "0.14", features = ["full"], optional = true }
tokio = { version = "1.0", features = ["sync", "time", "macros", "rt"] }
color-eyre = "0.6.2"

# serde
serde = { version = "1", features = ["derive"] }
serde_json = "1"
rmp-serde = "1"

# async
tokio = { version = "1", features = ["sync", "time", "macros", "rt"] }
tokio-tungstenite = { version = "0.17", optional = true }
hyper = { version = "0.14", features = ["full"], optional = true }
futures-util = { version = "0.3", features = ["sink"] }
thiserror = "1.0"
sha2 = { version = "0.10", optional = true }
# snake_cased = { version = "0.1", features = ["derive"] }

dashmap = "5"
# error-handing
thiserror = "1"

uuid = { version = "1", optional = true }
sha2 = { version = "0.10", optional = true }
dashmap = "5"
base64 = "0.21"
hex = "0.4"

# snake_cased = { version = "0.1", features = ["derive"] }

[dependencies.walle-macro]
# path = "./walle-macro"
version = "0.7.0-a2"
Expand All @@ -60,3 +68,7 @@ required-features = ["app-obc", "websocket", "tokio-rt"]

[workspace]
members = ["walle-macro"]

# Improving perf on debug builds
[profile.dev.package.backtrace]
opt-level = 3
77 changes: 13 additions & 64 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

# Walle-core

![OneBot11](https://img.shields.io/badge/OneBot-11-black?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAMAAADxPgR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF////29vbr6+vAAAAk1hCcwAAAAR0Uk5T////AEAqqfQAAAKcSURBVHja7NrbctswDATQXfD//zlpO7FlmwAWIOnOtNaTM5JwDMa8E+PNFz7g3waJ24fviyDPgfhz8fHP39cBcBL9KoJbQUxjA2iYqHL3FAnvzhL4GtVNUcoSZe6eSHizBcK5LL7dBr2AUZlev1ARRHCljzRALIEog6H3U6bCIyqIZdAT0eBuJYaGiJaHSjmkYIZd+qSGWAQnIaz2OArVnX6vrItQvbhZJtVGB5qX9wKqCMkb9W7aexfCO/rwQRBzsDIsYx4AOz0nhAtWu7bqkEQBO0Pr+Ftjt5fFCUEbm0Sbgdu8WSgJ5NgH2iu46R/o1UcBXJsFusWF/QUaz3RwJMEgngfaGGdSxJkE/Yg4lOBryBiMwvAhZrVMUUvwqU7F05b5WLaUIN4M4hRocQQRnEedgsn7TZB3UCpRrIJwQfqvGwsg18EnI2uSVNC8t+0QmMXogvbPg/xk+Mnw/6kW/rraUlvqgmFreAA09xW5t0AFlHrQZ3CsgvZm0FbHNKyBmheBKIF2cCA8A600aHPmFtRB1XvMsJAiza7LpPog0UJwccKdzw8rdf8MyN2ePYF896LC5hTzdZqxb6VNXInaupARLDNBWgI8spq4T0Qb5H4vWfPmHo8OyB1ito+AysNNz0oglj1U955sjUN9d41LnrX2D/u7eRwxyOaOpfyevCWbTgDEoilsOnu7zsKhjRCsnD/QzhdkYLBLXjiK4f3UWmcx2M7PO21CKVTH84638NTplt6JIQH0ZwCNuiWAfvuLhdrcOYPVO9eW3A67l7hZtgaY9GZo9AFc6cryjoeFBIWeU+npnk/nLE0OxCHL1eQsc1IciehjpJv5mqCsjeopaH6r15/MrxNnVhu7tmcslay2gO2Z1QfcfX0JMACG41/u0RrI9QAAAABJRU5ErkJggg==)
![OneBot12](https://img.shields.io/badge/OneBot-12-black?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAMAAADxPgR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF////29vbr6+vAAAAk1hCcwAAAAR0Uk5T////AEAqqfQAAAKcSURBVHja7NrbctswDATQXfD//zlpO7FlmwAWIOnOtNaTM5JwDMa8E+PNFz7g3waJ24fviyDPgfhz8fHP39cBcBL9KoJbQUxjA2iYqHL3FAnvzhL4GtVNUcoSZe6eSHizBcK5LL7dBr2AUZlev1ARRHCljzRALIEog6H3U6bCIyqIZdAT0eBuJYaGiJaHSjmkYIZd+qSGWAQnIaz2OArVnX6vrItQvbhZJtVGB5qX9wKqCMkb9W7aexfCO/rwQRBzsDIsYx4AOz0nhAtWu7bqkEQBO0Pr+Ftjt5fFCUEbm0Sbgdu8WSgJ5NgH2iu46R/o1UcBXJsFusWF/QUaz3RwJMEgngfaGGdSxJkE/Yg4lOBryBiMwvAhZrVMUUvwqU7F05b5WLaUIN4M4hRocQQRnEedgsn7TZB3UCpRrIJwQfqvGwsg18EnI2uSVNC8t+0QmMXogvbPg/xk+Mnw/6kW/rraUlvqgmFreAA09xW5t0AFlHrQZ3CsgvZm0FbHNKyBmheBKIF2cCA8A600aHPmFtRB1XvMsJAiza7LpPog0UJwccKdzw8rdf8MyN2ePYF896LC5hTzdZqxb6VNXInaupARLDNBWgI8spq4T0Qb5H4vWfPmHo8OyB1ito+AysNNz0oglj1U955sjUN9d41LnrX2D/u7eRwxyOaOpfyevCWbTgDEoilsOnu7zsKhjRCsnD/QzhdkYLBLXjiK4f3UWmcx2M7PO21CKVTH84638NTplt6JIQH0ZwCNuiWAfvuLhdrcOYPVO9eW3A67l7hZtgaY9GZo9AFc6cryjoeFBIWeU+npnk/nLE0OxCHL1eQsc1IciehjpJv5mqCsjeopaH6r15/MrxNnVhu7tmcslay2gO2Z1QfcfX0JMACG41/u0RrI9QAAAABJRU5ErkJggg==)
<a href="https://github.com/abrahum/Walle-core/blob/master/license">
<img src="https://img.shields.io/github/license/abrahum/Walle-core" alt="license">
Expand Down Expand Up @@ -35,62 +34,9 @@ Walle 的名字来源于机械总动员的 WALL-E ( A Rusty Bot )

## How to use

仅展示最小实例
Check Examples

### Implementation

```rust
use std::sync::Arc;
use walle_core::action::Action;
use walle_core::alt::TracingHandler;
use walle_core::config::ImplConfig;
use walle_core::event::Event;
use walle_core::obc::ImplOBC;
use walle_core::resp::Resp;
use walle_core::OneBot;

#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
let ob = Arc::new(OneBot::new(
TracingHandler::<Event, Action, Resp>::default(),
ImplOBC::new("impl".to_string()),
));
let tasks = ob.start((), ImplConfig::default(), true).await.unwrap();
for task in tasks {
task.await.unwrap()
}
}
```

### Application

```rust
use std::sync::Arc;
use walle_core::action::Action;
use walle_core::alt::TracingHandler;
use walle_core::config::AppConfig;
use walle_core::event::Event;
use walle_core::obc::AppOBC;
use walle_core::resp::Resp;
use walle_core::OneBot;

#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
let ob = Arc::new(OneBot::new(
AppOBC::new(),
TracingHandler::<Event, Action, Resp>::default(),
));
let tasks = ob.start(AppConfig::default(), (), true).await.unwrap();
for task in tasks {
task.await.unwrap()
}
}

```

### Event
#### Event

walle_core::event::Event 为序列化使用标准类型,该模型仅确保 event 基础模型各字段。

Expand Down Expand Up @@ -138,13 +84,13 @@ pub enum Details {

```

### Action
#### Action

walle_core::action::Action 为序列化使用标准类型,该模型仅确保 action 与 params 字段存在且类型正确

实现 Action -> BaseAction 或 Action -> T 转化时,扩展字段需要 impl `TryFromAction` trait

实现 BaseAction -> Action 或 T -> Action 转化时,扩展字段需要 impl `PushtoValueMap``ToAction` trait
实现 BaseAction -> Action 或 T -> Action 转化时,扩展字段需要 impl `PushtoValueMap``ToAction` trait

或者直接使用本 crate 提供的派生宏

Expand Down Expand Up @@ -172,7 +118,7 @@ pub struct UploadFile_ {
}
```

想要同时支持多种 Action ? 没问题!
想要同时支持多种 Action ? 没问题!

```rust
#[derive(TryFromAction)]
Expand All @@ -182,11 +128,11 @@ pub enum MyAction {
}
```

### Resp (Value)
#### Resp (Value)

walle_core::resp::Resp 为序列化使用标准类型

同时本库还提供了 RespError 用于构造失败的 Resp,可以使用 \<Resp\>.as_result()
同时本库还提供了 RespError 用于构造失败的 Resp,可以使用 \<Resp\>.as_result()

实现 Value -> T 转化时,需要 impl `TryFromValue` trait

Expand All @@ -204,7 +150,7 @@ pub struct Status {

同时实现了 Value 的结构体可以作为其他宏的字段使用。

### MessageSegment
#### MessageSegment

基本与 Action 模型相同,唯一的不同是序列化使用的模型是 walle_core::message::MessageSegment,该模型同时也是一个 Value ,因此可以从 Event 或 Action 中获取。

Expand All @@ -215,10 +161,13 @@ pub struct Text {
}
```

### Notice
#### Notice

由于与 Rust 保留字冲突,宏将会对以下字段自动转义:

- `"type"` -> `ty`
- `"impl"` -> `implt`
- `"selft"` -> `self`
- `"selft"` -> `self`

## Credits
[zhamao-robot/go-cqhttp-adapter-plugin](https://github.com/zhamao-robot/go-cqhttp-adapter-plugin)
19 changes: 15 additions & 4 deletions examples/app_ws.rs
Original file line number Diff line number Diff line change
@@ -1,20 +1,31 @@
use std::sync::Arc;
use walle_core::action::Action;
use walle_core::alt::TracingHandler;
use walle_core::config::AppConfig;
use walle_core::config::{AppConfig, WebSocketServer};
use walle_core::event::Event;
use walle_core::obc::AppOBC;
use walle_core::resp::Resp;
use walle_core::OneBot;
use color_eyre::eyre::{Ok, Result};

#[tokio::main]
async fn main() {
async fn main() -> Result<()> {
color_eyre::install()?;
tracing_subscriber::fmt::init();
let ob = Arc::new(OneBot::new(
AppOBC::new(),
TracingHandler::<Event, Action, Resp>::default(),
));
ob.start(AppConfig::default(), (), true).await.unwrap();
// ob.wait_all().await;
let mut config = AppConfig::default();
config.websocket_rev.clear();
let ws_server = WebSocketServer {
host: std::net::IpAddr::from([0, 0, 0, 0]),
port: 2456,
access_token: None,
};
config.websocket_rev.push(ws_server);
ob.start(config, (), true).await.unwrap();
ob.wait_all().await;
ob.shutdown(true).await.ok();
Ok(())
}
Loading

0 comments on commit a31e7e1

Please sign in to comment.