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为例。

image-20220810104250470

  1. 解压文件

image-20220810104500694

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

image-20220810104613691

  1. 设置系统环境变量

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

image-20220810104917587

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

image-20220810105249459

image-20220810105402317

  1. 测试是否安装成功

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

image-20220810105607341

输入命令ffmpeg –version,有输出信息,则安装成功。
在这里插入图片描述

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

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值