init: QQ Bot - PS2 游戏数据查询机器人
This commit is contained in:
+736
@@ -0,0 +1,736 @@
|
||||
import requests
|
||||
from PIL import Image
|
||||
from PIL import ImageFilter
|
||||
from PIL import ImageEnhance
|
||||
from PIL import ImageDraw, ImageFont
|
||||
from datetime import datetime, timedelta
|
||||
import os
|
||||
import json
|
||||
from Player_Query import Character_Query
|
||||
|
||||
|
||||
|
||||
|
||||
class Vechile_Character_Query():
|
||||
|
||||
#def Character_date(self, name):
|
||||
async def Character_date(self, name):
|
||||
url = "https://api.sunderer.games/census/character/search"
|
||||
querystring = {"name": ""}
|
||||
querystring["name"] = name
|
||||
response = requests.request("GET", url, params=querystring)
|
||||
response = response.json()
|
||||
# print(response)
|
||||
return response
|
||||
|
||||
#def Date_Rinse_common(self, date, num=13):
|
||||
async def Date_Rinse_common(self, date, num=13):
|
||||
# 加载图片
|
||||
file_path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
icon_dir = os.path.join(file_path, "Vechile_query/download")
|
||||
Source_dir = os.path.join(file_path, "Vechile_query/Source")
|
||||
Player_query_Source_dir = os.path.join(file_path, "Charter_Sundy_Query")
|
||||
screen1_dir = (
|
||||
os.path.join(file_path, "Vechile_query/screen1")
|
||||
)
|
||||
screen2_dir = (
|
||||
os.path.join(file_path, "Vechile_query/screen2")
|
||||
)
|
||||
bruh = "wrel.png"
|
||||
by_path = "love.png"
|
||||
ad_path = "ad_test.png"
|
||||
botton_path = "上面的丁真.png"
|
||||
Logo_path = "顶部LOGO.png"
|
||||
lable_path = "ID框.png"
|
||||
tr_path = "地球共和国.png"
|
||||
vs_path = "瓦努主权国.png"
|
||||
nc_path = "新联邦.png"
|
||||
nso_path = "纳能特工.png"
|
||||
level_path = "战斗等级底图.png"
|
||||
asp1_path = "asp1.png"
|
||||
asp2_path = "asp2.png"
|
||||
asp3_path = "asp3.png"
|
||||
online_path = "在线状态.png"
|
||||
offline_path = "离线状态.png"
|
||||
online_none_path = "无历史数据在线状态.png"
|
||||
offline_none_path = "无历史数据离线状态.png"
|
||||
money_path = "证书数量.png"
|
||||
sol_path = "索泰克.png"
|
||||
eme_path = "艾莫若德.png"
|
||||
con_path = "康纳利.png"
|
||||
cob_path = "柯伯特.png"
|
||||
mil_path = "米勒.png"
|
||||
other_path = "其他数据底图.png"
|
||||
tr_botton_path = "地球共和国背景.png"
|
||||
vs_botton_path = "瓦努主权国背景.png"
|
||||
nc_botton_path = "新联邦背景.png"
|
||||
nso_botton_path = "纳能特工背景.png"
|
||||
message_path = '缩写含义.png'
|
||||
|
||||
screen_demo = "demo.png"
|
||||
afd_path = 'afd.png'
|
||||
|
||||
box_path = "框框.png"
|
||||
article_path = "条条.png"
|
||||
up_path = "从低到高.png"
|
||||
down_path = "从高到低.png"
|
||||
|
||||
judou_heavy = "judou-ui-cn-heavy.ttf"
|
||||
judou_heavyit = "judou-ui-cn-heavyitalic.ttf"
|
||||
judou_blod = "judou-bold.ttc"
|
||||
judou_media = "judou-medium.ttc"
|
||||
|
||||
##
|
||||
message = Image.open(os.path.join(
|
||||
Source_dir, message_path)).convert("RGBA")
|
||||
ad = Image.open(os.path.join(Source_dir, ad_path)).convert("RGBA")
|
||||
by = Image.open(os.path.join(Source_dir, by_path)).convert("RGBA")
|
||||
botton = Image.open(os.path.join(
|
||||
Source_dir, botton_path)).convert("RGBA")
|
||||
Logo = Image.open(os.path.join(Source_dir, Logo_path)).convert("RGBA")
|
||||
lable = Image.open(os.path.join(
|
||||
Source_dir, lable_path)).convert("RGBA")
|
||||
tr_icon = Image.open(os.path.join(Source_dir, tr_path)).convert("RGBA")
|
||||
vs_icon = Image.open(os.path.join(Source_dir, vs_path)).convert("RGBA")
|
||||
nc_icon = Image.open(os.path.join(Source_dir, nc_path)).convert("RGBA")
|
||||
nso_icon = Image.open(os.path.join(
|
||||
Source_dir, nso_path)).convert("RGBA")
|
||||
tr_botton = Image.open(os.path.join(
|
||||
Source_dir, tr_botton_path)).convert("RGBA")
|
||||
vs_botton = Image.open(os.path.join(
|
||||
Source_dir, vs_botton_path)).convert("RGBA")
|
||||
nc_botton = Image.open(os.path.join(
|
||||
Source_dir, nc_botton_path)).convert("RGBA")
|
||||
nso_botton = Image.open(os.path.join(
|
||||
Source_dir, nso_botton_path)).convert("RGBA")
|
||||
Soltech = Image.open(os.path.join(
|
||||
Source_dir, sol_path)).convert("RGBA")
|
||||
Miller = Image.open(os.path.join(Source_dir, mil_path)).convert("RGBA")
|
||||
Cobalt = Image.open(os.path.join(Source_dir, cob_path)).convert("RGBA")
|
||||
Connery = Image.open(os.path.join(
|
||||
Source_dir, con_path)).convert("RGBA")
|
||||
Emerald = Image.open(os.path.join(
|
||||
Source_dir, eme_path)).convert("RGBA")
|
||||
level_icon = Image.open(os.path.join(
|
||||
Source_dir, level_path)).convert("RGBA")
|
||||
asp1_icon = Image.open(os.path.join(
|
||||
Source_dir, asp1_path)).convert("RGBA")
|
||||
asp2_icon = Image.open(os.path.join(
|
||||
Source_dir, asp2_path)).convert("RGBA")
|
||||
asp3_icon = Image.open(os.path.join(
|
||||
Source_dir, asp3_path)).convert("RGBA")
|
||||
online = Image.open(os.path.join(
|
||||
Source_dir, online_path)).convert("RGBA")
|
||||
offline = Image.open(os.path.join(
|
||||
Source_dir, offline_path)).convert("RGBA")
|
||||
money_icon = Image.open(os.path.join(
|
||||
Source_dir, money_path)).convert("RGBA")
|
||||
other_icon = Image.open(os.path.join(
|
||||
Source_dir, other_path)).convert("RGBA")
|
||||
box = Image.open(os.path.join(Source_dir, box_path)).convert("RGBA")
|
||||
article = Image.open(os.path.join(
|
||||
Source_dir, article_path)).convert("RGBA")
|
||||
up = Image.open(os.path.join(Source_dir, up_path)).convert("RGBA")
|
||||
down = Image.open(os.path.join(Source_dir, down_path)).convert("RGBA")
|
||||
afd = Image.open(os.path.join(Source_dir, afd_path)).convert("RGBA")
|
||||
|
||||
Title = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_blod)),
|
||||
88,
|
||||
)
|
||||
Numttf = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_heavy)),
|
||||
240,
|
||||
)
|
||||
No_ver_Name_ttf = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_heavy)),
|
||||
308,
|
||||
)
|
||||
Ver_NickName_ttf = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_heavy)),
|
||||
264,
|
||||
)
|
||||
Ver_ChartName_ttf = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_heavy)),
|
||||
88,
|
||||
)
|
||||
content = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_blod)),
|
||||
52,
|
||||
)
|
||||
|
||||
status_time = ImageFont.truetype(
|
||||
((os.path.join(Source_dir,judou_heavy))),
|
||||
88,
|
||||
)
|
||||
|
||||
text_lable = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_heavy)),
|
||||
24,
|
||||
)
|
||||
heavyit = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_heavyit)),
|
||||
88,
|
||||
)
|
||||
|
||||
width, height = botton.size
|
||||
logo_w, logo_h = Logo.size
|
||||
logo_r, logo_g, logo_b, logo_a = Logo.split()
|
||||
lable_r, lable_g, lable_b, lable_a = lable.split()
|
||||
level_r, level_g, level_b, level_a = level_icon.split()
|
||||
asp1_r, asp1_g, asp1_b, asp1_a = asp1_icon.split()
|
||||
asp2_r, asp2_g, asp2_b, asp2_a = asp2_icon.split()
|
||||
asp3_r, asp3_g, asp3_b, asp3_a = asp3_icon.split()
|
||||
online_r, online_g, online_b, online_a = online.split()
|
||||
offline_r, offline_g, offline_b, offline_a = offline.split()
|
||||
tr_botton_r, tr_botton_g, tr_botton_b, tr_botton_a = tr_botton.split()
|
||||
vs_botton_r, vs_botton_g, vs_botton_b, vs_botton_a = vs_botton.split()
|
||||
nc_botton_r, nc_botton_g, nc_botton_b, nc_botton_a = nc_botton.split()
|
||||
nso_botton_r, nso_botton_g, nso_botton_b, nso_botton_a = nso_botton.split()
|
||||
Soltech_r, Soltech_g, Soltech_b, Soltech_a = Soltech.split()
|
||||
Miller_r, Miller_g, Miller_b, Miller_a = Miller.split()
|
||||
Cobalt_r, Cobalt_g, Cobalt_b, Cobalt_a = Cobalt.split()
|
||||
Connery_r, Connery_g, Connery_b, Connery_a = Connery.split()
|
||||
Emerald_r, Emerald_g, Emerald_b, Emerald_a = Emerald.split()
|
||||
money_r, money_g, money_b, money_a = money_icon.split()
|
||||
other_r, other_g, other_b, other_a = other_icon.split()
|
||||
tr_r, tr_g, tr_b, tr_a = tr_icon.split()
|
||||
vs_r, vs_g, vs_b, vs_a = vs_icon.split()
|
||||
nc_r, nc_g, nc_b, nc_a = nc_icon.split()
|
||||
nso_r, nso_g, nso_b, nso_a = nso_icon.split()
|
||||
box_r, box_g, box_b, box_a = box.split()
|
||||
article_r, article_g, article_b, article_a = article.split()
|
||||
up_r, up_g, up_b, up_a = up.split()
|
||||
down_r, down_g, down_b, down_a = down.split()
|
||||
message_r, message_g, message_b, message_a = message.split()
|
||||
ad_r, ad_g, ad_b, ad_a = ad.split()
|
||||
by_r, by_g, by_b, by_a = by.split()
|
||||
afd_r, afd_g, afd_b, afd_a = afd.split()
|
||||
All_kill = "总击杀"
|
||||
All_death = "总死亡"
|
||||
All_KDR = "总KDR"
|
||||
|
||||
# 基础信息
|
||||
|
||||
Character_BasicDate = date["basicInfo"]
|
||||
charactername = Character_BasicDate["characterFullName"]
|
||||
outfitAlias = Character_BasicDate["outfitAlias"]
|
||||
outfitName = Character_BasicDate["outfitName"]
|
||||
factionId = Character_BasicDate["factionId"]
|
||||
serverName = Character_BasicDate["worldName"]
|
||||
money = str(Character_BasicDate["availableCertCount"])
|
||||
battleRank = Character_BasicDate["battleRank"]
|
||||
aspRank = Character_BasicDate["aspRank"]
|
||||
FullName = Character_BasicDate["characterFullName"]
|
||||
# Character_Server = Character_BasicDate['Server']
|
||||
# Character_ = Character_BasicDate['']
|
||||
asplevel = Character_BasicDate["aspRank"]
|
||||
online = Character_BasicDate["online"]
|
||||
All_kill_date = Character_BasicDate["kill"]
|
||||
All_death_date = Character_BasicDate["death"]
|
||||
All_KDR_date = "%.2f" % Character_BasicDate["kdr"]
|
||||
|
||||
|
||||
All_kill = "总击杀"
|
||||
All_death = "总死亡"
|
||||
All_KDR = "总KDR"
|
||||
if outfitName == None:
|
||||
outfitName = ''
|
||||
try:
|
||||
title = str("[" + outfitAlias + "]" + " " + FullName)
|
||||
except:
|
||||
title = FullName
|
||||
lv = str("Lv." + str(battleRank))
|
||||
off = "已离线"
|
||||
off_time = ""
|
||||
on_time = ""
|
||||
on = "已在线"
|
||||
|
||||
|
||||
w_on_time, h_on_time = Title.getsize(on_time)
|
||||
w_off_time, h_off_time = Title.getsize(off_time)
|
||||
w_All_kill_date, h_All_kill_date = Title.getsize(str(All_kill_date))
|
||||
w_All_death_date, h_All_death_date = Title.getsize(str(All_death_date))
|
||||
w_All_KDR_date, h_All_KDR_date = Title.getsize(str(All_KDR_date))
|
||||
w_outfitName, h_outfitName = content.getsize(str(outfitName))
|
||||
date_common = Image.new("RGBA", (width, height), (0,124,212,100))
|
||||
date_common.paste(botton, (0, 0))
|
||||
#date_common.show()#上部数据
|
||||
#判断是否认证
|
||||
Sundy_auth = False
|
||||
|
||||
user_message = None
|
||||
chart_msg = date['basicInfo']['characterFullName']
|
||||
|
||||
file_path_csv = os.path.join(os.path.dirname(__file__), r"csv/character.csv")
|
||||
auth_dict = await Character_Query().csv_Verified_User(file_path_csv)#异步
|
||||
|
||||
|
||||
if chart_msg in auth_dict.values():
|
||||
Sundy_auth = True
|
||||
|
||||
|
||||
matching_keys = [key for key, value in auth_dict.items() if value == chart_msg]
|
||||
ver_chart_id = int(matching_keys[0])
|
||||
csv_file_nickname = os.path.join(os.path.dirname(__file__), r"csv/nickname.csv")
|
||||
nickname_csv = await Character_Query().read_csv_to_list(csv_file_nickname)
|
||||
|
||||
chart_list = await Character_Query().find_id(ver_chart_id,nickname_csv)
|
||||
ver_charactername = chart_list[1]
|
||||
|
||||
if Sundy_auth == False:
|
||||
Sundy_auth = False
|
||||
chart_msg = chart_msg[0:3] + "**" + chart_msg[-2:]
|
||||
|
||||
Online_flag = date['basicInfo']['online']
|
||||
lastLoginfo = date['latestSessionInfo']['latestLoginDate']
|
||||
lastLogout = date['latestSessionInfo']['latestLogoutDate']
|
||||
try:
|
||||
if Online_flag == True :
|
||||
logintimeline = (lastLoginfo)/1000
|
||||
logintime = datetime.fromtimestamp(logintimeline)
|
||||
formatted_time = logintime.strftime("%Y-%m-%d %H:%M:%S")
|
||||
elif Online_flag == False :
|
||||
Logouttimeline = (lastLogout)/1000
|
||||
Logouttime = datetime.fromtimestamp(Logouttimeline)
|
||||
formatted_time = Logouttime.strftime("%Y-%m-%d %H:%M:%S")
|
||||
except:
|
||||
formatted_time = '数据库无记录'
|
||||
if Sundy_auth == False :#QQbot\Charter_Sundy_Query\步兵武器列表\状态\在线文字背景.png
|
||||
Status_light = os.path.join(Player_query_Source_dir,'步兵武器列表/状态/在线圆点.png')
|
||||
status_text = 'ONLINE NOW ' + formatted_time
|
||||
BackGround_path = os.path.join(Player_query_Source_dir,'步兵武器列表/状态/在线文字背景.png')
|
||||
color = (0,252,155)
|
||||
|
||||
else:
|
||||
Status_light = os.path.join(Player_query_Source_dir,'步兵武器列表/状态/离线圆点.png')
|
||||
status_text = 'OFFLINE At ' + formatted_time
|
||||
BackGround_path = os.path.join(Player_query_Source_dir,'步兵武器列表/状态/离线文字背景.png')
|
||||
color = (255,255,255)
|
||||
|
||||
light = Image.open(Status_light).convert("RGBA")
|
||||
light_shadow = Image.open(BackGround_path).convert("RGBA")
|
||||
w,h = status_time.getsize(status_text)
|
||||
r,g,b,a = light.split()
|
||||
date_common.paste(light,(2000-w-220,700+20),mask=a)
|
||||
r,g,b,a = light_shadow.split()
|
||||
date_common.paste(light_shadow,(2000-w-820,700-20),mask=a)
|
||||
|
||||
|
||||
|
||||
date_common_pic = ImageDraw.Draw(date_common)
|
||||
date_common_pic.text(((2000-w-120),700),str(status_text),fill=(255,255,255),font=status_time)
|
||||
if Sundy_auth == False :
|
||||
w_tit,h_tit = No_ver_Name_ttf.getsize(chart_msg)
|
||||
x_No_ver_Name = 2000 - w_tit -100
|
||||
date_common_pic.text(
|
||||
(x_No_ver_Name, 250),
|
||||
chart_msg,
|
||||
fill=(255,255,255),
|
||||
font=No_ver_Name_ttf
|
||||
)
|
||||
else:
|
||||
w_tit,h_tit = Ver_NickName_ttf.getsize(ver_charactername)
|
||||
x_ver_nickName = 2000 - w_tit -100
|
||||
date_common_pic.text(
|
||||
(x_ver_nickName, 120),
|
||||
ver_charactername,
|
||||
fill=(255,255,255),
|
||||
font=Ver_NickName_ttf
|
||||
)
|
||||
w_tit,h_tit = Ver_ChartName_ttf.getsize(chart_msg)
|
||||
x_ver_nickName = 2000 - w_tit -100
|
||||
date_common_pic.text(
|
||||
(x_ver_nickName, 410),
|
||||
chart_msg,
|
||||
fill=(255,255,255),
|
||||
font=Ver_ChartName_ttf
|
||||
)
|
||||
|
||||
|
||||
# 提取载具数据
|
||||
Character_BattleData = date["battleData"]
|
||||
# Character_Battle_weaponStatList
|
||||
landVehicleData = Character_BattleData["vehicleData"]["landVehicleData"]["vehicleData"]
|
||||
waterVehicleData = Character_BattleData["vehicleData"]["waterVehicleData"]["vehicleData"]
|
||||
otherVehicleData = Character_BattleData["vehicleData"]["otherVehicleData"]["vehicleData"]
|
||||
airVehicleData = Character_BattleData["vehicleData"]["airVehicleData"]["vehicleData"]
|
||||
|
||||
# 打开特定底图
|
||||
screen1 = Image.open(os.path.join(
|
||||
screen1_dir, screen_demo)).convert("RGBA")
|
||||
screen2 = Image.open(os.path.join(
|
||||
screen2_dir, screen_demo)).convert("RGBA")
|
||||
w_screen1, h_screen1 = screen1.size
|
||||
w_screen1r, w_screen1g, w_screen1b, w_screen1a = screen1.split()
|
||||
# 筛选标题和横幅
|
||||
text = "载具总览"
|
||||
w_text, h_text = Title.getsize(text)
|
||||
w_tiaotiao, h_tiaotiao = article.size
|
||||
# 坐标数据
|
||||
h_act = 40
|
||||
hlist = []
|
||||
for i in range(0, num):
|
||||
hf = h_tiaotiao + h_screen1 * i - h_act * (i + 1)
|
||||
hlist.append(hf)
|
||||
|
||||
# 计算总高度并生成新画布
|
||||
h_scr = h_screen1 * num + h_tiaotiao - h_act * (num)
|
||||
date_screen = Image.new("RGBA", (w_screen1, h_scr), (0, 124,212,100))
|
||||
|
||||
date_screen.paste(article, (0, 0), article_a)
|
||||
date_screen.paste(down, (0, 0), down_a)
|
||||
# 区别排列数据展示框
|
||||
for i in range(0, num):
|
||||
if i % 2 == 0:
|
||||
if i == 0:
|
||||
date_screen.paste(message, (0, hlist[i]), message_a)
|
||||
else:
|
||||
date_screen.paste(screen1, (0, hlist[i]), w_screen1a)
|
||||
else:
|
||||
date_screen.paste(screen2, (0, hlist[i]), w_screen1a)
|
||||
# date_screen.paste(by, (0, hlist[-1]+h_screen1-h_act), by_a)
|
||||
# 添加数据
|
||||
date_screen_pic = ImageDraw.Draw(date_screen)
|
||||
date_screen_pic.text(
|
||||
(((w_screen1 - w_text) / 2), 50),
|
||||
text,
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
# date_screen.paste(by, (0, hlist[-1]+h_screen1-h_act), by_a)
|
||||
# 敌前三的武器数据
|
||||
# sorted_list = (sorted(Character_Battle_weaponStatList, key=lambda x: x['kill']))[-3:]
|
||||
# sorted_list = Character_Battle_weaponStatList[:(num-1)]
|
||||
|
||||
|
||||
sorted_list = await filtrate_common().vehicle_filtrate_common(Character_BattleData, factionId)
|
||||
#await
|
||||
|
||||
# sorted_list = (sorted(sorted_list1, key=lambda x: x['kill']))
|
||||
#sorted_list.insert(3, AD) 插入广告用
|
||||
|
||||
for i in range(0, len(sorted_list)):
|
||||
kill = sorted_list[i]["kill"]
|
||||
kps = sorted_list[i]["spk"]
|
||||
hit = sorted_list[i]["hit"]
|
||||
fire = sorted_list[i]["fire"]
|
||||
accuracy = sorted_list[i]["accuracy"]
|
||||
rdkill = sorted_list[i]["roadKill"]
|
||||
hpk = "%.2f" % sorted_list[i]["hpk"] # 命中数量/击杀数量
|
||||
playTime = int(((sorted_list[i]["playTime"])))
|
||||
minutes, seconds = divmod(playTime, 60)
|
||||
hours, minutes = divmod(minutes, 60)
|
||||
days, hours = divmod(hours, 24)
|
||||
dtime = f"{days}天 {hours}时 {minutes}分 {seconds}秒"
|
||||
imageID = sorted_list[i]["imageId"]
|
||||
name = sorted_list[i]["name"]
|
||||
damage = (sorted_list[i]["damage"])/10000
|
||||
dmg = (("%.2f" % damage) + 'W')
|
||||
|
||||
try:
|
||||
icon = str(imageID + ".png")
|
||||
except:
|
||||
if i == 3:
|
||||
icon = str('none.png')
|
||||
else:
|
||||
icon = str('wrel.png')
|
||||
weapon_icondir = str(os.path.join(icon_dir, icon))
|
||||
# 拆分名字
|
||||
string_B = ""
|
||||
|
||||
try:
|
||||
splitted = name.split(" ")
|
||||
string_A = splitted[0] # 获取第一个部分
|
||||
string_B = ''.join(str(x)
|
||||
for x in splitted[1:]) # 获取第二个部分
|
||||
except:
|
||||
string_A = name
|
||||
w_string_A, h_string_A = Title.getsize(str(string_A))
|
||||
w_string_B, h_string_B = Title.getsize(str(string_B))
|
||||
if w_string_A + w_string_B < 465:
|
||||
string_A = name
|
||||
string_B = ''
|
||||
w_string_A, h_string_A = Title.getsize(str(string_A))
|
||||
w_string_B, h_string_B = Title.getsize(str(string_B))
|
||||
|
||||
# 计算参数
|
||||
try:
|
||||
weapon = Image.open(weapon_icondir).convert("RGBA")
|
||||
except:
|
||||
weapon = Image.open(
|
||||
str(os.path.join(Source_dir, bruh))).convert("RGBA")
|
||||
weapon_r, weapon_g, weapon_b, weapon_a = weapon.split()
|
||||
w_kill, h_kill = heavyit.getsize(str(kill))
|
||||
w_death, h_death = Title.getsize(str(fire))
|
||||
w_hsr, h_hsr = Title.getsize(str(hit))
|
||||
w_accuracy, h_accuracy = Title.getsize(str(accuracy))
|
||||
w_kdr, h_kdr = Title.getsize(str(kps))
|
||||
w_kpm, h_kpm = Title.getsize(str(dmg))
|
||||
w_hpk, h_hpk = Title.getsize(str(hpk))
|
||||
w_ivi, h_ivi = Title.getsize(str(rdkill))
|
||||
w_playTime, h_playTime = Title.getsize(str(dtime))
|
||||
|
||||
interval = 860
|
||||
(x, y) = weapon.size
|
||||
x_s = 400 # 定义缩小后的标准宽度
|
||||
y_s = int(y * x_s / x) # 基于标准宽度计算缩小后的高度
|
||||
weapon1 = weapon.resize((x_s, y_s), Image.ANTIALIAS)
|
||||
r, g, b, a = weapon1.split()
|
||||
if weapon.size == (128, 128):
|
||||
date_screen.paste(
|
||||
weapon1, (110, (360 + interval + interval * i)), a)
|
||||
elif weapon.size == (400, 400):
|
||||
date_screen.paste(
|
||||
weapon1, (110, (360 + interval + interval * i)), a)
|
||||
else:
|
||||
date_screen.paste(
|
||||
weapon1, (110, (460 + interval + interval * i)), a)
|
||||
|
||||
date_screen_pic.text(
|
||||
(20, 150 + interval + interval * i),
|
||||
str(i+1),
|
||||
fill=(255, 255, 255), # 255, 87, 23
|
||||
font=Numttf, # heavyit
|
||||
)
|
||||
|
||||
date_screen_pic.text(
|
||||
((850 + (370 - w_kill) / 2), 333 + interval + interval * i),
|
||||
str(kill),
|
||||
fill=(0, 0, 0), # 255, 87, 23
|
||||
font=Title, # heavyit
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((850 + (370 - w_death) / 2), 475 + interval + interval * i),
|
||||
str(fire),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((850 + (370 - w_hsr) / 2), 617 + interval + interval * i),
|
||||
str(hit),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((850 + (370 - w_accuracy) / 2),
|
||||
753 + interval + interval * i),
|
||||
str(accuracy),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((1540 + (370 - w_kdr) / 2), 333 + interval + interval * i),
|
||||
str(kps),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((1540 + (370 - w_kpm) / 2), 475 + interval + interval * i),
|
||||
str(dmg),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((1540 + (370 - w_hpk) / 2), 617 + interval + interval * i),
|
||||
str(hpk),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((1540 + (370 - w_ivi) / 2), 753 + interval + interval * i),
|
||||
str(rdkill),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
if w_string_A > 465:
|
||||
Title_s = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_blod)),
|
||||
64,
|
||||
)
|
||||
w_string_A, h_string_A = Title_s.getsize(str(string_A))
|
||||
date_screen_pic.text(
|
||||
((65 + (465 - w_string_A) / 2),
|
||||
830 + interval + interval * i),
|
||||
str(string_A),
|
||||
fill=(0, 67, 48),
|
||||
font=Title_s,
|
||||
)
|
||||
else:
|
||||
date_screen_pic.text(
|
||||
((65 + (465 - w_string_A) / 2),
|
||||
830 + interval + interval * i),
|
||||
str(string_A),
|
||||
fill=(0, 67, 48),
|
||||
font=Title,
|
||||
)
|
||||
|
||||
if w_string_B > 465:
|
||||
Title_s = ImageFont.truetype(
|
||||
(os.path.join(Source_dir, judou_blod)),
|
||||
64,
|
||||
)
|
||||
w_string_B, h_string_B = Title_s.getsize(str(string_B))
|
||||
if w_string_B > 465:
|
||||
None
|
||||
else:
|
||||
date_screen_pic.text(
|
||||
((65 + (465 - w_string_B) / 2),
|
||||
920 + interval + interval * i),
|
||||
str(string_B),
|
||||
fill=(0, 67, 48),
|
||||
font=Title_s,
|
||||
)
|
||||
else:
|
||||
|
||||
date_screen_pic.text(
|
||||
((65 + (465 - w_string_B) / 2),
|
||||
920 + interval + interval * i),
|
||||
str(string_B),
|
||||
fill=(0, 67, 48),
|
||||
font=Title,
|
||||
)
|
||||
date_screen_pic.text(
|
||||
((1030 + (870 - w_playTime) / 2),
|
||||
912 + interval + interval * i+3),
|
||||
str(dtime),
|
||||
fill=(0, 0, 0),
|
||||
font=Title,
|
||||
)
|
||||
|
||||
w_screen, h_screen = date_screen.size
|
||||
h = height + h_screen
|
||||
date1 = Image.new("RGBA", (w_screen1, h), (0,124,212,0))
|
||||
sr, sg, sb, sa = date_screen.split()
|
||||
te = h_screen + 1900
|
||||
# 生成最终图
|
||||
date1.paste(date_common, (0, 0))
|
||||
date1.paste(date_screen, (0, 900), sa)
|
||||
date1.paste(by, (0, te), by_a)
|
||||
"""# 添加广告信息
|
||||
w_afd, h_afd = afd.size
|
||||
|
||||
w_date1, h_date1 = date1.size
|
||||
h_adlast = h_afd + h_date1
|
||||
date2 = Image.new("RGBA", (w_date1, h_adlast), (4, 212, 155, 0))
|
||||
dr, dg, db, da = date1.split()
|
||||
date2.paste(date1, (0, 0), da)
|
||||
date2.paste(afd, (0, h_date1))"""
|
||||
|
||||
# 保存
|
||||
# date1.save('test.png')
|
||||
w_date1, h_date1 = date1.size
|
||||
date2 = date1.convert("RGB")
|
||||
date2 = date2.resize((w_date1, h_date1), Image.ANTIALIAS)
|
||||
filename = str(charactername) + '.jpg'
|
||||
Output_dir = os.path.join(file_path, "Charter_Sundy_Query/Output")
|
||||
output = os.path.join(Output_dir, filename)
|
||||
date2.save(output, "JPEG", quality=70, subsampling=0)
|
||||
|
||||
return filename
|
||||
# return date1
|
||||
|
||||
|
||||
|
||||
class filtrate_common():
|
||||
|
||||
#def txt_reader(self):
|
||||
async def txt_reader(self):
|
||||
with open("GGou7.txt", "r", encoding='gbk') as file:
|
||||
lines = file.read().strip("'").strip('"')
|
||||
lines = lines.replace("\n", "")
|
||||
lines = lines.replace("\t", "")
|
||||
lines = lines.strip("'")
|
||||
lines = json.loads(lines)
|
||||
# lines = lines.strip()
|
||||
return lines
|
||||
|
||||
|
||||
#def vehicle_filtrate_common(self, Character_BattleData, factionId):
|
||||
async def vehicle_filtrate_common(self, Character_BattleData, factionId):
|
||||
landVehicleData = Character_BattleData["vehicleData"]["landVehicleData"]["vehicleData"]
|
||||
waterVehicleData = Character_BattleData["vehicleData"]["waterVehicleData"]["vehicleData"]
|
||||
otherVehicleData = Character_BattleData["vehicleData"]["otherVehicleData"]["vehicleData"]
|
||||
airVehicleData = Character_BattleData["vehicleData"]["airVehicleData"]["vehicleData"]
|
||||
date_list = [landVehicleData, waterVehicleData,
|
||||
otherVehicleData, airVehicleData]
|
||||
nc_list = ["Reaver", "Vanguard", "Flash", "Harasser", "Sunderer", "Lightning",
|
||||
"Corsair", "Valkyrie", "Liberator", "Galaxy", "Colossus", "Bastion Fleet Carrier", "Flash XS-1", "Drop Pod",]
|
||||
vs_list = ["Scythe", "Magrider", "Flash", "Harasser", "Sunderer", "Lightning",
|
||||
"Corsair", "Valkyrie", "Liberator", "Galaxy", "Colossus", "Bastion Fleet Carrier", "Flash XS-1", "Drop Pod",]
|
||||
tr_list = ["Mosquito", "Prowler", "Flash", "Harasser", "Sunderer", "Lightning",
|
||||
"Corsair", "Valkyrie", "Liberator", "Galaxy", "Colossus", "Bastion Fleet Carrier", "Flash XS-1", "Drop Pod",]
|
||||
nso_list = ["Dervish", "Chimera", "Flash", "Harasser", "Sunderer", "Lightning",
|
||||
"Corsair", "Valkyrie", "Liberator", "Galaxy", "Colossus", "Bastion Fleet Carrier", "Flash XS-1", "Drop Pod",]
|
||||
|
||||
text = []
|
||||
output = []
|
||||
if factionId == "1":
|
||||
for b in range(0, len(date_list)):
|
||||
for i in range(0, len(date_list[b])):
|
||||
mid = date_list[b][i]
|
||||
partial_dict = {k: mid[k] for k in list(mid.keys())[:-1]}
|
||||
|
||||
text.append(partial_dict)
|
||||
|
||||
test = [item for item in text if item["engName"] in vs_list]
|
||||
|
||||
def custom_order_index(item):
|
||||
return vs_list.index(item["engName"])
|
||||
sorted_list = sorted(test, key=custom_order_index)
|
||||
# output.append(test)
|
||||
elif factionId == "2":
|
||||
for b in range(0, len(date_list)):
|
||||
for i in range(0, len(date_list[b])):
|
||||
mid = date_list[b][i]
|
||||
partial_dict = {k: mid[k] for k in list(mid.keys())[:-1]}
|
||||
|
||||
text.append(partial_dict)
|
||||
|
||||
test = [item for item in text if item["engName"] in nc_list]
|
||||
|
||||
def custom_order_index(item):
|
||||
return nc_list.index(item["engName"])
|
||||
sorted_list = sorted(test, key=custom_order_index)
|
||||
elif factionId == "2":
|
||||
for b in range(0, len(date_list)):
|
||||
for i in range(0, len(date_list[b])):
|
||||
mid = date_list[b][i]
|
||||
partial_dict = {k: mid[k] for k in list(mid.keys())[:-1]}
|
||||
|
||||
text.append(partial_dict)
|
||||
|
||||
test = [item for item in text if item["engName"] in tr_list]
|
||||
|
||||
def custom_order_index(item):
|
||||
return tr_list.index(item["engName"])
|
||||
sorted_list = sorted(test, key=custom_order_index)
|
||||
# output.append(test)
|
||||
else:
|
||||
for b in range(0, len(date_list)):
|
||||
for i in range(0, len(date_list[b])):
|
||||
mid = date_list[b][i]
|
||||
partial_dict = {k: mid[k] for k in list(mid.keys())[:-1]}
|
||||
|
||||
text.append(partial_dict)
|
||||
|
||||
test = [item for item in text if item["engName"] in nso_list]
|
||||
# output.append(test)
|
||||
|
||||
def custom_order_index(item):
|
||||
return nso_list.index(item["engName"])
|
||||
sorted_list = sorted(test, key=custom_order_index)
|
||||
# return sorted_list
|
||||
|
||||
|
||||
return sorted_list
|
||||
|
||||
|
||||
|
||||
"""name = "GGou7"
|
||||
date = Vechile_await Character_Query().Character_date(name)
|
||||
|
||||
# date = Vechile_await Character_Query().txt_reader()
|
||||
start = Vechile_await Character_Query().Date_Rinse_common(date)
|
||||
print(start)"""
|
||||
Reference in New Issue
Block a user