nonebot2调用图片API发送随机图片

2023-10-19 13:10

本文主要是介绍nonebot2调用图片API发送随机图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

我们经常可以看到能够发送随机图片的QQ机器人,接下来我们会学习到如何编写这种插件

效果展示

正文

 图片API选择

图片API可以按照其返回数据的方式分成几种,我这里使用的API的类型是直接返回图片的URL,就比如说访问我自己部署的一个二次元图API:[https://api.sevin.cn/api/ecy.php](https://api.sevin.cn/api/ecy.php),他就会随机返回一张图片的URL,比如说:https://api.sevin.cn/api/img/ecy/ (17).jpg

另一种返回json格式的API的使用方法请看这篇文章:nonebot2调用json格式图片API发送随机图片

至于这种图片API怎么制作,大家可以看我的这篇文章:超简单随机图片API制作教程。或者你直接去网上找现成的这种类型的现成图片API也可以

插件编写

Step 1 定义命令

首先,我们需要定义插件命令,只有成功调用了命令,才能触发插件操作。在本插件中,我们使用 on_command 装饰器定义一个命令,当用户输入特定的命令时,机器人就会执行相应的操作。例如,我们定义命令为“二次元图”:

from nonebot import on_commandecyt = on_command('二次元图')

Step 2 编写插件逻辑

接下来,我们可以在 on_command 修饰器下使用 handle 装饰器来编写插件逻辑,当用户触发命令时,机器人就会执行相应的逻辑。在本插件中,我们需要从图片 API 获取随机图片的 URL,并将其发送给用户。

@ecyt.handle()
async def main():# 获取随机图片 URLmsg = await get_data()# 发送图片给用户await ecyt.finish(MessageSegment.image(msg))

在上面的代码中,我们定义了一个名为 main 的异步函数,使用 await get_data() 来获取随机图片网址,然后使用 await ecyt.finish()发送随机图片URL。

Step 3 调用图片 API

在 main 函数中,我们需要获取随机图片 URL,而我们可以使用 httpx 库中的异步函数异步获取图片 URL。在示例代码中,我们使用了一个图片 API,这个 API 它可以随机返回二次元图片的 URL。

async def get_data():url = 'https://api.sevin.cn/api/ecy.php'async with httpx.AsyncClient() as client:resp = await client.get(url)data = resp.text.strip()return data

在上述代码中,我们使用 httpx 库中的 AsyncClient() 来实现异步请求,发出 GET 请求,从 API 获取随机图片 URL,并返回响应内容。

Step 4 发送图片

在获得图片URL后,我们需要将其发送给用户。我们需要使用 nonebot.adapters.onebot.v11.message.MessageSegment 中的 image 函数。这个函数将 URL 转换成 Nonebot 内置的 image 消息段,使得机器人能够正确发送图片。

from nonebot.adapters.onebot.v11 import MessageSegmentawait ecyt.finish(MessageSegment.image(msg))

在上述代码中,我们调用了 MessageSegment.image 函数,并将获取到的图片 URL 作为参数传递给了它。最后,我们调用了 ecyt.finish() 函数,将消息发送给了用户。

Step 5 完整代码

将以上 Step 1 - Step 4 中的代码合并,便可得到本插件完整代码:

from nonebot import on_command
from nonebot.adapters.onebot.v11 import MessageSegment
import httpxecyt = on_command('二次元图')@ecyt.handle()
async def main():msg = await get_data()await ecyt.finish(MessageSegment.image(msg))async def get_data():url = 'https://api.sevin.cn/api/ecy.php'async with httpx.AsyncClient() as client:resp = await client.get(url)data = resp.text.strip()return data

你需要把代码上面的“二次元图”改成你自己触发插件的命令,把代码上面的链接改成你要调用的API链接,然后如果你触发插件的命令是中文的,你可能需要把插件的编码改成utf-8(一般默认就是utf-8,但是你最好检查一下),不然会引发乱码

相关

nonebot2调用文本API发送随机文本

这篇关于nonebot2调用图片API发送随机图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/239994

相关文章

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca