import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import type { DiscordMessagePreflightContext } from "./message-handler.preflight.js"; import { createNoopThreadBindingManager } from "./thread-bindings.js"; export async function createBaseDiscordMessageContext( overrides: Record = {}, ): Promise { const dir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-discord-")); const storePath = path.join(dir, "sessions.json"); return { cfg: { messages: { ackReaction: "👀" }, session: { store: storePath } }, discordConfig: {}, accountId: "default", token: "token", runtime: { log: () => {}, error: () => {} }, guildHistories: new Map(), historyLimit: 0, mediaMaxBytes: 1024, textLimit: 4000, sender: { label: "user" }, replyToMode: "off", ackReactionScope: "group-mentions", groupPolicy: "open", data: { guild: { id: "g1", name: "Guild" } }, client: { rest: {} }, message: { id: "m1", channelId: "c1", timestamp: new Date().toISOString(), attachments: [], }, messageChannelId: "c1", author: { id: "U1", username: "alice", discriminator: "0", globalName: "Alice", }, channelInfo: { name: "general" }, channelName: "general", isGuildMessage: true, isDirectMessage: false, isGroupDm: false, commandAuthorized: true, baseText: "hi", messageText: "hi", wasMentioned: false, shouldRequireMention: true, canDetectMention: true, effectiveWasMentioned: true, shouldBypassMention: false, threadChannel: null, threadParentId: undefined, threadParentName: undefined, threadParentType: undefined, threadName: undefined, displayChannelSlug: "general", guildInfo: null, guildSlug: "guild", channelConfig: null, baseSessionKey: "agent:main:discord:guild:g1", route: { agentId: "main", channel: "discord", accountId: "default", sessionKey: "agent:main:discord:guild:g1", mainSessionKey: "agent:main:main", }, threadBindings: createNoopThreadBindingManager("default"), ...overrides, } as unknown as DiscordMessagePreflightContext; } export function createDiscordDirectMessageContextOverrides(): Record { return { data: { guild: null }, channelInfo: null, channelName: undefined, isGuildMessage: false, isDirectMessage: true, isGroupDm: false, shouldRequireMention: false, canDetectMention: false, effectiveWasMentioned: false, displayChannelSlug: "", guildInfo: null, guildSlug: "", baseSessionKey: "agent:main:discord:direct:u1", route: { agentId: "main", channel: "discord", accountId: "default", sessionKey: "agent:main:discord:direct:u1", mainSessionKey: "agent:main:main", }, }; }