v4: a handle with this instance's own host names the local user — another instance writes bob from here as bob@gerbeur.example, so a mention or a link copied from there named no one here: /@bob@gerbeur.example was a 404, and the mention notified nobody. localHandle (shared/validation.ts) drops this instance's host, its API's or its pages', from a handle; resolveUsername reads names by it, so the page, the API and the Open Graph 301 reach bob at /@bob, and so do the mention notifications and the chat's highlight and chime.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,8 @@ import {
|
||||
import { type Page, pageOf } from "../lib/pagination.ts";
|
||||
import { sendToUser } from "./ws-service.ts";
|
||||
import { mentionedUsernames } from "../../shared/mention.ts";
|
||||
import { localHandle } from "../../shared/validation.ts";
|
||||
import { isSelfHost } from "../lib/self-url.ts";
|
||||
|
||||
/** Each id of a user a notification names, beside the field of their name. */
|
||||
const USER_FIELDS = [
|
||||
@@ -359,7 +361,7 @@ export function notifyMentions(
|
||||
for (const username of usernames) {
|
||||
const mentionedRow = db.prepare(
|
||||
`SELECT id FROM users WHERE lower(username) = ?;`,
|
||||
).get(username) as { id: string } | undefined;
|
||||
).get(localHandle(username, isSelfHost)) as { id: string } | undefined;
|
||||
if (!mentionedRow || mentionedRow.id === mentionerUserId) continue;
|
||||
if (skipUserId?.(mentionedRow.id)) continue;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user