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
- Verify the user has articles on civitai.com/users/<username>/articles.
- 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.
- 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
- Verify the user has articles on civitai.com/users/<name>/articles.
- Remember the route forces `browsingLevel: 1` and a fixed `excludedTagIds` list — these may hide content.
- Consider returning an empty feed rather than throwing for legitimately-empty accounts.
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
- Invalid API response
- No articles found for this channel. Please make sure the cha
- No posts found for this channel. Please make sure the channe
- No shorts found for this channel. Please make sure the chann
- Invalid type: ${type}
AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12).
Data as JSON: /api/errors/6e7afc574140627f.
Report an issue: GitHub.