求个api推送消息插件

市场里那几个太久没更新了好像不好用啊 :face_exhaling:

2 个赞

是否和此贴的求插件相同?

3 个赞

是的哈

2 个赞

大佬有这个插件嘛

3 个赞

我没有

正因为没有所以楼主才会在「求插件」版块发帖的啊

1 个赞

:joy: :joy:

2 个赞

很快就会有

6 个赞

给大佬点赞 :sunglasses:

2 个赞

给老大发电了20块 :smirk_cat:

5 个赞

出来了说下也发个电 :tiger:

4 个赞

速通了一个,没发版,发现自己 new Router({prefix: string}) 的路由 use 添加后关闭插件不会自动移除,所以还是老老实实用了 ctx.router,所以显得那个 path 很冗长,不过验证方面已经实现好了,差个文档教别人怎么用

3 个赞

感谢!

目前代码已经写好了,不过我想再测试测试,估计下周末正式发布。到时候会有专门的介绍贴。

2 个赞

确实不会配置,全是ts我不太熟 :rofl:

2 个赞

还没搞完呢,能用的时候会放文档的

2 个赞

插件市场 @ahdg/api,这里贴一个最简单的请求实例(JS),根据你设置的加密方式里边的内容需要更改

const http = require('http');
const crypto = require('crypto');
const { randomUUID } = require('crypto');

const uid = 'ahdg';
const token = '1b745b88-1003-49ca-9a71-c98d4e393dba';

function generateSignature(timestamp, random) {
  const data = `${timestamp}:${random}:${token}`;
  const hmac = crypto.createHmac('sha256', token);
  hmac.update(data);
  return hmac.digest('hex');
}

function sendHttpRequest() {
  const timestamp = new Date().getTime();
  const random = randomUUID();
  const sign = generateSignature(timestamp, random);

  const postData = JSON.stringify({
    channelId: "8385444041238345",
    guildId: "4760305728296170",
    content: "hello"
  });

  const options = {
    hostname: '127.0.0.1', // Replace with the actual request address
    port: 5140, // Replace with the actual port number
    path: '/api/bots/kook:1368312480/message', // Replace with the actual API path
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'timestamp': timestamp,
      'random': random,
      'sign': sign,
      'uid': uid,
      'Content-Length': Buffer.byteLength(postData) // Set the content length
    }
  };

  const req = http.request(options, (res) => {
    console.log(`Status Code: ${res.statusCode}`);
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      console.log(`Response: ${chunk}`);
    });
  });

  req.on('error', (error) => {
    console.error(`Error: ${error}`);
  });

  // Send the JSON data in the request body
  req.write(postData);
  req.end();
}

sendHttpRequest();
3 个赞

感谢大佬 :smirk_cat:

4 个赞

顺便一提,模块化做的很好,api 本身作为服务也可以被别人调用来添加受保护的路由,而且如果设置了信息对称加密的话也会自动解码(是的,有很多人公网通过 HTTP 部署,对称加密请求体是可选项)

简单来说就是做了个自定义程度较高的加密验证和 Token 管理核心加一个发信息的小插件,昨天搞速通写的垃圾今天给整理发布
防重放攻击有两种,一个是时间戳,一个是随机数,可以设置时间容差但不能关闭该功能

注意,签名形式可以自定义,如果改了的话你需要在请求侧也改签名方式。还有如果打开了数据加密的选项,请务必查看系统自带的 openssl 支不支持你设置的加密算法 => 这玩意我没测试,但你数据发送端要主动加密,服务端目前只有解密功能

对于别的开发者,目前没提供任何将自己路由暴露在该 api 路径下的方法,但如果你想实现验证,可以 ctx.router.use(path , ctx.api.tokenValidationMiddleware)

别的没有了,主打的一个能用就行(

默认情况下路由是这样的,你可以自己设置路径
/api - 测试你的签名算法,可以 GET 到一个 Good!
以下路由只在配置开启时存在
/api/bots - 返回所有 koishi 注册的 bots
/api/bots/:sid - 返回指定 sid 的 bot 信息 (selfId, platform, status, username, userid, joinedGuilds)
/api/bots/:sid/message - 发送信息,看上边示例代码来改

4 个赞

老哥你这也太负责了 :tiger:

2 个赞

看不懂,但是大佬nb!

本条消息不由Nonebot赞助

2 个赞

太吊了

2 个赞