SanYeCao-Nonebot/src/plugins/cloud_music.py

105 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import asyncio
import pickle
import time
from pathlib import Path
from nonebot import on_command
from nonebot.rule import to_me
from nonebot.adapters.qq import MessageSegment,MessageEvent
from src.clover_music.cloud_music.cloud_music import *
from src.clover_image.delete_file import delete_file
music = on_command("点歌", rule=to_me(), priority=10,block=False)
@music.handle()
async def handle_function(msg: MessageEvent):
keyword = msg.get_plaintext().replace("/点歌", "").strip(" ")
if keyword == "":
await music.finish("\n请输入“/点歌+歌曲名”喔🎶")
#搜索歌曲
session = requests.session()
song_id,song_name,singer,song_url = await netease_music_search(keyword,session)
song_name = str(song_name).replace(".", "·").replace("/", "")
if song_id is None:
await music.finish("\n没有找到歌曲或检索到的歌曲均为付费喔qwq\n这绝对不是我的错,绝对不是!")
else:
await music.send(MessageSegment.text(f" 来源:网易云音乐\n歌曲:{song_name} - {singer}\n请稍等喔🎵"))
#返回转换后的歌曲路径
output_silk_path = await music_download(song_id)
if output_silk_path is None:
await music.send("歌曲音频获取失败了Σヽ(゚Д ゚; )ノ,请重试。")
else:
await music.send(MessageSegment.file_audio(Path(output_silk_path)))
#删除临时文件
await delete_file(output_silk_path)
await music.finish()
"""
由于网易云防爬虫机制,导致验证二维码登录也被限制 现已弃用 替换为三方接口
"""
# unikey_cache = {'unikey': None, 'expires': 0}
#
# async def handle_function(msg: MessageEvent):
# qr_path = ""
# keyword = msg.get_plaintext().replace("/点歌", "").strip(" ")
#
# if keyword == "":
# await music.finish("\n请输入“/点歌+歌曲名”喔🎶")
#
# #获取登录信息
# session = requests.session()
# if not os.path.exists('cloud_music_cookies.cookie'):
# with open('cloud_music_cookies.cookie', 'wb') as f:
# pickle.dump(session.cookies, f)
# # 读取 cookie
# session.cookies = pickle.load(open('cloud_music_cookies.cookie', 'rb'))
# session, status,user_id = await netease_cloud_music_is_login(session)
# if not status:
# await music.send("登录失效,请联系管理员进行登录")
# # 检查缓存是否有效二维码有效期5分钟)
# if unikey_cache['unikey'] and time.time() < unikey_cache['expires']:
# unikey = unikey_cache['unikey']
# else:
# # 获取新 unikey 并设置过期时间
# unikey = await get_qr_key(session)
# unikey_cache.update({
# 'unikey': unikey,
# 'expires': time.time() + 300 # 大约是5分钟有效期 失效时间会有几秒误差
# })
# qr_path = await create_qr_code(unikey)
# """是否要发送到QQ上面登录 """
# # await clover_music.send(MessageSegment.file_image(Path(path)))
# """是否要发送到QQ上面登录 """
# for _ in range(60): # 限制最大等待时间5分钟300秒/5秒间隔
# code = await check_qr_code(unikey, session)
# if code in (803,): break # 成功状态
# if code not in (801, 802):
# print('二维码失效' if code == 800 else f'异常状态码:{code}')
# break
# await asyncio.sleep(5)
# with open('cloud_music_cookies.cookie', 'wb') as f:
# pickle.dump(session.cookies, f)
# else:
# #搜索歌曲
# song_id,song_name,singer,song_url = await netease_music_search(keyword,session)
# song_name = str(song_name).replace(".", "·").replace("/", "、")
# if song_id is None:
# await music.finish("\n没有找到歌曲或检索到的歌曲均为付费喔qwq\n这绝对不是我的错绝对不是")
# else:
# await music.send(MessageSegment.text(f" 来源:网易云音乐\n歌曲{song_name} - {singer}\n请稍等喔🎵"))
# #返回转换后的歌曲路径
# output_silk_path = await netease_music_download(song_id, song_name, singer,session)
#
# if output_silk_path == -1:
# await music.send("歌曲音频获取失败:登录信息失效。")
# elif output_silk_path is None:
# await music.send("歌曲音频获取失败了Σヽ(゚Д ゚; )ノ,请重试。")
# else:
# await music.send(MessageSegment.file_audio(Path(output_silk_path)))
# #删除临时文件
# await delete_file(output_silk_path)
# await music.finish()