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__ = 'music'
__plugin_usage__ = '用法: 音乐,返回随机一首音乐。'

music = on_keyword({"音乐", "网易云","music","听歌"})

3. 事件处理流程

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

@music.handle()

然后创建一个异步函数:

async def handle_song(state: T_State):

然后创建一个获取音乐的函数:

async def get_song():
    url = 'https://api.vvhan.com/api/rand.music?type=json&sort=热歌榜'
    res = requests.get(url)
    result = json.loads(res.text)
    mp3 = result['info']['mp3url']
    #song = f"[CQ:record,file={mp3}]"
    return mp3

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

{
    'success': True, 
    'sort': '热歌榜', 
    'info': 
    {
        'id': 419375250, 
        'name': '月亮之矢', 
        'auther': '孤矢', 
        'picUrl': 'https://p4.music.126.net/i7gE7HVrqcAO_0Y--Znc6Q==/17812088370080434.jpg', 
        'mp3url': 'https://m801.music.126.net/20220810105659/a1e6bfdcc38aaebee6d8aaf617c3c606/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/14096495888/7577/6ddd/2618/7b8330b37a6b9791f0b88f4ba68972e8.mp3'
    }
}

4. 事件响应器操作

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

可以是 strMessageMessageSegmentMessageTemplate

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

await music.send(MessageSegment.record(song))

5. 安装ffmpeg音视频转换工具

不安装`ffmpeg`是无法成功发出语音视频等类型的消息。
  1. 下载ffmpeg的安装包

首先,进入ffmpeg的官网Download FFmpeg,这里以Windows为例。

Nonebot QQ机器人插件五:随机网易云音乐_第1张图片

Nonebot QQ机器人插件五:随机网易云音乐_第2张图片

  1. 解压文件

Nonebot QQ机器人插件五:随机网易云音乐_第3张图片

进入bin目录,可以看见三个这样的文件:

Nonebot QQ机器人插件五:随机网易云音乐_第4张图片

  1. 设置系统环境变量

点击搜索栏,搜索高级系统设置。

Nonebot QQ机器人插件五:随机网易云音乐_第5张图片

确定后,进入环境变量-》系统环境变量,选择path,点击编辑-》新建,把第一步bin的文件路径粘贴进去即可。

Nonebot QQ机器人插件五:随机网易云音乐_第6张图片

Nonebot QQ机器人插件五:随机网易云音乐_第7张图片

  1. 测试是否安装成功

win + R 打开运行,输入cmd打开命令行窗口。

Nonebot QQ机器人插件五:随机网易云音乐_第8张图片

输入命令ffmpeg –version,有输出信息,则安装成功。
Nonebot QQ机器人插件五:随机网易云音乐_第9张图片

6. 完整代码

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__ = 'music'
__plugin_usage__ = '用法: 音乐,返回随机一首音乐。'

music = on_keyword({"音乐", "网易云","music","听歌"})

@music.handle()
async def handle_song(state: T_State):
    song = await  get_song()
    await music.send(MessageSegment.record(song))

# 在这里编写获取具体音乐的函数
async def get_song():
    url = 'https://api.vvhan.com/api/rand.music?type=json&sort=热歌榜'
    res = requests.get(url)
    result = json.loads(res.text)
    mp3 = result['info']['mp3url']
    return mp3

7. 结果展示

Nonebot QQ机器人插件五:随机网易云音乐_第10张图片

你可能感兴趣的:(qq机器人,json,python,开发语言)