Skip to content

Commit

Permalink
Merge branch 'master' into fix/js-reload-ext-order
Browse files Browse the repository at this point in the history
  • Loading branch information
fy0 authored Nov 11, 2024
2 parents 73863ce + 1a46582 commit b0601d5
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 27 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,5 @@ _help_cache

.vscode/
!.vscode/settings.json
!.vscode/extensions.json
sealdice-lock.lock
3 changes: 3 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"recommendations": ["golang.go", "task.vscode-task"]
}
36 changes: 36 additions & 0 deletions Taskfile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# https://taskfile.dev

version: '3'

tasks:
install:
cmds:
- go mod download
- go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.61.0
- go install golang.org/x/tools/cmd/goimports@latest
- go install github.com/pointlander/peg@v1.0.1
- go generate ./...

run:
deps: ['test-and-lint']
cmds:
- go run .
build:
deps: ['test-and-lint']
cmds:
- task: build-only

test-and-lint:
deps: ['test', 'lint']
test:
cmds:
- go test ./...
- go vet ./...
lint:
cmds:
- goimports -w .
- golangci-lint run

build-only:
cmds:
- go build .
19 changes: 15 additions & 4 deletions dice/ext_fun.go
Original file line number Diff line number Diff line change
Expand Up @@ -1006,15 +1006,26 @@ func RegisterBuiltinExtFun(self *Dice) {
return CmdExecuteResult{Matched: true, Solved: true}
}

addNum := int64(10)
wodAdd := int64(10)
if adding, exists := groupAttrs.LoadX("wodAdd"); exists {
addNumX, _ := adding.ReadInt()
addNum = int64(addNumX)
wodAdd = int64(addNumX)
}
wodFace := int64(10)
if face, exists := groupAttrs.LoadX("wodPoints"); exists {
faceNumX, _ := face.ReadInt()
wodFace = int64(faceNumX)
}
wodSucc := int64(8)
if succ, exists := groupAttrs.LoadX("wodThreshold"); exists {
succNumX, _ := succ.ReadInt()
wodSucc = int64(succNumX)
}

txt := readNumber(cmdArgs.CleanArgs, fmt.Sprintf("a%d", addNum))
exprWoDicenum := fmt.Sprintf("a%dk%dm%d", wodAdd, wodSucc, wodFace)
txt := readNumber(cmdArgs.CleanArgs, exprWoDicenum)
if txt == "" {
txt = fmt.Sprintf("10a%d", addNum)
txt = "10" + exprWoDicenum
cmdArgs.Args = []string{txt}
}
cmdArgs.CleanArgs = txt
Expand Down
64 changes: 41 additions & 23 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,29 @@
>
> 以上配置没有写入项目的统一设置,以允许开发者不本地使用 golangci-lint
### 拉取代码并配置数据文件
### 编译运行

#### 使用 `go-task`

你可以安装 [go-task](https://taskfile.dev/installation) 以执行预置好的任务。安装后可执行:

使用git拉取项目代码
```bash
# 初次编译运行(包括安装依赖和相关工具)
task install run

# 后续编译运行
task run
```

从已发布的海豹二进制包中,解压 `data``gocqhttp` 两个目录到代码目录下。
#### 手动执行

你也可以按照以下步骤手动进行编译运行:

##### 拉取代码并配置数据文件

使用 git 拉取项目代码

从已发布的海豹二进制包中,解压 `data``lagrange` 两个目录到代码目录下。

同时需要在项目的 `static/frontend` 下放置用于打包进 core 的 ui 静态资源文件,可手动提供,也可通过命令自动从 github 拉取:

Expand All @@ -77,7 +95,7 @@ static
└─assets
```

### 编译运行
##### 运行编译命令

打开项目,或使用终端访问项目目录,运行:

Expand All @@ -99,50 +117,50 @@ go run .

### 从哪开始看

从 main.go 开始,这里海豹分出了几个线程,一个启动核心并提供服务,另一个提供ui的http服务
`main.go` 开始,这里海豹分出了几个线程,一个启动核心并提供服务,另一个提供 ui 的 http 服务

可以顺藤摸瓜了解海豹如何启动,如何提供服务,如何响应指令。指令响应的部分写在im_session.go中
可以顺藤摸瓜了解海豹如何启动,如何提供服务,如何响应指令。指令响应的部分写在 `im_session.go`

注意有部分代码还在构思中,实际并未使用,例如 CharacterTemplate,请阅读时先Find Usage加以区分
注意有部分代码还在构思中,实际并未使用,例如 `CharacterTemplate`,请阅读时先 Find Usage 加以区分

### 重要数据结构

dice.go 中的 Dice 结构体存放着各种核心配置,每个Dice实例是一个骰子,而每个骰子下面可以挂靠多个端点(EndPoint)。端点即交互渠道,例如一个QQ账号是一个端点
`dice.go` 中的 `Dice` 结构体存放着各种核心配置,每个 `Dice` 实例是一个骰子,而每个骰子下面可以挂靠多个端点 (EndPoint)。端点即交互渠道,例如一个 QQ 账号是一个端点

所有的端点由 IMSession 来统一管理,同样的,这个类也负责接收和分发指令。
所有的端点由 `IMSession` 来统一管理,同样的,这个类也负责接收和分发指令。

可能你会注意到有 IMSession 和 IMSessionLegacy,只看前一个就行,IMSessionLegacy对应的是0.99.13的上古版本之前的数据结构,仅用于升级配置文件。
可能你会注意到有 `IMSession``IMSessionLegacy`,只看前一个就行,`IMSessionLegacy` 对应的是 0.99.13 的上古版本之前的数据结构,仅用于升级配置文件。

GroupInfo 是群组信息
`GroupInfo` 是群组信息

GroupPlayerInfo 是玩家信息
`GroupPlayerInfo` 是玩家信息

### 为海豹添加更多平台支持

海豹使用叫做 PlatformAdapter 的接口来接入平台,只需将接口全部实现,再创建一个 EndPointInfo 塞入当前用户的 IMSession 对象之中即可。
海豹使用叫做 `PlatformAdapter` 的接口来接入平台,只需将接口全部实现,再创建一个 `EndPointInfo` 塞入当前用户的 `IMSession` 对象之中即可。

: 每次在UI上添加QQ账号,其实就是创建了一个EndPointInfo对象,并制定Adapter为PlatformAdapterQQOnebot
:每次在 UI 上添加 QQ 账号,其实就是创建了一个 `EndPointInfo` 对象,并制定 Adapter 为 `PlatformAdapterQQOnebot`

目前实现的两个adapter,一个对应onebot协议,主要用于QQ,另一个对应http,用于UI后台的测试窗口
目前实现的两个 adapter,一个对应 onebot 协议,主要用于 QQ,另一个对应 http,用于 UI 后台的测试窗口

观察 PlatformAdapterHttp 如何运作起来是一个很好的切入点,因为他非常简单。
观察 `PlatformAdapterHttp` 如何运作起来是一个很好的切入点,因为他非常简单。

### 改动扩展模块,如dnd5e,coc7等
### 改动扩展模块,如 dnd5e,coc7 等

对应 dice/ext_xxx.go 系列文件
对应 `dice/ext_xxx.go` 系列文件

推荐从 ext_template.go 入手,以 ext_dnd5e.go 为参考,因为这个模块书写时间较晚,相对较为完善。
推荐从 `ext_template.go` 入手,以 `ext_dnd5e.go` 为参考,因为这个模块书写时间较晚,相对较为完善。

### 暂不建议修改的地方

#### 表达式解析器

dice/roll.peg 是海豹的骰点指令文法文件
`dice/roll.peg` 是海豹的骰点指令文法文件

dice/rollvm.go 是骰点指令虚拟机
`dice/rollvm.go` 是骰点指令虚拟机

1.5后,已经替换使用 dicescript (RollVM V2) 作为表达式解释器,现有版本不宜轻动。
1.5 后,已经替换使用 dicescript (RollVM V2) 作为表达式解释器,现有版本不宜轻动。

关于 dicescript 的信息,请移步 <https://github.com/sealdice/dicescript>

而出于兼容性的考虑,V1版本的解释器将继续保留,直到2.0版本
而出于兼容性的考虑,V1 版本的解释器将继续保留,直到 2.0 版本

0 comments on commit b0601d5

Please sign in to comment.