DIYgod/RSSHub · error
response.message ?? `Error code ${response.code}`
Error message
response.message ?? `Error code ${response.code}` What it means
Generic Error thrown by the message-at route when Bilibili's /x/msgfeed/at API returns a non-zero code. The error message is response.message if present, otherwise a formatted 'Error code N' string. This fires after a successful authenticated request but when Bilibili returns an error payload (e.g., rate limiting, session issues, or API changes).
Source
Thrown at lib/routes/bilibili/message-at.ts:105
const cookie = config.bilibili.cookies[uid];
if (cookie === undefined) {
throw new ConfigNotFoundError('缺少对应 uid 的 Bilibili 用户登录后的 Cookie 值');
}
const response = await ofetch<AtResponse>('https://api.bilibili.com/x/msgfeed/at', {
query: {
platform: 'web',
build: 0,
mobi_app: 'web',
},
headers: {
Referer: 'https://message.bilibili.com/',
Cookie: cookie,
},
});
if (response.code !== 0) {
throw new Error(response.message ?? `Error code ${response.code}`);
}
const items: DataItem[] = (response.data.items || []).map((item) => {
const atUser = item.user;
const atItem = item.item;
const sourceContent = atItem.source_content;
let description = `<p><strong>${atUser.nickname}</strong> @了你:</p>`;
description += `<blockquote>${sourceContent}</blockquote>`;
if (atItem.image) {
description += `<p><img src="${atItem.image.replace('http://', 'https://')}" /></p>`;
}
description += `<p>来自:${atItem.business} - ${atItem.title}</p>`;
// Generate link with root_id for direct navigation
let link = atItem.uri;View on GitHub (pinned to bed535e087)
Solutions
- Inspect the response.code and response.message to identify the specific Bilibili error.
- If -101 or -6, refresh the cookie via browser re-login.
- If -509, reduce polling frequency and increase cache expiry.
- If the error persists, verify the msgfeed API hasn't changed by testing the endpoint manually.
Example fix
// before
if (response.code !== 0) {
throw new Error(response.message ?? `Error code ${response.code}`);
}
// after: include actionable context
if (response.code !== 0) {
const hint = response.code === -101 ? ' (cookie may be expired — refresh BILIBILI_COOKIE)'
: response.code === -509 ? ' (rate limited — reduce frequency)'
: '';
throw new Error(`msgfeed/at error ${response.code}: ${response.message ?? 'unknown'}${hint}`);
} Defensive patterns
Strategy: try-catch
Type guard
interface BilibiliApiResponse {
code: number;
message?: string;
data?: unknown;
}
function isApiError(response: BilibiliApiResponse): boolean {
return response.code !== 0;
} Try / catch
try {
const response = await ofetch<AtResponse>(url, {...});
if (response.code !== 0) {
const hint = response.code === -101 ? ' (refresh cookie)'
: response.code === -509 ? ' (rate limited)'
: '';
throw new Error(`${response.message ?? `code ${response.code}`}${hint}`);
}
} catch (e) {
logger.error(`msgfeed/at failed: ${e.message}`);
throw e;
} Prevention
- Inspect the code value to distinguish cookie vs rate-limit issues.
- Cache msgfeed results to reduce API calls.
- Handle -509 with exponential backoff.
- Log full error context for diagnosis.
When it happens
Trigger: The msgfeed/at endpoint returns response.code !== 0 despite a valid cookie being attached. Possible codes: -101 (not logged in / cookie issues at a sub-service level), -509 (rate limited), -7 (account restricted), or temporary backend errors.
Common situations: Polling the mentions feed too frequently; cookie partially expired (SESSDATA present but DedeUserID mismatch); Bilibili added new requirements to the msgfeed endpoint; account flagged for API automation.
Related errors
- message ?? code
- 对应 uid 的 Bilibili 用户 请求失败
- Got error code ${data.code} while fetching: ${data.message}
- 缺少对应 uid 的 Bilibili 用户登录后的 Cookie 值
- response.message ?? `Error code ${response.code}`
AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12).
Data as JSON: /api/errors/2fdc256d38028f84.
Report an issue: GitHub.