jackwener/OpenCLI · error · ArgumentError

weibo publish text cannot be empty

Error message

weibo publish text cannot be empty

What it means

validateText rejects publish requests whose `text` option is missing, empty, or only whitespace. Weibo does not accept an empty post body, so the CLI fails fast with an ArgumentError before touching the browser.

Source

Thrown at clis/weibo/publish.js:46

const COMPOSE_TIMEOUT_MS = 10_000;
const SUBMIT_POLL_MS = 500;
const SUBMIT_TIMEOUT_MS = 20_000;
const SUPPORTED_EXTENSIONS = new Set(['.jpg', '.jpeg', '.png', '.gif', '.webp']);

// Weibo PC UI selectors. The CSS-module hash drifts on every frontend
// rebuild (#1602), so match on the stable placeholder text and keep the
// legacy hash as a last-resort fallback. Callers pick the LAST visible
// match because the compose modal renders on top of the home-feed strip.
const TEXTAREA_SELECTORS = [
    'textarea[placeholder*="有什么新鲜事"]',
    'textarea[placeholder*="新鲜事"]',
    'textarea._input_13iqr_8',
];
const FILE_INPUT_SELECTOR = 'input[type="file"][class*="_file_"]';

function validateText(text) {
    const t = String(text ?? '').trim();
    if (!t) throw new ArgumentError('weibo publish text cannot be empty');
    if (t.length > 2000) throw new ArgumentError('weibo publish text exceeds 2000 characters');
    return t;
}

function validateImagePaths(raw) {
    if (!raw) return [];
    const paths = raw.split(',').map(s => s.trim()).filter(Boolean);
    if (paths.length > MAX_IMAGES) {
        throw new ArgumentError(`Too many images: ${paths.length} (max ${MAX_IMAGES})`);
    }
    return paths.map(p => {
        const absPath = path.resolve(p);
        const ext = path.extname(absPath).toLowerCase();
        if (!SUPPORTED_EXTENSIONS.has(ext)) {
            throw new ArgumentError(`Unsupported image format "${ext}". Supported: jpg, png, gif, webp`);
        }
        const stat = fs.statSync(absPath, { throwIfNoEntry: false });
        if (!stat || !stat.isFile()) {

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Pass non-empty text via --text "your message"
  2. Check that any variable/file feeding the text is non-empty before invoking
  3. If posting images only is intended, note this CLI still requires non-empty text

Example fix

// before
weibo publish --text "$MSG"
// after
[ -n "$MSG" ] || { echo 'MSG is empty'; exit 1; }
weibo publish --text "$MSG"
Defensive patterns

Strategy: validation

Validate before calling

const t = (text ?? '').trim();
if (!t) throw new Error('text is required and cannot be empty');

Type guard

function isValidText(v) {
  return typeof v === 'string' && v.trim().length > 0;
}

Try / catch

try {
  await cli.run(['weibo', 'publish', '--text', text]);
} catch (err) {
  if (/text cannot be empty/.test(err.message)) {
    console.error('Provide non-empty --text');
  } else throw err;
}

Prevention

When it happens

Trigger: Calling `weibo publish` without `--text`, with `--text ""` or `--text " "`, or when a shell variable holding the text expands to empty.

Common situations: CI scripts where the post body comes from an env var or file that is empty; forgetting the --text flag; quoting bugs that swallow the argument.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/a184428ce52ebaf9. Report an issue: GitHub.