From 520227b34e9a8d8aad087b7f8942954aa5357c05 Mon Sep 17 00:00:00 2001 From: TNTcraftHIM Date: Tue, 1 Sep 2020 12:14:55 +0800 Subject: [PATCH] =?UTF-8?q?NeteaseMusic=E6=95=B4=E5=90=88=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E7=83=AD=E6=AD=8C=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- list.json | 10 +++++----- neteasemusic.py | 53 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/list.json b/list.json index 7b0a704..e243b46 100644 --- a/list.json +++ b/list.json @@ -276,19 +276,19 @@ "section": "daily", "maintainer": "TNTcraftHIM", "size": "3.0 kb", - "supported": true, + "supported": false, "des-short": "随机网抑热歌", "des": "从热歌榜随机获取一首歌,可以多进程同开,且附带歌曲信息。命令:ns。" }, { "name": "neteasemusic", - "version": "3.3", + "version": "3.4", "section": "daily", "maintainer": "TNTcraftHIM", - "size": "26.4 kb", + "size": "27.2 kb", "supported": true, - "des-short": "网易云搜/点歌", - "des": "可以在线搜索并且快速点歌(可回复信息点歌),支持解锁VIP/灰色歌曲。命令:nem。" + "des-short": "网易云搜歌/随机热歌/点歌", + "des": "可以在线搜索并且快速点歌(可回复信息点歌),也支持随机热歌功能,支持解锁VIP/灰色歌曲。命令:nem。" }, { "name": "killallmembers", diff --git a/neteasemusic.py b/neteasemusic.py index 6245b57..2c5f1fd 100644 --- a/neteasemusic.py +++ b/neteasemusic.py @@ -21,7 +21,7 @@ class RetryError(Exception): # 重试错误,用于再次重试 @listener(is_plugin=True, outgoing=True, command="nem", - description="网易云搜/点歌。\n指令s为搜索,p为点歌,id为歌曲ID点歌\n搜索灰色歌曲请给出歌手\n可回复搜索结果消息`-nem` `p` `<歌曲数字序号>`点歌", + description="网易云搜/点歌。\n指令s为搜索,p为点歌,id为歌曲ID点歌,r为随机热歌(无关键词)\n搜索灰色歌曲请指定歌手\n可回复搜索结果消息`-nem` `p` `<歌曲数字序号>`点歌", parameters="<指令> <关键词>") async def nem(context): proxies = {} @@ -30,18 +30,47 @@ async def nem(context): "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "X-Real-IP": "223.252.199.66"} proxy = [{'http': 'http://192.210.137.108:8080', 'https': 'http://192.210.137.108:8080'}, {'http': 'http://music.lolico.me:39000', 'https': 'http://music.lolico.me:39000'}, {'http': 'http://aimer.one:2333', 'https': 'http://aimer.one:2333'}, {'http': 'http://fs2.ilogic.net.cn:5200', 'https': 'http://fs2.ilogic.net.cn:5200'}, {'http': 'http://64.64.250.246:8080', 'https': 'http://64.64.250.246:8080'}] + helptext = "**使用方法:** `-nem` `<指令>` `<关键词>`\n\n指令s为搜索,p为点歌,id为歌曲ID点歌,r为随机热歌(无关键词)\n搜索灰色歌曲请指定歌手\n可回复搜索结果消息`-nem` `p` `<歌曲数字序号>`点歌" + apifailtext = "出错了呜呜呜 ~ 试了好多好多次都无法访问到 API 服务器 。" + if len(context.parameter) < 2: - await context.edit("**使用方法:** `-nem` `<指令>` `<关键词>`\n\n指令s为搜索,p为点歌,id为歌曲ID点歌\n搜索灰色歌曲请给出歌手\n可回复搜索结果消息`-nem` `p` `<歌曲数字序号>`点歌") - return - else: - keyword = '' - for i in range(1, len(context.parameter)): - keyword += context.parameter[i] + " " + if len(context.parameter) == 0: + await context.edit(helptext) + return + elif context.parameter[0] == "r": # 随机热歌 + await context.edit("随机中 . . .") + url = "https://api.vvhan.com/api/rand.music?type=json&sort=%E7%83%AD%E6%AD%8C%E6%A6%9C" + randsong = requests.get(url, headers=headers) + for _ in range(20): # 最多重试20次 + status = False + if randsong.status_code == 200: + randsong = json.loads(randsong.content) + if randsong['success'] is True: + context.parameter[0] = "id" + try: + context.parameter[1] = str(randsong['info']['id']) + except: + context.parameter.append( + str(randsong['info']['id'])) + status = True + break + if status is False: + await context.edit(apifailtext) + sleep(3) + await context.delete() + return + else: + await context.edit(helptext) + return + # 整理关键词 + keyword = '' + for i in range(1, len(context.parameter)): + keyword += context.parameter[i] + " " keyword = keyword[:-1] idplay = False if context.parameter[0] == "id": # ID点歌功能 if len(context.parameter) > 2: - await context.edit("**使用方法:** `-nem` `<指令>` `<关键词>`\n\n指令s为搜索,p为点歌,id为歌曲ID点歌\n搜索灰色歌曲请给出歌手\n可回复搜索结果消息`-nem` `p` `<歌曲数字序号>`点歌") + await context.edit(helptext) return idplay = keyword context.parameter[0] = "p" @@ -81,7 +110,7 @@ async def nem(context): info[i]['album'] + '' text += f"专辑: {res} \n" text += f"作者: {info[i]['artist']}\n歌曲ID{info[i]['id']}\n————————\n" - text += "回复此消息-nem p <歌曲序号>即可点歌" + text += "\n回复此消息-nem p <歌曲序号>即可点歌" await context.edit(text, parse_mode='html', link_preview=True) status = True break @@ -94,7 +123,7 @@ async def nem(context): else: continue if status is False: - await context.edit("出错了呜呜呜 ~ 试了好多好多次都无法访问到 API 服务器 。") + await context.edit(apifailtext) sleep(3) await context.delete() return @@ -461,9 +490,9 @@ async def nem(context): continue if status is False: - await context.edit("出错了呜呜呜 ~ 试了好多好多次都无法访问到 API 服务器 。") + await context.edit(apifailtext) sleep(3) await context.delete() else: # 错误输入 - await context.edit("**使用方法:** `-nem` `<指令>` `<关键词>`\n\n指令s为搜索,p为点歌,id为歌曲ID点歌\n搜索灰色歌曲请给出歌手\n可回复搜索结果消息`-nem` `p` `<歌曲数字序号>`点歌") + await context.edit(helptext) return