Archived
1
0
Fork 0
This commit is contained in:
yzhh 2022-01-21 20:12:32 +08:00
commit 86be046d2b
2 changed files with 69 additions and 0 deletions

View file

@ -0,0 +1,23 @@
from core.component import on_command
from core.elements import MessageSession
from .mod_dl import curseforge as d
mod_dl = on_command(
bind_prefix='mod_dl',
desc='下载CurseForge上的Mod。',
developers=['HornCopper'],
recommend_modules=['mcmod'],
alias='moddl')
@mod_dl.handle('<mod_name> <mcversion> {通过模组名获取模组下载链接CloudFlare CDN支持。}')
async def main(msg: MessageSession):
info = await d(msg.parsed_msg['<mod_name>'], msg.parsed_msg['<mcversion>'])
if not info['success']:
return await msg.sendMessage(info['msg'])
link = info["download_link"]
name = info["filename"]
status = info["status"]
message = f'下载链接:{link}\n文件名:{name}\n版本状态:{status}'
await msg.sendMessage(message)

46
modules/mod_dl/mod_dl.py Normal file
View file

@ -0,0 +1,46 @@
'''
调用了其他API但是已于CurseForge仓库对接
'''
from core.utils import get_url
from bs4 import BeautifulSoup
search_piece_1 = 'https://files.xmdhs.top/curseforge/s?q='
search_piece_2 = '&type=1'
search_step_2 = 'https://files.xmdhs.top/curseforge/history?id='
def Chinese(string: str):
for word in string:
if u'\u4e00' <= word <= u'\u9fff':
return True
return False
async def curseforge(mod_name: str, ver: str):
if Chinese(mod_name):
return {'msg': 'CurseForge暂不支持中文搜索。', 'success': False}
full_url = search_piece_1 + mod_name + search_piece_2
html = await get_url(full_url)
bs = BeautifulSoup(html, 'html.parser')
try:
information = bs.body.div.div.a
except Exception:
return {'msg': '未搜索到该Mod。', 'success': False}
more_specific_html = str(information)
id = more_specific_html[int(more_specific_html.find('id=') + 3):int(more_specific_html.find('\" style='))]
final_url = search_step_2 + id + '&ver=' + ver
html_2 = await get_url(final_url)
bs_2 = BeautifulSoup(html_2, 'html.parser')
try:
results = bs_2.body.div.div.table.tbody.find_all('tr')
except Exception:
return {'msg': f'此Mod没有{ver}的版本。', 'success': False}
information_2 = str(results[1])
download_link = information_2[int(information_2.find("\"") + 1):int(information_2.find("\" target="))]
file_name = information_2[int(information_2.find("_blank\"") + 8):int(information_2.find("</a>"))]
status = '???'
if bool(information_2.find("Beta")):
status = "Release"
if bool(information_2.find("Release")):
status = "Beta"
return {"filename": file_name, "download_link": download_link, "status": status, "success": True}