This commit is contained in:
2026-07-29 18:09:29 +08:00
parent 8d522dae0f
commit 1655d1ef50
13 changed files with 933 additions and 915 deletions
+17 -14
View File
@@ -9,20 +9,23 @@
插件内置 `功能` 指令,会以图片形式展示完整指令列表、参数说明和是否需要令牌。当前帮助页按 13 个功能分组维护,约 88 条指令。
主要功能包括:
- 日常功能:日常、月历、名望、诛恶。
- 官方功能:公告、维护、技改、区服、开服、状态。
- 角色功能:角色、资历、名片、所有名片、奇遇、未做奇遇、战绩、精耐。
- 职业功能:小药、宏、配装、阵眼、奇穴、技能。
- 休闲功能:烟花、拜师、收徒、随机名片、攻略、奇遇统计、近期奇遇、奇遇汇总。
- 阵营功能:沙盘、阵营拍卖、阵营事件、关隘首领、帮战记录、统战 YY。
- 副本功能:百战、招募、掉落、解密。
- 活动功能:扶摇、本日赤兔、本周赤兔、刷马、的卢。
- 交易功能:金价、物价、交易行、贴吧物价。
- 杂项功能:科举、花价、装饰、器物、八卦、骗子、骚话。
- 排行功能:名剑统计名剑排行、资历排行、试炼排行和各类风云录榜单。
- 推送功能:开服推送、新闻推送、刷马推送、赤兔推送。
- 避雷功能:避雷查看、添加、删除、修改、查询。
【活动情报】
活动日历: 日常 [延后天数] | 日常预测
声望社:楚天社 | 云从社 | 披风会 | 穹野卫
关隘首领:关隘
赤兔:赤兔 | 本周赤兔
阵营事件:阵营奉献 [阵营]
烟花记录::烟花 区服 角色
马场查询:刷马 | 马场
【名剑相关】
名剑战绩:战绩 服务器 角色 [模式]
名剑排行:名剑排行 [模式] [数量]
名剑统计名剑统计 [模式]
【排行榜单】
排行统计:名士五十强 服务器 | 老江湖五十强 服务器 | 兵甲藏家五十强 服务器 | 名师五十强 服务器 | 阵营英雄五十强 服务器 | 薪火相传五十强 服务器 |
庐园广记一百强 服务器 | 浩气神兵宝甲五十强 服务器 | 恶人神兵宝甲五十强 服务器 | 浩气爱心帮会五十强 服务器 | 恶人爱心帮会五十强 服务器 |
赛季恶人五十强 服务器 | 赛季浩气五十强 服务器 | 上周恶人五十强 服务器 | 上周浩气五十强 服务器 | 本周恶人五十强 服务器 | 本周浩气五十强 服务器
试炼排行:试炼排行 服务器 心法
## 安装与依赖
+20
View File
@@ -1,5 +1,7 @@
from pathlib import Path
from datetime import datetime,date
from zoneinfo import ZoneInfo
import aiofiles
import base64
import os
@@ -142,3 +144,21 @@ def load_as_base64(icons_dir: str) -> dict[str, str]:
icons[display_name] = f"data:{mime};base64,{data}"
return icons
def format_time(ts):
try:
return datetime.fromtimestamp(int(ts),
tz=ZoneInfo("Asia/Shanghai")
).strftime("%Y-%m-%d %H:%M:%S")
except (TypeError, ValueError, OSError):
return ""
def format_remaining(ts):
try:
seconds = max(0, int(ts) - int(datetime.now().timestamp()))
hours, seconds = divmod(seconds, 3600)
minutes, seconds = divmod(seconds, 60)
return f"{hours}{minutes:02d}{seconds:02d}"
except (TypeError, ValueError):
return ""
+388 -686
View File
File diff suppressed because it is too large Load Diff
+134 -123
View File
@@ -283,9 +283,136 @@ class MessageBuilder:
return await self.T2I_image_msg(event, lambda: self.jx3api.richang("list",15))
async def xingxiashijian(self, event: AstrMessageEvent,name: str = "穹野卫"):
""" 名望"""
return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian(name))
async def qiongyewei(self, event: AstrMessageEvent):
""" 穹野卫"""
return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("穹野卫"))
async def pifenghui(self, event: AstrMessageEvent):
""" 披风会"""
return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("披风会"))
async def yunchongshe(self, event: AstrMessageEvent):
""" 云从社"""
return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("云从社"))
async def chutianshe(self, event: AstrMessageEvent):
""" 楚天社 """
return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("楚天社"))
async def guanaishouling(self, event: AstrMessageEvent):
""" 关隘首领"""
return await self.T2I_image_msg(event, self.jx3api.guanaishouling)
async def benrichitu(self, event: AstrMessageEvent):
""" 本日赤兔"""
return await self.plain_msg(event, self.jx3api.benrichitu)
async def benzhouchitu(self, event: AstrMessageEvent):
""" 本周赤兔"""
return await self.plain_msg(event, self.jx3api.benzhouchitu)
async def zhenyingevent(self, event: AstrMessageEvent, name:str = ""):
""" 阵营事件 阵营"""
return await self.T2I_image_msg(event, lambda: self.jx3api.zhenyingevent(name,50))
async def yanhuachaxun(self, event: AstrMessageEvent,server: str = "",name: str = "" ):
""" 烟花 服务器 角色"""
return await self.T2I_image_msg(event, lambda: self.jx3api.yanhuachaxun( self.serverdefault(server),name))
async def shuma(self, event: AstrMessageEvent,server: str ):
""" 刷马 服务器"""
return await self.plain_msg(event, lambda: self.jx3api.shuma(server))
async def machang(self, event: AstrMessageEvent,server: str ):
""" 马场 服务器"""
return await self.plain_msg(event, lambda: self.jx3api.machang(server,1))
async def zhanji(self, event: AstrMessageEvent, server: str ,name: str , mode:str = "33"):
""" 战绩 服务器 角色 模式"""
return await self.T2I_image_msg(event, lambda: self.jx3api.zhanji(name, server,mode))
async def mingjianpaihang(self, event: AstrMessageEvent, mode:str = "33",limit: int = 50):
""" 名剑排行 模式 数量 """
return await self.T2I_image_msg(event, lambda: self.jx3api.mingjianpaihang(limit,mode))
async def mingjiantongji(self, event: AstrMessageEvent,mode: str = "33"):
""" 名剑统计 模式"""
return await self.T2I_image_msg(event, lambda: self.jx3api.mingjiantongji(mode))
async def mingshiwushiqiang(self, event: AstrMessageEvent, server: str):
""" 名士五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("名士五十强", server))
async def laojianghuwushiqiang(self, event: AstrMessageEvent, server: str):
""" 老江湖五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("老江湖五十强", server))
async def bingjiacangjiawushiqiang(self, event: AstrMessageEvent, server: str):
""" 兵甲藏家五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("兵甲藏家五十强", server))
async def mingshiwushiqiang_mentor(self, event: AstrMessageEvent, server: str):
""" 名师五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("名师五十强", server))
async def zhengyingyingxiongwushiqiang(self, event: AstrMessageEvent, server: str):
""" 阵营英雄五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("阵营英雄五十强", server))
async def xinhuoxiangchuanwushiqiang(self, event: AstrMessageEvent, server: str):
""" 薪火相传五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("薪火相传五十强", server))
async def luyuanguangjiyibaiqiang(self, event: AstrMessageEvent, server: str):
""" 庐园广记一百强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("庐园广记一百强", server))
async def haoqishenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str):
""" 浩气神兵宝甲五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("浩气神兵宝甲五十强", server))
async def erenshenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str ):
""" 恶人神兵宝甲五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("恶人神兵宝甲五十强", server))
async def haoqiaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str ):
""" 浩气爱心帮会五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("浩气爱心帮会五十强", server))
async def erenaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str ):
""" 恶人爱心帮会五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("恶人爱心帮会五十强", server))
async def saijierenwushiqiang(self, event: AstrMessageEvent, server: str):
""" 赛季恶人五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("赛季恶人五十强", server))
async def saijihaoqiwushiqiang(self, event: AstrMessageEvent, server: str ):
""" 赛季浩气五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("赛季浩气五十强", server))
async def shangzhouerenwushiqiang(self, event: AstrMessageEvent, server: str ):
""" 上周恶人五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("上周恶人五十强", server))
async def shangzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str ):
""" 上周浩气五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("上周浩气五十强", server))
async def benzhouerenwushiqiang(self, event: AstrMessageEvent, server: str ):
""" 本周恶人五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("本周恶人五十强", server))
async def benzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str ):
""" 本周浩气五十强 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("本周浩气五十强", server))
async def shilianpaixing(self, event: AstrMessageEvent, server: str , name: str):
""" 试炼排行 服务器 心法 """
return await self.T2I_image_msg(event, lambda: self.jx3api.shilianpaixing(name, server))
async def keju(self, event: AstrMessageEvent,subject: str, limit: int = 5):
@@ -366,9 +493,7 @@ class MessageBuilder:
""" 资历排行 """
return await self.T2I_image_msg(event, lambda: self.jx3api.zilipaixing("", ""))
async def shilianpaixing(self, event: AstrMessageEvent, name: str, server: str = ""):
""" 试炼排行 心法 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.shilianpaixing(name, self.serverdefault(server)))
async def shaohua(self, event: AstrMessageEvent,):
@@ -406,29 +531,17 @@ class MessageBuilder:
return await self.T2I_image_msg(event, self.jx3api.zhueevent)
async def benrichitu(self, event: AstrMessageEvent):
""" 本日赤兔"""
return await self.plain_msg(event, self.jx3api.benrichitu)
async def benzhouchitu(self, event: AstrMessageEvent):
""" 本周赤兔"""
return await self.plain_msg(event, self.jx3api.benzhouchitu)
async def zhengyingpaimai(self, event: AstrMessageEvent,name: str = "玄晶", server: str = ""):
""" 阵营拍卖 物品名称 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.zhengyingpaimai( self.serverdefault(server), name))
async def zhenyingevent(self, event: AstrMessageEvent):
""" 阵营事件"""
return await self.T2I_image_msg(event, self.jx3api.zhenyingevent)
async def guanaishouling(self, event: AstrMessageEvent):
""" 关隘首领"""
return await self.T2I_image_msg(event, self.jx3api.guanaishouling)
async def bangzhanjilu(self, event: AstrMessageEvent, server: str = ""):
@@ -446,9 +559,7 @@ class MessageBuilder:
return await self.T2I_image_msg(event, lambda: self.jx3api.dilujilu( self.serverdefault(server)))
async def yanhuachaxun(self, event: AstrMessageEvent,name: str = "飞翔大野猪", server: str = ""):
""" 烟花 角色 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.yanhuachaxun( self.serverdefault(server),name))
async def pianzhi(self, event: AstrMessageEvent,qq: str):
@@ -489,20 +600,8 @@ class MessageBuilder:
return await self.T2I_image_msg(event, lambda: self.jx3api.qiyuhuizong(self.serverdefault(target_server), num))
async def zhanji(self, event: AstrMessageEvent,name: str = "飞翔大野猪", server: str = "", mode:str = "33"):
""" 战绩 角色 服务器 类型"""
return await self.T2I_image_msg(event, lambda: self.jx3api.zhanji(name, self.serverdefault(server),mode))
async def mingjianpaihang(self, event: AstrMessageEvent,limit: str = "50", mode:str = "33"):
""" 排行 数量 类型"""
return await self.T2I_image_msg(event, lambda: self.jx3api.mingjianpaihang(limit,mode))
async def mingjiantongji(self, event: AstrMessageEvent,mode: str = "33"):
""" 名剑统计 模式"""
return await self.T2I_image_msg(event, lambda: self.jx3api.mingjiantongji(mode))
async def tuanduizhaomu(self, event: AstrMessageEvent,keyword: str = "25人普通会战弓月城", server: str = ""):
""" 招募 副本 服务器"""
@@ -519,94 +618,8 @@ class MessageBuilder:
return await self.T2I_image_msg(event, lambda: self.jx3api.shitu(1, keyword, self.serverdefault(server)))
async def rank_statistical(self, event: AstrMessageEvent, rank_name: str, server: str = ""):
""" 各类榜单 榜单名称 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical(rank_name, self.serverdefault(server)))
async def mingshiwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 名士五十强 服务器"""
return await self. rank_statistical(event, "名士五十强", server)
async def laojianghuwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 老江湖五十强 服务器"""
return await self. rank_statistical(event, "老江湖五十强", server)
async def bingjiacangjiawushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 兵甲藏家五十强 服务器"""
return await self. rank_statistical(event, "兵甲藏家五十强", server)
async def mingshiwushiqiang_mentor(self, event: AstrMessageEvent, server: str = ""):
""" 名师五十强 服务器"""
return await self. rank_statistical(event, "名师五十强", server)
async def zhengyingyingxiongwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 阵营英雄五十强 服务器"""
return await self. rank_statistical(event, "阵营英雄五十强", server)
async def xinhuoxiangchuanwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 薪火相传五十强 服务器"""
return await self. rank_statistical(event, "薪火相传五十强", server)
async def luyuanguangjiyibaiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 庐园广记一百强 服务器"""
return await self. rank_statistical(event, "庐园广记一百强", server)
async def haoqishenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 浩气神兵宝甲五十强 服务器"""
return await self. rank_statistical(event, "浩气神兵宝甲五十强", server)
async def erenshenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 恶人神兵宝甲五十强 服务器"""
return await self. rank_statistical(event, "恶人神兵宝甲五十强", server)
async def haoqiaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 浩气爱心帮会五十强 服务器"""
return await self. rank_statistical(event, "浩气爱心帮会五十强", server)
async def erenaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 恶人爱心帮会五十强 服务器"""
return await self. rank_statistical(event, "恶人爱心帮会五十强", server)
async def saijierenwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 赛季恶人五十强 服务器"""
return await self. rank_statistical(event, "赛季恶人五十强", server)
async def saijihaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 赛季浩气五十强 服务器"""
return await self. rank_statistical(event, "赛季浩气五十强", server)
async def shangzhouerenwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 上周恶人五十强 服务器"""
return await self. rank_statistical(event, "上周恶人五十强", server)
async def shangzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 上周浩气五十强 服务器"""
return await self. rank_statistical(event, "上周浩气五十强", server)
async def benzhouerenwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 本周恶人五十强 服务器"""
return await self. rank_statistical(event, "本周恶人五十强", server)
async def benzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""):
""" 本周浩气五十强 服务器"""
return await self. rank_statistical(event, "本周浩气五十强", server)
async def jueshe(self, event: AstrMessageEvent,name: str, server: str = ""):
@@ -634,9 +647,7 @@ class MessageBuilder:
return await self.image_msg(event, lambda: self.jx3api.shuijimingpian(force,body, self.serverdefault(server)))
async def shuma(self, event: AstrMessageEvent,server: str = ""):
""" 刷马 服务器"""
return await self.plain_msg(event, lambda: self.jx3api.shuma( self.serverdefault(server)))
async def jinjia(self, event: AstrMessageEvent,server: str = "", limit:str = "15"):
+59 -46
View File
@@ -198,56 +198,21 @@ class Jx3ApiPlugin(Star):
self.command_map = {
"功能": self. jx3cmd.helps,
"日常": self. jx3cmd.richang,
"月历": self. jx3cmd.richangyuche,
"名望": self. jx3cmd.xingxiashijian,
"科举": self. jx3cmd.keju,
"花价": self. jx3cmd.huajia,
"装饰": self. jx3cmd.zhuangshi,
"器物": self. jx3cmd.qiwu,
"公告": self. jx3cmd.xinwen,
"维护": self. jx3cmd.weihu,
"区服": self. jx3cmd.qufu,
"开服": self. jx3cmd.kaifu,
"状态": self. jx3cmd.zhuangtai,
"技改": self. jx3cmd.jigai,
"小药": self. jx3cmd.xiaoyao,
"阵眼": self. jx3cmd.zhenyan,
"奇穴": self. jx3cmd.qixue,
"技能": self. jx3cmd.jineng,
"资历排行": self. jx3cmd.zilipaixing,
"全服资历排行": self. jx3cmd.zilipaihang,
"试炼排行": self. jx3cmd.shilianpaixing,
"骚话": self. jx3cmd.shaohua,
"资历": self. jx3cmd.zili,
"解密": self. jx3cmd.jiemi,
"沙盘": self. jx3cmd.shapan,
"攻略": self. jx3cmd.qiyugonglue,
"": self. jx3cmd.hong,
"配装": self. jx3cmd.peizhuang,
"百战": self. jx3cmd.baizhan,
"扶摇": self. jx3cmd.fuyaojjiutian,
"诛恶": self. jx3cmd.zhueevent,
"本日赤兔": self. jx3cmd.benrichitu,
"日常预测": self. jx3cmd.richangyuche,
"穹野卫": self. jx3cmd.qiongyewei,
"披风会": self. jx3cmd.pifenghui,
"云从社": self. jx3cmd.yunchongshe,
"楚天社": self. jx3cmd.chutianshe,
"关隘": self. jx3cmd.guanaishouling,
"赤兔": self. jx3cmd.benrichitu,
"本周赤兔": self. jx3cmd.benzhouchitu,
"拍卖": self. jx3cmd.zhengyingpaimai,
"阵营事件": self. jx3cmd.zhenyingevent,
"关隘首领": self. jx3cmd.guanaishouling,
"帮战记录": self. jx3cmd.bangzhanjilu,
"统战": self. jx3cmd.tongzhanyy,
"的卢": self. jx3cmd.dilujilu,
"阵营奉献": self. jx3cmd.zhenyingevent,
"烟花": self. jx3cmd.yanhuachaxun,
"骗子": self. jx3cmd.pianzhi,
"奇遇": self. jx3cmd.juesheqiyu,
"未做奇遇": self. jx3cmd.weizuoqiyu,
"奇遇统计": self. jx3cmd.qiyutongji,
"近期奇遇": self. jx3cmd.jinqiqiyu,
"奇遇汇总": self. jx3cmd.qiyuhuizong,
"刷马": self. jx3cmd.shuma,
"马场": self. jx3cmd.machang,
"战绩": self. jx3cmd.zhanji,
"名剑排行": self. jx3cmd.mingjianpaihang,
"名剑统计": self. jx3cmd.mingjiantongji,
"招募": self. jx3cmd.tuanduizhaomu,
"拜师": self. jx3cmd.baishi,
"收徒": self. jx3cmd.shoutu,
"名士五十强": self. jx3cmd.mingshiwushiqiang,
"老江湖五十强": self. jx3cmd.laojianghuwushiqiang,
"兵甲藏家五十强": self. jx3cmd.bingjiacangjiawushiqiang,
@@ -265,12 +230,60 @@ class Jx3ApiPlugin(Star):
"上周浩气五十强": self. jx3cmd.shangzhouhaoqiwushiqiang,
"本周恶人五十强": self. jx3cmd.benzhouerenwushiqiang,
"本周浩气五十强": self. jx3cmd.benzhouhaoqiwushiqiang,
"试炼排行": self. jx3cmd.shilianpaixing,
"科举": self. jx3cmd.keju,
"花价": self. jx3cmd.huajia,
"装饰": self. jx3cmd.zhuangshi,
"器物": self. jx3cmd.qiwu,
"公告": self. jx3cmd.xinwen,
"维护": self. jx3cmd.weihu,
"区服": self. jx3cmd.qufu,
"开服": self. jx3cmd.kaifu,
"状态": self. jx3cmd.zhuangtai,
"技改": self. jx3cmd.jigai,
"小药": self. jx3cmd.xiaoyao,
"阵眼": self. jx3cmd.zhenyan,
"奇穴": self. jx3cmd.qixue,
"技能": self. jx3cmd.jineng,
"资历排行": self. jx3cmd.zilipaixing,
"全服资历排行": self. jx3cmd.zilipaihang,
"骚话": self. jx3cmd.shaohua,
"资历": self. jx3cmd.zili,
"解密": self. jx3cmd.jiemi,
"沙盘": self. jx3cmd.shapan,
"攻略": self. jx3cmd.qiyugonglue,
"": self. jx3cmd.hong,
"配装": self. jx3cmd.peizhuang,
"百战": self. jx3cmd.baizhan,
"扶摇": self. jx3cmd.fuyaojjiutian,
"诛恶": self. jx3cmd.zhueevent,
"拍卖": self. jx3cmd.zhengyingpaimai,
"帮战记录": self. jx3cmd.bangzhanjilu,
"统战": self. jx3cmd.tongzhanyy,
"的卢": self. jx3cmd.dilujilu,
"骗子": self. jx3cmd.pianzhi,
"奇遇": self. jx3cmd.juesheqiyu,
"未做奇遇": self. jx3cmd.weizuoqiyu,
"奇遇统计": self. jx3cmd.qiyutongji,
"近期奇遇": self. jx3cmd.jinqiqiyu,
"奇遇汇总": self. jx3cmd.qiyuhuizong,
"招募": self. jx3cmd.tuanduizhaomu,
"拜师": self. jx3cmd.baishi,
"收徒": self. jx3cmd.shoutu,
"角色": self. jx3cmd.jueshe,
"名片": self. jx3cmd.jueshemingpian,
"精耐": self. jx3cmd.jingnai,
"所有名片": self. jx3cmd.shuoyoumingpian,
"随机名片": self. jx3cmd.shuijimingpian,
"刷马": self. jx3cmd.shuma,
"金价": self. jx3cmd.jinjia,
"物价": self. jx3cmd.wujia,
"八卦": self. jx3cmd.bagua,
+7 -7
View File
@@ -95,8 +95,8 @@
<thead>
<tr>
<th>门派</th>
<th>当前赛季数量</th>
<th>赛季数量</th>
<th>本周数量</th>
<th>数量</th>
</tr>
</thead>
@@ -105,14 +105,14 @@
<tr>
<td>
<div class="school">
{% if icons.sect.get(m.name) %}
<img class="school-icon" src="{{ icons.sect[m.name] }}" alt="{{ m.name }}">
{% if icons.sect.get(m.forceName) %}
<img class="school-icon" src="{{ icons.sect[m.forceName] }}" alt="{{ m.forceName }}">
{% endif %}
<span>{{ m.name }}</span>
<span>{{ m.forceName }}</span>
</div>
</td>
<td class="num-col">{{ m.this }}</td>
<td class="num-col">{{ m.last }}</td>
<td class="num-col">{{ m.thisWeek }}</td>
<td class="num-col">{{ m.lastWeek }}</td>
</tr>
{% endfor %}
</tbody>
+8 -8
View File
@@ -137,17 +137,17 @@
<td class="rank-col">{{ loop.index }}</td>
<td>
<div class="force">
{% if icons.sect.get(item.force_name) %}
<img class="force-icon" src="{{ icons.sect[item.force_name] }}" alt="{{ item.force_name }}">
{% if icons.sect.get(item.forceName) %}
<img class="force-icon" src="{{ icons.sect[item.forceName] }}" alt="{{ item.forceName }}">
{% endif %}
<span>{{ item.force_name }}</span>
<span>{{ item.forceName }}</span>
</div>
</td>
<td class="role-col">{{ item.role_name }}</td>
<td class="level-col">{{ item.role_level }}</td>
<td class="camp-col">{{ item.camp_name }}</td>
<td class="tong-col">{{ item.tong_name }}</td>
<td class="score-col">{{ item.total_score }}</td>
<td class="role-col">{{ item.name }}</td>
<td class="level-col">{{ item.level }}</td>
<td class="camp-col">{{ item.campName }}</td>
<td class="tong-col">{{ item.tongName }}</td>
<td class="score-col">{{ item.totalScore }}</td>
</tr>
{% endfor %}
</tbody>
@@ -126,11 +126,11 @@
{% for item in items %}
<tr>
<td class="rank-col">{{ loop.index }}</td>
<td class="tong-col">{{ item.tong_name }}</td>
<td class="master-col">{{ item.master_name }}</td>
<td class="castle-col">{{ item.castle_name }}</td>
<td class="people-col">{{ item.now_count }}/{{ item.max_count }}</td>
<td class="score-col">{{ item.total_score }}</td>
<td class="tong-col">{{ item.tongName }}</td>
<td class="master-col">{{ item.masterName }}</td>
<td class="castle-col">{{ item.castleName }}</td>
<td class="people-col">{{ item.memberCount }}/{{ item.maxMemberCount }}</td>
<td class="score-col">{{ item.titlePoint }}</td>
</tr>
{% endfor %}
</tbody>
+139
View File
@@ -0,0 +1,139 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>帮会榜单</title>
<style>
body {
font-family: "Microsoft YaHei", Arial, sans-serif;
background: #f1f2f6;
margin: 0;
padding: 20px;
color: #2c2c33;
}
.container {
max-width: 1040px;
margin: 0 auto;
}
h1 {
font-size: 32px;
margin: 0 0 8px 0;
color: #222;
font-weight: 800;
text-align: center;
}
.meta {
margin-bottom: 24px;
color: #7a7f99;
font-size: 16px;
text-align: center;
}
table {
width: 100%;
border-collapse: collapse;
background: white;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 16px rgba(0,0,0,0.08);
text-align: left;
}
thead {
background: #d93939;
color: white;
font-size: 17px;
}
th, td {
padding: 12px 10px;
border-bottom: 1px solid #eee;
font-size: 15px;
vertical-align: middle;
}
tbody tr:nth-child(even) {
background: #fafafa;
}
.rank-col,
.people-col,
.score-col {
white-space: nowrap;
text-align: center;
}
.rank-col {
width: 56px;
color: #d93939;
font-weight: 800;
}
.tong-col {
min-width: 220px;
font-weight: 800;
color: #333;
word-break: break-word;
}
.master-col {
min-width: 150px;
color: #333;
word-break: break-word;
}
.castle-col {
min-width: 110px;
color: #60657a;
word-break: break-word;
}
.people-col {
color: #333;
font-variant-numeric: tabular-nums;
}
.score-col {
color: #d93939;
font-weight: 800;
font-variant-numeric: tabular-nums;
}
</style>
</head>
<body>
<div class="container">
<h1>{{ rank_name }}</h1>
<div class="meta">{{ server }} · 更新时间:{{ update_time }}</div>
<table>
<thead>
<tr>
<th>排名</th>
<th>帮会名称</th>
<th>帮主</th>
<th>人数</th>
<th>排行积分</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td class="rank-col">{{ loop.index }}</td>
<td class="tong-col">{{ item.tongName }}</td>
<td class="master-col">{{ item.masterName }}</td>
<td class="people-col">{{ item.maxLimit }}</td>
<td class="score-col">{{ item.totalScore }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>
+137
View File
@@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>帮会榜单</title>
<style>
body {
font-family: "Microsoft YaHei", Arial, sans-serif;
background: #f1f2f6;
margin: 0;
padding: 20px;
color: #2c2c33;
}
.container {
max-width: 1040px;
margin: 0 auto;
}
h1 {
font-size: 32px;
margin: 0 0 8px 0;
color: #222;
font-weight: 800;
text-align: center;
}
.meta {
margin-bottom: 24px;
color: #7a7f99;
font-size: 16px;
text-align: center;
}
table {
width: 100%;
border-collapse: collapse;
background: white;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 16px rgba(0,0,0,0.08);
text-align: left;
}
thead {
background: #d93939;
color: white;
font-size: 17px;
}
th, td {
padding: 12px 10px;
border-bottom: 1px solid #eee;
font-size: 15px;
vertical-align: middle;
}
tbody tr:nth-child(even) {
background: #fafafa;
}
.rank-col,
.people-col,
.score-col {
white-space: nowrap;
text-align: center;
}
.rank-col {
width: 56px;
color: #d93939;
font-weight: 800;
}
.tong-col {
min-width: 220px;
font-weight: 800;
color: #333;
word-break: break-word;
}
.master-col {
min-width: 150px;
color: #333;
word-break: break-word;
}
.castle-col {
min-width: 110px;
color: #60657a;
word-break: break-word;
}
.people-col {
color: #333;
font-variant-numeric: tabular-nums;
}
.score-col {
color: #d93939;
font-weight: 800;
font-variant-numeric: tabular-nums;
}
</style>
</head>
<body>
<div class="container">
<h1>{{ rank_name }}</h1>
<div class="meta">{{ server }} · 更新时间:{{ update_time }}</div>
<table>
<thead>
<tr>
<th>排名</th>
<th>帮会名称</th>
<th>帮主</th>
<th>排行积分</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td class="rank-col">{{ loop.index }}</td>
<td class="tong-col">{{ item.tongName }}</td>
<td class="master-col">{{ item.masterName }}</td>
<td class="score-col">{{ item.key }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>
+3 -3
View File
@@ -83,10 +83,10 @@
{% for m in list %}
<tr>
<td>{{ m.server }}</td>
<td>{{ m.name }}</td>
<td>{{ m.map_name }}</td>
<td>{{ m.firework }}</td>
<td>{{ m.mapName }}</td>
<td>{{ m.sender }}</td>
<td>{{ m.receive }}</td>
<td>{{ m.receiver }}</td>
<td>{{ m.time }}</td>
</tr>
{% endfor %}
+7 -14
View File
@@ -275,24 +275,17 @@ tbody tr:nth-child(odd) {
</div>
<script>
document.querySelectorAll(".start-time").forEach(function (cell) {
var raw = cell.dataset.ts || cell.textContent.trim();
var ts = Number(raw);
const ts = Number(cell.dataset.ts);
if (!Number.isFinite(ts) || ts <= 0) {
cell.textContent = raw || "-";
cell.textContent = "-";
return;
}
var date = new Date(ts * 1000);
var pad = function (n) { return String(n).padStart(2, "0"); };
cell.textContent = [
date.getFullYear(),
pad(date.getMonth() + 1),
pad(date.getDate())
].join("-") + " " + [
pad(date.getHours()),
pad(date.getMinutes()),
pad(date.getSeconds())
].join(":");
cell.textContent = new Date(ts * 1000).toLocaleString("zh-CN", {
timeZone: "Asia/Shanghai",
hour12: false
});
});
</script>
</body>
+5 -5
View File
@@ -136,11 +136,11 @@
class="camp-haoqi"
{% endif %}
>
<td class="camp-col">{{ item.camp_name }}</td>
<td class="fenxian-col">{{ item.fenxian_name }}</td>
<td class="server-col">{{ item.friend_name }}</td>
<td class="role-col">{{ item.role_name }}</td>
<td class="time-col">{{ item.seize_time }}</td>
<td class="camp-col">{{ item.campName }}</td>
<td class="fenxian-col">{{ item.fenxianName }}</td>
<td class="server-col">{{ item.friendName }}</td>
<td class="role-col">{{ item.roleName }}</td>
<td class="time-col">{{ item.seizeTime }}</td>
</tr>
{% endfor %}
</tbody>