Nonebot QQ机器人插件四:每日一图
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_receive
。handle()
是处理事件的主体部分,是事件处理的起点。
@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
操作来发送信息,向用户回复一条消息。回复的方式或途径由协议适配器自行实现。
可以是 str
、Message
、MessageSegment
或 MessageTemplate
。
这个操作等同于使用 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机器人插件四:每日一图相关推荐
- Nonebot QQ机器人插件三:王者荣耀猜英雄游戏
Nonebot QQ机器人插件三:王者荣耀猜英雄游戏 1. 数据录入 首先需要获取相应数据这里可以直接访问**「heros.xlsx」https://www.aliyundrive.com/s/3iN ...
- Nonebot QQ机器人插件九:qq群聊天记录词云图
QQ机器人插件九:qq群聊天记录词云图 1. 将实时聊天记录保存到数据库 安装数据库可自行到网上查找,本文仅使用mysql数据库为例.linux下mysql数据库安装可参考(59条消息) Linux安 ...
- Nonebot QQ机器人插件五:随机网易云音乐
QQ机器人插件五:随机网易云音乐 1. 导入需要使用的包 import nonebotfrom nonebot import on_keyword # 事件响应器函数 from nonebot.typ ...
- Nonebot QQ机器人插件六:随机笑话(语音)
QQ机器人插件六:随机笑话(语音) 1. 导入需要使用的包 import nonebotfrom nonebot import on_keyword # 事件响应器函数 from nonebot.ty ...
- Python实现快递查询-QQ机器人插件
目录 1.API接口请求 2.创建成新的QQ插件 Python实现快递查询功能.Python爬虫一直是一样好东西!只要想就可以爬取自己想要的对象!本次,将使用Python3.9即requests库AP ...
- 从零开始在服务器上搭建QQ机器人——插件(二)
一.简介 在做完基本构建之后,自己的机器人旧可以开始使用了,但是只有一个内置的/echo命令.功能不够丰富. 因此,需要安装插件来获得更多的功能. 二.配置 参照nonebot的官网,编写命令 | N ...
- qq机器人插件之奥运奖牌获得数量
在之前的文章讲到了如何制作机器人,传送门:qq机器人制作 今天呢,我来给大家分享一个插件,先看效果: 交流群:970353786,非诚勿扰. 源码如下: """ 作者:星 ...
- 【最新】QQ机器人插件
QQ机器人 前言 QQ机器人功能展示 一.如何白嫖(用别人的插件) 二.如何自力更生(自己写) 前言 本文旨在如何为你的QQ机器人添加插件,也就是添加机器人的功能.添加插件的方法有两种,一种是用别人写 ...
- qq机器人插件之舔狗日记
在之前的文章讲到了如何制作机器人,传送门:qq机器人制作 今天呢,我来给大家分享一个插件,先看效果: 交流群:970353786,非诚勿扰. 源码如下: from nonebot import on_ ...
最新文章
- 中国是恶意程序感染率最高的国家
- 急速rust服务器管理_Rust 与服务端编程的碎碎念
- 哪里可以接到python的活干-越忙越穷?赶紧把瞎忙活的事情交给Python吧!
- 触发器before和after的区别
- 【VLC-Android】vlc-android简例
- win10一直卡在自动修复_分享:win10自动修复过程中无法正确启动怎么办?
- python函数isdisjoint方法_Python中的isdisjoint()函数
- mac上禁用复制粘贴
- 关于parser.add_argument中choices参数问题
- SQL优化:Hive---distribute by 防止数据倾斜
- PT展揭晓“2021年中国5G实力榜”,亿美软通入围“5G消息企业十强”
- 美丽乡村建筑建设新农村规划设计农村改造调研报告城乡统筹规划(共2383份,15.50G)
- 工作站Ubuntu16.04环境下安装nvidia显卡驱动
- 成年人的清醒:一半是懂了,一半是算了
- 推荐:几款优秀的数据挖掘工具
- window文件转换到linux,Window和Linux上的文件相互转换
- 洛谷 P2404 自然数的拆分问题
- 计算机硬件系统由哪几部分组成
- js实现文字霓虹灯效果
- aggregate vs treeAggregate