Koishi 迁移指北

这是一篇教你如何正确迁移你的 koishi 的文章,会涵盖同平台、不同平台之间等方式,你可以结合自身情况进行操作;同时,这是一篇 Wiki,如果文章有错漏欢迎修订。

平台

此处所说的「平台」指的是不同的操作系统,在真正开始迁移之前,我们需要了解不同「平台」的差异,以及大概知晓 Koishi 的运行方式,这样才会在迁移时不至于发生各种问题。

平台差异

首先,目前主流的操作系统有这些:

  • Windows
  • MacOS
  • Linux(这里泛指基于 Linux 内核的各发行版)
  • Android
  • iOS

而不同平台运行在不同处理器架构下又会产生一点区别,这里又可以分为「x86_x64」与「ARM」等不同的处理器架构。
我们不需要细究这些有什么区别,我们只需要明确一个概念:平台与平台之间是有区别的

「跨平台」的 Koishi

Koishi 是一个运行在 NodeJs 上的一个机器人框架,得益于 NodeJs 本身的特性, Koishi 框架本身是「跨平台」的。当然,你发现这里仅说了 Koishi 本身是跨平台的,那 Koishi 的「插件」是怎么一个情况呢?这是因为不同插件可能使用了特定平台的代码,或者调用了只能运行在特定平台的程序。
到此,你又得到了一个概念:Koishi 本身是跨平台的,但插件可能不是

好了,带着这两个概念,我们可以试着开始了:

开始

Tips: 迁移操作目前来说会在 Koishi Desktop 以及 Koishi Andoird 之外操作 Koishi,这是不受「Koishi 用户交流群」客服支持的方法,你可以在论坛中交流,不要试图在用户群触发「308状态」

目前来说,Koishi 有多种安装方式:

  • 启动器
    • Koishi Desktop
    • Koishi Android
  • 容器(例如 Docker)
  • 模板项目(进阶)
  • Koinix (WIP)

其中,「启动器」与「容器」都是基于模板项目并大大简化操作的安装方式,在「启动器」中「实例」所指的就是单个模板项目,因此我们迁移时本质是在迁移这个「模板项目」。

同平台迁移

根据之前的了解,我们知道不同平台之间是有差异的,但是如果只是从这台 Windows PC 迁移至另外一台 Windows PC 的话,就不存在差异了,因为这本来就是相同的两个平台(废话),因此迁移方式十分简单:复制粘贴。这里讲讲不同安装方式的迁移方法:

启动器

启动器的数据文件根据 kd 与 ka 有不同的位置,你可以看看以下文章了解数据目录:

在 kd 中,选择「高级 - 打开数据文件夹」后在文件夹中复制 default 文件夹或者压缩 default 文件夹,并将实例迁移至目标机器上(记得解压)。

注意:请牢记平台与平台之间是有区别的,如果你想从 Koishi Desktop for Windows 迁移至 Koishi Desktop for Linux,你不应该简单的复制粘贴,这会导致部分插件出现问题。

在 ka 中,你可以选择「导出整合包」,然后在你的目标手机的 ka 上选择「导入整合包」。

容器

这是一个需要修订的内容,不保证正确性

容器之间的迁移十分简单,每个镜像都是单文件,你只需要导出然后在目标平台导出即可。

跨平台迁移

不同平台之间是有区别的(×N),当你想迁移 Koishi 到不同平台时,需要注意插件可能会不工作。

Koishi Desktop

当使用 Koishi Desktop 在 Windows、MacOS、Linux 之间跨平台迁移时,首先需要根据上文「同平台迁移」中所讲的将 default 文件夹迁移至目标平台的 Koishi Desktop 数据文件夹中,进行如下操作:

点按通知区域的 Koishi 桌面图标,然后选择「高级 - 打开 Koishi 控制台」。在控制台中输入如下命令:

koi --debug yarn -n default install --no-lockfile

这是来自 Koishi Desktop 的高级操作,具体可以看:

Koishi Desktop 与 Koishi Android

还记得那个概念吗?desktop 与 android 所处的平台依旧是不一样的。当你从 Koishi Android 迁移至 Koishi Desktop 时,你需要如下步骤:

  1. 在 Koishi Android 中点击「导出整合包」
  2. 将整合包导入数据文件夹并解压重命名为 default 或者其他名字
  1. 点按通知区域的 Koishi 桌面图标,然后选择「高级 - 打开 Koishi 控制台」。在控制台中输入如下命令:
koi --debug yarn -n default install --no-lockfile

当你从 Koishi Desktop 迁移至 Koishi Android 时,你需要如下步骤:

  1. 进入 default 文件夹,并进行压缩操作
  2. 将压缩包通过「导入整合包」导入到 Koishi Android中
  3. 卸载并重新安装出现问题的插件

Q&A

  • 为什么不介绍 「模板项目」的迁移方式?

    这是开发者使用的进阶方法,文章假定开发者已经完全理解了 node、包管理等知识,有能力自己处理不同平台下依赖、patch 等问题。

  • 为什么不介绍 「koinix」的迁移方式?

    这是 Koishi 之神 Anillc 在 nix 理念下的一个「Koishi 发行版」,这个需要有 nix 以及 linux 中级知识。

  • 为什么有些插件无法跨平台?

    因为一部分插件依赖了特定平台的代码或程序,以 gocqhttp 插件为例,这个插件依赖了名为 go-cqhttp 的程序,go-cqhttp 有针对不同平台的二进制文件,它无法跨平台。因此,比如当你将 Koishi Desktop for Windows 复制到 Koishi Desktop for Linux 同时会将 go-cqhttp.exe 一并复制过去,而 .exe 文件无法在 Linux 下运行,会导致 Koishi 无法启动 gocq 导致出现 「正在启动 gocqhttp 子进程…」的问题(这来自一个真实案例,也是写本文章的原因之一)。

  • 为什么从 Koishi Desktop 迁移至 Koishi Android 后只能重装不能用的插件?

    因为目前 Koishi Android 没有更新依赖的解决方案,你可以前往 Koishi-Android 仓库提交 issue 或 fork 并添加功能后发起 PR。

6 个赞

好贴,如果能早点遇到就好 :star_struck:

问题来了,window迁移到另一个window,如果default文件加太大了怎么办

1 个赞

可以进行一个压缩包的打,由于实例文件夹会包含很多细碎的小文件,这在 Windows 下直接移动是浪费生命的行为,所以我更推荐压缩为一个文件后进行迁移(记得解压)。
太大这个可能是你的插件太多了导致的

2 个赞

其实还有一个问题,我迁移之后我发现所有的插件都不见了——我迁移时带了yml文件、bd文件和accouts文件夹,在插件界面有显示,但是系统却说没有下载。
以sd-Switch为例,我试着重新安装他,但无论如何都安装不了,任何插件都是这样:




日志:

1 个赞

你缺少了 package.json,我建议你按照文章方法重新迁移比较好

如果你是使用 bp 的话,你也应该移动所有文件夹与文件,并删除 yarn.lock 文件后执行 yarn 命令重新安装依赖。

1 个赞

我的服务器已经被腾讯收回了,原来的koishi数据也留在那里,怕是已经不能回头了…

在koishi.yml删除对应的插件配置后,再到插件市场重新安装,有可行性吗

顺便说一下,我用的是kd

1 个赞

如果已经无法挽回,我推荐你进行如下操作:

  1. 保留旧的 koishi.yml、koishi.db 等文件待用
  2. 全新安装一个 kd(如果已安装,则进行双清)
  3. 使用任意软件打开旧的 koishi.yml 放在旁边,对照文件内的插件名字逐一安装
    3.1 你不应该操作任何新 kd 内的配置,只安装不启用
  4. 安装完所有插件后将旧的 koishi.yml、koishi.db 等文件复制并覆盖实例文件夹内的同名文件

注意,在最新版本的 koishi 上 .koishi.db 被移动到了 /data 内,并且前缀没有「.」了

进行如上操作后,你应当已经恢复你的插件配置、数据库与账号信息了;并且 Koishi 能够正常运行。

1 个赞

今天用户群里有小伙伴反馈这里没看懂,在此补充一下:

在此之前,你应该已经解压完了你的整合包;现在,你有一个名叫default的文件夹,里面有一堆看不懂的文件

接下来:

  1. 点Koishi图标-高级-打开数据文件夹
  2. 点Koishi图标-高级-打开终端
  3. 退出Koishi Desktop
  4. 数据文件夹里打开instances文件夹,把里面原来的default文件夹删掉,换上自己的文件夹
  5. 找到刚才打开的Koishi终端,然后继续跟着教程操作
1 个赞

用的kd,在新设备上复制完default文件夹后,打开kd再点击更新依赖,就无限提示正在连接服务器。
重启之后变成了这样:
Snipaste_2023-07-13_18-46-47

又试验了几次,只要koishi没更到4.13.7就能继续用,一更新就连不上,我目前版本是4.13.6

2 个赞

更新后出现 Not Found 已另外发帖,你可以查找一下哦

3 个赞

爱你哟

2 个赞