Nonebot QQ机器人插件四:每日一图

QQ机器人插件四:每日一图

1. 导入需要使用的包

import nonebot

from nonebot import  on_keyword     # 事件响应器函数
from nonebot.typing import T_State      #bot使用的对象和字典
from nonebot.adapters.onebot.v11 import Bot,Message,MessageSegment  # #Message是使用cq码的必要函数
import requests
import json     # 处理api返回的json数据

2. 事件响应器

想要机器人能识别消息的关键词,然后做出相应的相应,这里就需要注册一个事件响应器。本文使用的时间响应器的辅助函数是on_keyword

on_keyword: 创建消息关键词匹配事件响应器。
__plugin_name__ = 'bing_picture'
__plugin_usage__ = '用法: 每日一图,输入关键词返回一张随机图片。'

picture = on_keyword({'图片','每日一图'})

3. 事件处理流程

如下所示,我们使用picture响应器的handle装饰器装饰了一个函数handle_receivehandle()是处理事件的主体部分,是事件处理的起点。

@picture.handle()

然后创建一个异步函数:

async def handle_receive(bot:Bot,state: T_State):

然后创建一个获取图片的函数:

async def get_picture():
    url = 'https://api.vvhan.com/api/bing?type=json&rand=sj'
    res = requests.get(url)
    result = json.loads(res.text)
    img = result['data']['url']		#提取图片地址

访问api并获取返回的json值,并转换为可读的格式。

{
    'success': True, 
    'data': 
    {
        'date': '20201118', 
        'title': '被北极光映衬出轮廓的因努伊特石堆,加拿大西北地区 (© Mark Duffy/Alamy)', 
        'url': 'https://www.bing.com/th?id=OHR.InukshukLights_ZH-CN0756858983_1920x1200.jpg'
    }
}

这时,图片的网址已经提前获取并存入变量img中,然而发送图片需要一种特殊的格式(CQ码)。

  • CQ码

    示例: [CQ:image,file=http://baidu.com/1.jpg,type=show,id=40004]
    

    image-20220810092200142

    image-20220810092224220

    image-20220810092244430

    注意
    图片最大不能超过30MB
    PNG格式不会被压缩, JPG可能不会二次压缩, GIF非动图转成PNG
    GIF动图原样发送(总帧数最大300张, 超过无法发出, 无论循不循环)
    

4. 事件响应器操作

这里使用send操作来发送信息,向用户回复一条消息。回复的方式或途径由协议适配器自行实现。

可以是 strMessageMessageSegmentMessageTemplate

这个操作等同于使用 bot.send(event, message, **kwargs) 但不需要自行传入 event

await  picture.send(MessageSegment.image(pic))

5. 完整代码

import nonebot

from nonebot import  on_keyword     # 事件响应器函数
from nonebot.typing import T_State      #bot使用的对象和字典
from nonebot.adapters.onebot.v11 import Bot,Message,MessageSegment  # #Message是使用cq码的必要函数
import requests
import json     # 处理api返回的json数据

__plugin_name__ = 'bing_picture'
__plugin_usage__ = '用法: 每日一图,输入关键词返回一张随机图片。'

picture = on_keyword({'图片','每日一图'})


@picture.handle()
async def handle_receive(bot:Bot,state: T_State):
    pic = await get_picture()
    await  picture.send(MessageSegment.image(pic))

async def get_picture():
    url = 'https://api.vvhan.com/api/bing?type=json&rand=sj'
    res = requests.get(url)
    result = json.loads(res.text)
    img = result['data']['url']
    image = f"[CQ:image,file={img},type=show,id=40000]"
    return img

6. 结果展示

QQ图片20220810092920

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QQ机器人(QQPlus)功能介绍   1.支持Q群自动管理 自定义机器人进群欢迎语言、自定义审核入群方式(同意、拒绝、忽略、密码验证)、黑名单、无限群管理、自动改群名片、清除所有名片格式、批量修改名片、手机移动在线管理、远程管理及控制机器人,智能客服及客服菜单问答系统、自动营销管理系统、Q群互联。 2. Discuz 插件 新帖发送到QQ群、群聊天记录同步到论坛,论坛回帖、加好友、打招呼....所有消息发送到用户QQ,无需24小时盯着论坛,最大限度提醒用户回访论坛。支持二次开发,数据无缝对接。 3.支持插件扩展 无论使用php、asp、asp.net、还是窗体插件,甚至调用DLL二次开发,随时都可以扩展自己的业务。 4.贴心实用功能 自带查询天气、彩票、糗事百科、QQ群签到、成语接龙、股市行情....各种便民查询,想查就查! 5.窗体和命令行两种模式 喜欢简单、省事,没问题,窗体版为您量身定制,全部可视化操作,无需输入命令。需要输入命令行的快感,行!我们提供了命令行窗口的软件。 6.程序定制 鉴于不同站点有不同的实际功能需求,为了让更多的用户体验QQ机器人系列产品的强大易用功能,我们提供在QQ机器人系列产品的基础上进行功能定制开发服务。 7.支持发送图片 无论qq好友还是群,都可以发送图片,支持本地图片和网络图片 8.软件稳定 采用PC协议基础开发!可无限加群,无限管理,只要你的配置跟得上,QQ机器人将是你不错的选择!可加上W个群
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值