mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-17 10:10:00 +08:00
update alapi
This commit is contained in:
@@ -12,6 +12,7 @@ nonebot.load_builtin_plugins()
|
|||||||
nonebot.load_plugins("plugins")
|
nonebot.load_plugins("plugins")
|
||||||
nonebot.load_plugins("plugins/shop")
|
nonebot.load_plugins("plugins/shop")
|
||||||
nonebot.load_plugins("plugins/genshin")
|
nonebot.load_plugins("plugins/genshin")
|
||||||
|
nonebot.load_plugins("plugins/alapi")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
+6
-3
@@ -1,6 +1,6 @@
|
|||||||
from .utils.util import get_config_data
|
from .utils.util import get_config_data
|
||||||
from typing import List
|
from typing import List
|
||||||
from services.service_config import TL_M_KEY, SYSTEM_PROXY
|
from services.service_config import TL_M_KEY, SYSTEM_PROXY, ALAPI_TOKEN
|
||||||
try:
|
try:
|
||||||
import ujson as json
|
import ujson as json
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
@@ -14,14 +14,15 @@ USE_CONFIG_FILE = False
|
|||||||
# API KEY(必要)
|
# API KEY(必要)
|
||||||
LOLICON_KEY: str = "" # lolicon
|
LOLICON_KEY: str = "" # lolicon
|
||||||
RSSHUBAPP: str = "https://rsshub.app/" # rsshub
|
RSSHUBAPP: str = "https://rsshub.app/" # rsshub
|
||||||
|
ALAPI_TOKEN: str = "" # ALAPI
|
||||||
# 图灵
|
# 图灵
|
||||||
TL_KEY: List[str] = []
|
TL_KEY: List[str] = []
|
||||||
|
|
||||||
# 数据库(必要)
|
# 数据库(必要)
|
||||||
# 如果填写了bind就不需要再填写后面的字段了#)
|
# 如果填写了bind就不需要再填写后面的字段了#)
|
||||||
# bind示例:postgresql://user:password@127.0.0.1:5432/databases
|
# 示例:"bind": "postgresql://user:password@127.0.0.1:5432/database"
|
||||||
bind: str = ''
|
bind: str = ''
|
||||||
sql_name: str = 'postgresql'
|
sql_name: str = ''
|
||||||
user: str = ''
|
user: str = ''
|
||||||
password: str = ''
|
password: str = ''
|
||||||
address: str = ''
|
address: str = ''
|
||||||
@@ -194,6 +195,8 @@ if TL_M_KEY:
|
|||||||
TL_KEY = TL_M_KEY
|
TL_KEY = TL_M_KEY
|
||||||
if SYSTEM_PROXY:
|
if SYSTEM_PROXY:
|
||||||
system_proxy = SYSTEM_PROXY
|
system_proxy = SYSTEM_PROXY
|
||||||
|
if ALAPI_TOKEN:
|
||||||
|
ALAPI_TOKEN = ALAPI_TOKEN
|
||||||
|
|
||||||
|
|
||||||
# 配置文件应用
|
# 配置文件应用
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
from configs.config import TL_KEY
|
from configs.config import TL_KEY, ALAPI_TOKEN
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import random
|
import random
|
||||||
import os
|
import os
|
||||||
from configs.path_config import IMAGE_PATH, DATA_PATH
|
from configs.path_config import IMAGE_PATH, DATA_PATH
|
||||||
|
from services.log import logger
|
||||||
from util.init_result import image
|
from util.init_result import image
|
||||||
from util.utils import get_bot
|
from util.utils import get_bot
|
||||||
|
|
||||||
@@ -13,6 +14,8 @@ except ModuleNotFoundError:
|
|||||||
|
|
||||||
url = "http://openapi.tuling123.com/openapi/api/v2"
|
url = "http://openapi.tuling123.com/openapi/api/v2"
|
||||||
|
|
||||||
|
check_url = "https://v2.alapi.cn/api/censor/text"
|
||||||
|
|
||||||
index = 0
|
index = 0
|
||||||
|
|
||||||
anime_data = json.load(open(DATA_PATH + 'anime.json', 'r', encoding='utf8'))
|
anime_data = json.load(open(DATA_PATH + 'anime.json', 'r', encoding='utf8'))
|
||||||
@@ -97,6 +100,7 @@ async def get_qqbot_chat_result(text: str, img_url: str, user_id: int, user_name
|
|||||||
content = content.replace('{br}', '\n')
|
content = content.replace('{br}', '\n')
|
||||||
if content.find('提示') != -1:
|
if content.find('提示') != -1:
|
||||||
content = content[:content.find('提示')]
|
content = content[:content.find('提示')]
|
||||||
|
|
||||||
return content
|
return content
|
||||||
if resp_payload['results']:
|
if resp_payload['results']:
|
||||||
for result in resp_payload['results']:
|
for result in resp_payload['results']:
|
||||||
@@ -140,3 +144,22 @@ def no_result() -> str:
|
|||||||
]) + image(
|
]) + image(
|
||||||
random.choice(os.listdir(IMAGE_PATH + "noresult/")
|
random.choice(os.listdir(IMAGE_PATH + "noresult/")
|
||||||
), "noresult")
|
), "noresult")
|
||||||
|
|
||||||
|
|
||||||
|
async def check_text(text: str):
|
||||||
|
if not ALAPI_TOKEN:
|
||||||
|
return text
|
||||||
|
params = {
|
||||||
|
'token': ALAPI_TOKEN,
|
||||||
|
'text': text
|
||||||
|
}
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
try:
|
||||||
|
async with session.get(url, timeout=2, params=params) as response:
|
||||||
|
data = await response.json()
|
||||||
|
if data['code'] == 200:
|
||||||
|
if data['conclusion_type'] == 2:
|
||||||
|
return no_result()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f'检测违规文本错误...e:{e}')
|
||||||
|
return text
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
from nonebot import on_command
|
||||||
|
from nonebot.adapters.cqhttp import Bot, MessageEvent
|
||||||
|
from nonebot.typing import T_State
|
||||||
|
from configs.config import ALAPI_TOKEN
|
||||||
|
from .util import get_data
|
||||||
|
from services.log import logger
|
||||||
|
|
||||||
|
__plugin_name__ = '网易云热评'
|
||||||
|
__plugin_usage__ = '用法: 生了个人,我很抱歉'
|
||||||
|
|
||||||
|
comments_163 = on_command("网易云热评", aliases={'网易云评论', '到点了', '12点了'}, priority=5, block=True)
|
||||||
|
|
||||||
|
|
||||||
|
comments_163_url = 'https://v2.alapi.cn/api/comment'
|
||||||
|
|
||||||
|
|
||||||
|
@comments_163.handle()
|
||||||
|
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
||||||
|
params = {
|
||||||
|
'token': ALAPI_TOKEN
|
||||||
|
}
|
||||||
|
data, code = await get_data(comments_163_url, params)
|
||||||
|
if code != 200:
|
||||||
|
await comments_163.finish(data, at_sender=True)
|
||||||
|
data = data['data']
|
||||||
|
comment = data['comment_content']
|
||||||
|
song_name = data['title']
|
||||||
|
await comments_163.send(f'{comment}\n\t——《{song_name}》')
|
||||||
|
logger.info(
|
||||||
|
f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})"
|
||||||
|
f" 发送网易云热评: {comment} \n\t\t————{song_name}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
from nonebot import on_command
|
||||||
|
from nonebot.adapters.cqhttp import Bot, MessageEvent, Message
|
||||||
|
from nonebot.typing import T_State
|
||||||
|
from configs.config import ALAPI_TOKEN
|
||||||
|
from util.init_result import image
|
||||||
|
from util.utils import get_message_text
|
||||||
|
from .util import get_data
|
||||||
|
from services.log import logger
|
||||||
|
|
||||||
|
__plugin_name__ = 'b封面'
|
||||||
|
__plugin_usage__ = '用法: b封面 (链接,av,bv,cv,直播id)\n\t' \
|
||||||
|
'示例:b封面 av86863038'
|
||||||
|
|
||||||
|
|
||||||
|
cover = on_command('b封面', priority=5, block=True)
|
||||||
|
|
||||||
|
|
||||||
|
cover_url = 'https://v2.alapi.cn/api/bilibili/cover'
|
||||||
|
|
||||||
|
|
||||||
|
@cover.handle()
|
||||||
|
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
||||||
|
msg = get_message_text(event.json())
|
||||||
|
params = {
|
||||||
|
'token': ALAPI_TOKEN,
|
||||||
|
'c': msg
|
||||||
|
}
|
||||||
|
data, code = await get_data(cover_url, params)
|
||||||
|
if code != 200:
|
||||||
|
await cover.finish(data, at_sender=True)
|
||||||
|
data = data['data']
|
||||||
|
title = data['title']
|
||||||
|
img = data['cover']
|
||||||
|
await cover.send(Message(f'title:{title}\n{image(img)}'))
|
||||||
|
logger.info(
|
||||||
|
f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})"
|
||||||
|
f" 获取b站封面: {title} url:{img}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
from nonebot import on_command
|
||||||
|
from nonebot.adapters.cqhttp import Bot, MessageEvent
|
||||||
|
from nonebot.typing import T_State
|
||||||
|
from configs.config import ALAPI_TOKEN
|
||||||
|
from services.log import logger
|
||||||
|
from .util import get_data
|
||||||
|
|
||||||
|
__plugin_name__ = '古诗'
|
||||||
|
__plugin_usage__ = '用法: 无'
|
||||||
|
|
||||||
|
|
||||||
|
poetry = on_command("念诗", aliases={'来首诗', '念首诗'}, priority=5, block=True)
|
||||||
|
|
||||||
|
|
||||||
|
poetry_url = 'https://v2.alapi.cn/api/shici'
|
||||||
|
|
||||||
|
|
||||||
|
@poetry.handle()
|
||||||
|
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
||||||
|
params = {
|
||||||
|
'token': ALAPI_TOKEN
|
||||||
|
}
|
||||||
|
data, code = await get_data(poetry_url, params)
|
||||||
|
if code != 200:
|
||||||
|
await poetry.finish(data, at_sender=True)
|
||||||
|
data = data['data']
|
||||||
|
content = data['content']
|
||||||
|
title = data['origin']
|
||||||
|
author = data['author']
|
||||||
|
await poetry.send(f'{content}\n\t——{author}《{title}》')
|
||||||
|
logger.info(
|
||||||
|
f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})"
|
||||||
|
f" 发送古诗: f'{content}\n\t--{author}《{title}》'")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import aiohttp
|
||||||
|
from util.utils import get_local_proxy
|
||||||
|
|
||||||
|
|
||||||
|
async def get_data(url: str, params: dict):
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
try:
|
||||||
|
async with session.get(url, proxy=get_local_proxy(), timeout=2, params=params) as response:
|
||||||
|
data = await response.json()
|
||||||
|
if data['code'] == 200:
|
||||||
|
if not data['data']:
|
||||||
|
return '没有搜索到...', 997
|
||||||
|
return data, 200
|
||||||
|
else:
|
||||||
|
return f'发生了错误...code:{data["code"]}', 999
|
||||||
|
except TimeoutError:
|
||||||
|
return '超时了....', 998
|
||||||
+120
-119
@@ -18,7 +18,7 @@ genshin_up_char = Path(DRAW_PATH + "/draw_card_up/genshin_up_char.json")
|
|||||||
pretty_up_char = Path(DRAW_PATH + "/draw_card_up/pretty_up_char.json")
|
pretty_up_char = Path(DRAW_PATH + "/draw_card_up/pretty_up_char.json")
|
||||||
guardian_up_char = Path(DRAW_PATH + "/draw_card_up/guardian_up_char.json")
|
guardian_up_char = Path(DRAW_PATH + "/draw_card_up/guardian_up_char.json")
|
||||||
|
|
||||||
prts_url = "https://wiki.biligame.com/arknights/%E6%96%B0%E9%97%BB%E5%85%AC%E5%91%8A"
|
prts_url = "https://ak.hypergryph.com/news.html"
|
||||||
genshin_url = "https://wiki.biligame.com/ys/%E7%A5%88%E6%84%BF"
|
genshin_url = "https://wiki.biligame.com/ys/%E7%A5%88%E6%84%BF"
|
||||||
pretty_url = "https://wiki.biligame.com/umamusume/%E5%85%AC%E5%91%8A"
|
pretty_url = "https://wiki.biligame.com/umamusume/%E5%85%AC%E5%91%8A"
|
||||||
guardian_url = "https://wiki.biligame.com/gt/%E9%A6%96%E9%A1%B5"
|
guardian_url = "https://wiki.biligame.com/gt/%E9%A6%96%E9%A1%B5"
|
||||||
@@ -36,19 +36,10 @@ def is_expired(data: dict):
|
|||||||
|
|
||||||
|
|
||||||
# 检查写入
|
# 检查写入
|
||||||
def check_write(data: dict, up_char_file, game_name: str = ''):
|
def check_write(data: dict, up_char_file):
|
||||||
tmp = data
|
if not is_expired(data['char']):
|
||||||
if game_name in ['genshin', 'pretty', 'guardian']:
|
for x in list(data.keys()):
|
||||||
tmp = data['char']
|
data[x]['title'] = ''
|
||||||
if not is_expired(tmp):
|
|
||||||
if game_name in ['genshin', 'guardian']:
|
|
||||||
data['char']['title'] = ''
|
|
||||||
data['arms']['title'] = ''
|
|
||||||
elif game_name in ['pretty']:
|
|
||||||
data['char']['title'] = ''
|
|
||||||
data['card']['title'] = ''
|
|
||||||
else:
|
|
||||||
data['title'] = ''
|
|
||||||
else:
|
else:
|
||||||
with open(up_char_file, 'w', encoding='utf8') as f:
|
with open(up_char_file, 'w', encoding='utf8') as f:
|
||||||
json.dump(data, f, indent=4, ensure_ascii=False)
|
json.dump(data, f, indent=4, ensure_ascii=False)
|
||||||
@@ -58,10 +49,7 @@ def check_write(data: dict, up_char_file, game_name: str = ''):
|
|||||||
else:
|
else:
|
||||||
with open(up_char_file, 'r', encoding='utf8') as f:
|
with open(up_char_file, 'r', encoding='utf8') as f:
|
||||||
old_data = json.load(f)
|
old_data = json.load(f)
|
||||||
tmp = old_data
|
if is_expired(data['char']):
|
||||||
if game_name in ['genshin', 'pretty', 'guardian']:
|
|
||||||
tmp = old_data['char']
|
|
||||||
if is_expired(tmp):
|
|
||||||
return old_data
|
return old_data
|
||||||
else:
|
else:
|
||||||
with open(up_char_file, 'w', encoding='utf8') as f:
|
with open(up_char_file, 'w', encoding='utf8') as f:
|
||||||
@@ -69,100 +57,104 @@ def check_write(data: dict, up_char_file, game_name: str = ''):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def _get_up_char(r: str, text: str):
|
|
||||||
pr = re.search(r, text)
|
|
||||||
chars = pr.group(1)
|
|
||||||
probability = pr.group(2)
|
|
||||||
chars = chars.replace('[限定]', '').replace('[', '').replace(']', '')
|
|
||||||
probability = probability.replace('【', '')
|
|
||||||
return chars, probability
|
|
||||||
|
|
||||||
|
|
||||||
class PrtsAnnouncement:
|
class PrtsAnnouncement:
|
||||||
|
|
||||||
@staticmethod
|
def __init__(self):
|
||||||
async def get_announcement_text():
|
self.game_name = '明日方舟'
|
||||||
|
|
||||||
|
async def _get_announcement_text(self):
|
||||||
async with aiohttp.ClientSession(headers=headers) as session:
|
async with aiohttp.ClientSession(headers=headers) as session:
|
||||||
async with session.get(prts_url, timeout=7) as res:
|
async with session.get(prts_url, timeout=7) as res:
|
||||||
soup = BeautifulSoup(await res.text(), 'lxml')
|
soup = BeautifulSoup(await res.text(), 'lxml')
|
||||||
trs = soup.find('table').find('tbody').find_all('tr')
|
ol = soup.find('ol', {'class': 'articleList active', 'data-category-key': 'LATEST'})
|
||||||
for tr in trs:
|
for li in ol:
|
||||||
a = tr.find_all('td')[-1].find('a')
|
itype = li.find('span', {'class': 'articleItemCate'}).text
|
||||||
if a.text.find('寻访') != -1:
|
if itype == '活动':
|
||||||
url = a.get('href')
|
a = li.find('a')['href']
|
||||||
break
|
async with session.get(f'https://ak.hypergryph.com{a}', headers=headers, timeout=7) as res:
|
||||||
async with session.get(f'https://wiki.biligame.com/{url}', timeout=7) as res:
|
return await res.text()
|
||||||
return await res.text(), a.text[:-4]
|
|
||||||
|
|
||||||
@staticmethod
|
async def update_up_char(self):
|
||||||
async def update_up_char():
|
|
||||||
prts_up_char.parent.mkdir(parents=True, exist_ok=True)
|
prts_up_char.parent.mkdir(parents=True, exist_ok=True)
|
||||||
data = {'up_char': {'6': {}, '5': {}, '4': {}}, 'title': '', 'time': '', 'pool_img': ''}
|
|
||||||
try:
|
try:
|
||||||
text, title = await PrtsAnnouncement.get_announcement_text()
|
data = {'char': {'up_char': {'6': {}, '5': {}, '4': {}}, 'title': '', 'time': '', 'pool_img': ''}}
|
||||||
|
text = await self._get_announcement_text()
|
||||||
soup = BeautifulSoup(text, 'lxml')
|
soup = BeautifulSoup(text, 'lxml')
|
||||||
data['title'] = title
|
content = soup.find('div', {'class': 'article-content'})
|
||||||
context = soup.find('div', {'id': 'mw-content-text'}).find('div')
|
contents = [x for x in content.contents if x.text or str(x).find('img') != -1]
|
||||||
data['pool_img'] = str(context.find('div', {'class': 'center'}).find('div').find('a').
|
start_index = -1
|
||||||
find('img').get('srcset')).split(' ')[-2]
|
end_index = -1
|
||||||
# print(context.find_all('p'))
|
for i in range(len(contents)):
|
||||||
for p in context.find_all('p')[1:]:
|
if str(contents[i]).startswith('<p>'):
|
||||||
if p.text.find('活动时间') != -1:
|
r = re.search('(.*)(寻访|复刻).*?开启', contents[i].text)
|
||||||
pr = re.search(r'.*?活动时间:(.*)', p.text)
|
if r:
|
||||||
data['time'] = pr.group(1)
|
if str(contents[i+3].text).find('★') != -1:
|
||||||
elif p.text.find('★★★★★★') != -1:
|
img = contents[i-1].find('img')
|
||||||
chars, probability = _get_up_char(r'.*?★★★★★★:(.*?)(.*?出率的?(.*?)%.*?).*?', p.text)
|
if img:
|
||||||
slt = '/'
|
data['char']['pool_img'] = img['src']
|
||||||
if chars.find('\\') != -1:
|
start_index = i
|
||||||
slt = '\\'
|
for j in range(i, len(contents)):
|
||||||
for char in chars.split(slt):
|
if str(contents[j]).find('注意') != -1:
|
||||||
data['up_char']['6'][char.strip()] = probability.strip()
|
end_index = j
|
||||||
elif p.text.find('★★★★★') != -1:
|
break
|
||||||
chars, probability = _get_up_char(r'.*?★★★★★:(.*?)(.*?出率的?(.*?)%.*?).*?', p.text)
|
break
|
||||||
slt = '/'
|
contents = contents[start_index: end_index]
|
||||||
if chars.find('\\') != -1:
|
title = contents[0].text
|
||||||
slt = '\\'
|
data['char']['title'] = title[title.find('【'): title.find('】') + 1]
|
||||||
for char in chars.split(slt):
|
data['char']['time'] = str(contents[1].text).split(':', maxsplit=1)[1]
|
||||||
data['up_char']['5'][char.strip()] = probability.strip()
|
for p in contents[2:]:
|
||||||
elif p.text.find('★★★★') != -1:
|
p = str(p.text)
|
||||||
chars, probability = _get_up_char(r'.*?★★★★:(.*?)(.*?出率的?(.*?)%.*?).*?', p.text)
|
r = None
|
||||||
slt = '/'
|
if p.find('★') != -1:
|
||||||
if chars.find('\\') != -1:
|
if p.find('权值') == -1:
|
||||||
slt = '\\'
|
r = re.search(r'.*?:(.*)(占(.*)★.*?的(.*)%)', p)
|
||||||
for char in chars.split(slt):
|
else:
|
||||||
data['up_char']['4'][char.strip()] = probability.strip()
|
r = re.search(r'.*?:(.*)(在(.*)★.*?以(.*)倍权值.*?)', p)
|
||||||
break
|
star = r.group(2)
|
||||||
pr = re.search(r'.*?★:(.*?)(在(.*?)★.*?以(.*?)倍权值.*?).*?', p.text)
|
if r:
|
||||||
if pr:
|
chars = r.group(1)
|
||||||
char = pr.group(1)
|
if chars.find('/') != -1:
|
||||||
star = pr.group(2)
|
chars = chars.strip().split('/')
|
||||||
weight = pr.group(3)
|
elif chars.find('\\') != -1:
|
||||||
char = char.replace('[限定]', '').replace('[', '').replace(']', '')
|
chars = chars.strip().split('\\')
|
||||||
data['up_char'][star][char.strip()] = f'权{weight}'
|
else:
|
||||||
# data['time'] = '03月09日16:00 - 05月23日03:5
|
chars = chars.split('\n')
|
||||||
|
chars = [x.replace('[限定]', '').strip() for x in chars]
|
||||||
|
probability = r.group(3)
|
||||||
|
probability = probability if int(probability) > 10 else f'权{probability}'
|
||||||
|
for char in chars:
|
||||||
|
if char.strip():
|
||||||
|
data['char']['up_char'][star][char.strip()] = probability
|
||||||
except TimeoutError:
|
except TimeoutError:
|
||||||
print(f'更新明日方舟UP池信息超时...')
|
logger.warning(f'更新明日方舟UP池信息超时...')
|
||||||
with open(prts_up_char, 'r', encoding='utf8') as f:
|
if prts_up_char.exists():
|
||||||
data = json.load(f)
|
with open(prts_up_char, 'r', encoding='utf8') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f'更新明日方舟未知错误 e:{e}')
|
||||||
|
if prts_up_char.exists():
|
||||||
|
with open(prts_up_char, 'r', encoding='utf8') as f:
|
||||||
|
data = json.load(f)
|
||||||
return check_write(data, prts_up_char)
|
return check_write(data, prts_up_char)
|
||||||
|
|
||||||
|
|
||||||
class GenshinAnnouncement:
|
class GenshinAnnouncement:
|
||||||
|
|
||||||
@staticmethod
|
def __init__(self):
|
||||||
async def get_announcement_text():
|
self.game_name = '原神'
|
||||||
|
|
||||||
|
async def _get_announcement_text(self):
|
||||||
async with aiohttp.ClientSession(headers=headers) as session:
|
async with aiohttp.ClientSession(headers=headers) as session:
|
||||||
async with session.get(genshin_url, timeout=7) as res:
|
async with session.get(genshin_url, timeout=7) as res:
|
||||||
return await res.text()
|
return await res.text()
|
||||||
|
|
||||||
@staticmethod
|
async def update_up_char(self):
|
||||||
async def update_up_char():
|
|
||||||
genshin_up_char.parent.mkdir(exist_ok=True, parents=True)
|
genshin_up_char.parent.mkdir(exist_ok=True, parents=True)
|
||||||
data = {
|
data = {
|
||||||
'char': {'up_char': {'5': {}, '4': {}}, 'title': '', 'time': '', 'pool_img': ''},
|
'char': {'up_char': {'5': {}, '4': {}}, 'title': '', 'time': '', 'pool_img': ''},
|
||||||
'arms': {'up_char': {'5': {}, '4': {}}, 'title': '', 'time': '', 'pool_img': ''}
|
'arms': {'up_char': {'5': {}, '4': {}}, 'title': '', 'time': '', 'pool_img': ''}
|
||||||
}
|
}
|
||||||
text = await GenshinAnnouncement.get_announcement_text()
|
text = await self._get_announcement_text()
|
||||||
soup = BeautifulSoup(text, 'lxml')
|
soup = BeautifulSoup(text, 'lxml')
|
||||||
try:
|
try:
|
||||||
div = soup.find_all('div', {'class': 'row'})[1]
|
div = soup.find_all('div', {'class': 'row'})[1]
|
||||||
@@ -194,25 +186,30 @@ class GenshinAnnouncement:
|
|||||||
for a in trs[3].find('td').find_all('a'):
|
for a in trs[3].find('td').find_all('a'):
|
||||||
char_name = a['title']
|
char_name = a['title']
|
||||||
data[itype]['up_char']['4'][char_name] = "50"
|
data[itype]['up_char']['4'][char_name] = "50"
|
||||||
except TimeoutError as e:
|
except TimeoutError:
|
||||||
logger.warning(f'更新原神UP池信息超时...')
|
logger.warning(f'更新原神UP池信息超时...')
|
||||||
with open(genshin_up_char, 'r', encoding='utf8') as f:
|
if genshin_up_char.exists():
|
||||||
data = json.load(f)
|
with open(genshin_up_char, 'r', encoding='utf8') as f:
|
||||||
|
data = json.load(f)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'更新原神UP失败,疑似UP池已结束, e:{e}')
|
logger.error(f'更新原神UP失败,疑似UP池已结束, e:{e}')
|
||||||
with open(genshin_up_char, 'r', encoding='utf8') as f:
|
if genshin_up_char.exists():
|
||||||
data = json.load(f)
|
with open(genshin_up_char, 'r', encoding='utf8') as f:
|
||||||
data['char']['title'] = ''
|
data = json.load(f)
|
||||||
data['arms']['title'] = ''
|
data['char']['title'] = ''
|
||||||
with open(genshin_up_char, 'w', encoding='utf8') as wf:
|
data['arms']['title'] = ''
|
||||||
json.dump(data, wf, ensure_ascii=False, indent=4)
|
with open(genshin_up_char, 'w', encoding='utf8') as wf:
|
||||||
return data
|
json.dump(data, wf, ensure_ascii=False, indent=4)
|
||||||
return check_write(data, genshin_up_char, 'genshin')
|
return data
|
||||||
|
return check_write(data, genshin_up_char)
|
||||||
|
|
||||||
|
|
||||||
class PrettyAnnouncement:
|
class PrettyAnnouncement:
|
||||||
@staticmethod
|
|
||||||
async def get_announcement_text():
|
def __init__(self):
|
||||||
|
self.game_name = '赛马娘'
|
||||||
|
|
||||||
|
async def _get_announcement_text(self):
|
||||||
async with aiohttp.ClientSession(headers=headers) as session:
|
async with aiohttp.ClientSession(headers=headers) as session:
|
||||||
async with session.get(pretty_url, timeout=7) as res:
|
async with session.get(pretty_url, timeout=7) as res:
|
||||||
soup = BeautifulSoup(await res.text(), 'lxml')
|
soup = BeautifulSoup(await res.text(), 'lxml')
|
||||||
@@ -229,14 +226,13 @@ class PrettyAnnouncement:
|
|||||||
async with session.get(f'https://wiki.biligame.com/{url}', timeout=7) as res:
|
async with session.get(f'https://wiki.biligame.com/{url}', timeout=7) as res:
|
||||||
return await res.text(), title[:-2]
|
return await res.text(), title[:-2]
|
||||||
|
|
||||||
@staticmethod
|
async def update_up_char(self):
|
||||||
async def update_up_char():
|
|
||||||
data = {
|
data = {
|
||||||
'char': {'up_char': {'3': {}, '2': {}, '1': {}}, 'title': '', 'time': '', 'pool_img': ''},
|
'char': {'up_char': {'3': {}, '2': {}, '1': {}}, 'title': '', 'time': '', 'pool_img': ''},
|
||||||
'card': {'up_char': {'3': {}, '2': {}, '1': {}}, 'title': '', 'time': '', 'pool_img': ''}
|
'card': {'up_char': {'3': {}, '2': {}, '1': {}}, 'title': '', 'time': '', 'pool_img': ''}
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
text, title = await PrettyAnnouncement.get_announcement_text()
|
text, title = await self._get_announcement_text()
|
||||||
soup = BeautifulSoup(text, 'lxml')
|
soup = BeautifulSoup(text, 'lxml')
|
||||||
context = soup.find('div', {'class': 'toc-sticky'})
|
context = soup.find('div', {'class': 'toc-sticky'})
|
||||||
if not context:
|
if not context:
|
||||||
@@ -299,26 +295,30 @@ class PrettyAnnouncement:
|
|||||||
with open(pretty_up_char, 'r', encoding='utf8') as f:
|
with open(pretty_up_char, 'r', encoding='utf8') as f:
|
||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f'赛马娘up更新失败 {type(e)}:{e}')
|
logger.error(f'赛马娘up更新未知错误 {type(e)}:{e}')
|
||||||
return check_write(data, pretty_up_char, 'pretty')
|
if pretty_up_char.exists():
|
||||||
|
with open(pretty_up_char, 'r', encoding='utf8') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
return check_write(data, pretty_up_char)
|
||||||
|
|
||||||
|
|
||||||
class GuardianAnnouncement:
|
class GuardianAnnouncement:
|
||||||
|
|
||||||
@staticmethod
|
def __init__(self):
|
||||||
async def get_announcement_text():
|
self.game_name = '坎公骑冠剑'
|
||||||
|
|
||||||
|
async def _get_announcement_text(self):
|
||||||
async with aiohttp.ClientSession(headers=headers) as session:
|
async with aiohttp.ClientSession(headers=headers) as session:
|
||||||
async with session.get(guardian_url, timeout=7) as res:
|
async with session.get(guardian_url, timeout=7) as res:
|
||||||
return await res.text()
|
return await res.text()
|
||||||
|
|
||||||
@staticmethod
|
async def update_up_char(self):
|
||||||
async def update_up_char():
|
|
||||||
data = {
|
data = {
|
||||||
'char': {'up_char': {'3': {}}, 'title': '', 'time': '', 'pool_img': ''},
|
'char': {'up_char': {'3': {}}, 'title': '', 'time': '', 'pool_img': ''},
|
||||||
'arms': {'up_char': {'5': {}}, 'title': '', 'time': '', 'pool_img': ''}
|
'arms': {'up_char': {'5': {}}, 'title': '', 'time': '', 'pool_img': ''}
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
text = await GuardianAnnouncement.get_announcement_text()
|
text = await self._get_announcement_text()
|
||||||
soup = BeautifulSoup(text, 'lxml')
|
soup = BeautifulSoup(text, 'lxml')
|
||||||
context = soup.select('div.col-sm-3:nth-child(3) > div:nth-child(2) > div:nth-child(1) '
|
context = soup.select('div.col-sm-3:nth-child(3) > div:nth-child(2) > div:nth-child(1) '
|
||||||
'> div:nth-child(2) > div:nth-child(3) > font:nth-child(1)')[0]
|
'> div:nth-child(2) > div:nth-child(3) > font:nth-child(1)')[0]
|
||||||
@@ -346,16 +346,17 @@ class GuardianAnnouncement:
|
|||||||
end_idx = index
|
end_idx = index
|
||||||
break
|
break
|
||||||
index += 1
|
index += 1
|
||||||
for x in divs[start_idx+1: end_idx]:
|
for x in divs[start_idx + 1: end_idx]:
|
||||||
name = x.find('p').find_all('a')[-1].text
|
name = x.find('p').find_all('a')[-1].text
|
||||||
data['char']['up_char']['3'][name] = '0'
|
data['char']['up_char']['3'][name] = '0'
|
||||||
for x in divs[end_idx+1:]:
|
for x in divs[end_idx + 1:]:
|
||||||
name = x.find('p').find_all('a')[-1].text
|
name = x.find('p').find_all('a')[-1].text
|
||||||
data['arms']['up_char']['5'][name] = '0'
|
data['arms']['up_char']['5'][name] = '0'
|
||||||
except TimeoutError:
|
except TimeoutError:
|
||||||
print(f'更新坎公骑冠剑UP池信息超时...')
|
logger.warning(f'更新坎公骑冠剑UP池信息超时...')
|
||||||
with open(pretty_up_char, 'r', encoding='utf8') as f:
|
if guardian_up_char.exists():
|
||||||
data = json.load(f)
|
with open(guardian_up_char, 'r', encoding='utf8') as f:
|
||||||
|
data = json.load(f)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'坎公骑冠剑up更新失败 {type(e)}:{e}')
|
logger.error(f'坎公骑冠剑up更新未知错误 {type(e)}:{e}')
|
||||||
return check_write(data, guardian_up_char, 'guardian')
|
return check_write(data, guardian_up_char)
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ async def azur_draw(count: int, pool_name: str):
|
|||||||
cnlist = ['金', '紫', '蓝', '白']
|
cnlist = ['金', '紫', '蓝', '白']
|
||||||
star_list = [0, 0, 0, 0]
|
star_list = [0, 0, 0, 0]
|
||||||
char_list, char_dict, max_star_list, star_list, max_star_index_list = \
|
char_list, char_dict, max_star_list, star_list, max_star_index_list = \
|
||||||
format_card_information(count, star_list, _get_azur_card, pool_name)
|
format_card_information(count, star_list, _get_azur_card, pool_name, guaranteed=False)
|
||||||
rst = init_star_rst(star_list, cnlist, max_star_list, max_star_index_list)
|
rst = init_star_rst(star_list, cnlist, max_star_list, max_star_index_list)
|
||||||
if count > 90:
|
if count > 90:
|
||||||
char_list = set_list(char_list)
|
char_list = set_list(char_list)
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
import os
|
import os
|
||||||
from nonebot.adapters.cqhttp import MessageSegment
|
from nonebot.adapters.cqhttp import MessageSegment, Message
|
||||||
import nonebot
|
import nonebot
|
||||||
import random
|
import random
|
||||||
from configs.path_config import IMAGE_PATH
|
|
||||||
from .update_game_info import update_info
|
from .update_game_info import update_info
|
||||||
from .util import generate_img, init_star_rst, BaseData, set_list, get_star, UpEvent, download_img
|
from .util import generate_img, init_star_rst, BaseData, set_list, get_star, init_up_char
|
||||||
from .config import GENSHIN_FIVE_P, GENSHIN_FOUR_P, GENSHIN_G_FIVE_P, GENSHIN_G_FOUR_P, GENSHIN_THREE_P, I72_ADD, \
|
from .config import GENSHIN_FIVE_P, GENSHIN_FOUR_P, GENSHIN_G_FIVE_P, GENSHIN_G_FOUR_P, GENSHIN_THREE_P, I72_ADD, \
|
||||||
DRAW_PATH, GENSHIN_FLAG
|
DRAW_PATH, GENSHIN_FLAG
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from .init_card_pool import init_game_pool
|
from .init_card_pool import init_game_pool
|
||||||
from .announcement import GenshinAnnouncement
|
from .announcement import GenshinAnnouncement
|
||||||
from services.log import logger
|
|
||||||
from util.init_result import image
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import ujson as json
|
import ujson as json
|
||||||
@@ -20,6 +17,8 @@ except ModuleNotFoundError:
|
|||||||
|
|
||||||
driver: nonebot.Driver = nonebot.get_driver()
|
driver: nonebot.Driver = nonebot.get_driver()
|
||||||
|
|
||||||
|
announcement = GenshinAnnouncement()
|
||||||
|
|
||||||
genshin_five = {}
|
genshin_five = {}
|
||||||
genshin_count = {}
|
genshin_count = {}
|
||||||
genshin_pl_count = {}
|
genshin_pl_count = {}
|
||||||
@@ -85,7 +84,7 @@ async def update_genshin_info():
|
|||||||
'攻击力(MAX)', '副属性(MAX)', '技能'])
|
'攻击力(MAX)', '副属性(MAX)', '技能'])
|
||||||
if code == 200:
|
if code == 200:
|
||||||
ALL_ARMS = init_game_pool('genshin_arms', data, GenshinChar)
|
ALL_ARMS = init_game_pool('genshin_arms', data, GenshinChar)
|
||||||
await _init_up_char()
|
await _genshin_init_up_char()
|
||||||
|
|
||||||
|
|
||||||
async def init_genshin_data():
|
async def init_genshin_data():
|
||||||
@@ -100,7 +99,7 @@ async def init_genshin_data():
|
|||||||
genshin_ARMS_dict = json.load(f)
|
genshin_ARMS_dict = json.load(f)
|
||||||
ALL_CHAR = init_game_pool('genshin', genshin_dict, GenshinChar)
|
ALL_CHAR = init_game_pool('genshin', genshin_dict, GenshinChar)
|
||||||
ALL_ARMS = init_game_pool('genshin_arms', genshin_ARMS_dict, GenshinChar)
|
ALL_ARMS = init_game_pool('genshin_arms', genshin_ARMS_dict, GenshinChar)
|
||||||
await _init_up_char()
|
await _genshin_init_up_char()
|
||||||
|
|
||||||
|
|
||||||
# 抽取卡池
|
# 抽取卡池
|
||||||
@@ -201,36 +200,11 @@ def reset_count(user_id: int):
|
|||||||
|
|
||||||
|
|
||||||
# 获取up和概率
|
# 获取up和概率
|
||||||
async def _init_up_char():
|
async def _genshin_init_up_char():
|
||||||
global _CURRENT_CHAR_POOL_TITLE, _CURRENT_ARMS_POOL_TITLE, UP_CHAR, UP_ARMS, POOL_IMG
|
global _CURRENT_CHAR_POOL_TITLE, _CURRENT_ARMS_POOL_TITLE, UP_CHAR, UP_ARMS, POOL_IMG
|
||||||
UP_CHAR = []
|
_CURRENT_CHAR_POOL_TITLE, _CURRENT_ARMS_POOL_TITLE, POOL_IMG, UP_CHAR, UP_ARMS = await init_up_char(announcement)
|
||||||
UP_ARMS = []
|
|
||||||
up_char_dict = await GenshinAnnouncement.update_up_char()
|
|
||||||
_CURRENT_CHAR_POOL_TITLE = up_char_dict['char']['title']
|
|
||||||
_CURRENT_ARMS_POOL_TITLE = up_char_dict['arms']['title']
|
|
||||||
|
|
||||||
if _CURRENT_CHAR_POOL_TITLE and _CURRENT_ARMS_POOL_TITLE:
|
|
||||||
await download_img(up_char_dict['char']['pool_img'], 'genshin', 'up_char_pool_img')
|
|
||||||
await download_img(up_char_dict['arms']['pool_img'], 'genshin', 'up_arms_pool_img')
|
|
||||||
POOL_IMG = image('up_char_pool_img.png', '/draw_card/genshin/') + \
|
|
||||||
image('up_arms_pool_img.png', '/draw_card/genshin/')
|
|
||||||
else:
|
|
||||||
if os.path.exists(IMAGE_PATH + '/draw_card/genshin/up_char_pool_img.png'):
|
|
||||||
os.remove(IMAGE_PATH + '/draw_card/genshin/up_char_pool_img.png')
|
|
||||||
if os.path.exists(IMAGE_PATH + '/draw_card/genshin/up_arms_pool_img.png'):
|
|
||||||
os.remove(IMAGE_PATH + '/draw_card/genshin/up_arms_pool_img.png')
|
|
||||||
logger.info(f'成功获取原神当前up信息...当前up池: {_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_ARMS_POOL_TITLE}')
|
|
||||||
for key in up_char_dict.keys():
|
|
||||||
for star in up_char_dict[key]['up_char'].keys():
|
|
||||||
up_char_lst = []
|
|
||||||
for char in up_char_dict[key]['up_char'][star].keys():
|
|
||||||
up_char_lst.append(char)
|
|
||||||
if key == 'char':
|
|
||||||
UP_CHAR.append(UpEvent(star=int(star), operators=up_char_lst, zoom=0))
|
|
||||||
else:
|
|
||||||
UP_ARMS.append(UpEvent(star=int(star), operators=up_char_lst, zoom=0))
|
|
||||||
|
|
||||||
|
|
||||||
async def reload_genshin_pool():
|
async def reload_genshin_pool():
|
||||||
await _init_up_char()
|
await _genshin_init_up_char()
|
||||||
return f'当前UP池子:{_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_ARMS_POOL_TITLE} {POOL_IMG}'
|
return Message(f'当前UP池子:{_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_ARMS_POOL_TITLE} {POOL_IMG}')
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import nonebot
|
import nonebot
|
||||||
from nonebot.adapters.cqhttp import MessageSegment
|
from nonebot.adapters.cqhttp import MessageSegment, Message
|
||||||
from .update_game_info import update_info
|
from .update_game_info import update_info
|
||||||
from services.log import logger
|
|
||||||
from .announcement import GuardianAnnouncement
|
from .announcement import GuardianAnnouncement
|
||||||
from .util import init_star_rst, generate_img, max_card, BaseData,\
|
from .util import init_star_rst, generate_img, max_card, BaseData,\
|
||||||
set_list, get_star, format_card_information, UpEvent
|
set_list, get_star, format_card_information, init_up_char
|
||||||
import random
|
import random
|
||||||
from .config import DRAW_PATH, GUARDIAN_ONE_CHAR_P, GUARDIAN_TWO_CHAR_P, GUARDIAN_THREE_CHAR_P, \
|
from .config import DRAW_PATH, GUARDIAN_ONE_CHAR_P, GUARDIAN_TWO_CHAR_P, GUARDIAN_THREE_CHAR_P, \
|
||||||
GUARDIAN_THREE_CHAR_UP_P, GUARDIAN_TWO_ARMS_P, GUARDIAN_FIVE_ARMS_P, GUARDIAN_THREE_CHAR_OTHER_P, \
|
GUARDIAN_THREE_CHAR_UP_P, GUARDIAN_TWO_ARMS_P, GUARDIAN_FIVE_ARMS_P, GUARDIAN_THREE_CHAR_OTHER_P, \
|
||||||
@@ -21,6 +20,8 @@ except ModuleNotFoundError:
|
|||||||
|
|
||||||
driver: nonebot.Driver = nonebot.get_driver()
|
driver: nonebot.Driver = nonebot.get_driver()
|
||||||
|
|
||||||
|
announcement = GuardianAnnouncement()
|
||||||
|
|
||||||
ALL_CHAR = []
|
ALL_CHAR = []
|
||||||
ALL_ARMS = []
|
ALL_ARMS = []
|
||||||
|
|
||||||
@@ -92,6 +93,7 @@ async def update_guardian_info():
|
|||||||
if code_1 == 200 and code_2 == 200:
|
if code_1 == 200 and code_2 == 200:
|
||||||
data.update(tmp)
|
data.update(tmp)
|
||||||
ALL_ARMS = init_game_pool('guardian_arms', data, GuardianArms)
|
ALL_ARMS = init_game_pool('guardian_arms', data, GuardianArms)
|
||||||
|
await _guardian_init_up_char()
|
||||||
|
|
||||||
|
|
||||||
async def init_guardian_data():
|
async def init_guardian_data():
|
||||||
@@ -106,21 +108,27 @@ async def init_guardian_data():
|
|||||||
guardian_arms_dict = json.load(f)
|
guardian_arms_dict = json.load(f)
|
||||||
ALL_CHAR = init_game_pool('guardian', guardian_char_dict, GuardianChar)
|
ALL_CHAR = init_game_pool('guardian', guardian_char_dict, GuardianChar)
|
||||||
ALL_ARMS = init_game_pool('guardian_arms', guardian_arms_dict, GuardianArms)
|
ALL_ARMS = init_game_pool('guardian_arms', guardian_arms_dict, GuardianArms)
|
||||||
await _init_up_char()
|
await _guardian_init_up_char()
|
||||||
|
|
||||||
|
|
||||||
# 抽取卡池
|
# 抽取卡池
|
||||||
def _get_guardian_card(pool_name: str):
|
def _get_guardian_card(pool_name: str = '', mode: int = 1):
|
||||||
global ALL_ARMS, ALL_CHAR, UP_ARMS, UP_CHAR, _CURRENT_ARMS_POOL_TITLE, _CURRENT_CHAR_POOL_TITLE
|
global ALL_ARMS, ALL_CHAR, UP_ARMS, UP_CHAR, _CURRENT_ARMS_POOL_TITLE, _CURRENT_CHAR_POOL_TITLE
|
||||||
if pool_name == 'char':
|
if pool_name == 'char':
|
||||||
star = get_star([3, 2, 1], [GUARDIAN_THREE_CHAR_P, GUARDIAN_TWO_CHAR_P, GUARDIAN_ONE_CHAR_P])
|
if mode == 1:
|
||||||
|
star = get_star([3, 2, 1], [GUARDIAN_THREE_CHAR_P, GUARDIAN_TWO_CHAR_P, GUARDIAN_ONE_CHAR_P])
|
||||||
|
else:
|
||||||
|
star = get_star([3, 2], [GUARDIAN_THREE_CHAR_P, GUARDIAN_TWO_CHAR_P])
|
||||||
up_lst = UP_CHAR
|
up_lst = UP_CHAR
|
||||||
flag = _CURRENT_CHAR_POOL_TITLE
|
flag = _CURRENT_CHAR_POOL_TITLE
|
||||||
_max_star = 3
|
_max_star = 3
|
||||||
all_data = ALL_CHAR
|
all_data = ALL_CHAR
|
||||||
else:
|
else:
|
||||||
star = get_star([5, 4, 3, 2], [GUARDIAN_FIVE_ARMS_P, GUARDIAN_FOUR_ARMS_P,
|
if mode == 1:
|
||||||
GUARDIAN_THREE_ARMS_P, GUARDIAN_TWO_ARMS_P])
|
star = get_star([5, 4, 3, 2], [GUARDIAN_FIVE_ARMS_P, GUARDIAN_FOUR_ARMS_P,
|
||||||
|
GUARDIAN_THREE_ARMS_P, GUARDIAN_TWO_ARMS_P])
|
||||||
|
else:
|
||||||
|
star = get_star([5, 4], [GUARDIAN_FIVE_ARMS_P, GUARDIAN_FOUR_ARMS_P])
|
||||||
up_lst = UP_ARMS
|
up_lst = UP_ARMS
|
||||||
flag = _CURRENT_ARMS_POOL_TITLE
|
flag = _CURRENT_ARMS_POOL_TITLE
|
||||||
_max_star = 5
|
_max_star = 5
|
||||||
@@ -144,28 +152,11 @@ def _get_guardian_card(pool_name: str):
|
|||||||
|
|
||||||
|
|
||||||
# 获取up和概率
|
# 获取up和概率
|
||||||
async def _init_up_char():
|
async def _guardian_init_up_char():
|
||||||
global _CURRENT_CHAR_POOL_TITLE, _CURRENT_ARMS_POOL_TITLE, UP_CHAR, UP_ARMS, POOL_IMG
|
global _CURRENT_CHAR_POOL_TITLE, _CURRENT_ARMS_POOL_TITLE, UP_CHAR, UP_ARMS, POOL_IMG
|
||||||
UP_CHAR = []
|
_CURRENT_CHAR_POOL_TITLE, _CURRENT_ARMS_POOL_TITLE, POOL_IMG, UP_CHAR, UP_ARMS = await init_up_char(announcement)
|
||||||
UP_ARMS = []
|
|
||||||
up_char_dict = await GuardianAnnouncement.update_up_char()
|
|
||||||
_CURRENT_CHAR_POOL_TITLE = up_char_dict['char']['title']
|
|
||||||
_CURRENT_ARMS_POOL_TITLE = up_char_dict['arms']['title']
|
|
||||||
if _CURRENT_CHAR_POOL_TITLE and _CURRENT_ARMS_POOL_TITLE:
|
|
||||||
POOL_IMG = MessageSegment.image(up_char_dict['char']['pool_img']) + \
|
|
||||||
MessageSegment.image(up_char_dict['arms']['pool_img'])
|
|
||||||
logger.info(f'成功获取坎公骑冠剑当前up信息...当前up池: {_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_ARMS_POOL_TITLE}')
|
|
||||||
for key in up_char_dict.keys():
|
|
||||||
for star in up_char_dict[key]['up_char'].keys():
|
|
||||||
up_char_lst = []
|
|
||||||
for char in up_char_dict[key]['up_char'][star].keys():
|
|
||||||
up_char_lst.append(char)
|
|
||||||
if key == 'char':
|
|
||||||
UP_CHAR.append(UpEvent(star=int(star), operators=up_char_lst, zoom=0))
|
|
||||||
else:
|
|
||||||
UP_ARMS.append(UpEvent(star=int(star), operators=up_char_lst, zoom=0))
|
|
||||||
|
|
||||||
|
|
||||||
async def reload_guardian_pool():
|
async def reload_guardian_pool():
|
||||||
await _init_up_char()
|
await _guardian_init_up_char()
|
||||||
return f'当前UP池子:{_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_ARMS_POOL_TITLE} {POOL_IMG}'
|
return Message(f'当前UP池子:{_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_ARMS_POOL_TITLE}')
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
import os
|
|
||||||
import nonebot
|
import nonebot
|
||||||
from .update_game_info import update_info
|
from .update_game_info import update_info
|
||||||
from .announcement import PrettyAnnouncement
|
from .announcement import PrettyAnnouncement
|
||||||
from .util import download_img, init_star_rst, generate_img, max_card, BaseData, \
|
from .util import init_star_rst, generate_img, max_card, BaseData, \
|
||||||
set_list, get_star, format_card_information, UpEvent
|
set_list, get_star, format_card_information, init_up_char
|
||||||
import random
|
import random
|
||||||
from .config import PRETTY_THREE_P, PRETTY_TWO_P, DRAW_PATH, PRETTY_ONE_P, PRETTY_FLAG
|
from .config import PRETTY_THREE_P, PRETTY_TWO_P, DRAW_PATH, PRETTY_ONE_P, PRETTY_FLAG
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from .init_card_pool import init_game_pool
|
from .init_card_pool import init_game_pool
|
||||||
from util.init_result import image
|
from nonebot.adapters.cqhttp import MessageSegment, Message
|
||||||
from configs.path_config import IMAGE_PATH
|
|
||||||
from services.log import logger
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import ujson as json
|
import ujson as json
|
||||||
@@ -19,6 +17,8 @@ except ModuleNotFoundError:
|
|||||||
|
|
||||||
driver: nonebot.Driver = nonebot.get_driver()
|
driver: nonebot.Driver = nonebot.get_driver()
|
||||||
|
|
||||||
|
announcement = PrettyAnnouncement()
|
||||||
|
|
||||||
ALL_CHAR = []
|
ALL_CHAR = []
|
||||||
ALL_CARD = []
|
ALL_CARD = []
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ async def pretty_draw(count: int, pool_name):
|
|||||||
rst = init_star_rst(star_list, cnlist, three_list, three_olist, up_list)
|
rst = init_star_rst(star_list, cnlist, three_list, three_olist, up_list)
|
||||||
if count > 90:
|
if count > 90:
|
||||||
obj_list = set_list(obj_list)
|
obj_list = set_list(obj_list)
|
||||||
return pool_info + image(b64=await generate_img(obj_list, 'pretty', star_list)) \
|
return pool_info + MessageSegment.image("base64://" + await generate_img(obj_list, 'pretty', star_list)) \
|
||||||
+ '\n' + rst[:-1] + '\n' + max_card(obj_dict)
|
+ '\n' + rst[:-1] + '\n' + max_card(obj_dict)
|
||||||
|
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ async def update_pretty_info():
|
|||||||
data, code = await update_info(url, 'pretty_card')
|
data, code = await update_info(url, 'pretty_card')
|
||||||
if code == 200:
|
if code == 200:
|
||||||
ALL_CARD = init_game_pool('pretty_card', data, PrettyChar)
|
ALL_CARD = init_game_pool('pretty_card', data, PrettyChar)
|
||||||
await _init_up_char()
|
await _pretty_init_up_char()
|
||||||
|
|
||||||
|
|
||||||
async def init_pretty_data():
|
async def init_pretty_data():
|
||||||
@@ -102,13 +102,16 @@ async def init_pretty_data():
|
|||||||
pretty_card_dict = json.load(f)
|
pretty_card_dict = json.load(f)
|
||||||
ALL_CHAR = init_game_pool('pretty', pretty_char_dict, PrettyChar)
|
ALL_CHAR = init_game_pool('pretty', pretty_char_dict, PrettyChar)
|
||||||
ALL_CARD = init_game_pool('pretty_card', pretty_card_dict, PrettyChar)
|
ALL_CARD = init_game_pool('pretty_card', pretty_card_dict, PrettyChar)
|
||||||
await _init_up_char()
|
await _pretty_init_up_char()
|
||||||
|
|
||||||
|
|
||||||
# 抽取卡池
|
# 抽取卡池
|
||||||
def _get_pretty_card(pool_name: str):
|
def _get_pretty_card(pool_name: str, mode: int = 1):
|
||||||
global ALL_CHAR, ALL_CARD, _CURRENT_CHAR_POOL_TITLE, _CURRENT_CARD_POOL_TITLE
|
global ALL_CHAR, ALL_CARD, _CURRENT_CHAR_POOL_TITLE, _CURRENT_CARD_POOL_TITLE
|
||||||
star = get_star([3, 2, 1], [PRETTY_THREE_P, PRETTY_TWO_P, PRETTY_ONE_P])
|
if mode == 1:
|
||||||
|
star = get_star([3, 2, 1], [PRETTY_THREE_P, PRETTY_TWO_P, PRETTY_ONE_P])
|
||||||
|
else:
|
||||||
|
star = get_star([3, 2], [PRETTY_THREE_P, PRETTY_TWO_P])
|
||||||
if pool_name == 'card':
|
if pool_name == 'card':
|
||||||
title = _CURRENT_CARD_POOL_TITLE
|
title = _CURRENT_CARD_POOL_TITLE
|
||||||
up_data = UP_CARD
|
up_data = UP_CARD
|
||||||
@@ -126,6 +129,7 @@ def _get_pretty_card(pool_name: str):
|
|||||||
acquire_operator = random.choice(all_up_star)
|
acquire_operator = random.choice(all_up_star)
|
||||||
if pool_name == 'char':
|
if pool_name == 'char':
|
||||||
acquire_operator = acquire_operator.split(']')[1]
|
acquire_operator = acquire_operator.split(']')[1]
|
||||||
|
print(acquire_operator)
|
||||||
acquire_operator = [x for x in data if x.name == acquire_operator][0]
|
acquire_operator = [x for x in data if x.name == acquire_operator][0]
|
||||||
else:
|
else:
|
||||||
acquire_operator = random.choice([x for x in data if x.star == star and not x.limited])
|
acquire_operator = random.choice([x for x in data if x.star == star and not x.limited])
|
||||||
@@ -135,39 +139,13 @@ def _get_pretty_card(pool_name: str):
|
|||||||
|
|
||||||
|
|
||||||
# 获取up和概率
|
# 获取up和概率
|
||||||
async def _init_up_char():
|
async def _pretty_init_up_char():
|
||||||
global _CURRENT_CHAR_POOL_TITLE, _CURRENT_CARD_POOL_TITLE, UP_CHAR, UP_CARD, POOL_IMG
|
global _CURRENT_CHAR_POOL_TITLE, _CURRENT_CARD_POOL_TITLE, UP_CHAR, UP_CARD, POOL_IMG
|
||||||
UP_CHAR = []
|
_CURRENT_CHAR_POOL_TITLE, _CURRENT_CARD_POOL_TITLE, POOL_IMG, UP_CHAR, UP_CARD = await init_up_char(announcement)
|
||||||
UP_CARD = []
|
|
||||||
up_char_dict = await PrettyAnnouncement.update_up_char()
|
|
||||||
_CURRENT_CHAR_POOL_TITLE = up_char_dict['char']['title']
|
|
||||||
_CURRENT_CARD_POOL_TITLE = up_char_dict['card']['title']
|
|
||||||
if _CURRENT_CHAR_POOL_TITLE and _CURRENT_CARD_POOL_TITLE:
|
|
||||||
await download_img(up_char_dict['char']['pool_img'], 'pretty', 'up_char_pool_img')
|
|
||||||
await download_img(up_char_dict['card']['pool_img'], 'pretty', 'up_card_pool_img')
|
|
||||||
POOL_IMG = image('up_char_pool_img.png', '/draw_card/pretty/') + \
|
|
||||||
image('up_card_pool_img.png', '/draw_card/pretty/')
|
|
||||||
else:
|
|
||||||
if os.path.exists(IMAGE_PATH + '/draw_card/genshin/up_char_pool_img.png'):
|
|
||||||
os.remove(IMAGE_PATH + '/draw_card/pretty/up_char_pool_img.png')
|
|
||||||
if os.path.exists(IMAGE_PATH + '/draw_card/genshin/up_arms_pool_img.png'):
|
|
||||||
os.remove(IMAGE_PATH + '/draw_card/pretty/up_card_pool_img.png')
|
|
||||||
logger.info(f'成功获取赛马娘当前up信息...当前up池: {_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_CARD_POOL_TITLE}')
|
|
||||||
for key in up_char_dict.keys():
|
|
||||||
for star in up_char_dict[key]['up_char'].keys():
|
|
||||||
up_lst = []
|
|
||||||
for char in up_char_dict[key]['up_char'][star].keys():
|
|
||||||
up_lst.append(char)
|
|
||||||
if key == 'char':
|
|
||||||
if up_lst:
|
|
||||||
UP_CHAR.append(UpEvent(star=int(star), operators=up_lst, zoom=0))
|
|
||||||
else:
|
|
||||||
if up_lst:
|
|
||||||
UP_CARD.append(UpEvent(star=int(star), operators=up_lst, zoom=0))
|
|
||||||
|
|
||||||
|
|
||||||
async def reload_pretty_pool():
|
async def reload_pretty_pool():
|
||||||
await _init_up_char()
|
await _pretty_init_up_char()
|
||||||
return f'当前UP池子:{_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_CARD_POOL_TITLE} {POOL_IMG}'
|
return Message(f'当前UP池子:{_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_CARD_POOL_TITLE} {POOL_IMG}')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
from nonebot.adapters.cqhttp import MessageSegment
|
from nonebot.adapters.cqhttp import MessageSegment, Message
|
||||||
import nonebot
|
import nonebot
|
||||||
import random
|
import random
|
||||||
from .config import PRTS_FIVE_P, PRTS_FOUR_P, PRTS_SIX_P, PRTS_THREE_P, DRAW_PATH, PRTS_FLAG
|
from .config import PRTS_FIVE_P, PRTS_FOUR_P, PRTS_SIX_P, PRTS_THREE_P, DRAW_PATH, PRTS_FLAG
|
||||||
@@ -17,6 +17,8 @@ except ModuleNotFoundError:
|
|||||||
|
|
||||||
driver: nonebot.Driver = nonebot.get_driver()
|
driver: nonebot.Driver = nonebot.get_driver()
|
||||||
|
|
||||||
|
announcement = PrtsAnnouncement()
|
||||||
|
|
||||||
up_char_file = Path() / "data" / "draw_card" / "draw_card_up" / "prts_up_char.json"
|
up_char_file = Path() / "data" / "draw_card" / "draw_card_up" / "prts_up_char.json"
|
||||||
|
|
||||||
prts_dict = {}
|
prts_dict = {}
|
||||||
@@ -38,15 +40,22 @@ async def prts_draw(count: int = 300):
|
|||||||
star_list = [0, 0, 0, 0]
|
star_list = [0, 0, 0, 0]
|
||||||
operator_list, operator_dict, six_list, star_list, six_index_list = format_card_information(count, star_list)
|
operator_list, operator_dict, six_list, star_list, six_index_list = format_card_information(count, star_list)
|
||||||
up_list = []
|
up_list = []
|
||||||
|
tmp = ''
|
||||||
if _CURRENT_POOL_TITLE:
|
if _CURRENT_POOL_TITLE:
|
||||||
for x in UP_OPERATOR:
|
for x in UP_OPERATOR:
|
||||||
for operator in x.operators:
|
for operator in x.operators:
|
||||||
up_list.append(operator)
|
up_list.append(operator)
|
||||||
|
if x.star == 6:
|
||||||
|
tmp += f'六星UP:{" ".join(x.operators)} \n'
|
||||||
|
elif x.star == 5:
|
||||||
|
tmp += f'五星UP:{" ".join(x.operators)} \n'
|
||||||
|
elif x.star == 4:
|
||||||
|
tmp += f'四星UP:{" ".join(x.operators)}'
|
||||||
rst = init_star_rst(star_list, cnlist, six_list, six_index_list, up_list)
|
rst = init_star_rst(star_list, cnlist, six_list, six_index_list, up_list)
|
||||||
if count > 90:
|
if count > 90:
|
||||||
operator_list = set_list(operator_list)
|
operator_list = set_list(operator_list)
|
||||||
pool_info = "当前up池: " if _CURRENT_POOL_TITLE else ""
|
pool_info = f"当前up池: {_CURRENT_POOL_TITLE}\n{tmp}" if _CURRENT_POOL_TITLE else ""
|
||||||
return pool_info + _CURRENT_POOL_TITLE + MessageSegment.image(
|
return pool_info + MessageSegment.image(
|
||||||
"base64://" + await generate_img(operator_list, 'prts', star_list)) \
|
"base64://" + await generate_img(operator_list, 'prts', star_list)) \
|
||||||
+ '\n' + rst[:-1] + '\n' + max_card(operator_dict)
|
+ '\n' + rst[:-1] + '\n' + max_card(operator_dict)
|
||||||
|
|
||||||
@@ -137,11 +146,11 @@ def format_card_information(count: int, star_list: list):
|
|||||||
async def _init_up_char():
|
async def _init_up_char():
|
||||||
global _CURRENT_POOL_TITLE, POOL_IMG, UP_OPERATOR
|
global _CURRENT_POOL_TITLE, POOL_IMG, UP_OPERATOR
|
||||||
UP_OPERATOR = []
|
UP_OPERATOR = []
|
||||||
up_char_dict = await PrtsAnnouncement.update_up_char()
|
up_char_dict = await announcement.update_up_char()
|
||||||
_CURRENT_POOL_TITLE = up_char_dict['title']
|
_CURRENT_POOL_TITLE = up_char_dict['char']['title']
|
||||||
if _CURRENT_POOL_TITLE:
|
if _CURRENT_POOL_TITLE:
|
||||||
POOL_IMG = MessageSegment.image(up_char_dict['pool_img'])
|
POOL_IMG = MessageSegment.image(up_char_dict['char']['pool_img'])
|
||||||
up_char_dict = up_char_dict['up_char']
|
up_char_dict = up_char_dict['char']['up_char']
|
||||||
logger.info(f'成功获取明日方舟当前up信息...当前up池: {_CURRENT_POOL_TITLE}')
|
logger.info(f'成功获取明日方舟当前up信息...当前up池: {_CURRENT_POOL_TITLE}')
|
||||||
average_dict = {'6': {}, '5': {}, '4': {}}
|
average_dict = {'6': {}, '5': {}, '4': {}}
|
||||||
for star in up_char_dict.keys():
|
for star in up_char_dict.keys():
|
||||||
@@ -161,4 +170,4 @@ async def _init_up_char():
|
|||||||
|
|
||||||
async def reload_prts_pool():
|
async def reload_prts_pool():
|
||||||
await _init_up_char()
|
await _init_up_char()
|
||||||
return f'当前UP池:{_CURRENT_POOL_TITLE} {POOL_IMG}'
|
return Message(f'当前UP池:{_CURRENT_POOL_TITLE} {POOL_IMG}')
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import aiohttp
|
|||||||
import aiofiles
|
import aiofiles
|
||||||
from asyncio.exceptions import TimeoutError
|
from asyncio.exceptions import TimeoutError
|
||||||
from aiohttp.client_exceptions import InvalidURL
|
from aiohttp.client_exceptions import InvalidURL
|
||||||
|
from nonebot.adapters.cqhttp import MessageSegment
|
||||||
from typing import List, Union, Set
|
from typing import List, Union, Set
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from .config import path_dict
|
from .config import path_dict
|
||||||
@@ -218,21 +219,76 @@ def get_star(star_lst: List[int], probability_lst: List[float]) -> int:
|
|||||||
return star_lst[i]
|
return star_lst[i]
|
||||||
|
|
||||||
|
|
||||||
|
# 获取up和概率
|
||||||
|
async def init_up_char(announcement):
|
||||||
|
UP_CHAR = []
|
||||||
|
UP_ARMS = []
|
||||||
|
tmp = ''
|
||||||
|
up_char_dict = await announcement.update_up_char()
|
||||||
|
for x in list(up_char_dict.keys()):
|
||||||
|
tmp += up_char_dict[x]['title'] + '[\n]'
|
||||||
|
tmp = tmp.split('[\n]')
|
||||||
|
_CURRENT_CHAR_POOL_TITLE = tmp[0]
|
||||||
|
if len(up_char_dict) > 1:
|
||||||
|
_CURRENT_ARMS_POOL_TITLE = tmp[1]
|
||||||
|
else:
|
||||||
|
_CURRENT_ARMS_POOL_TITLE = ''
|
||||||
|
POOL_IMG = ''
|
||||||
|
x = [x for x in list(up_char_dict.keys())]
|
||||||
|
if _CURRENT_CHAR_POOL_TITLE:
|
||||||
|
POOL_IMG += MessageSegment.image(up_char_dict[x[0]]['pool_img'])
|
||||||
|
try:
|
||||||
|
if _CURRENT_ARMS_POOL_TITLE:
|
||||||
|
POOL_IMG += MessageSegment.image(up_char_dict[x[1]]['pool_img'])
|
||||||
|
except (IndexError, KeyError):
|
||||||
|
pass
|
||||||
|
logger.info(f'成功获取{announcement.game_name}当前up信息...当前up池: {_CURRENT_CHAR_POOL_TITLE} & {_CURRENT_ARMS_POOL_TITLE}')
|
||||||
|
for key in up_char_dict.keys():
|
||||||
|
for star in up_char_dict[key]['up_char'].keys():
|
||||||
|
up_char_lst = []
|
||||||
|
for char in up_char_dict[key]['up_char'][star].keys():
|
||||||
|
up_char_lst.append(char)
|
||||||
|
if up_char_lst:
|
||||||
|
if key == 'char':
|
||||||
|
UP_CHAR.append(UpEvent(star=int(star), operators=up_char_lst, zoom=0))
|
||||||
|
else:
|
||||||
|
UP_ARMS.append(UpEvent(star=int(star), operators=up_char_lst, zoom=0))
|
||||||
|
return _CURRENT_CHAR_POOL_TITLE, _CURRENT_ARMS_POOL_TITLE, POOL_IMG, UP_CHAR, UP_ARMS
|
||||||
|
|
||||||
|
|
||||||
# 整理数据
|
# 整理数据
|
||||||
def format_card_information(count: int, star_list: List[int], func, pool_name: str = ''):
|
def format_card_information(count: int, star_list: List[int], func, pool_name: str = '', guaranteed: bool = True):
|
||||||
max_star_lst = [] # 获取的最高星级角色列表
|
max_star_lst = [] # 获取的最高星级角色列表
|
||||||
max_index_lst = [] # 获取最高星级角色的次数
|
max_index_lst = [] # 获取最高星级角色的次数
|
||||||
obj_list = [] # 获取所有角色
|
obj_list = [] # 获取所有角色
|
||||||
obj_dict = {} # 获取角色次数字典
|
obj_dict = {} # 获取角色次数字典
|
||||||
|
_count = -1
|
||||||
|
if guaranteed:
|
||||||
|
_count = 0
|
||||||
for i in range(count):
|
for i in range(count):
|
||||||
|
if guaranteed:
|
||||||
|
_count += 1
|
||||||
if pool_name:
|
if pool_name:
|
||||||
obj, code = func(pool_name)
|
if _count == 10:
|
||||||
|
obj, code = func(pool_name, 2)
|
||||||
|
_count = 0
|
||||||
|
else:
|
||||||
|
obj, code = func(pool_name)
|
||||||
else:
|
else:
|
||||||
obj, code = func()
|
if _count == 10:
|
||||||
|
obj, code = func(mode=2)
|
||||||
|
_count = 0
|
||||||
|
else:
|
||||||
|
obj, code = func()
|
||||||
star_list[code] += 1
|
star_list[code] += 1
|
||||||
if code == 0:
|
if code == 0:
|
||||||
max_star_lst.append(obj.name)
|
max_star_lst.append(obj.name)
|
||||||
max_index_lst.append(i)
|
max_index_lst.append(i)
|
||||||
|
if guaranteed:
|
||||||
|
_count = 0
|
||||||
|
if code == 1:
|
||||||
|
if guaranteed:
|
||||||
|
_count = 0
|
||||||
try:
|
try:
|
||||||
obj_dict[obj.name] += 1
|
obj_dict[obj.name] += 1
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ utility_help = {
|
|||||||
'epic': 'epic速速白嫖 --> 指令:epic',
|
'epic': 'epic速速白嫖 --> 指令:epic',
|
||||||
'pixiv_r': 'P站排行榜直接冲 --> 指令:p站排行(可含参数)',
|
'pixiv_r': 'P站排行榜直接冲 --> 指令:p站排行(可含参数)',
|
||||||
'pixiv_s': 'P站的图随便搜搜 --> 指令:搜图(可含参数)',
|
'pixiv_s': 'P站的图随便搜搜 --> 指令:搜图(可含参数)',
|
||||||
'translate': '出国旅游助手(狗头) --> 指令:英翻/翻英/日翻/翻日/韩翻/翻韩'
|
'translate': '出国旅游助手(狗头) --> 指令:英翻/翻英/日翻/翻日/韩翻/翻韩',
|
||||||
|
'cover': '快捷的b站封面获取方式 --> 指令:b封面 [连接/av/bv/cv/直播id]'
|
||||||
}
|
}
|
||||||
# 娱乐
|
# 娱乐
|
||||||
entertainment_help = {
|
entertainment_help = {
|
||||||
@@ -45,7 +46,9 @@ entertainment_help = {
|
|||||||
'qiu_qiu_translation': '这家伙到底在说什么? --> 指令:丘丘翻译/丘丘一下/丘丘语翻译',
|
'qiu_qiu_translation': '这家伙到底在说什么? --> 指令:丘丘翻译/丘丘一下/丘丘语翻译',
|
||||||
'query_resource_points': '地图资源速速查看 --> 指令:原神资源查询xx/原神资源列表/哪里有xx/xx在哪(xx=资源名称)',
|
'query_resource_points': '地图资源速速查看 --> 指令:原神资源查询xx/原神资源列表/哪里有xx/xx在哪(xx=资源名称)',
|
||||||
'russian': '紧张刺激的俄罗斯轮盘 --> 指令:俄罗斯轮盘帮助',
|
'russian': '紧张刺激的俄罗斯轮盘 --> 指令:俄罗斯轮盘帮助',
|
||||||
'gold_redbag': '运气项目又来啦! --> 指令:塞红包/ 抢红包指令: 开/抢/戳一戳真寻/ 退回:退回未抢完的红包'
|
'gold_redbag': '运气项目又来啦! --> 指令:塞红包/ 抢红包指令: 开/抢/戳一戳真寻/ 退回:退回未抢完的红包',
|
||||||
|
'poetry': '突然文艺的真寻是否搞错了什么 --> 指令:念诗/来首诗/念首诗',
|
||||||
|
'comments_163': '生了个人,我很抱歉 --> 指令:到点了/12点了/网易云热评/网易云评论',
|
||||||
}
|
}
|
||||||
# 其他
|
# 其他
|
||||||
other_help = [
|
other_help = [
|
||||||
|
|||||||
@@ -108,5 +108,45 @@ async def _(matcher: Matcher, bot: Bot, event: MessageEvent, state: T_State):
|
|||||||
raise IgnoredException('有命令就别说话了')
|
raise IgnoredException('有命令就别说话了')
|
||||||
|
|
||||||
|
|
||||||
|
# _ulmt = UserExistLimiter()
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# # 是否有命令正在处理
|
||||||
|
# @run_preprocessor
|
||||||
|
# async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
|
||||||
|
# if matcher.module == 'admin_bot_manage':
|
||||||
|
# return
|
||||||
|
# if event.user_id == bot.self_id:
|
||||||
|
# raise IgnoredException('自己和自己聊天?')
|
||||||
|
# print(state["_prefix"]["raw_command"])
|
||||||
|
# print(matcher.type)
|
||||||
|
# if (event.is_tome() and (state["_prefix"]["raw_command"] and matcher.type == 'message')
|
||||||
|
# and matcher.module == 'ai') or not static_group_dict[event.group_id]['总开关']:
|
||||||
|
# raise IgnoredException('Ai给爷爬?')
|
||||||
|
# # if matcher.module in ['ai']:
|
||||||
|
# # raise IgnoredException('Ai给爷爬?')
|
||||||
|
# if matcher.type == 'message' and matcher.priority not in [1, 8, 9]:
|
||||||
|
# if _ulmt.check(event.user_id):
|
||||||
|
# if event.message_type == 'group':
|
||||||
|
# await bot.send_group_msg(group_id=event.group_id, message=at(event.user_id) + '您有命令正在处理,等一哈!')
|
||||||
|
# else:
|
||||||
|
# await bot.send_private_msg(user_id=event.user_id, message='您有命令正在处理,等一哈!')
|
||||||
|
# raise IgnoredException('有命令正在处理')
|
||||||
|
# _ulmt.set_True(event.user_id)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# # 结束正在处理的命令
|
||||||
|
# @run_postprocessor
|
||||||
|
# async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
|
||||||
|
# _ulmt.set_False(event.user_id)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# # 结束正在处理的命令
|
||||||
|
# @event_preprocessor
|
||||||
|
# async def _(bot: Bot, event: Event, state: T_State):
|
||||||
|
# try:
|
||||||
|
# _ulmt.set_False(event.user_id)
|
||||||
|
# except AttributeError:
|
||||||
|
# pass
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ async def _(bot: Bot, event: Event, state: T_State):
|
|||||||
page = state['page']
|
page = state['page']
|
||||||
print(keyword, page)
|
print(keyword, page)
|
||||||
await UserCount.add_count(event.user_id, 'reimu')
|
await UserCount.add_count(event.user_id, 'reimu')
|
||||||
await reimu.send('已经帮你关好车门了', at_sender=True)
|
await reimu.send('已经帮你关好车门了,请等待发车(不加真寻好友的话是欣赏不到旅途的风景的)', at_sender=True)
|
||||||
reimu_report = await from_reimu_get_info(keyword, page)
|
reimu_report = await from_reimu_get_info(keyword, page)
|
||||||
if reimu_report:
|
if reimu_report:
|
||||||
await reimu.send(reimu_report)
|
await reimu.send(reimu_report)
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
|
|||||||
f"USER {event.user_id} GROUP {event.group_id} 发送色图 {index}.jpg 成功")
|
f"USER {event.user_id} GROUP {event.group_id} 发送色图 {index}.jpg 成功")
|
||||||
else:
|
else:
|
||||||
msg = img_id
|
msg = img_id
|
||||||
if list(bot.config.nickname)[0].find(msg) != -1:
|
if msg.find('真寻') != -1:
|
||||||
_ulmt.set_False(event.user_id)
|
_ulmt.set_False(event.user_id)
|
||||||
await setu.finish('咳咳咳,虽然我很可爱,但是我木有自己的色图~~~有的话记得发我一份呀')
|
await setu.finish('咳咳咳,虽然我很可爱,但是我木有自己的色图~~~有的话记得发我一份呀')
|
||||||
keyword, r18, num = await check_r18_and_keyword(msg, event.user_id)
|
keyword, r18, num = await check_r18_and_keyword(msg, event.user_id)
|
||||||
@@ -100,13 +100,19 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
|
|||||||
for i in range(num):
|
for i in range(num):
|
||||||
try:
|
try:
|
||||||
setu_img, index = await search_online_setu(urls[i])
|
setu_img, index = await search_online_setu(urls[i])
|
||||||
await setu.send(text_list[i] + setu_img)
|
if index == -1:
|
||||||
|
setu_img, index = get_setu('', setu_data, keyword)
|
||||||
|
await setu.send(setu_img)
|
||||||
|
logger.error(f'色图下载失败 本地发送 {index}.jpg')
|
||||||
|
else:
|
||||||
|
await setu.send(text_list[i] + setu_img)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"USER {event.user_id} GROUP {event.group_id}"
|
f"USER {event.user_id} GROUP {event.group_id}"
|
||||||
f" 发送在线色图 {keyword}.jpg 成功")
|
f" 发送在线色图 {keyword}.jpg 成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f'色图发送错误 e:{e}')
|
setu_img, index = get_setu('', setu_data, keyword)
|
||||||
await setu.send('图片下载惜败!', at_sender=True)
|
await setu.send(setu_img)
|
||||||
|
logger.error(f'色图发送错误 本地发送 {index}.jpg e:{e}')
|
||||||
else:
|
else:
|
||||||
await setu.send(urls)
|
await setu.send(urls)
|
||||||
_ulmt.set_False(event.user_id)
|
_ulmt.set_False(event.user_id)
|
||||||
@@ -155,13 +161,21 @@ async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
|
|||||||
for i in range(num):
|
for i in range(num):
|
||||||
try:
|
try:
|
||||||
setu_img, index = await search_online_setu(urls[i])
|
setu_img, index = await search_online_setu(urls[i])
|
||||||
await setu.send(text_list[i] + setu_img)
|
if index == -1 and img_id != 'r':
|
||||||
|
setu_img, index = get_setu('', setu_data, keyword)
|
||||||
|
await setu.send(setu_img)
|
||||||
|
logger.error(f'色图下载失败 本地发送 {index}.jpg')
|
||||||
|
else:
|
||||||
|
await setu.send(text_list[i] + setu_img)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"USER {event.user_id} GROUP private"
|
f"USER {event.user_id} GROUP private"
|
||||||
f" 发送{'r18' if img_id == 'r' else ''}色图 {index}.jpg 成功")
|
f" 发送{'r18' if img_id == 'r' else ''}色图 {index}.jpg 成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f'色图发送错误 e:{e}')
|
if img_id != 'r':
|
||||||
await setu.send('图片下载惜败!', at_sender=True)
|
img_setu, index = get_setu('', setu_data, keyword)
|
||||||
|
logger.error(f'色图发送错误 本地发送 {index}.jpg e:{e}')
|
||||||
|
else:
|
||||||
|
await setu.send('图片下载惜败!', at_sender=True)
|
||||||
count += 1
|
count += 1
|
||||||
if count > 6:
|
if count > 6:
|
||||||
await setu.send('检测到下载惜败的图片过多,这次就不算数了,果咩..', at_sender=True)
|
await setu.send('检测到下载惜败的图片过多,这次就不算数了,果咩..', at_sender=True)
|
||||||
@@ -255,16 +269,25 @@ async def _(bot: Bot, event: MessageEvent, state: T_State):
|
|||||||
else:
|
else:
|
||||||
_ulmt.set_False(event.user_id)
|
_ulmt.set_False(event.user_id)
|
||||||
return
|
return
|
||||||
if list(bot.config.nickname)[0].find(keyword) != -1:
|
if keyword.find('真寻') != -1:
|
||||||
await setu.finish('咳咳咳,虽然我很可爱,但是我木有自己的色图~~~有的话记得发我一份呀')
|
await setu.finish('咳咳咳,虽然我很可爱,但是我木有自己的色图~~~有的话记得发我一份呀')
|
||||||
urls, text_list, code = await get_setu_urls(keyword, num)
|
urls, text_list, code = await get_setu_urls(keyword, num)
|
||||||
if code == 200:
|
if code == 200:
|
||||||
for i in range(len(urls)):
|
for i in range(len(urls)):
|
||||||
try:
|
try:
|
||||||
setu_img, index = await search_online_setu(urls[i])
|
setu_img, index = await search_online_setu(urls[i])
|
||||||
await setu_reg.send(text_list[i] + '\n' + setu_img)
|
if index == -1:
|
||||||
|
setu_img, index = get_setu('', setu_data, keyword)
|
||||||
|
await setu_reg.send(setu_img)
|
||||||
|
logger.error(f'色图下载失败 本地发送 {index}.jpg')
|
||||||
|
else:
|
||||||
|
await setu_reg.send(text_list[i] + '\n' + setu_img)
|
||||||
except ActionFailed as e:
|
except ActionFailed as e:
|
||||||
await setu_reg.send('这图太色了,会教坏小孩子的,不给看..')
|
await setu_reg.send('这图太色了,会教坏小孩子的,不给看..')
|
||||||
|
except Exception as e:
|
||||||
|
setu_img, index = get_setu('', setu_data, keyword)
|
||||||
|
await setu_reg.send(setu_img)
|
||||||
|
logger.error(f'色图发送错误 e:{e}')
|
||||||
else:
|
else:
|
||||||
logger.info(
|
logger.info(
|
||||||
f"USER {event.user_id} GROUP {event.group_id if event.message_type != 'private' else 'private'}"
|
f"USER {event.user_id} GROUP {event.group_id if event.message_type != 'private' else 'private'}"
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ async def get_setu_urls(keyword: str, num: int = 1, r18: int = 0):
|
|||||||
print(f'get_setu_url: count --> {count}')
|
print(f'get_setu_url: count --> {count}')
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
try:
|
try:
|
||||||
async with session.get(url, proxy=get_local_proxy(), timeout=5, params=params) as response:
|
async with session.get(url, proxy=get_local_proxy(), timeout=2, params=params) as response:
|
||||||
if response.status == 429:
|
if response.status == 429:
|
||||||
return '调用达到上限,明日赶早呀~', '', 429
|
return '调用达到上限,明日赶早呀~', '', 429
|
||||||
if response.status == 404:
|
if response.status == 404:
|
||||||
@@ -96,7 +96,7 @@ async def search_online_setu(url: str):
|
|||||||
for i in range(3):
|
for i in range(3):
|
||||||
print(f'search_online_setu --> {i}')
|
print(f'search_online_setu --> {i}')
|
||||||
try:
|
try:
|
||||||
async with session.get(url, proxy=get_local_proxy(), timeout=7) as res:
|
async with session.get(url, proxy=get_local_proxy(), timeout=2) as res:
|
||||||
if res.status == 200:
|
if res.status == 200:
|
||||||
index = str(random.randint(1, 100000))
|
index = str(random.randint(1, 100000))
|
||||||
async with aiofiles.open(IMAGE_PATH + 'temp/' + index + "_temp_setu.jpg", 'wb') as f:
|
async with aiofiles.open(IMAGE_PATH + 'temp/' + index + "_temp_setu.jpg", 'wb') as f:
|
||||||
@@ -115,12 +115,17 @@ async def search_online_setu(url: str):
|
|||||||
return '\n图片被小怪兽恰掉啦..!QAQ', -1
|
return '\n图片被小怪兽恰掉啦..!QAQ', -1
|
||||||
|
|
||||||
|
|
||||||
def get_setu(index: str, setu_data: dict):
|
def get_setu(index: str, setu_data: dict, tag: str = None):
|
||||||
length = len(os.listdir(IMAGE_PATH + path))
|
length = len(os.listdir(IMAGE_PATH + path))
|
||||||
if length == 0:
|
if length == 0:
|
||||||
return None, None
|
return None, None
|
||||||
if not index:
|
if not index:
|
||||||
index = random.randint(0, length - 1)
|
index = random.randint(0, length - 1)
|
||||||
|
if tag:
|
||||||
|
all_tag_setu = [x for x in setu_data.keys() if tag in setu_data[x]['tags']]
|
||||||
|
print(all_tag_setu)
|
||||||
|
if all_tag_setu:
|
||||||
|
index = random.choice(all_tag_setu)
|
||||||
if is_number(index):
|
if is_number(index):
|
||||||
if int(index) > length or int(index) < 0:
|
if int(index) > length or int(index) < 0:
|
||||||
return f"超过当前上下限!({length - 1})", 999
|
return f"超过当前上下限!({length - 1})", 999
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from .data_source import dataGet, dataProcess
|
from .music_163 import dataGet, dataProcess, get_music_id
|
||||||
from nonebot.adapters import Bot, Event
|
from nonebot.adapters import Bot, Event
|
||||||
from nonebot.typing import T_State
|
from nonebot.typing import T_State
|
||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
@@ -15,9 +15,6 @@ songpicker = on_command("点歌", priority=5, block=True)
|
|||||||
@songpicker.handle()
|
@songpicker.handle()
|
||||||
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
|
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
|
||||||
args = str(event.get_message()).strip()
|
args = str(event.get_message()).strip()
|
||||||
# if args.isdigit():
|
|
||||||
# if "songName" in state:
|
|
||||||
# state["songNum"] = int(args)
|
|
||||||
if args:
|
if args:
|
||||||
state["songName"] = args
|
state["songName"] = args
|
||||||
|
|
||||||
@@ -27,34 +24,20 @@ async def handle_songName(bot: Bot, event: Event, state: T_State):
|
|||||||
songName = state["songName"]
|
songName = state["songName"]
|
||||||
songIdList = await dataget.songIds(songName=songName)
|
songIdList = await dataget.songIds(songName=songName)
|
||||||
if not songIdList:
|
if not songIdList:
|
||||||
await songpicker.reject("没有找到这首歌,请发送其它歌名!")
|
await songpicker.finish("没有找到这首歌!", at_sender=True)
|
||||||
songInfoList = list()
|
for _ in range(3):
|
||||||
for songId in songIdList:
|
songInfoDict = await dataget.songInfo(songIdList[0])
|
||||||
songInfoDict = await dataget.songInfo(songId)
|
if songInfoDict != '网易云网络繁忙!':
|
||||||
if songInfoDict == '网易云网络繁忙!':
|
break
|
||||||
await songpicker.finish('网易云网络繁忙!')
|
else:
|
||||||
songInfoList.append(songInfoDict)
|
await songpicker.finish("网易云繁忙...")
|
||||||
# songInfoMessage = await dataProcess.mergeSongInfo(songInfoList)
|
|
||||||
# await songpicker.send(songInfoMessage)
|
|
||||||
state["songIdList"] = songIdList
|
state["songIdList"] = songIdList
|
||||||
|
|
||||||
|
|
||||||
@songpicker.got("songName")
|
@songpicker.got("songName")
|
||||||
async def handle_songNum(bot: Bot, event: Event, state: T_State):
|
async def handle_songNum(bot: Bot, event: Event, state: T_State):
|
||||||
songIdList = state["songIdList"]
|
songIdList = state["songIdList"]
|
||||||
# songNum = state["songNum"]
|
selectedSongId = songIdList[0]
|
||||||
songNum = 0
|
|
||||||
# 处理重选
|
|
||||||
# if not songNum.isdigit():
|
|
||||||
# await songpicker.finish()
|
|
||||||
# else:
|
|
||||||
# songNum = int(songNum)
|
|
||||||
#
|
|
||||||
# if songNum >= len(songIdList) or songNum < 0:
|
|
||||||
# await songpicker.reject("数字序号错误")
|
|
||||||
|
|
||||||
selectedSongId = songIdList[int(songNum)]
|
|
||||||
|
|
||||||
songContent = [
|
songContent = [
|
||||||
{
|
{
|
||||||
"type": "music",
|
"type": "music",
|
||||||
@@ -66,21 +49,3 @@ async def handle_songNum(bot: Bot, event: Event, state: T_State):
|
|||||||
]
|
]
|
||||||
await songpicker.send(songContent)
|
await songpicker.send(songContent)
|
||||||
|
|
||||||
# songCommentsDict = await dataget.songComments(songId=selectedSongId)
|
|
||||||
# songCommentsMessage = await dataProcess.mergeSongComments(songCommentsDict)
|
|
||||||
# commentContent = [
|
|
||||||
# {
|
|
||||||
# "type": "text",
|
|
||||||
# "data": {
|
|
||||||
# "text": "下面为您播送热评:\n"
|
|
||||||
# }
|
|
||||||
# },
|
|
||||||
# {
|
|
||||||
# "type": "text",
|
|
||||||
# "data": {
|
|
||||||
# "text": songCommentsMessage
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
# ]
|
|
||||||
#
|
|
||||||
# await songpicker.send(commentContent)
|
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
import aiohttp
|
||||||
|
import json
|
||||||
|
from util.utils import get_local_proxy
|
||||||
|
from configs.config import ALAPI_TOKEN
|
||||||
|
from asyncio.exceptions import TimeoutError
|
||||||
|
|
||||||
|
|
||||||
|
class dataApi():
|
||||||
|
'''
|
||||||
|
从网易云音乐接口直接获取数据(实验性)
|
||||||
|
'''
|
||||||
|
headers = {"referer": "http://music.163.com"}
|
||||||
|
cookies = {"appver": "2.0.2"}
|
||||||
|
|
||||||
|
async def search(self, songName: str):
|
||||||
|
'''
|
||||||
|
搜索接口,用于由歌曲名查找id
|
||||||
|
'''
|
||||||
|
async with aiohttp.ClientSession(headers=self.headers, cookies=self.cookies) as session:
|
||||||
|
async with session.post(f"http://music.163.com/api/search/get/", data={"s": songName, "limit": 5, "type": 1, "offset": 0},) as r:
|
||||||
|
if r.status != 200:
|
||||||
|
return None
|
||||||
|
r = await r.text()
|
||||||
|
return json.loads(r)
|
||||||
|
|
||||||
|
async def getSongInfo(self, songId: int):
|
||||||
|
'''
|
||||||
|
获取歌曲信息
|
||||||
|
'''
|
||||||
|
async with aiohttp.ClientSession(headers=self.headers, cookies=self.cookies) as session:
|
||||||
|
async with session.post(f"http://music.163.com/api/song/detail/?id={songId}&ids=%5B{songId}%5D",) as r:
|
||||||
|
if r.status != 200:
|
||||||
|
return None
|
||||||
|
r = await r.text()
|
||||||
|
return json.loads(r)
|
||||||
|
|
||||||
|
|
||||||
|
class dataGet(dataApi):
|
||||||
|
'''
|
||||||
|
从dataApi获取数据,并做简单处理
|
||||||
|
'''
|
||||||
|
|
||||||
|
api = dataApi()
|
||||||
|
|
||||||
|
async def songIds(self, songName: str, amount=5) -> list:
|
||||||
|
'''
|
||||||
|
根据用户输入的songName 获取候选songId列表 [默认songId数量:5]
|
||||||
|
'''
|
||||||
|
songIds = list()
|
||||||
|
r = await self.api.search(songName=songName)
|
||||||
|
if r is None:
|
||||||
|
raise WrongDataError
|
||||||
|
idRange = amount if amount < len(
|
||||||
|
r["result"]["songs"]) else len(r["result"]["songs"])
|
||||||
|
for i in range(idRange):
|
||||||
|
songIds.append(r["result"]["songs"][i]["id"])
|
||||||
|
return songIds
|
||||||
|
|
||||||
|
async def songInfo(self, songId: int):
|
||||||
|
'''
|
||||||
|
根据传递的songId,获取歌曲名、歌手、专辑等信息,作为dict返回
|
||||||
|
'''
|
||||||
|
songInfo = dict()
|
||||||
|
r = await self.api.getSongInfo(songId)
|
||||||
|
if r is None:
|
||||||
|
raise WrongDataError
|
||||||
|
if r['code'] == -460:
|
||||||
|
return '网易云网络繁忙!'
|
||||||
|
songInfo["songName"] = r["songs"][0]["name"]
|
||||||
|
|
||||||
|
songArtists = list()
|
||||||
|
for ars in r["songs"][0]["artists"]:
|
||||||
|
songArtists.append(ars["name"])
|
||||||
|
songArtistsStr = "、".join(songArtists)
|
||||||
|
songInfo["songArtists"] = songArtistsStr
|
||||||
|
|
||||||
|
songInfo["songAlbum"] = r["songs"][0]["album"]["name"]
|
||||||
|
|
||||||
|
return songInfo
|
||||||
|
|
||||||
|
|
||||||
|
class dataProcess():
|
||||||
|
'''
|
||||||
|
将获取的数据处理为用户能看懂的形式
|
||||||
|
'''
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def mergeSongInfo(songInfos: list) -> str:
|
||||||
|
'''
|
||||||
|
将歌曲信息list处理为字符串,供用户点歌
|
||||||
|
传递进的歌曲信息list含有多个歌曲信息dict
|
||||||
|
'''
|
||||||
|
songInfoMessage = "请输入欲点播歌曲的序号:\n"
|
||||||
|
numId = 0
|
||||||
|
for songInfo in songInfos:
|
||||||
|
songInfoMessage += f"{numId}:"
|
||||||
|
songInfoMessage += songInfo["songName"]
|
||||||
|
songInfoMessage += "-"
|
||||||
|
songInfoMessage += songInfo["songArtists"]
|
||||||
|
songInfoMessage += " 专辑:"
|
||||||
|
songInfoMessage += songInfo["songAlbum"]
|
||||||
|
songInfoMessage += "\n"
|
||||||
|
numId += 1
|
||||||
|
return songInfoMessage
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def mergeSongComments(songComments: dict) -> str:
|
||||||
|
songCommentsMessage = '\n'.join(
|
||||||
|
['%s: %s' % (key, value) for (key, value) in songComments.items()])
|
||||||
|
return songCommentsMessage
|
||||||
|
|
||||||
|
|
||||||
|
class Error(Exception):
|
||||||
|
'''
|
||||||
|
谁知道网易的接口会出什么幺蛾子
|
||||||
|
'''
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class WrongDataError(Error):
|
||||||
|
def __init__(self, expression, message):
|
||||||
|
self.expression = expression
|
||||||
|
self.message = message
|
||||||
|
self.message += "\n未从网易接口获取到有效的数据!"
|
||||||
|
|
||||||
|
|
||||||
|
async def get_music_id(keyword: str):
|
||||||
|
url = f'https://v2.alapi.cn/api/music/search'
|
||||||
|
params = {
|
||||||
|
'token': ALAPI_TOKEN,
|
||||||
|
'keyword': keyword
|
||||||
|
}
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
try:
|
||||||
|
async with session.get(url, proxy=get_local_proxy(), timeout=2, params=params) as response:
|
||||||
|
data = await response.json()
|
||||||
|
if data['code'] == 200:
|
||||||
|
data = data['data']['songs']
|
||||||
|
return data['id'], 200
|
||||||
|
else:
|
||||||
|
return f'访问失败...code:{data["code"]}', 999
|
||||||
|
except TimeoutError:
|
||||||
|
return '超时了...', 999
|
||||||
|
|
||||||
+15
-17
@@ -20,21 +20,24 @@ from models.group_member_info import GroupInfoUser
|
|||||||
|
|
||||||
# erm = on_command('异世相遇,尽享美味', aliases={'异世相遇 尽享美味', '异世相遇,尽享美味'}, priority=5, block=True)
|
# erm = on_command('异世相遇,尽享美味', aliases={'异世相遇 尽享美味', '异世相遇,尽享美味'}, priority=5, block=True)
|
||||||
|
|
||||||
matcher = on_keyword({"test"})
|
# matcher = on_keyword({"test"})
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# @matcher.handle()
|
# @matcher.handle()
|
||||||
# async def _(bot: Bot, event: MessageEvent, state: T_State):
|
# async def _(bot: Bot, event: MessageEvent, state: T_State):
|
||||||
# await matcher.send(json(
|
# songContent = [
|
||||||
# {"app": "com.tencent.gxhServiceIntelligentTip", "desc": "", "view": "gxhServiceIntelligentTip",
|
# {
|
||||||
# "ver": "", "prompt": "[QQ红包]", "appID": "", "sourceName": "", "actionData": "", "actionData_A": "",
|
# "type": "music",
|
||||||
# "sourceUrl": "", "meta": {"gxhServiceIntelligentTip": {
|
# "data": {
|
||||||
# "bgImg": "http:\/\/ptlogin2.qq.com\/ho_cross_domain?tourl=https:\/\/gxh.vip.qq.com\/\/qqshow"
|
# "type": "custom",
|
||||||
# "\/admindata\/comdata\/vipActTpl_mobile_zbltyxn\/dddb247a4a9c6d34757c160f9e0b6669.gif",
|
# "subtype": "kugou",
|
||||||
# "appid": "gxhServiceIntelligentTip", "reportParams": 'null', "action": ""}},
|
# "url": "https://webfs.yun.kugou.com/",
|
||||||
# "config": {"forward": 1, "height": 240, "type": "normal", "autoSize": 0, "width": 180}, "text": "",
|
# "audio": "https://webfs.yun.kugou.com/202106231924/77ad13a9c9c091f74aa10098281433ab/G128/M02/02/00/wA0DAFplVJ6AIcIiADK1ZUYugV4043.mp3",
|
||||||
# "sourceAd": ""}
|
# "title": "音乐标题"
|
||||||
# ))
|
# }
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
# await matcher.send(songContent)
|
||||||
|
|
||||||
|
|
||||||
# @erm.handle()
|
# @erm.handle()
|
||||||
@@ -43,10 +46,5 @@ matcher = on_keyword({"test"})
|
|||||||
# await matcher.send(record('erm'))
|
# await matcher.send(record('erm'))
|
||||||
|
|
||||||
|
|
||||||
@matcher.args_parser
|
|
||||||
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
|
||||||
msg = str(event.get_message())
|
|
||||||
if len(msg) > 5:
|
|
||||||
return
|
|
||||||
await matcher.reject()
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,4 +6,6 @@ TL_M_KEY = os.environ.get('TL_KEY')
|
|||||||
|
|
||||||
SYSTEM_PROXY = os.environ.get('SYSTEM_PROXY')
|
SYSTEM_PROXY = os.environ.get('SYSTEM_PROXY')
|
||||||
|
|
||||||
|
ALAPI_TOKEN = os.environ.get('ALAPI_TOKEN')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user