mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-31 04:30:29 +08:00
新增:语音命令;修复:渊下宫带来的查询错误问题;新增:当前状态命令查询洞天宝钱数量
This commit is contained in:
parent
eadd9656b3
commit
f06a3baff9
36
README.md
36
README.md
@ -52,6 +52,18 @@ $ pip3 install -r requirements.txt
|
||||
|
||||
**(作者已经转用NoneBot2,Hoshino的更新可能未经测试,有bug及时提Issues!)**
|
||||
|
||||
#### 2022-01-06
|
||||
|
||||
新增:`原魔`指令,支持模糊查询,例如`原魔使徒`
|
||||
|
||||
新增:`语音`指令,不支持模糊查询,发送`语音列表`可查看全部语音id,例子:`语音可莉357`,请确保运行环境有FFMpeg,否则无法正常发送语音。
|
||||
|
||||
优化:`开启<自动签到/推送>`命令可由超级管理员at关闭或开启,`开启<自动签到/推送>@xxxx`
|
||||
|
||||
优化:`武器`指令已支持查询特定等级且可以模糊查询,例如`武器翼90`可查询90级天空之翼的属性
|
||||
|
||||
优化:`当前状态`支持查询当前洞天宝钱数量
|
||||
|
||||
#### 2021-12-20
|
||||
|
||||
新增:8角色查询UI,全角色查询UI将会随背景图片改变而改变主题色。
|
||||
@ -244,22 +256,26 @@ $ pip3 install -r requirements.txt
|
||||
| 查询(上期)深渊 @人 | | 获取@的群友的深渊信息一览 | 查询深渊 @Wuyi | |
|
||||
| 查询(上期)深渊\d @人 | | 获取@的群友的深渊某一层数据 | 查询深渊10 @Wuyi | |
|
||||
| 当前状态 | | 获取树脂、每日委托、派遣等信息 | 当前状态 | **必须**绑定过CK和uid |
|
||||
| 开启推送 | | 开启推送,超过140树脂提醒旅行者 | 开启推送 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 关闭推送 | | 关闭树脂快满的提醒 | 关闭推送 | 都可以 |
|
||||
| 开启推送 | @xxx(必须为超级管理员) | 开启推送,超过140树脂提醒旅行者 | 开启推送 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 关闭推送 | @xxx(必须为超级管理员) | 关闭树脂快满的提醒 | 关闭推送 | 都可以 |
|
||||
| 校验全部Cookies | | 校验当前池内全部Cookies状态 | 校验全部Cookies | **群聊** |
|
||||
| 迁移Cookies | | 迁移旧版本(上上个版本)全部Cookies | 迁移Cookies | **群聊** |
|
||||
| 优化Cookies | | 优化上个版本全部Cookies | 优化Cookies | **群聊** |
|
||||
| 签到 | | 米游社签到 | 签到 | **必须**绑定过CK和uid |
|
||||
| 开启自动签到 | | 开启每日米游社签到 | 开启自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 关闭自动签到 | | 关闭每日米游社签到 | 关闭自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 开启自动签到 | @xxx(必须为超级管理员) | 开启每日米游社签到 | 开启自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 关闭自动签到 | @xxx(必须为超级管理员) | 关闭每日米游社签到 | 关闭自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 全部重签 | | 手动重新签到所有人 | 重新自动签到 | **群聊** <br />**必须**由超级管理员执行 |
|
||||
| 每月统计 | | 查询当前绑定账号的每月/每日的原石/莫拉 | | 仅限群聊,**必须**绑定Cookies和uid |
|
||||
| 武器 | | 查询武器信息 | 武器天空之卷 | |
|
||||
| 命座\d | | 查询角色命座信息 | 命座6可莉 | |
|
||||
| 角色 | | 查询角色简略信息 | 角色可莉 | |
|
||||
| 角色 | \d | 查询角色某个等级的属性 | 角色可莉64 | |
|
||||
| 角色 | <某种类型> | 匹配一整类角色 | 角色燃愿玛瑙 | |
|
||||
| 材料 | | 输出角色材料列表 | 材料可莉 | |
|
||||
| 武器 | | 查询武器信息 | 武器天空之卷 | 支持模糊查询 |
|
||||
| 武器 | \d | 查询武器某个等级的属性 | 武器卷90 | 支持模糊查询 |
|
||||
| 命座\d | | 查询角色命座信息 | 命座6可莉 | 支持模糊查询 |
|
||||
| 角色 | | 查询角色简略信息 | 角色可莉 | 支持模糊查询 |
|
||||
| 角色 | \d | 查询角色某个等级的属性 | 角色可莉64 | 支持模糊查询 |
|
||||
| 角色 | <某种类型> | 匹配一整类角色 | 角色燃愿玛瑙 | 支持模糊查询 |
|
||||
| 材料 | | 输出角色材料列表 | 材料可莉 | 支持模糊查询 |
|
||||
| 原魔 | | 原魔名字 | 原魔使徒 | 支持模糊查询 |
|
||||
| 语音列表 | | 查看全部语音ID | 语音列表 | 不支持模糊查询 |
|
||||
| 语音 | | 语音+名称+语音ID | 语音可莉357 | **必须**有FFMpeg环境 |
|
||||
| 查询词云 | | 查询绑定角色的词云 | 查询词云 | 必须绑定过UID/MYSID |
|
||||
|
||||
### 深渊查询:
|
||||
|
62
__init__.py
62
__init__.py
@ -2,7 +2,7 @@ from .getImg import draw_pic,draw_abyss_pic,draw_abyss0_pic,draw_wordcloud,draw_
|
||||
from .getDB import (CheckDB, GetAward, GetCharInfo, GetDaily, GetMysInfo,
|
||||
GetSignInfo, GetSignList, GetWeaponInfo, MysSign, OpenPush,
|
||||
connectDB, cookiesDB, deletecache, selectDB, get_alots,
|
||||
GetEnemiesInfo)
|
||||
GetEnemiesInfo,GetAudioInfo)
|
||||
from nonebot import *
|
||||
from hoshino import Service,R,priv,util
|
||||
from hoshino.typing import MessageSegment,CQEvent, HoshinoBot
|
||||
@ -16,12 +16,15 @@ import hashlib
|
||||
import sqlite3
|
||||
from io import BytesIO
|
||||
import urllib
|
||||
import requests
|
||||
from base64 import b64encode
|
||||
|
||||
sv = Service('genshinuid')
|
||||
bot = get_bot()
|
||||
|
||||
FILE_PATH = os.path.dirname(__file__)
|
||||
FILE2_PATH = os.path.join(FILE_PATH,'mys')
|
||||
INDEX_PATH = os.path.join(FILE2_PATH, 'index')
|
||||
Texture_PATH = os.path.join(FILE2_PATH,'texture2d')
|
||||
|
||||
avatar_json = {
|
||||
@ -64,7 +67,8 @@ avatar_json = {
|
||||
"Shogun": "雷电将军",
|
||||
"Aloy": "埃洛伊",
|
||||
"Sara": "九条裟罗",
|
||||
"Kokomi": "珊瑚宫心海"
|
||||
"Kokomi": "珊瑚宫心海",
|
||||
"Shenhe":"申鹤"
|
||||
}
|
||||
|
||||
daily_im = '''
|
||||
@ -73,6 +77,7 @@ daily_im = '''
|
||||
原粹树脂:{}/{}{}
|
||||
每日委托:{}/{} 奖励{}领取
|
||||
周本减半:{}/{}
|
||||
洞天宝钱:{}
|
||||
探索派遣:
|
||||
总数/完成/上限:{}/{}/{}
|
||||
{}'''
|
||||
@ -113,6 +118,56 @@ char_info_im = '''{}
|
||||
【cv】:{}
|
||||
【介绍】:{}'''
|
||||
|
||||
audio_json = {
|
||||
"357":["357_01","357_02","357_03"],
|
||||
"1000000":["1000000_01","1000000_02","1000000_03","1000000_04","1000000_05","1000000_06","1000000_07"],
|
||||
"1000001":["1000001_01","1000001_02","1000001_03"],
|
||||
"1000002":["1000002_01","1000002_02","1000002_03"],
|
||||
"1000100":["1000100_01","1000100_02","1000100_03","1000100_04","1000100_05"],
|
||||
"1000101":["1000101_01","1000101_02","1000101_03","1000101_04","1000101_05","1000101_06"],
|
||||
"1000200":["1000200_01","1000200_02","1000200_03"],
|
||||
"1010201":["1010201_01"],
|
||||
"1000300":["1000300_01","1000300_02"],
|
||||
"1000400":["1000400_01","1000400_02","1000400_03"],
|
||||
"1000500":["1000500_01","1000500_02","1000500_03"],
|
||||
"1010000":["1010000_01","1010000_02","1010000_03","1010000_04","1010000_05"],
|
||||
"1010001":["1010001_01","1010001_02"],
|
||||
"1010100":["1010100_01","1010100_02","1010100_03","1010100_04","1010100_05"],
|
||||
"1010200":["1010200_01","1010200_02","1010200_03","1010200_04","1010200_05"],
|
||||
"1010300":["1010300_01","1010300_02","1010300_03","1010300_04","1010300_05"],
|
||||
"1010301":["1010301_01","1010301_02","1010301_03","1010301_04","1010301_05"],
|
||||
"1010400":["1010400_01","1010400_02","1010400_03"],
|
||||
"1020000":["1020000_01"]
|
||||
}
|
||||
|
||||
@sv.on_prefix('语音')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
message = ev.message.extract_plain_text()
|
||||
message = message.replace(' ', "")
|
||||
name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
|
||||
|
||||
if name == "列表":
|
||||
f=open(os.path.join(INDEX_PATH,"语音.png"),'rb')
|
||||
ls_f = base64.b64encode(f.read()).decode()
|
||||
imgmes = 'base64://' + ls_f
|
||||
f.close()
|
||||
im = f"[CQ:image,file={imgmes}]"
|
||||
await bot.send(ev,im)
|
||||
elif name == "":
|
||||
return
|
||||
else:
|
||||
audioid = re.findall(r"[0-9]+", message)[0]
|
||||
if audioid in audio_json:
|
||||
audioid = random.choice(audio_json[audioid])
|
||||
url = await GetAudioInfo(name,audioid)
|
||||
audio = BytesIO(requests.get(url).content)
|
||||
audios = 'base64://' + b64encode(audio.getvalue()).decode()
|
||||
im = f"[CQ:record,file={audios}]"
|
||||
try:
|
||||
await bot.send(ev,im)
|
||||
except:
|
||||
await bot.send(ev,"不存在该语音ID或者不存在该角色。")
|
||||
|
||||
@sv.on_fullmatch('活动列表')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
img_path = os.path.join(FILE2_PATH,"event.jpg")
|
||||
@ -699,8 +754,9 @@ async def daily(mode="push", uid=None):
|
||||
f"{avatar_name} 剩余时间{remained_timed}")
|
||||
expedition_data = "\n".join(expedition_info)
|
||||
|
||||
coin = str(dailydata["current_home_coin"]) + "/" + str(dailydata["max_home_coin"])
|
||||
send_mes = daily_im.format(tip, current_resin, max_resin, rec_time, finished_task_num, total_task_num, is_extra_got, used_resin_discount_num,
|
||||
resin_discount_num_limit, current_expedition_num, finished_expedition_num, max_expedition_num, expedition_data)
|
||||
resin_discount_num_limit, coin,current_expedition_num, finished_expedition_num, max_expedition_num, expedition_data)
|
||||
|
||||
temp_list.append(
|
||||
{"qid": row[2], "gid": row[3], "message": send_mes})
|
||||
|
12
getDB.py
12
getDB.py
@ -667,7 +667,17 @@ async def GetMysInfo(mysid,ck):
|
||||
except Exception as e:
|
||||
print("米游社信息读取老Api失败!")
|
||||
print(e.with_traceback)
|
||||
|
||||
|
||||
async def GetAudioInfo(name,audioid,language = "cn"):
|
||||
url = "https://genshin.minigg.cn/?characters=" + name + "&audioid=" + audioid + "&language=" + language
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url=url,
|
||||
headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
|
||||
'Referer': 'https://genshin.minigg.cn/index.html'})
|
||||
return req.text
|
||||
|
||||
async def GetWeaponInfo(name,level = None):
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
|
53
getImg.py
53
getImg.py
@ -978,50 +978,53 @@ async def draw_pic(uid,nickname,image = None,mode = 2,role_level = None):
|
||||
text_draw.text((640, 183.9),raw_data['stats']['spiral_abyss'], new_color, ys_font(26))
|
||||
|
||||
#宝箱
|
||||
text_draw.text((258, 382.4),str(raw_data['stats']['magic_chest_number']), new_color, ys_font(24))
|
||||
text_draw.text((258, 442),str(raw_data['stats']['common_chest_number']),new_color, ys_font(24))
|
||||
text_draw.text((258, 501.6),str(raw_data['stats']['exquisite_chest_number']),new_color, ys_font(24))
|
||||
text_draw.text((258, 561.2),str(raw_data['stats']['precious_chest_number']), new_color, ys_font(24))
|
||||
text_draw.text((258, 620.8),str(raw_data['stats']['luxurious_chest_number']), new_color, ys_font(24))
|
||||
text_draw.text((258, 375.4),str(raw_data['stats']['magic_chest_number']), new_color, ys_font(24))
|
||||
text_draw.text((258, 425.4),str(raw_data['stats']['common_chest_number']),new_color, ys_font(24))
|
||||
text_draw.text((258, 475.4),str(raw_data['stats']['exquisite_chest_number']),new_color, ys_font(24))
|
||||
text_draw.text((258, 525.4),str(raw_data['stats']['precious_chest_number']), new_color, ys_font(24))
|
||||
text_draw.text((258, 575.4),str(raw_data['stats']['luxurious_chest_number']), new_color, ys_font(24))
|
||||
|
||||
#已获角色
|
||||
text_draw.text((258, 680.4),str(raw_data['stats']['avatar_number']),new_color, ys_font(24))
|
||||
text_draw.text((740, 547),str(raw_data['stats']['avatar_number']),new_color, ys_font(24))
|
||||
|
||||
#开启锚点和秘境数量
|
||||
text_draw.text((745, 474.5),str(raw_data['stats']['way_point_number']),new_color, ys_font(24))
|
||||
text_draw.text((745, 514),str(raw_data['stats']['domain_number']),new_color, ys_font(24))
|
||||
text_draw.text((258, 625.4),str(raw_data['stats']['way_point_number']),new_color, ys_font(24))
|
||||
text_draw.text((258, 675.4),str(raw_data['stats']['domain_number']),new_color, ys_font(24))
|
||||
|
||||
#蒙德
|
||||
text_draw.text((490, 370),str(raw_data['world_explorations'][3]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((490, 400),'lv.' + str(raw_data['world_explorations'][3]['level']),new_color, ys_font(22))
|
||||
text_draw.text((490, 370),str(raw_data['world_explorations'][4]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((490, 400),'lv.' + str(raw_data['world_explorations'][4]['level']),new_color, ys_font(22))
|
||||
text_draw.text((513, 430), str(raw_data['stats']['anemoculus_number']), new_color, ys_font(22))
|
||||
|
||||
#璃月
|
||||
text_draw.text((490, 490),str(raw_data['world_explorations'][2]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((490, 520),'lv.' + str(raw_data['world_explorations'][2]['level']),new_color, ys_font(22))
|
||||
text_draw.text((490, 490),str(raw_data['world_explorations'][3]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((490, 520),'lv.' + str(raw_data['world_explorations'][3]['level']),new_color, ys_font(22))
|
||||
text_draw.text((513, 550), str(raw_data['stats']['geoculus_number']), new_color, ys_font(22))
|
||||
|
||||
#雪山
|
||||
text_draw.text((745, 379.5),str(raw_data['world_explorations'][1]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((745, 413.1),'lv.' + str(raw_data['world_explorations'][1]['level']),new_color, ys_font(22))
|
||||
text_draw.text((745, 373.5),str(raw_data['world_explorations'][2]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((745, 407.1),'lv.' + str(raw_data['world_explorations'][2]['level']),new_color, ys_font(22))
|
||||
|
||||
#稻妻
|
||||
text_draw.text((490, 608),str(raw_data['world_explorations'][0]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((490, 635),'lv.' + str(raw_data['world_explorations'][0]['level']),new_color, ys_font(22))
|
||||
text_draw.text((490, 662),'lv.' + str(raw_data['world_explorations'][0]['offerings'][0]['level']),new_color, ys_font(22))
|
||||
text_draw.text((490, 608),str(raw_data['world_explorations'][1]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
text_draw.text((490, 635),'lv.' + str(raw_data['world_explorations'][1]['level']),new_color, ys_font(22))
|
||||
text_draw.text((490, 662),'lv.' + str(raw_data['world_explorations'][1]['offerings'][0]['level']),new_color, ys_font(22))
|
||||
text_draw.text((513, 689), str(raw_data['stats']['electroculus_number']), new_color, ys_font(22))
|
||||
|
||||
#渊下宫
|
||||
text_draw.text((745, 480),str(raw_data['world_explorations'][0]['exploration_percentage']/10) + '%',new_color, ys_font(22))
|
||||
|
||||
#家园
|
||||
if len(raw_data['homes']):
|
||||
text_draw.text((693, 572.4),'lv.' + str(raw_data['homes'][0]['level']),new_color, ys_font(22))
|
||||
text_draw.text((693, 610.4),str(raw_data['homes'][0]['visit_num']),new_color, ys_font(22))
|
||||
text_draw.text((693, 648.4),str(raw_data['homes'][0]['item_num']),new_color, ys_font(22))
|
||||
text_draw.text((693, 686.4),str(raw_data['homes'][0]['comfort_num']),new_color, ys_font(22))
|
||||
text_draw.text((693, 582.4),'lv.' + str(raw_data['homes'][0]['level']),new_color, ys_font(22))
|
||||
text_draw.text((693, 620.4),str(raw_data['homes'][0]['visit_num']),new_color, ys_font(22))
|
||||
text_draw.text((693, 658.4),str(raw_data['homes'][0]['item_num']),new_color, ys_font(22))
|
||||
text_draw.text((693, 696.4),str(raw_data['homes'][0]['comfort_num']),new_color, ys_font(22))
|
||||
else:
|
||||
text_draw.text((693, 572.4),"未开",new_color, ys_font(22))
|
||||
text_draw.text((693, 610.4),"未开",new_color, ys_font(22))
|
||||
text_draw.text((693, 648.4),"未开",new_color, ys_font(22))
|
||||
text_draw.text((693, 686.4),"未开",new_color, ys_font(22))
|
||||
text_draw.text((693, 582.4),"未开",new_color, ys_font(22))
|
||||
text_draw.text((693, 620.4),"未开",new_color, ys_font(22))
|
||||
text_draw.text((693, 658.4),"未开",new_color, ys_font(22))
|
||||
text_draw.text((693, 696.4),"未开",new_color, ys_font(22))
|
||||
|
||||
#确定texture2D路径
|
||||
charpic_mask_path = os.path.join(TEXT_PATH,"charpic_mask.png")
|
||||
|
Loading…
x
Reference in New Issue
Block a user