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,43 +1,48 @@
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
/*
Copyright 2022 - 2023 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { NamespacedValue } from "matrix-events-sdk";
import { MessageEvent } from "./MessageEvent.js";
import { isEventTypeSame, M_TEXT } from "../@types/extensible_events.js";
import { M_POLL_KIND_DISCLOSED, M_POLL_KIND_UNDISCLOSED, M_POLL_START } from "../@types/polls.js";
import { InvalidEventError } from "./InvalidEventError.js";
import { ExtensibleEvent } from "./ExtensibleEvent.js";
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PollStartEvent = exports.PollAnswerSubevent = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _matrixEventsSdk = require("matrix-events-sdk");
var _MessageEvent = require("./MessageEvent");
var _extensible_events = require("../@types/extensible_events");
var _polls = require("../@types/polls");
var _InvalidEventError = require("./InvalidEventError");
var _ExtensibleEvent = require("./ExtensibleEvent");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } /*
Copyright 2022 - 2023 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* Represents a poll answer. Note that this is represented as a subtype and is
* not registered as a parsable event - it is implied for usage exclusively
* within the PollStartEvent parsing.
*/
export class PollAnswerSubevent extends MessageEvent {
class PollAnswerSubevent extends _MessageEvent.MessageEvent {
constructor(wireFormat) {
super(wireFormat);
/**
* The answer ID.
*/
_defineProperty(this, "id", void 0);
(0, _defineProperty2.default)(this, "id", void 0);
const id = wireFormat.content.id;
if (!id || typeof id !== "string") {
throw new InvalidEventError("Answer ID must be a non-empty string");
throw new _InvalidEventError.InvalidEventError("Answer ID must be a non-empty string");
}
this.id = id;
}
@@ -61,7 +66,7 @@ export class PollAnswerSubevent extends MessageEvent {
type: "org.matrix.sdk.poll.answer",
content: {
id: id,
[M_TEXT.name]: text
[_extensible_events.M_TEXT.name]: text
}
});
}
@@ -70,7 +75,8 @@ export class PollAnswerSubevent extends MessageEvent {
/**
* Represents a poll start event.
*/
export class PollStartEvent extends ExtensibleEvent {
exports.PollAnswerSubevent = PollAnswerSubevent;
class PollStartEvent extends _ExtensibleEvent.ExtensibleEvent {
/**
* Creates a new PollStartEvent from a pure format. Note that the event is *not*
* parsed here: it will be treated as a literal m.poll.start primary typed event.
@@ -81,7 +87,7 @@ export class PollStartEvent extends ExtensibleEvent {
/**
* The question being asked, as a MessageEvent node.
*/
_defineProperty(this, "question", void 0);
(0, _defineProperty2.default)(this, "question", void 0);
/**
* The interpreted kind of poll. Note that this will infer a value that is known to the
* SDK rather than verbatim - this means unknown types will be represented as undisclosed
@@ -89,60 +95,61 @@ export class PollStartEvent extends ExtensibleEvent {
*
* To get the raw kind, use rawKind.
*/
_defineProperty(this, "kind", void 0);
(0, _defineProperty2.default)(this, "kind", void 0);
/**
* The true kind as provided by the event sender. Might not be valid.
*/
_defineProperty(this, "rawKind", void 0);
(0, _defineProperty2.default)(this, "rawKind", void 0);
/**
* The maximum number of selections a user is allowed to make.
*/
_defineProperty(this, "maxSelections", void 0);
(0, _defineProperty2.default)(this, "maxSelections", void 0);
/**
* The possible answers for the poll.
*/
_defineProperty(this, "answers", void 0);
const poll = M_POLL_START.findIn(this.wireContent);
if (!poll?.question) {
throw new InvalidEventError("A question is required");
(0, _defineProperty2.default)(this, "answers", void 0);
const poll = _polls.M_POLL_START.findIn(this.wireContent);
if (!(poll !== null && poll !== void 0 && poll.question)) {
throw new _InvalidEventError.InvalidEventError("A question is required");
}
this.question = new MessageEvent({
this.question = new _MessageEvent.MessageEvent({
type: "org.matrix.sdk.poll.question",
content: poll.question
});
this.rawKind = poll.kind;
if (M_POLL_KIND_DISCLOSED.matches(this.rawKind)) {
this.kind = M_POLL_KIND_DISCLOSED;
if (_polls.M_POLL_KIND_DISCLOSED.matches(this.rawKind)) {
this.kind = _polls.M_POLL_KIND_DISCLOSED;
} else {
this.kind = M_POLL_KIND_UNDISCLOSED; // default & assumed value
this.kind = _polls.M_POLL_KIND_UNDISCLOSED; // default & assumed value
}
this.maxSelections = Number.isFinite(poll.max_selections) && poll.max_selections > 0 ? poll.max_selections : 1;
if (!Array.isArray(poll.answers)) {
throw new InvalidEventError("Poll answers must be an array");
throw new _InvalidEventError.InvalidEventError("Poll answers must be an array");
}
const answers = poll.answers.slice(0, 20).map(a => new PollAnswerSubevent({
type: "org.matrix.sdk.poll.answer",
content: a
}));
if (answers.length <= 0) {
throw new InvalidEventError("No answers available");
throw new _InvalidEventError.InvalidEventError("No answers available");
}
this.answers = answers;
}
isEquivalentTo(primaryEventType) {
return isEventTypeSame(primaryEventType, M_POLL_START);
return (0, _extensible_events.isEventTypeSame)(primaryEventType, _polls.M_POLL_START);
}
serialize() {
return {
type: M_POLL_START.name,
type: _polls.M_POLL_START.name,
content: {
[M_POLL_START.name]: {
[_polls.M_POLL_START.name]: {
question: this.question.serialize().content,
kind: this.rawKind,
max_selections: this.maxSelections,
answers: this.answers.map(a => a.serialize().content)
},
[M_TEXT.name]: `${this.question.text}\n${this.answers.map((a, i) => `${i + 1}. ${a.text}`).join("\n")}`
[_extensible_events.M_TEXT.name]: `${this.question.text}\n${this.answers.map((a, i) => `${i + 1}. ${a.text}`).join("\n")}`
}
};
}
@@ -157,25 +164,26 @@ export class PollStartEvent extends ExtensibleEvent {
*/
static from(question, answers, kind, maxSelections = 1) {
return new PollStartEvent({
type: M_POLL_START.name,
type: _polls.M_POLL_START.name,
content: {
[M_TEXT.name]: question,
[_extensible_events.M_TEXT.name]: question,
// unused by parsing
[M_POLL_START.name]: {
[_polls.M_POLL_START.name]: {
question: {
[M_TEXT.name]: question
[_extensible_events.M_TEXT.name]: question
},
kind: kind instanceof NamespacedValue ? kind.name : kind,
kind: kind instanceof _matrixEventsSdk.NamespacedValue ? kind.name : kind,
max_selections: maxSelections,
answers: answers.map(a => ({
id: makeId(),
[M_TEXT.name]: a
[_extensible_events.M_TEXT.name]: a
}))
}
}
});
}
}
exports.PollStartEvent = PollStartEvent;
const LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
function makeId() {
return [...Array(16)].map(() => LETTERS.charAt(Math.floor(Math.random() * LETTERS.length))).join("");