Files
lamp a1bbeb6054 selfbot
just use on my own account edit my own messages
2026-07-27 10:37:03 +00:00

65 lines
2.4 KiB
JavaScript

import { MatrixClient, SimpleFsStorageProvider } from "@vector-im/matrix-bot-sdk";
import escapeHTML from "escape-html";
import { resolveServer, formatBytes, formatDuration } from "./util.js";
import { homeserver_url, access_token } from "./cred.js";
var storage = new SimpleFsStorageProvider("storage.json");
export var client = new MatrixClient(homeserver_url, access_token, storage);
client.on("room.message", async (roomId, event) => {
console.log(roomId, JSON.stringify(event));
if (event.sender != await client.getUserId()) return;
if (!event.content) return;
if (event.content["m.relates_to"]?.rel_type == "m.replace" || event.content["m.new_content"]) return;
if (!["m.video","m.file"].includes(event.content.msgtype)) return;
if (!event.content.url?.startsWith("mxc://kitty.haus")) return;
let [server_name, media_id] = event.content.url.replace("mxc://", '').split("/");
let body = event.content.filename ? event.content.body : null;
let formatted_body = event.content.formatted_body;
let filename = event.content.filename || event.content.body;
let i = event.content.info || {};
let direct_url = `https://mxc.kitty.haus/${media_id}/${encodeURIComponent(filename)}?type=${encodeURIComponent(i.mimetype || "application/octet-stream")}`;
let details = [];
if (i.duration || i.size || i.w || i.h) {
if (i.duration) details.push(formatDuration(i.duration));
if (i.size) details.push(formatBytes(i.size));
if (i.w || i.h) details.push(`${i.w}x${i.h}`);
}
details = details.length ? ` (${details.join(", ")})` : "";
let plain = `Direct URL: ${direct_url}${details}`;
let html = `<a href="${direct_url}">${escapeHTML(filename)}</a>${escapeHTML(details)}`;
if (formatted_body) html = `${formatted_body}<br><br>${html}`;
else if (body) html = `${escapeHTML(body)}<br><br>${html}`;
if (body) plain = `${body}\n\n${plain}`;
let m_new_content = Object.assign(structuredClone(event.content), {
format: "org.matrix.custom.html",
formatted_body: html,
body: plain,
filename
});
let content = Object.assign(structuredClone(m_new_content), {
"m.new_content": m_new_content,
"m.relates_to": {
event_id: event.event_id,
rel_type: "m.replace"
},
body: `* ${m_new_content.body}`,
formatted_body: `* ${m_new_content.formatted_body}`
});
client.sendEvent(roomId, "m.room.message", content);
});
client.start().then(() => console.log("Bot started!"));