feat: complete Ancestor quote bot with production-ready Docker support

This commit is contained in:
unfunny
2026-09-13 14:14:38 -04:00
parent f2016da05a
commit fe7351a7dc
1145 changed files with 30890 additions and 97684 deletions

View File

@@ -1,4 +1,14 @@
import _defineProperty from "@babel/runtime/helpers/defineProperty";
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MemoryStore = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _user = require("../models/user");
var _roomState = require("../models/room-state");
var _utils = require("../utils");
/*
Copyright 2015 - 2021 The Matrix.org Foundation C.I.C.
@@ -19,52 +29,47 @@ limitations under the License.
* This is an internal module. See {@link MemoryStore} for the public class.
*/
import { RoomStateEvent } from "../models/room-state.js";
import { MapWithDefault } from "../utils.js";
import { KnownMembership } from "../@types/membership.js";
function isValidFilterId(filterId) {
const isValidStr = typeof filterId === "string" && !!filterId && filterId !== "undefined" &&
// exclude these as we've serialized undefined in localStorage before
filterId !== "null";
return isValidStr || typeof filterId === "number";
}
export class MemoryStore {
class MemoryStore {
/**
* Construct a new in-memory data store for the Matrix Client.
* @param opts - Config options
*/
constructor(opts = {}) {
_defineProperty(this, "rooms", {});
(0, _defineProperty2.default)(this, "rooms", {});
// roomId: Room
_defineProperty(this, "users", {});
(0, _defineProperty2.default)(this, "users", {});
// userId: User
_defineProperty(this, "syncToken", null);
(0, _defineProperty2.default)(this, "syncToken", null);
// userId: {
// filterId: Filter
// }
_defineProperty(this, "filters", new MapWithDefault(() => new Map()));
_defineProperty(this, "accountData", new Map());
(0, _defineProperty2.default)(this, "filters", new _utils.MapWithDefault(() => new Map()));
(0, _defineProperty2.default)(this, "accountData", new Map());
// type: content
_defineProperty(this, "localStorage", void 0);
_defineProperty(this, "oobMembers", new Map());
(0, _defineProperty2.default)(this, "localStorage", void 0);
(0, _defineProperty2.default)(this, "oobMembers", new Map());
// roomId: [member events]
_defineProperty(this, "pendingEvents", {});
_defineProperty(this, "clientOptions", void 0);
_defineProperty(this, "pendingToDeviceBatches", []);
_defineProperty(this, "nextToDeviceBatchId", 0);
_defineProperty(this, "createUser", void 0);
_defineProperty(this, "userProfiles", new Map());
(0, _defineProperty2.default)(this, "pendingEvents", {});
(0, _defineProperty2.default)(this, "clientOptions", void 0);
(0, _defineProperty2.default)(this, "pendingToDeviceBatches", []);
(0, _defineProperty2.default)(this, "nextToDeviceBatchId", 0);
/**
* Called when a room member in a room being tracked by this store has been
* updated.
*/
_defineProperty(this, "onRoomMember", (event, state, member) => {
if (member.membership === KnownMembership.Invite) {
(0, _defineProperty2.default)(this, "onRoomMember", (event, state, member) => {
if (member.membership === "invite") {
// We do NOT add invited members because people love to typo user IDs
// which would then show up in these lists (!)
return;
}
const user = this.users[member.userId] || this.createUser?.(member.userId);
const user = this.users[member.userId] || new _user.User(member.userId);
if (member.name) {
user.setDisplayName(member.name);
if (member.events.member) {
@@ -108,15 +113,12 @@ export class MemoryStore {
this.rooms[room.roomId] = room;
// add listeners for room member changes so we can keep the room member
// map up-to-date.
room.currentState.on(RoomStateEvent.Members, this.onRoomMember);
room.currentState.on(_roomState.RoomStateEvent.Members, this.onRoomMember);
// add existing members
room.currentState.getMembers().forEach(m => {
this.onRoomMember(null, room.currentState, m);
});
}
setUserCreator(creator) {
this.createUser = creator;
}
/**
* Retrieve a room by its' room ID.
* @param roomId - The room ID.
@@ -139,7 +141,7 @@ export class MemoryStore {
*/
removeRoom(roomId) {
if (this.rooms[roomId]) {
this.rooms[roomId].currentState.removeListener(RoomStateEvent.Members, this.onRoomMember);
this.rooms[roomId].currentState.removeListener(_roomState.RoomStateEvent.Members, this.onRoomMember);
}
delete this.rooms[roomId];
}
@@ -205,7 +207,7 @@ export class MemoryStore {
* Store a filter.
*/
storeFilter(filter) {
if (!filter?.userId || !filter?.filterId) return;
if (!(filter !== null && filter !== void 0 && filter.userId) || !(filter !== null && filter !== void 0 && filter.filterId)) return;
this.filters.getOrCreate(filter.userId).set(filter.filterId, filter);
}
@@ -214,7 +216,8 @@ export class MemoryStore {
* @returns A filter or null.
*/
getFilter(userId, filterId) {
return this.filters.get(userId)?.get(filterId) || null;
var _this$filters$get;
return ((_this$filters$get = this.filters.get(userId)) === null || _this$filters$get === void 0 ? void 0 : _this$filters$get.get(filterId)) || null;
}
/**
@@ -237,9 +240,7 @@ export class MemoryStore {
if (isValidFilterId(value)) {
return value;
}
} catch {
// Do nothing
}
} catch (e) {}
return null;
}
@@ -257,9 +258,7 @@ export class MemoryStore {
} else {
this.localStorage.removeItem(key);
}
} catch {
// Do nothing
}
} catch (e) {}
}
/**
@@ -270,7 +269,13 @@ export class MemoryStore {
*/
storeAccountDataEvents(events) {
events.forEach(event => {
this.accountData.set(event.getType(), event);
// MSC3391: an event with content of {} should be interpreted as deleted
const isDeleted = !Object.keys(event.getContent()).length;
if (isDeleted) {
this.accountData.delete(event.getType());
} else {
this.accountData.set(event.getType(), event);
}
});
}
@@ -348,7 +353,7 @@ export class MemoryStore {
// userId: User
};
this.syncToken = null;
this.filters = new MapWithDefault(() => new Map());
this.filters = new _utils.MapWithDefault(() => new Map());
this.accountData = new Map(); // type : content
return Promise.resolve();
}
@@ -386,7 +391,8 @@ export class MemoryStore {
return Promise.resolve();
}
async getPendingEvents(roomId) {
return this.pendingEvents[roomId] ?? [];
var _this$pendingEvents$r;
return (_this$pendingEvents$r = this.pendingEvents[roomId]) !== null && _this$pendingEvents$r !== void 0 ? _this$pendingEvents$r : [];
}
async setPendingEvents(roomId, events) {
this.pendingEvents[roomId] = events;
@@ -410,20 +416,9 @@ export class MemoryStore {
this.pendingToDeviceBatches = this.pendingToDeviceBatches.filter(batch => batch.id !== id);
return Promise.resolve();
}
async getUserProfile(userId) {
return this.userProfiles.get(userId);
}
async storeUserProfiles(userProfiles) {
userProfiles.forEach((profile, userId) => this.userProfiles.set(userId, profile));
}
async removeUserProfiles(userIds) {
userIds.forEach(userId => this.userProfiles.delete(userId));
}
async removeEventsFromRoom(roomId, eventIds) {
// Can ignore as there is no backing store.
}
async destroy() {
// Nothing to do
}
}
exports.MemoryStore = MemoryStore;
//# sourceMappingURL=memory.js.map