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

1. 导入需要使用的包

import nonebotfrom 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]
    

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

4. 事件响应器操作

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

可以是 strMessageMessageSegmentMessageTemplate

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

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

5. 完整代码

import nonebotfrom 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. 结果展示

Nonebot QQ机器人插件四:每日一图相关推荐

  1. Nonebot QQ机器人插件三:王者荣耀猜英雄游戏

    Nonebot QQ机器人插件三:王者荣耀猜英雄游戏 1. 数据录入 首先需要获取相应数据这里可以直接访问**「heros.xlsx」https://www.aliyundrive.com/s/3iN ...

  2. Nonebot QQ机器人插件九:qq群聊天记录词云图

    QQ机器人插件九:qq群聊天记录词云图 1. 将实时聊天记录保存到数据库 安装数据库可自行到网上查找,本文仅使用mysql数据库为例.linux下mysql数据库安装可参考(59条消息) Linux安 ...

  3. Nonebot QQ机器人插件五:随机网易云音乐

    QQ机器人插件五:随机网易云音乐 1. 导入需要使用的包 import nonebotfrom nonebot import on_keyword # 事件响应器函数 from nonebot.typ ...

  4. Nonebot QQ机器人插件六:随机笑话(语音)

    QQ机器人插件六:随机笑话(语音) 1. 导入需要使用的包 import nonebotfrom nonebot import on_keyword # 事件响应器函数 from nonebot.ty ...

  5. Python实现快递查询-QQ机器人插件

    目录 1.API接口请求 2.创建成新的QQ插件 Python实现快递查询功能.Python爬虫一直是一样好东西!只要想就可以爬取自己想要的对象!本次,将使用Python3.9即requests库AP ...

  6. 从零开始在服务器上搭建QQ机器人——插件(二)

    一.简介 在做完基本构建之后,自己的机器人旧可以开始使用了,但是只有一个内置的/echo命令.功能不够丰富. 因此,需要安装插件来获得更多的功能. 二.配置 参照nonebot的官网,编写命令 | N ...

  7. qq机器人插件之奥运奖牌获得数量

    在之前的文章讲到了如何制作机器人,传送门:qq机器人制作 今天呢,我来给大家分享一个插件,先看效果: 交流群:970353786,非诚勿扰. 源码如下: """ 作者:星 ...

  8. 【最新】QQ机器人插件

    QQ机器人 前言 QQ机器人功能展示 一.如何白嫖(用别人的插件) 二.如何自力更生(自己写) 前言 本文旨在如何为你的QQ机器人添加插件,也就是添加机器人的功能.添加插件的方法有两种,一种是用别人写 ...

  9. qq机器人插件之舔狗日记

    在之前的文章讲到了如何制作机器人,传送门:qq机器人制作 今天呢,我来给大家分享一个插件,先看效果: 交流群:970353786,非诚勿扰. 源码如下: from nonebot import on_ ...

最新文章

  1. 中国是恶意程序感染率最高的国家
  2. 急速rust服务器管理_Rust 与服务端编程的碎碎念
  3. 哪里可以接到python的活干-越忙越穷?赶紧把瞎忙活的事情交给Python吧!
  4. 触发器before和after的区别
  5. 【VLC-Android】vlc-android简例
  6. win10一直卡在自动修复_分享:win10自动修复过程中无法正确启动怎么办?
  7. python函数isdisjoint方法_Python中的isdisjoint()函数
  8. mac上禁用复制粘贴
  9. 关于parser.add_argument中choices参数问题
  10. SQL优化:Hive---distribute by 防止数据倾斜
  11. PT展揭晓“2021年中国5G实力榜”,亿美软通入围“5G消息企业十强”
  12. 美丽乡村建筑建设新农村规划设计农村改造调研报告城乡统筹规划(共2383份,15.50G)
  13. 工作站Ubuntu16.04环境下安装nvidia显卡驱动
  14. 成年人的清醒:一半是懂了,一半是算了
  15. 推荐:几款优秀的数据挖掘工具
  16. window文件转换到linux,Window和Linux上的文件相互转换
  17. 洛谷 P2404 自然数的拆分问题
  18. 计算机硬件系统由哪几部分组成
  19. js实现文字霓虹灯效果
  20. aggregate vs treeAggregate

热门文章

  1. 江西省电子专题大赛考点讲解四:CD4066四双向模拟开关
  2. Ivanti Neurons™神经元:远程边缘设备实现自主、自动、自助管理
  3. html5调用数码相机,数码相机的操作方法
  4. 智能混剪账号矩阵系统代开发源码搭建
  5. dotnetty java netty,DotNetty发送请求的最佳实践
  6. 帝国CMS网站管理系统安装方法图文教程
  7. html页面点击按钮上传文件,点击按钮实现文件上传及控制文件上传类型
  8. 魔都 3 年,从程序员到 CTO
  9. 用python函数画德国国旗代码_用Python绘制一面国旗
  10. 一个老程序员的生活总结