siyuan-note/siyuan · warning

Conf.Language(204)

Error message

Conf.Language(204)

What it means

Export2Liandi refuses to send documents that live inside the built-in user guide notebook. The kernel checks IsUserGuide(tree.Box) after loading the tree by block ID and returns a localized message (Conf.Language(204), 'The doc in the user guide does not support sharing to the community') because sending guide docs to the community was explicitly disabled (issue #8388).

Source

Thrown at kernel/model/export.go:422

		return nil
	})
	return
}

func Export2Liandi(id string) (err error) {
	if err = prepareExportBlockAssets(id, false); err != nil {
		return
	}
	err = withExportReadLockByBlockID(id, func() error {
		tree, loadErr := LoadTreeByBlockID(id)
		if loadErr != nil {
			logging.LogErrorf("load tree by block id [%s] failed: %s", id, loadErr)
			return loadErr
		}

		if IsUserGuide(tree.Box) {
			// Doc in the user guide no longer supports one-click sending to the community https://github.com/siyuan-note/siyuan/issues/8388
			return errors.New(Conf.Language(204))
		}

		assets := getAssetsLinkDests(tree.Root, false)
		embedAssets := getQueryEmbedNodesAssetsLinkDests(tree.Root)
		assets = append(assets, embedAssets...)
		assets = gulu.Str.RemoveDuplicatedElem(assets)
		_, err = uploadAssets2Cloud(assets, bizTypeExport2Liandi, false)
		if err != nil {
			return err
		}

		msgId := util.PushMsg(Conf.Language(182), 15000)
		defer util.PushClearMsg(msgId)

		// 判断帖子是否已经存在,存在则使用更新接口
		const liandiArticleIdAttrName = "custom-liandi-articleid"
		const liandiArticleIdAttrNameOld = "custom-liandi-articleId" // 兼容旧属性名
		foundArticle := false

View on GitHub (pinned to 8641553a1f)

Solutions

  1. Copy the content into a normal (non-user-guide) notebook and share that document instead
  2. Use a different export path (e.g. export Markdown/Docx) that does not restrict guide docs

Example fix

// before
kernel.Model.Export2Liandi("20240101120000-abc1234") // id inside user guide box
// after
kernel.Model.Export2Liandi("20240101120000-xyz5678") // id in a user-created notebook
Defensive patterns

Strategy: validation

Validate before calling

const doc = await getBlockInfo(blockId);
if (doc.box === "20210808180117-czj9bvb") { // built-in user guide notebook id
  throw new Error("Refusing to export: doc is in the user guide notebook");
}

Try / catch

try {
  await export2Liandi(blockId);
} catch (e) {
  if (String(e.msg).includes("user guide")) showHint("Copy the doc to a normal notebook first");
}

Prevention

When it happens

Trigger: Calling the kernel export/Liandi share API (Export2Liandi) with a block/document ID that resolves to a tree inside the user guide notebook ('SiYuan User Guide' box).

Common situations: Users open a doc from the built-in user guide and click 'send to Liandi/community'; scripts or plugins that pass a block ID copied from a guide page.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11). Data as JSON: /api/errors/820140c07aca1752. Report an issue: GitHub.