基于NoneBot的图片消息

aiocqhttp库中自带了个MessageSegment的类,很多可以直接调用,具体可以点开MessageSegment的类中,这里是把本地文件读取变成图片发送消息返回给CQ机器人。

直接上源代码:

from nonebot import on_command, CommandSession
from nonebot import on_natural_language, NLPSession, IntentCommand
from jieba import posseg
import requests
import time
import urllib
from lxml import etree
from aiocqhttp import MessageSegment
import requests
from config import IMAGE_LOCAL

class GetPic:
    def __init__(self):
        self.session = requests.session()

    def get_Pic(self):
        res = self.session.get("http://api.mtyqx.cn/api/random.php", verify=False)

        # 保存图片
        with open(IMAGE_LOCAL.format('8531'), "wb") as f:
            f.write(res.content)
        return True

@on_command('setu', aliases=('富婆','色图', '老婆', '老婆图', '萝莉'))
async def setu(session: CommandSession):
    Pic = GetPic()
    if Pic.get_Pic():
        seq = MessageSegment.image("{}.png".format('8531'))
        await session.send(seq)

@on_natural_language(keywords={'富婆','色图', '老婆', '老婆图', '萝莉'},only_to_me=False)
async def _(session: NLPSession):
    # 去掉消息首尾的空白符
    stripped_msg = session.msg_text.strip()
    # 对消息进行分词和词性标注
    words = posseg.lcut(stripped_msg)

    pic = None
    # 遍历 posseg.lcut 返回的列表
    for word in words:
        # 每个元素是一个 pair 对象,包含 word 和 flag 两个属性,分别表示词和词性
        if word.flag == 'st':
            pic = word.word
            break

    # 返回意图命令,前两个参数必填,分别表示置信度和意图命令名
    return IntentCommand(90.0, 'setu', current_arg=pic)

 

posted @ 2020-03-29 16:49  wushuyng  阅读(4485)  评论(0编辑  收藏  举报