Giter Site home page Giter Site logo

eiriksgata / mirai-rulateday-dice Goto Github PK

View Code? Open in Web Editor NEW
95.0 95.0 10.0 47.86 MB

利用Mirai框架的Mirai-Console开发TRPG骰子插件模板。目前集成了大部分的常用指令,并在此基础上实现更多的跑团体系优化指令。例如COC7技能详细查询、DND5e技能列表查询、DND5e怪物图鉴等。目前处于测试阶段。

License: GNU Affero General Public License v3.0

Java 100.00%
coc7 dice dnd5e java qqbot rulateday trpg

mirai-rulateday-dice's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar eiriksgata avatar navymaster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

mirai-rulateday-dice's Issues

发送QQ应用商城原创表情会发生错误判断

这个问题只会发生在PC端的QQ上,无论是TIM还是QQ 发送原创商城表情包都会出现报错。安卓端则不会出现该问题。

image

初步判断,指令在截取用户消息文本时,出现了越界的情况。应该是MIrai中的Message出现了空字符串,即不是null,而是"" 。
因此这边再加一层判断判断,文本长度需要>1。

新加聊天记录保留导出功能

  • 也许我们尝试需要某种符合规律的消息结构,或者格式化聊天消息数据。用于解决日后处理消息数据内容,筛选有用的消息数据。或者导入某种程序软件中,生成相应的语音文件等。因此可以借用骰子的接受消息功能来实现数据格式化和保留的功能。

实现流程

  1. 通过数据库记录聊天消息数据,提供导出指令

优化:代码中的文本调整

主要内容

把代码中书写的文本全部改为由配置文件读取。
例如:,help指令中的返回文本内容,应当存放在配置文件中。

为什么要这么做?

因为随着开发功能越来越多,有一些文本也许用户需要自己定义返回内容,因此不应当尝试让用户在代码中改动。而且日后如果尝试使用国际化,也会省去很多的事情。

.sc指令格式问题

Describe the bug
当.sc的参数出现了空格符或者其他时,将会没法识别出正确的指令参数

To Reproduce
Steps to reproduce the behavior:

  1. 输入形如: .sc 1d5/1d100 50 时将会出错

应当改为无论是否存在多少个空格也可以正常识别

增加完善的指令查询使用帮助或者指南

实现原因

  • 目前该系统的指令描述尚未明确,导致初次使用指令的玩家不明白如何使用骰子机器人。
  • 另外一个原因则是,大部分的一些玩家对于指令都没有一个明确的认识,都是用着错误的用法使用着。因此纠正使用者的不规范使用异常重要
  • 增加完善的引导和导航尤其重要,目前大部分的说明都没有附带上相应的已有资源链接

解决用户升级插件时,数据库文件不会被替换问题

问题回顾
随着功能的增加,导致数据库文件的变化频繁。用户升级插件时,因为数据库文件已经存在,因此没有重新生成新的数据库文件。
同时也不可以直接替换数据库文件,因为原本的数据库文件中存在了用户本身的一些数据,如果直接替换掉,将会导致数据丢失的情况。

解决办法

  1. 当系统启动时,应当检查一遍数据库文件表是否完整,发现数据库的表不存在时,应当由系统主动创建表格。
  2. 当系统使用到某个表时,如果不存在则自动生成该表的结构。

加入骰池功能

该功能表现为:使用.ww指令时,会骰出数个d10的骰子,如果骰出的数值有>=8,则再骰一次,以此递归,最后算出出现>=8的骰子数值数量。

优化:检查并增加更多的指令参数限制

这是一个重要的更新清单

  1. 大部分呢的指令目前还没有作参数数值的检测和处理,只是实现了基础的功能。
  2. 完善相应的数值限定,有助于使骰子机器人更为的稳定,防止被恶意人员破坏。

例如:.dnd指令 如果输入.dnd10000000 则会导致机器人疯狂的发送消息

加入牌堆功能

形如创建一个牌堆,每人从中抽出后不放回的形式,输出相应的值

项目JDK更改

由于Mirai如今已经直接使用OpenJDK11,因此该项目也应该由1.8 变更为OpenJDK11

项目版本号变为0.3.1 ,调整所有Maven配置项 java.version 配置

或许增加跑团人物背景故事生成功能

这个功能显然会涉及到很多的问题,其中就包含了技术的问题。复杂会涉及到人工智能方面的东西,简单点的则是通过大量的数据模板来进行固定的格式填入和拼凑。

也许应当尝试在开源社区里寻找某种文本撰写的项目。

.cr指令错误

在群聊中使用.cr指令后返回null,无论输入任何的关键字

当使用@机器人时.botoff|.boton指令无法生效

问题描述
如果单纯使用.botoff 机器人会正常关闭。但是如果使用@+机器人.botoff则无法指定关闭。
除此之外,该指令应当无论是.bot off 还是 .botoff都应该生效,而不是只能.botoff生效

问题导致原因
因为Mirai依赖的升级后,导致@的文本内容发生了变化,因此导致没有办法识别检测到。

用户数据反馈功能完善

如今的方式是通过联系QQ来进行反馈,应当考虑启用直接提交,或者去网页端提交的形式进行数据反馈。
之前之所以没有做的原因是没有云端在线API服务。如今已经开始搭建了API服务,则应当考虑实现该功能。

目前Github利用Github-pages生成的在线文档打开后显示失败的问题

这个情况是因为Github目前被莫名其妙的拦截,而Pages则更为严重,对于国内用户来说,基本上无法浏览该页面,除非等待较长的时间才可以正常的重定向显示。但是对于一般的查询人员来说,这种情况更像是无法打开浏览的问题。因此鉴于这种情况,打算直接迁移至Gitee(不太清楚支不支持解析docsify) 或者 部署至云端服务器。

添加一个精准查询的格式

因为目前所有的查询都是用模糊查询,因此当出现本身词条短小但是又有其本身描述内容时,会无法得出该词条内容。
例如查询先攻
输入
.dr先攻
回复

查询结果存在多个,请完善查询关键字直到存在1个才回显示详细信息
查询吻合关键字:
先攻
先攻变体:先攻值
先攻变体:速度因素
先攻变体:速度因素先攻调整值
先攻变体:集群先攻

因此无法搜索出先攻词条,当然这个可以通过人性化操作功能解决该问题。

但是模糊结果可能非常多,当超过20条词条,并且不出现在列表中,因此需要精确查询

解决方案
在指令结尾处加入特殊的结束符,例如#
则将其识别为精确查询

增强'.r'指令的识别度

增强符号判断

目前该指令依旧存在一些问题,例如有的人输入中文符的号没有办法进行计算,因此需要增加多种的中文运算符号支持。
具体包含以下几个运算符号:

  1. /
  2. ×
  3. ÷

可以参考某种输入法中的符号选项。

增强运算公式的兼容性

目前的识别是通过空格开进行的参数识别符识别,有些人可能会在公式中携带有空格符,导致运算检查时结果很不明了。
除此之外还有一个问题就是,d的识别不支持大写。案例指令如下:

.r1D6+1d4

项目文件路径调整

由原来的当前程序运行目录下,调整为由Mirai的Console提供的Config & Data 调用方法获得项目路径。
该更改也是为了适配MiraiAndroid & Mirai-Console .. 等以后可能会出现的其他情形。
主要变化如下:
由原本的 data/rulateday/ 改为 data/indi.eiriksgata.rulateday/

因此在下一个版本中,需要调整db文件 以及 怪物图片 /mm-images都会受到调整。

新功能:先攻Initiative

功能介绍
先攻骰作为DND5e不可或缺的功能之一,在每次正式开始战斗前都需要过先攻骰。因此DM每次都要统计排序出每个玩家的先攻顺序,这无疑是一个繁杂的工作。实际上这种工作可以直接交给机器人去实现。

初步设计

  1. 首先因为设计这种骰子功能,必然要考虑多群多人的情况。
  2. 可以让一个群作为一个先攻骰子池。
  3. 默认骰参数可以让某群员作为唯一识别符,重复骰会替换掉原来的。
  4. 也支持默认识别符骰,可以给某个先攻骰数值赋予某个角色的名字。
  5. 打印先攻骰顺序。

先攻骰某种意义来说,是一个存储查询功能。因为他的实现是包含了 查询+.r系列指令生成

先攻功能以及指令:
前提说明:<计算公式> 是指类似于.r 指令里面的公式 例如.r<计算公式> 实际使用可能为: ,r1d3这样的形式
<名称> 用来作为额外的识别字段,一般用于DM添加多个怪物

  1. .atk | .atk <计算公式> | .atk <计算公式> <名称> 生成先攻骰指令,使用例子:.atk d20+3 食尸鬼A
  2. .atklist 生成显示当前群(或者模式私聊)的先攻列表,使用例子:.atklist
  3. .atkdel | .atkdel <名称> 删除先攻池里面的一个先攻骰 如果如果没有带名称参数,会默认填入你当前所在群的(或者私聊)昵称。如果带有名称参数,会删除名称对应的你创建的先攻骰的数值。
  4. atkclear 清空当前先攻列表的数据。

`.rh`指令可能会出现错误

之前是通过获取Bot 的第一个机器人,然后让它通过找到朋友然后发送私聊消息。
当初是因为在MessageData中没有包含事件,但是现在已经有EventUtils作为回调的适配器,而且MessageData中也包含了Event(Object),因此可以直接改为对多事件类型进行判定。

Bug:用户发送私聊消息无回应处理

Describe the bug
初步猜测:
添加好友失效,事件消息类型无处理:无好友情况下的发送群临时消息。

如果机器人好友中存在该朋友,那么会处理。

完善怪物图片以及怪物数据的提交

分析

  • 也许应当做出怪物数据的共享提交完善的某种途径?让多人共同参与完善?如果单纯是在Github上进行,可能会有诸多的不便。
  • 应当可以直接在QQ聊天输入框中直接完成提交处理?但是审核数据可能会是一个很大的问题。
  • 如果采用共用数据请求,则可以直接省略掉本地存储库的更改和同步的问题。
  • 也许应当在网络上编写一个查询数据的API给插件使用?

指令异常收集功能

具体内容

应当实现自动收录超出异常处理范围内的错误指令情况。
通过在本地中记录超出了系统中的异常处理之外的指令文本。

怪物图片发送优化

问题内容
目前对于需要下载的怪物图片会处于线程堵塞状态,直到怪物图片下载完成或者中断后才会继续活动。
也就是目前如果处于这个状态,那么所有的回复都会处于等待状态,机器人就会表现得似乎不说话不回话的状态。
因此需要开辟一个线程来处理这些等待的动作。
线程也要经有线程池管理。如果过多的线程会导致服务崩溃。

跑团文档数据采集

现在的扩展趋势是想集成更多的搜索库,但是又没有合适的格式化数据,如果有人帮忙愿意整理就好了。

加入角色名字随机生成功能

可按不同的跑团类型进行不同的名字生成。总指令可以用.name<null>|<int> |表示可以选择性填入整形变量。如果不输入,则默认为1。可以通过 .dndname来生成符合dnd世界观的人物名字。

库中可以分为多种不同的国家地区名字生成形式。后期可以加入按国家地区来随机生成相应的角色名字。

Mirai依赖仓库地址变更

随着Mirai的更新,JCenter已经被弃用,转为Maven**仓库。
因此本项目的依赖也要变更,更新Rulateday-dice版本为 0.3.4

需要重新写一套计算器计算公式

现在的计算器工具类有BUG
复现:

 .r1d3+d5+5d6-3+10d-1d5

1d3+d5+5d6-3+10d-1d5=2+3+(6+6+3+3+6)-3+(41+68+30+36+99+36+72+85+78+2)-4=29

答案显然是错误的

建立拓展数据服务API平台

主要用途

  1. 提供一个用户提交数据的平台服务。
  2. 用于收集机器人抛出的特殊异常错误。
  3. 用于处理收录消息情况。

搜索关键字文档功能改为更为人性化的操作

背景
基于目前很多的一些搜索导航机器人都具备了可视化互动的功能。
具体指:可以通过搜索出多个答案,然后通过输出相应的编号来进行不同的选项。

该功能的主要问题在于:

  • 需要解决多个用户同时互动的情况,每个用户都需要独立的进行服务。
  • 时效性,同一个互动具备有相应的时效,超出了时间后,那么该会话则会结束。用户再回复也是无效的。

新加相关指令:随机抽取物品、随机生成怪物

新加相关指令

1.随机抽取物品

  • 抽取魔法物品
  • 抽取工具
  • 抽取装备

2.随机生成怪物

  • 输入指令,随机的根据DND5e的怪物级别中选择一个怪物,并且根据怪物级别生成相应的掉落物品数据。

实现属性成长、属性查看、单个属性修改功能

功能描述

这些指令主要针对coc7版的而做的特定指令

  • 属性成长(.en):检测百面骰(D100)是否大于用户的技能值,如果大于则进行D10数值的增长
  • 属性修改(.sa):修改指定的属性数值
  • 属性显示(.ga):显示自己通过.st设置的属性

优化[.r]指令

现阶段的.r指令是分为两层的计算方式,第一次返回的是 计算生成每个 d(骰子的随机数值)随后 再进行第二次的合并运算。而中间无论出现什么中文字符,全部按照内部的计算器计算格式出结果。因此可能有些人想要做到 指定某种语言混杂其中,会导致出现计算结果异常。

原本打算在其计算公式内,无论混杂空格都能正常计算,现改成 公式+空格+文本 的形式进行计算。

.ra指令自定义数值出错

Describe the bug
.ra指令自定义数值出错

To Reproduce
Steps to reproduce the behavior:

  1. 当用户从来没有使用 .st 的指令前
  2. 使用指令形如: .ra属性50 时就会回复 属性不存在或没有录入。

重大更新:依赖升级

鉴于Mirai体系版本号变更为2.0.0 为了兼容Mirai2.0.0 因此本项目插件也将升级成 0.3.0

简介

  • 如果想要使用Mirai2.0.0 则使用Rulateday 测试版0.3.x
  • 如果继续使用Mirai1.x 则使用Rulateday 测试版0.2x ,但是0.2.x将不会更新 0.3.x新加的功能

升级后存在的问题

  • 因为Mirai2.0.0的源码更改变化比较大,因此在源码和结构上也发生了一些变化。导致本项目的代码结构也发生了一些变化。因此本项目0.3.0跟0.2.x将不会有兼容性。
  • 如果使用Rualteday 0.3.0那么将需要把Mirai-console 的所有依赖项都变更为 Mirai 2.0.0 ,其中包含 mirai-console-2.0.0-all & mirai-console-terminal-2.0.0 && mirai-core-all-2.0.0-all 因为Mirai 2.0项目名的变更,因此开发者使用需要阅读Mirai 2.0 的相关内容
  • 功能缺失,因为代码的变更,功能代码也需要缓慢的更新
  • 可能存在大量的BUG
  • 更新较为频繁
  • Java必须改为OpenJDK8+ 最好使用 OpenJDK11

由于目前的0.3.0已经无法兼容mirai最新版 2.4.x+ 因此还需要进行项目的结构更改

具体内容

  1. 查看mirai最新的事件更新,移除了哪些废弃事件。要做出相应的整改更改,主要是核心handler文件
  2. 貌似mirai的QQ消息有了一些改变,以前是有附带一串长长的源码消息,是不是现在已经移除了,需要格式一下,以前对他的源码消息是做了处理的。

新指令:今日人品 .jrrp

新加.jrrp指令,该指令为生成当天的随机数。通过唯一的ID(qq号)来进行唯一识别生成。
更新与 trpg-dice-java 项目同步更新。

.help 指令优化

目前随着系统的更新功能的增加,导致出了许多新型的指令。这些指令的使用方式或者功能描述没有具体的查询方式,因此完善指令帮助功能显得尤其重要。*

具体实现

  1. 当用户输入.help指令的时候,则会显示输出.help<关键字>的返回内容。
  2. 文档描述应当为一个配置项文件,而不是写在源码中的文本。
  3. .help应当作为一个可传入参数的指令例如 .help<关键字>,通过判断关键字来返回不同的文本描述。
  4. 关键字可以作为模糊搜索的一种形式,当然也要解决好,部分相同字的文本key

待完善的.help功能描述

  • .help
  • .help先攻
  • .help默认骰子
    .........

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.