feat: implement moderation message capture system

- Add message store with database operations (insert, update, query)
- Implement attachment uploader with picser integration
- Add Discord event listeners for message create/update/delete
- Support attachment upload with retry logic and error handling
- Add comprehensive unit tests for message store and uploader
This commit is contained in:
MythEclipse
2026-05-13 19:34:14 +07:00
parent 579fcb4684
commit 017efb0b86
5 changed files with 638 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
import { describe, it, expect, beforeEach } from "vitest";
beforeEach(() => {
process.env = {
...process.env,
DISCORD_TOKEN: "test-token",
MONITOR_GUILD_ID: "test-guild",
NODE_ENV: "test",
};
});
describe("attachmentUploader", () => {
it("parses picser upload response correctly", async () => {
const { parseUploadResponse } = await import("../../src/moderation/attachmentUploader");
const response = {
success: true,
filename: "uploads/abc123.jpg",
urls: {
raw_commit: "https://raw.githubusercontent.com/user/repo/commit/uploads/abc123.jpg",
},
size: 102400,
type: "image/jpeg",
};
const result = parseUploadResponse(response);
expect(result.success).toBe(true);
expect(result.url).toBe("https://raw.githubusercontent.com/user/repo/commit/uploads/abc123.jpg");
expect(result.filename).toBe("uploads/abc123.jpg");
});
it("handles upload response with missing raw_commit", async () => {
const { parseUploadResponse } = await import("../../src/moderation/attachmentUploader");
const response = {
success: true,
filename: "uploads/abc123.jpg",
urls: {},
size: 102400,
type: "image/jpeg",
};
expect(() => parseUploadResponse(response)).toThrow();
});
});