feat(cache): include source and guildId metadata in channel member cache
This commit is contained in:
@@ -19,7 +19,7 @@ function loadCache(api: OpenClawPluginApi): void {
|
|||||||
try {
|
try {
|
||||||
if (!fs.existsSync(p)) return;
|
if (!fs.existsSync(p)) return;
|
||||||
const raw = fs.readFileSync(p, "utf8");
|
const raw = fs.readFileSync(p, "utf8");
|
||||||
const parsed = JSON.parse(raw) as Record<string, { botAccountIds?: string[] }>;
|
const parsed = JSON.parse(raw) as Record<string, { botAccountIds?: string[]; source?: string; guildId?: string; updatedAt?: string }>;
|
||||||
for (const [channelId, rec] of Object.entries(parsed || {})) {
|
for (const [channelId, rec] of Object.entries(parsed || {})) {
|
||||||
const ids = Array.isArray(rec?.botAccountIds) ? rec.botAccountIds.filter(Boolean) : [];
|
const ids = Array.isArray(rec?.botAccountIds) ? rec.botAccountIds.filter(Boolean) : [];
|
||||||
if (ids.length > 0) channelSeenAccounts.set(channelId, new Set(ids));
|
if (ids.length > 0) channelSeenAccounts.set(channelId, new Set(ids));
|
||||||
@@ -29,11 +29,32 @@ function loadCache(api: OpenClawPluginApi): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function inferGuildIdFromChannelId(api: OpenClawPluginApi, channelId: string): string | undefined {
|
||||||
|
const root = (api.config as Record<string, unknown>) || {};
|
||||||
|
const channels = (root.channels as Record<string, unknown>) || {};
|
||||||
|
const discord = (channels.discord as Record<string, unknown>) || {};
|
||||||
|
const accounts = (discord.accounts as Record<string, Record<string, unknown>>) || {};
|
||||||
|
for (const rec of Object.values(accounts)) {
|
||||||
|
const chMap = (rec?.channels as Record<string, Record<string, unknown>> | undefined) || undefined;
|
||||||
|
if (!chMap) continue;
|
||||||
|
const direct = chMap[channelId];
|
||||||
|
const prefixed = chMap[`channel:${channelId}`];
|
||||||
|
const found = (direct || prefixed) as Record<string, unknown> | undefined;
|
||||||
|
if (found && typeof found.guildId === "string" && found.guildId.trim()) return found.guildId.trim();
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
function persistCache(api: OpenClawPluginApi): void {
|
function persistCache(api: OpenClawPluginApi): void {
|
||||||
const p = cachePath(api);
|
const p = cachePath(api);
|
||||||
const out: Record<string, { botAccountIds: string[]; updatedAt: string }> = {};
|
const out: Record<string, { botAccountIds: string[]; updatedAt: string; source: string; guildId?: string }> = {};
|
||||||
for (const [channelId, set] of channelSeenAccounts.entries()) {
|
for (const [channelId, set] of channelSeenAccounts.entries()) {
|
||||||
out[channelId] = { botAccountIds: [...set], updatedAt: new Date().toISOString() };
|
out[channelId] = {
|
||||||
|
botAccountIds: [...set],
|
||||||
|
updatedAt: new Date().toISOString(),
|
||||||
|
source: "dirigent/turn-bootstrap",
|
||||||
|
guildId: inferGuildIdFromChannelId(api, channelId),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
fs.mkdirSync(path.dirname(p), { recursive: true });
|
fs.mkdirSync(path.dirname(p), { recursive: true });
|
||||||
|
|||||||
Reference in New Issue
Block a user