yyuueexxiinngg / onebot-kotlin

OneBot标准的Kotlin实现及mirai插件 - 原cqhttp-mirai
GNU Affero General Public License v3.0
584 stars 139 forks source link

[Question] 编辑配置文件并重新启动 mirai console 后配置文件被覆盖 #129

Closed weearc closed 2 years ago

weearc commented 3 years ago

关闭 mirai console 后尝试编辑了生成的配置文件,但编辑后重新启动 mirai console 配置文件被覆盖掉。使用的是Onebot 0.3.4 版本

weearc commented 3 years ago

由于前台调试bot时杀掉bot的进程或者重启进程时会提示找不到websocket监听的端口。因此onebot看起来会尝试覆写掉配置文件。但是这并不是我希望看到的。目前解决方案是用非root用户运行mirai console(因为出现过root身份执行后Java binary被覆盖并被加锁的情况)修改配置文件,修改attr权限,使之无法被删除或覆盖。

sudo chattr +i settings.yml
yyuueexxiinngg commented 3 years ago

配置文件的生成和读取都调用的console的api, 交由console进行管理, 当配置中存在bots项后应该是不会覆盖配置文件的, 请问修改的配置文件是怎样的?

weearc commented 3 years ago

配置文件的生成和读取都调用的console的api, 交由console进行管理, 当配置中存在bots项后应该是不会覆盖配置文件的, 请问修改的配置文件是怎样的?

对比 Readme 中的示例配置文件仅仅修改了 heartbeat enable 为true ,并开启了 ws 和 ws reverse 。除此之外只修改了bot的QQ号为对应QQ号码,其他子项保持了默认均为修未在调试bot代码过程中由于 websocket 中断,mirai console 回报无法找到相应 websocket 监听的端口。未对配置文件加锁前会被尝试覆盖。加锁后 mirai console 报错无法对onebot的配置文件进行写入(以非root运行的mirai console)

yyuueexxiinngg commented 3 years ago

配置是复制README示例中的内容吗, 如果是, 则确实会被覆盖, 因为示例中并未将配置项写全, 请修改被覆盖后的配置文件试试

而且理论上覆盖不会丢失修改的内容

a08381 commented 3 years ago

配置是复制README示例中的内容吗, 如果是, 则确实会被覆盖, 因为示例中并未将配置项写全, 请修改被覆盖后的配置文件试试

而且理论上覆盖不会丢失修改的内容

我这边也遇到了,复现方法: 正常使用中的配置 修改http.enable为false supervisor重启mirai 重启后http.enable恢复为true

a08381 commented 3 years ago

配置文件样式:

proxy: ''
db: 
  enable: true
  # 生存时间/小时,存储的消息会在超过此时间后过期删除,设置为非正数视为无限
  ttl: 72
bots: 
  314****867: 
    cacheImage: true
    cacheRecord: true
    heartbeat: 
      enable: true
      interval: 1500
    http: 
      enable: true
      host: 0.0.0.0
      port: 5700
      accessToken: ''
      postUrl: ''
      postMessageFormat: string
      secret: ''
      # 上报超时时间, 单位毫秒, 须大于0才会生效
      timeout: 0
    ws_reverse: 
      - enable: true
        postMessageFormat: string
        reverseHost: 127.0.0.1
        reversePort: 8002
        accessToken: qwerty*******
        reversePath: '/ws'
        reverseApiPath: '/api'
        reverseEventPath: '/event'
        useUniversal: true
        useTLS: false
        reconnectInterval: 3000
    ws: 
      enable: false
      postMessageFormat: string
      wsHost: 0.0.0.0
      wsPort: 6700
      accessToken: ''
retroxz commented 3 years ago

这个问题有没有解决方法

User670 commented 3 years ago

我也遇到整个文件被覆盖的问题。参考上面提到ws端口的问题后,我试着换了个端口,这次onebot不会覆盖整个配置文件了,但是onebot还是固执地一直在覆盖 reverseApiPath reverseEventPath 这两个配置项为 /apievent。然而我记得我的nonebot用的是/ws/api/ws/event 两个接口……(ps: 我用的是nonebot 1不是nonebot 2)

ps: windows server 2012

a08381 commented 3 years ago

我也遇到整个文件被覆盖的问题。参考上面提到ws端口的问题后,我试着换了个端口,这次onebot不会覆盖整个配置文件了,但是onebot还是固执地一直在覆盖 reverseApiPath reverseEventPath 这两个配置项为 /apievent。然而我记得我的nonebot用的是/ws/api/ws/event 两个接口……(ps: 我用的是nonebot 1不是nonebot 2)

ps: windows server 2012

一般来说使用Universal服务端的话不会用到这两个配置的,被重置也没什么关系

哦对了,配置文件里的这个地址是会拼接的,也就是说,你在reversePath里输入了/ws之后,他会自动把你的api地址拼接成/ws/api,这个你不用担心。

User670 commented 3 years ago

一般来说使用Universal服务端的话不会用到这两个配置的,被重置也没什么关系

哦对了,配置文件里的这个地址是会拼接的,也就是说,你在reversePath里输入了/ws之后,他会自动把你的api地址拼接成/ws/api,这个你不用担心。

然而并没有,无论是Mirai的命令行界面还是nonebot的命令行界面都显示请求的接口是/api/event,没有ws。(我的reversePath确实设置的是/ws

还有,我好像不是Universal?(universal指的是什么?)

edit: 我试着把universal改成true,结果不好使。nonebot 1貌似不是universal(我仍然要问universal是什么 :-/)

另,为啥onebot要覆盖配置文件(的部分或全部)?????

edit 2: 不知道为啥现在不复写了,虽然还是不好使(但是现在不是这个issue的问题了)

edit 3: 我傻逼了,别管我接口的问题了

OhnkytaBlabdey commented 3 years ago

遇到过同样的问题 https://github.com/iTXTech/mirai-console-loader/issues/59#issuecomment-834248331

yyuueexxiinngg commented 3 years ago

遇到过同样的问题 iTXTech/mirai-console-loader#59 (comment)

应该在这修了 30f68ca335bdfce80cffb7fd6b279f28a3768917 试试dev分支构建 https://github.com/yyuueexxiinngg/onebot-kotlin/actions/runs/1008564711

yurineko73 commented 2 years ago

今天同样遇到了,请问这个问题应该怎么解决?

TheRealKamisama commented 2 years ago

此问题出现的原因可能是在退出时重新保存了一次配置文件
我在使用过程中发现了, 在mirai退出的时候以插件加载时的配置文件覆盖了一次, 这可能是许多人遇到此问题的原因
或许取消这个机制可以避免困惑

yyuueexxiinngg commented 2 years ago

此问题出现的原因可能是在退出时重新保存了一次配置文件 我在使用过程中发现了, 在mirai退出的时候以插件加载时的配置文件覆盖了一次, 这可能是许多人遇到此问题的原因 或许取消这个机制可以避免困惑

其实并没有写退出时保存这种功能,所以不太明白是怎么触发的。之前猜测是用错配置类型,在上面已经尝试修复,不过没有发布版本。你使用的是最新的构建版本吗?还是Release中发布的版本呢?