Home

Awesome

<h1 align="center">Nonebot Adapter Ntchat</h1> <p align="center"> <a href="https://github.com/JustUndertaker/adapter-ntchat/releases"><img src="https://img.shields.io/badge/release-0.3.5-blue.svg?" alt="release"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-brightgreen.svg?" alt="License"></a> </p>

新的开始

这边已经不再维护,但可继续使用。

可以关注新坑:ComWeChatBotClient ,使用onebot12协议,更方便做一些操作。

简介

nonebot2的ntchat适配器,配合 ntchat-client 可以实现与微信对接。

安装方式

使用包管理安装(推荐)

pip install nonebot-adapter-ntchat

使用源码(不推荐)

git clone https://github.com/JustUndertaker/adapter-ntchat.git

将目录复制到site-packages

已实现连接方式

其他的感觉用处不大就...

配置内容

access_token = ""

可不填,如填写需要与 ntchat-lient 一致。

使用反向ws:

默认配置使用反向ws,无需调整

使用http post

需要将driver类型设置为:ForwardDriver,同时配置http api地址。

设置方法:文档

示例:

DRIVER=~httpx
ntchat_http_api_root="http://127.0.0.1:8000"

注意事项

由于微信不支持连续不同类型消息发出(比如图文消息,发出来会变成2条),需注意:

已实现事件

消息事件

消息事件可以使用on_messageon_regexon_keyword等检测命令的方式触发,但是部分消息如图片消息没有文本返回,所有message内容为空字符串,但是可以用on_message捕获该事件,如果想单独监听某类事件,可以在matcher.handle()内的event参数单独注入事件类型,比如:event: PictureMessageEvent来处理图片事件

请求事件

请求事件可以使用on_request进行捕获

通知事件

通知事件可以使用on_notice进行捕获

APP事件

APP事件,事件type是app,可以通过on("app")来监听此类事件

监听事件

除了通用的on_message,on_notice等一般行为,想要监听单独某个事件时,可以使用on来注册一个matcher,此函数第一个参数为事件type,比如:

from nonebot.plugin import on
from nonebot.adapter.ntchat import WcpayMessageEvent

matcher = on("app") # rule,permission等参数同样可以加入

@matcher.handle()
async def _(event:WcpayMessageEvent):
    pass

上述例子会监听所有的转账事件。

发送图片

使用MessageSegment.image发送图片(其他消息同理),图片与其他文件支持url、bytes、BytesIO、base64、Path发送,手动发送base64时需要在字符串前面加上"base64://",下面是发送图片的例子.

from base64 import b64encode
from io import BytesIO
from pathlib import Path

from nonebot import on_regex
from nonebot.adapter.ntchat import MessageSegment,TextMessageEvent

matcher = on_regex(r"^测试$")

@matcher.handle()
async def _(event:TextMessageEvent):
    url = "https://v2.nonebot.dev/logo.png"
    image = MessageSegment.image(url)						# 使用url构造
    await matcher.send(image)

    image_path = Path("./1.png")
    image = MessageSegment.image(image_path)				# 使用Path构造
    await matcher.send(image)

    with open(image_path, mode="rb") as f:
        data = f.read()
    image = MessageSegment.image(data)						# 使用bytes构造
    await matcher.send(image)

    bio = BytesIO(data)
    image = MessageSegment.image(bio)						# 使用BytesIO构造
    await matcher.send(image)

    base64_data = f"base64://{b64encode(data).decode()}"	# 使用base64构造
    image = MessageSegment.image(base64_data)
    await matcher.finish(image)

Permission

内置2个Permission,为:

已实现api