Skip to content
This repository has been archived by the owner on Dec 28, 2021. It is now read-only.

Latest commit

 

History

History
45 lines (36 loc) · 6.17 KB

DEVELOPER.md

File metadata and controls

45 lines (36 loc) · 6.17 KB

已停止开发,具体请看 Project for nonebot2 !

TO DO List

  • 链接 sqlite3 数据库
  • 兼容 SinaNya 的 yaml 牌堆
  • 接入数据库的群管功能
  • 接入数据库的人物卡功能
  • 把requests换成httpx
  • 所有的异常处理
  • Dice! 556 mod 形式的help功能
  • Dice! 2.5 的lua脚本

Project for nonebot2

大概会在一月二十日二月一日之后开始迁移到 nonebot2 ,应该是新开个叫 nodice2 的仓库。

本仓库不会停止更新,只是随缘修复bug,不再增加新功能。

迁移计划大概如下:

  1. 首先是 bot_control ,没有这个插件的话远程部署和调试都会很麻烦,所以会优先开发本插件(不过貌似 nonebot cli 支持更新插件的功能,到时候如果能用它代替就不费劲了)。
  2. 因为 nonebot2 支持子插件,所以 nodice2 将会作为一个完整的 nonebot2 插件,然后把 nodice 的那些独立插件都重写为子插件(这样做的好处就是我不用再去考虑各个命令模块之间的耦合度了)。
  3. 由于核心功能 roll_dice 的核心 calculator.py 与 nonebot 是完全松耦合的,所以迁移这个功能本质上没有什么困难,当然如果能顺手解决效率问题自然是更好。
  4. 基于数据库的群管、人物卡、今日人品功能,正在考虑是使用 nonebot2 插件商店里的 database 插件对接还是用自写的 sqlite.py (为了与其他插件松耦合我大概率会选择后者,欢迎来说服我) 。
  5. 与 Dice! 无关的功能大概不会迁移到 nonebot2 ,或者说不会 push 到新仓库。

Notes

  1. 出现了个奇怪的问题,当我把bot重命名为bot_control之后,通过bot update命令让挂载在服务器的机器人进行更新后,bot插件明明加载了却无法对我的指令响应,此bug待研究,先记着。
    解决办法:原来是无序集惹的锅,本来我的重载函数是先重载机器人中已加载的插件,再去加载用os.path读取到的新插件,结果无序集这坑爹类型把顺序给整乱了,目前改成列表就没事了,只是会重载两遍函数,不过这并不是什么严重的问题(相对于之前来说)。
  2. 目前的dice_calculator无法识别并列的括号如 (5+3)*(6+2) ,只会识别嵌套括号如 3*((6+2)*5) ,目前显示计算过程的功能也因为重构不完全暂时挂掉了。
    解决办法:遍历算法的锅,我为了减少时间复杂同时从左边查找左括号和从右边查找左括号,结果导致了无法识别并列括号的问题。只要先从左边查找右括号,再从右括号的位置往左查找左括号,然后递归查找就行了。显示计算过程的功能也通过重构为Calculator对象的方法恢复了,不过目前没有报错功能,所以表达式输错了机器人只会不鸟你。
  3. jrrp 功能目前暂时使用 json 实现了本地化储存,所以会与溯洄骰和塔骰有所不一致,以后完成了 sqlite.py 储存方案可能会换成 sqlite 数据库。
    解决方案:~~无,我不会用别人的 API 的,也懒得自己搞 API 。~~目前提供了调用溯洄API和本地储存两种选项,默认是本地储存,可以通过修改jrrp文件夹里 data_source.pyIS_ONLINE 改成调用溯洄API。
  4. 使用简单粗暴的便利法搞定了 Dice! 的类 json 牌堆功能,当然问题还有很多,比如估计永远也不会支持牌堆牌数之类的。在这里简单说一下本项目的牌堆算法与 Dice! 的不同之处, Dice! 的牌堆实际上是将所有牌堆读取到内存中( Dice3 则是载入到数据库,不过 Dice3 并不支持自定义牌堆),然后提取字符串把它作为一个命令通过 dice_utils 模块处理得到想要的结果再输出。我的方法就比较蛋疼了,每次使用牌堆指令都会重新读取一次牌堆文件夹(懒得手动载入牌堆),所以理论上来说牌堆越多效率越低。接着通过递归遍历识别{牌堆引用}{%不放回牌堆}``[掷骰公式],再拼接得到想要的结果。
    解决方案:懒得想,等以后迁移到 nonebot2 再说。
  5. FateCalculator和DiceCalculator实际上就是继承Calculator类罢了,只不过我懒得写继承就直接把他们拆开了。FateCalculator阉割了计算*/^的功能,而WodCalculator直接就阉割掉了所有的计算功能,希望不会有人会用到吧~~(况且我是参照 Dice! 的 .rf.w 编写的这个功能,要怪也得怪溯洄去)~~
    解决方法:自己口算被阉割掉的那些计算功能,要不要加回来等下次重构吧。
  6. 神奇的Bug2.0,在我使用 .bot update 更新最新的的 commit (也就是上上个commit) 时,我发现 .wh 返回的依旧是之前没有修改的使用Calculator的计算结果,但是明明我已经改掉了。更离谱的是, .w 返回的已经是修改后的结果了。于是我检查了下源代码,发现是 .wh 的命令名称可以改,于是重新push,还是这个鬼样子。
    解决办法:好吧,我是傻逼,原来是函数名忘了改。
  7. 现在应该是把跟数据库无关的功能都做好了,已经没法再逃避了(数据库白痴如是说)。所以接下来就是投入到写一个可以兼容绝大多数场景的 sqlite.py 。估计迁移到 nonebot2 的计划需要延后一下了,我没想到自己这么拉垮,摸鱼太多了。CoC奖惩骰懒得做了。
  8. 悲报,为了实现数据库与各个模块的链接,我大概率要重构整个项目了,并且重构后的项目将会背离松耦合的理念。之后我会在 dev 分支重构整个项目,把所有模块整合到一个插件里。当然如果我找到了能够在不重构整个项目的情况下实现数据库的链接的话,我也会继续更新 master 分支的。
  9. 目前骰子开关算是基本完成了,然而代码写得乱七八糟的,而且还懒得写关闭成功的提示。现在看来nodice的bug还是太多了,可能在下个月迁移到nonebot2的时候还要到同时进行修复。
  10. 以一种非常诡异的方式实现了.set指令,我之后再琢磨琢磨该怎么把default_dice作为BaseCalculator的一个指令,现在就先一直当作参数了。