8 releases

0.1.21 May 27, 2020
0.1.20 Mar 7, 2020
0.1.0-alpha.4 Feb 25, 2020

#8 in #qq

24 downloads per month

MIT license

79KB
2K SLoC

coolq-sdk-rust

build docs.rs GitHub code size in bytes Crates.io GitHub Crates.io GitHub commit activity

酷q的一个sdk。

Build

工具链: i686-pc-windows-msvc

cargo build

Test

cargo test

Documentation

online

Documentation by docs.rs

local

cargo doc --no-deps

Book

gitbook.com


lib.rs:

使用Rust编写的酷q sdk。

Get started

coolq-sdk-rust = "0.1"

Features

  • enhanced-cqcode: 开启 增强cq码(图片)
  • async-listener: 开启async事件回调函数
  • tokio-threaded: 开启tokio的rt-threaded feature。

Examples

Cargo.toml:

[dependencies]
coolq-sdk-rust = "0.1"

[build-dependencies]
cqrs_builder = { version = "0.1", features = ["full-priority"] }

[lib]
crate-type = ["cdylib"]

build.rs:

// 在编译时生成适用于`coolq-sdk-rust`的app.json,json可在target目录同生成的二进制文件一起找到>
use cqrs_builder::AppJson;

fn main() {
    AppJson::new("dev.gugugu.example") // appid
        .name("rust-sdk-example".to_owned())
        .version("0.0.1".to_owned())
        .version_id(1)
        .author("soeur <me@gugugu.dev>".to_owned())
        .description("rust sdk example.".to_owned())
        .finish();
}

目前还支持一个feature:

  • full-priority :

启用该功能之后,cqrs_builder会生成支持全部 优先级 的app.json

更多信息可以在AppJson找到。

lib.rs:

use coolq_sdk_rust::prelude::*;
use coolq_sdk_rust::targets::message::MessageSegment;

// 必须有一个`coolq_sdk_rust::main`函数。
#[coolq_sdk_rust::main]
fn main() {
    api::add_log(CQLogLevel::INFOSUCCESS, "info", "插件enable").expect("日志发送失败");
}

// `priority`可选填,默认中优先级。
// 开启`full-priority`功能之后,`priority`才会生效。否则除medium外的回调函数将不会被酷q调用
#[listener(priority = "high")]
fn this_is_private_msg(event: PrivateMessageEvent) {
    event.reply("hello");
}

// async函数
// 异步函数将放入sdk共用的tokio runtime中处理
// 异步函数无法拦截事件
#[listener]
async fn this_is_also_private_msg(event: PrivateMessageEvent) {
    xxx.await;
}

// block_on宏
// 添加了block_on宏的异步函数 将会生成一个新的tokio runtime来***阻塞***运行
// 该类函数可拦截事件
#[listener]
#[block_on]
async fn oh(_: ExitEvent) {
    say_bye.await
}

// 这是一个检测群聊消息中含有什么cq码的例子
#[listener]
fn group_msg(event: GroupMessageEvent) {
    if event.get_message().has_cqcode() {
        let mut msg = MessageSegment::new();
        event.get_message().cqcodes.iter().for_each(|cqcode| {
            msg.add(cqcode).add("\n");
        });
        event.reply_at(format!("信息含有以下cq码: {:?}", msg).no_cq_code());
    }
}

Dependencies

~4–7MB
~124K SLoC