monsterxcn / nonebot-plugin-gsmaterial

🤖 NoneBot2 原神每日材料查询、升级材料计算插件,数据由安柏计划自动更新
https://pypi.python.org/pypi/nonebot-plugin-gsmaterial
MIT License
20 stars 2 forks source link

关于“角色材料”的想法 #7

Closed KishibeRohan1979 closed 1 year ago

KishibeRohan1979 commented 1 year ago

首先非常感谢大佬无私贡献这么牛的代码 ☜(゚ヮ゚☜)。

就是在平时使用中,有的时候想要知道某个角色(或者武器)的突破、天赋材料是什么,一共需要多少?(比如有的时候这个角色马上要复刻,但是我没有这个角色,导致无法在游戏内查看这个角色的相关材料)只能去别的app或者网页查看,稍微有些不便和繁琐。 希望大佬可以采取一下这个建议!感谢╰( ̄ω ̄o)

我平常看的网页:https://wiki.biligame.com/ys/?curid=14723 以供参考

monsterxcn commented 1 year ago

要做计算器的话感觉有些复杂:

  1. 升级的起点我希望从米游社接口获取,那样就要处理用户 cookie 之类的
  2. 由 QQ 纯文字输入决定升级的起点终点感觉很麻烦,和网页上输入相比使用体验会差很多

升级起点终点固定的话比如从 0 升级到 90 那样又有些懒得做 2333,我可能还要再琢磨琢磨

KishibeRohan1979 commented 1 year ago

我觉得你的想法很好(●'◡'●),群里很多人其实是不具备在电脑浏览器中找到自己cookie的能力的,而且也有不少人其实是没电脑的。所以我也觉得简单一点的思路比较好,从简输入。

仅以讨论的角度表达如下看法 比如: 输入:”{角色|武器}材料 xxx“,默认返回升级1~90级所需材料(图片或文字) 输入:”{角色|武器}材料 xxx [40到50]“,返回升级40~50级所需材料(图片或文字) 角色材料、武器材料作为监听命令入口,xxx作为角色或者武器的名字参数,40到50的参数作为可选项 命令的监控可能会有些复杂,我能想到的是,可不可以使用正则表达式去判断

import re
# 正则表达式(命令的正则)
rolesReg = r'角色材料[\u4e00-\u9fa5]+[1-9][0-9]?到[1-9][0-9]?'
# 监听的命令
command = '角色材料纳西妲12到30'
# command = '角色材料魈12到30'
# 正则对比
commandResult = re.match(rolesReg, command)
print(commandResult)
if commandResult:
    # 这一步相当于删掉 监视命令 “角色材料” 四个字
    newCommand = command[4:len(command)]
    print(newCommand)
    # 角色名字的正则表达式判断
    roleNameReg = r'[\u4e00-\u9fa5]+'
    roleNameIndex = re.match(roleNameReg, newCommand).span()
    # span()返回元组
    print(roleNameIndex)
    # 继续拆字符串,获取到的就是角色名字
    roleName = newCommand[roleNameIndex[0]:roleNameIndex[1]]
    print(roleName)
    # 找到所有数字(可能存在隐患)
    startAndEnd = re.findall(r'[1-9][0-9]?', command)
    # 防止有调皮的群友输入大到小
    start = startAndEnd[0]
    end = startAndEnd[1]
    if start > end:
        num = start
        start = end
        end = num
    print(start)
    print(end)
else:
    print("命令输入错误")

当然代码可能还有些粗糙,可能还有其他健壮性漏洞,以上做讨论范围内的参考。 非常感谢大佬可以考虑添加该模块(≧︶≦))( ̄▽ ̄ )ゞ

KishibeRohan1979 commented 1 year ago

沿用上面的举例,我平时喜欢输入命令的方式是“角色材料 纳西妲 1到90”,也就是参数之间空一格,哈哈哈。可能到时候要加一个 command = command.replace(" ", "")

monsterxcn commented 1 year ago

已经基本完成了,不过实现材料本地计算超出我的能力了,最终采用了米游社养成计算器接口计算。可以期待一下近期的新版本。

由于计算器接口需要登录使用,将来需要有效的 cookie(需要 accound_idcookie_token)才能启用材料计算功能。鉴于某些账号 cookie_token 可能有效期较短,如果需要程序自动更新该字段,则还额外需要 stoken 之类的。

不过好在这个 cookie 只需要机器人部署者配置一遍,不需要用户另外操作,相对来说还是比较方便的。