





















11// Discord tests cover message handler.hydration plugin behavior.
2+import { MessageReferenceType, MessageType } from "discord-api-types/v10";
23import { describe, expect, it } from "vitest";
34import { Message } from "../internal/discord.js";
45import {
@@ -78,4 +79,150 @@ describe("hydrateDiscordMessageIfNeeded", () => {
7879expect(hydrated.mentionedRoles).toEqual(["role1"]);
7980expect(hydrated.referencedMessage?.content).toBe("earlier");
8081});
82+83+it("hydrates reply references when Discord omits referenced_message", async () => {
84+const client = createInternalTestClient();
85+const rest = createFakeRestClient([
86+{
87+id: "m1",
88+channel_id: "c1",
89+content: "what did this mean?",
90+attachments: [],
91+embeds: [],
92+mentions: [],
93+mention_roles: [],
94+mention_everyone: false,
95+timestamp: new Date().toISOString(),
96+author: {
97+id: "u1",
98+username: "alice",
99+discriminator: "0",
100+avatar: null,
101+},
102+message_reference: {
103+type: MessageReferenceType.Default,
104+message_id: "m0",
105+channel_id: "c1",
106+},
107+referenced_message: {
108+id: "m0",
109+channel_id: "c1",
110+content: "the replied-to message",
111+attachments: [],
112+embeds: [],
113+mentions: [],
114+mention_roles: [],
115+mention_everyone: false,
116+timestamp: new Date().toISOString(),
117+author: {
118+id: "u2",
119+username: "bob",
120+discriminator: "0",
121+avatar: null,
122+},
123+type: MessageType.Default,
124+tts: false,
125+pinned: false,
126+flags: 0,
127+},
128+type: MessageType.Reply,
129+tts: false,
130+pinned: false,
131+flags: 0,
132+},
133+]);
134+const message = new Message(client, {
135+id: "m1",
136+channel_id: "c1",
137+content: "what did this mean?",
138+attachments: [],
139+embeds: [],
140+mentions: [],
141+mention_roles: [],
142+mention_everyone: false,
143+timestamp: new Date().toISOString(),
144+author: {
145+id: "u1",
146+username: "alice",
147+global_name: null,
148+discriminator: "0",
149+avatar: null,
150+},
151+message_reference: {
152+type: MessageReferenceType.Default,
153+message_id: "m0",
154+channel_id: "c1",
155+},
156+type: MessageType.Reply,
157+tts: false,
158+pinned: false,
159+});
160+161+const hydrated = await hydrateDiscordMessageIfNeeded({
162+client: { rest },
163+ message,
164+messageChannelId: "c1",
165+});
166+167+expect(rest.calls).toHaveLength(1);
168+expect(hydrated.referencedMessage?.content).toBe("the replied-to message");
169+});
170+171+it("does not hydrate known-deleted or forwarded references", async () => {
172+const client = createInternalTestClient();
173+const rest = createFakeRestClient();
174+const baseMessage = {
175+id: "m1",
176+channel_id: "c1",
177+content: "what did this mean?",
178+attachments: [],
179+embeds: [],
180+mentions: [],
181+mention_roles: [],
182+mention_everyone: false,
183+timestamp: new Date().toISOString(),
184+author: {
185+id: "u1",
186+username: "alice",
187+global_name: null,
188+discriminator: "0",
189+avatar: null,
190+},
191+tts: false,
192+pinned: false,
193+};
194+195+const deletedReply = new Message(client, {
196+ ...baseMessage,
197+message_reference: {
198+type: MessageReferenceType.Default,
199+message_id: "m0",
200+channel_id: "c1",
201+},
202+referenced_message: null,
203+type: MessageType.Reply,
204+});
205+const forwardedMessage = new Message(client, {
206+ ...baseMessage,
207+message_reference: {
208+type: MessageReferenceType.Forward,
209+message_id: "m0",
210+channel_id: "c1",
211+},
212+type: MessageType.Default,
213+});
214+215+await hydrateDiscordMessageIfNeeded({
216+client: { rest },
217+message: deletedReply,
218+messageChannelId: "c1",
219+});
220+await hydrateDiscordMessageIfNeeded({
221+client: { rest },
222+message: forwardedMessage,
223+messageChannelId: "c1",
224+});
225+226+expect(rest.calls).toHaveLength(0);
227+});
81228});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。