Skip to content

Commit

Permalink
clanrank插件上游更新
Browse files Browse the repository at this point in the history
  • Loading branch information
iamwyh2019 committed Aug 24, 2020
1 parent 9838937 commit 95da2ef
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 55 deletions.
95 changes: 58 additions & 37 deletions hoshino/modules/clanrank/README.md
Original file line number Diff line number Diff line change
@@ -1,104 +1,125 @@
# clanrank
适用于hoshinoBotV2的插件, 可以在QQ群中查询工会战排名.
适用于HoshinoBot v2的插件, 可以在群聊中查询公会战排名(仅B服).

数据均来自Github@Kengxxiao

项目地址 https://github.com/Kengxxiao/Kyouka

网页在线查询 https://kengxxiao.github.io/Kyouka/

本插件以HoshinoV2为基础编写, 使用Hoshino v1请切换至v1分支。注意,v1版本可能无法得到及时更新和测试,如果您正在使用HoshinoBot的v1版本,并修改本插件使其适配v1,希望您能向本项目的v1分支提交Pull request
本项目地址 https://github.com/pcrbot/clanrank

如果发生400/441错误, 可能是更新了POST请求头, 请更新或等待更新
本插件以HoshinoBot v2为基础编写, 使用HoshinoBot v1请切换至v1分支. 注意, v1版本可能无法得到及时更新和测试, 如果您正在使用HoshinoBot的v1版本, 并修改本插件使其适配v1, 希望您能向本项目的v1分支提交Pull request

如果发生400/441错误, 可能是更新了POST请求头, 请更新或等待更新. 出现404错误则是公会不在列表中, 可能的原因:
1. 会长在农场, 或会长已换人
2. 公会已解散
3. 公会排名不在前2W名
4. 不是B服公会

~~现已更新缓存机制~~, v0.1.5版本由于源站时间戳变更暂时失效, 请适度查询.

假定网站更新比游戏内延迟12分钟, 则每次查询的时间戳生命周期为42分钟, 如果没有过期则只需要发送本机缓存的数据. 请限制使用频率, 为了不给原作者服务器增加太大负担

例如, 缓存的上次查询的时间戳为下午3点, 则下午3:42之前查询会发送本地数据, 3:42之后查询会自动在线更新.

现已更新缓存机制,已假定网站更新比游戏内延迟12分钟,则每次查询的时间戳生命周期为42分钟,如果没有过期则只需要发送本机缓存的数据。请限制使用频率, 为了不给原作者服务器增加太大负担。查询其他公会排名以及排行榜还未进入缓存

例如缓存的上次查询的时间戳为下午3点,则下午3:42之前查询会发送本地数据,3:42之后查询会自动在线更新。
## 指令示例
### 查询所有公会(需开启服务:sv_query
### 查询所有公会(需开启服务:clanrank-query
* 查询会长卢本伟, 查询会长名字包含卢本伟的公会的排名
* 查询公会卢本伟, 查询公会名字包含卢本伟的公会的排名
* 查询排名5000, 查看5000名的公会分数信息
### 查询自己公会(需开启服务:sv_push)
* 绑定公会12345567889,后加的是公会会长的ID
* 公会排名,查询本公会排名
* 分数线, 查询分数线
### 查询自己公会(需开启服务:clanrank-push
* 绑定公会12345567889, 后加的是公会会长的ID
* 公会排名, 查询本公会排名
## 使用方法
1. ~~加入其他模块中~~

不再支持此方法因为配置文件使用了以下路径来读写
不再支持此方法, 因为配置文件使用了以下路径来读写:
```
./hoshino/modules/clanrank/clanrank.json
```
2. 创建新目录, 作为一个单独的模块来控制. 切换到Hoshino的模组目录, 然后clone本项目:
```
cd ~/HoshinoBot/hoshino/modules/
git clone https://github.com/pcr/clanrank.git
git clone https://github.com/pcrbot/clanrank.git
```
修改配置文件在config中启用该模块. 操作方法为编辑Hoshino下的`__bot__.py`文件
修改配置文件:在config中启用该模块. 操作方法为编辑Hoshino下的`__bot__.py`文件:
```
nano ~/Hoshino/hoshino/config/__bot__.py
```
在`MODULES_ON`中仿照格式添加项`'clanrank'`.
3. HoshinoBot v1版本请直接克隆`v1`分支
3. HoshinoBot v1版本请直接克隆`v1`分支:
```
git clone -b v1 https://github.com/pcr/clanrank.git
git clone -b v1 https://github.com/pcrbot/clanrank.git
```
4. 更新请切换到对应目录后使用git更新
4. 更新请切换到对应目录后, 使用git更新:
```
git pull
```
如果要更换分支
如果要更换分支:
```
git checkout -b 本地分支名 origin/v1
```
## 更新日志:
## TODO
- [x] 增加缓存机制, 减少调用次数
- [x] 加入line接口
- [x] 加入fav接口
- [ ] 加入时间查询参数来查询历史分数
- [ ] 分数线预测/拟合/数据分析
- [ ] 分数线制图
## 更新日志:
### v0.1.5
更新时间: 2020/8/24 8:52
* 移除消息模板中的人数, 因源站已不再返回
* 修改了指令帮助【绑定公会】
* 已知问题:查询缓存机制不启用, 且每次显示的更新时间为1970年, 原因是源站返回的ts值为0, 等待进一步适配
*
### v0.1.4
更新时间 2020/8/01 2045
* 新增line接口查询分数线(共14条信息)
* 信息播报模板化可在`msg_temp.py`中自由配置
* POST请求增加最大超时提高稳定性
更新时间: 2020/8/01 20:45
* 新增line接口, 查询分数线(共14条信息)
* 信息播报模板化, 可在`msg_temp.py`中自由配置
* POST请求增加最大超时, 提高稳定性
### v0.1.2
更新时间 2020/8/01 1330
更新时间: 2020/8/01 13:30
* 非公会战期间不会自动每日推送排名
### v0.1.1
更新时间 2020/7/31 823
* 新增BOSS进度条来自群艾琳佬
* 修正v1版本导入了不存在的`hoshino.typing`的问题同时删除了v2版多余的导入
更新时间: 2020/7/31 8:23
* 新增BOSS进度条, 来自群艾琳佬
* 修正v1版本导入了不存在的`hoshino.typing`的问题, 同时删除了v2版多余的导入
* 更换示例的地址为pcrbot组织下的永久地址
### v0.1.0
更新时间 2020/7/30 1600
* 新增fav接口以会长ID查询
* 新增绑定公会信息以及每日推送公会排名
* 新增缓存机制减少对源站的访问次数
更新时间: 2020/7/30 16:00
* 新增fav接口, 以会长ID查询
* 新增绑定公会信息, 以及每日推送公会排名
* 新增缓存机制, 减少对源站的访问次数
* 更新指令说明
### v0.0.6
更新时间 2020/7/30 908
更新时间: 2020/7/30 9:08
* 修正header头
* 适配HoshinoV2
* 迁出v1分支适配Hoshinov1
* 迁出v1分支, 适配Hoshinov1
* 修正`README.md`的问题
### v0.0.4
更新时间2020/7/3 11:04
更新时间:2020/7/3 11:04
* 查询结果最后会显示数据更新时间
### v0.0.3
更新时间2020/7/3 3:05
更新时间:2020/7/3 3:05
* 更新请求, 为所有查询时的POST请求添加"history"
* 添加了对BadRequest的处理, 可以半夜被叫起来修
### v0.0.2
更新时间2020/7/1 12:22
更新时间:2020/7/1 12:22
* 更新请求, 为请求头添加"Referer"
### v0.0.1
更新时间2020/6/30 2:19
更新时间:2020/6/30 2:19
* 初版发布, 支持四种查询模式
31 changes: 15 additions & 16 deletions hoshino/modules/clanrank/clanrank.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
sv_push = Service("clanrank-push",enable_on_default=True,visible=True,help_='''
以下仅限国服B站,渠道服/日台服均不可用
如果不知道会长ID可以先通过通用查询来查询会长的ID
绑定公会ID】后跟会长ID来绑定公会, 公会战期间每日5:30会自动推送前一日排名
绑定公会】后跟会长ID来绑定公会, 公会战期间每日5:30会自动推送前一日排名
【公会排名】查询本公会的排名
'''.strip())

Expand Down Expand Up @@ -142,8 +142,7 @@ def process(dec, infoList:list):
else:
msg += f"{msg_dic[key]}:"
msg += f"{dec['data'][i][key]}\n"
if i<result-1:
msg += '\n'
msg += '\n'
return msg

def set_clanname(group_id,leader_id):
Expand Down Expand Up @@ -171,7 +170,7 @@ def set_clanname(group_id,leader_id):
saveConfig(clanrank_config)
return 0

@sv_push.on_fullmatch(('公会排名','工会排名'))
@sv_push.on_fullmatch(('公会排名','工会排名','!公会排名','!公会排名','!工会排名','!工会排名'))
async def clanrankQuery(bot, ev:CQEvent):
"""
查询本公会排名, 需要预先绑定公会。
Expand All @@ -187,9 +186,9 @@ async def clanrankQuery(bot, ev:CQEvent):
# 获取上次更新时间,假定网站更新比游戏内延迟12分钟
lastQuertTime = config[str(group_id)]["lastQuery"]["ts"]
if time.time() - lastQuertTime >= 42*60:
# 上次查询时间戳有效时间42分钟,超时会触发联网查询
msg = '缓存数据已超时, 正在在线查询......'
await bot.send(ev, msg)
# 上次查询时间戳有效时间42分钟,超时会触发联网查询 (v0.1.5:ts始终返回0,因此不作缓存)
#msg = '缓存数据已超时, 正在在线查询......'
#await bot.send(ev, msg)
code = set_clanname(int(group_id),config[str(group_id)]["leaderId"])
if code != 0:
msg = f'发生错误{code}, 可能的原因:公会更换了会长/工会排名不在前2W名。\n如果非上述原因, 请联系维护并提供此信息。\n'
Expand All @@ -198,11 +197,11 @@ async def clanrankQuery(bot, ev:CQEvent):
else:
config = loadConfig() # 信息已经被缓存, 重新读取
last_query_info = config[str(group_id)]["lastQuery"]
msg = process(last_query_info,self_lan_query_list)
msg = process(last_query_info,self_clan_query_list)
await bot.send(ev, msg)


@sv_push.on_prefix(['绑定公会','绑定工会'])
@sv_push.on_prefix(('绑定公会','绑定工会'))
async def set_clan(bot,ev:CQEvent):
"""
为一个公会绑定信息, 需要会长ID
Expand All @@ -227,7 +226,7 @@ async def set_clan(bot,ev:CQEvent):
# 发送绑定过程中的查询结果
clanrank_config = loadConfig()
last_query_info = clanrank_config[str(group_id)]["lastQuery"]
msg = process(last_query_info,self_lan_query_list)
msg = process(last_query_info,self_clan_query_list)
await bot.send(ev, msg, at_sender=False)

@sv_push.scheduled_job('cron',hour='5',minute='30')
Expand Down Expand Up @@ -262,7 +261,7 @@ async def clanrank_push_cn():
# -----------------------------------
# 此部分以下为旧版直接查询的函数

@sv_query.on_prefix(['查询公会', '查询工会'])
@sv_query.on_prefix(('查询公会', '查询工会','!查询公会', '!查询工会','!查询公会', '!查询工会'))
async def rank_query_by_name(bot, ev: CQEvent):
"""
通过公会名查询排名
Expand All @@ -282,7 +281,7 @@ async def rank_query_by_name(bot, ev: CQEvent):
await bot.send(ev, msg)


@sv_query.on_prefix('查询会长')
@sv_query.on_prefix(('查询会长','!查询会长','!查询会长'))
async def rank_query_by_leader(bot, ev: CQEvent):
"""
通过会长名字查询排名
Expand All @@ -297,12 +296,12 @@ async def rank_query_by_leader(bot, ev: CQEvent):
msg = f'查询出现错误{info},请联系维护者'
else:
msg = process(info,leader_id_query_list)
#msg += f"查询有{_time_limit}秒冷却"
msg += f"查询有{_time_limit}秒冷却"
_lmt.start_cd(uid)
await bot.send(ev, msg)


@sv_query.on_prefix('查询排名')
@sv_query.on_prefix(('查询排名','!查询排名','!查询排名'))
async def rank_query_by_rank(bot, ev: CQEvent):
"""
查看指定名次的公会信息
Expand All @@ -320,7 +319,7 @@ async def rank_query_by_rank(bot, ev: CQEvent):
msg = f'查询出现错误{info},请联系维护者'
else:
msg = process(info,leader_id_query_list)
#msg += f"查询有{_time_limit}秒冷却"
msg += f"查询有{_time_limit}秒冷却"
_lmt.start_cd(uid)
await bot.send(ev, msg)

Expand All @@ -338,6 +337,6 @@ async def damage_line(bot, ev: CQEvent):
msg = f'查询出现错误{info},请联系维护者'
else:
msg = process(info,line_list)
#msg += f"查询有{_time_limit}秒冷却"
msg += f"查询有{_time_limit}秒冷却"
_lmt.start_cd(uid)
await bot.send(ev, msg)
4 changes: 2 additions & 2 deletions hoshino/modules/clanrank/msg_temp.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
'boss': 'BOSS进度',# 需要调用函数,特殊处理
'index':'信息编号', # 特殊处理
'leader_name': '会长名',
'member_num':'总人数',
#'member_num':'总人数',
'ts':'更新时间', # 预先处理
'leader_viewer_id':"会长UID",
'full':'全部查询结果:' # 预先处理
Expand All @@ -24,7 +24,7 @@
'clan_name','leader_name','rank','index','damage','boss'
]
# 本公会查询
self_lan_query_list = [
self_clan_query_list = [
'clan_name','leader_name','ts','rank','damage','boss'
]

Expand Down

0 comments on commit 95da2ef

Please sign in to comment.