guanghulab/scripts/chatroom-post.js

70 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

/**
* scripts/chatroom-post.js
* 人格体聊天室消息写入工具
*
* 用法: node scripts/chatroom-post.js <channel> <from_id> <from_name> <content> [mentions] [reply_to]
*
* 参数:
* channel - 频道名 (general / infra / dev-support / ontology)
* from_id - 发送者人格体编号
* from_name - 发送者人格体名称
* content - 消息内容
* mentions - 可选 · 逗号分隔的 @人格体编号
* reply_to - 可选 · 回复的消息 ID
*/
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
const channel = process.argv[2];
const fromId = process.argv[3];
const fromName = process.argv[4];
const content = process.argv[5];
const mentions = process.argv[6] ? process.argv[6].split(',') : [];
const replyTo = process.argv[7] || null;
if (!channel || !fromId || !fromName || !content) {
console.error('用法: node scripts/chatroom-post.js <channel> <from_id> <from_name> <content> [mentions] [reply_to]');
process.exit(1);
}
const channelFile = path.join('grid-db', 'chatroom', 'channels', `${channel}.jsonl`);
fs.mkdirSync(path.dirname(channelFile), { recursive: true });
const now = new Date();
const dateStr = now.toISOString().slice(0, 10).replace(/-/g, '');
const hash = crypto.createHash('md5').update(content + now.toISOString()).digest('hex');
const msgId = `MSG-${dateStr}-${String(parseInt(hash.slice(0, 8), 16) % 10000).padStart(4, '0')}`;
const message = {
id: msgId,
channel: channel,
from: fromId,
from_name: fromName,
timestamp: now.toISOString(),
type: 'text',
content: content,
mentions: mentions,
reply_to: replyTo,
reactions: []
};
fs.appendFileSync(channelFile, JSON.stringify(message) + '\n');
// 更新未读计数
const unreadFile = path.join('grid-db', 'chatroom', 'meta', 'unread.json');
let unread = {};
if (fs.existsSync(unreadFile)) {
unread = JSON.parse(fs.readFileSync(unreadFile, 'utf8'));
}
for (const mention of mentions) {
if (!unread[mention]) unread[mention] = {};
if (!unread[mention][channel]) unread[mention][channel] = 0;
unread[mention][channel]++;
}
fs.mkdirSync(path.dirname(unreadFile), { recursive: true });
fs.writeFileSync(unreadFile, JSON.stringify(unread, null, 2));
console.log(`✅ 消息已发送: ${msgId} → #${channel}`);