DIYgod/RSSHub · warning · Error

This user has no articles.

Error message

This user has no articles.

What it means

Thrown by the Civitai user-articles route when a GraphQL/Relay-style POST to civitai.com returns `article.result.data.json.items` as an empty array. This means the user account exists (the request did not error) but has published zero articles. Plain `Error`.

Source

Thrown at lib/routes/civitai/user.ts:56

            input: JSON.stringify({
                json: {
                    period: 'AllTime',
                    periodMode: 'published',
                    sort: 'Newest',
                    username,
                    includeDrafts: false,
                    pending: true,
                    browsingLevel: 1,
                    excludedTagIds: [415792, 426772, 5188, 5249, 130818, 130820, 133182],
                    cursor: null,
                },
                meta: { values: { cursor: ['undefined'] } },
            }),
        },
    });

    if (!article.result.data.json.items.length) {
        throw new Error('This user has no articles.');
    }

    const list = article.result.data.json.items.map((item) => ({
        title: item.title,
        link: `https://civitai.com/articles/${item.id}`,
        id: item.id,
        pubDate: parseDate(item.publishedAt),
        updated: parseDate(item.publishedAt),
        author: item.user?.username,
        category: item.tags.map((tag) => tag.name),
        image: `https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/${item.coverImage.url}/${item.coverImage.name}`,
    }));

    const items = await Promise.all(
        list.map((item) =>
            cache.tryGet(item.link, async () => {
                const response = await ofetch('https://civitai.com/api/trpc/article.getById', {
                    query: {

View on GitHub (pinned to bed535e087)

Solutions

  1. Verify the user has articles on civitai.com/users/<username>/articles.
  2. If the user's articles are all NSFW, note the route applies `browsingLevel: 1` and a fixed `excludedTagIds` list — those may hide legitimate content; raise the level or trim the exclusion list in code.
  3. Treat empty result as 'feed legitimately empty' rather than an error — consider returning an empty feed instead of throwing.

Example fix

// before
if (!article.result.data.json.items.length) {
    throw new Error('This user has no articles.');
}
// after — return empty feed instead of erroring
const list = article.result.data.json.items.map(...);
// (omit the throw; let RSSHub surface an empty feed)
Defensive patterns

Strategy: validation

Validate before calling

const items = article.result?.data?.json?.items ?? [];
if (items.length === 0) {
    // return an empty feed instead of throwing
}

Type guard

function hasArticles(r: unknown): r is { result: { data: { json: { items: unknown[] } } } } {
    return Boolean((r as any)?.result?.data?.json?.items?.length);
}

Prevention

When it happens

Trigger: Requesting `/civitai/user/<username>` where the user has no articles; the user only has models/images but no articles; the GraphQL filter combination (excludedTagIds, browsingLevel) filters out all of the user's articles.

Common situations: Artist who posts models but never writes articles; new account; NSFW articles all excluded by the hardcoded `excludedTagIds` / `browsingLevel: 1` filter.

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/6e7afc574140627f. Report an issue: GitHub.