Sélectionner une révision Git
discordas.ts 3,36 Kio
import { Cli, Bridge, AppServiceRegistration, ClientFactory } from "matrix-appservice-bridge";
import * as log from "npmlog";
import * as yaml from "js-yaml";
import * as fs from "fs";
import { DiscordBridgeConfig } from "./config";
import { DiscordBot } from "./bot";
import { MatrixRoomHandler } from "./matrixroomhandler";
import { DiscordStore } from "./store";
import { Provisioner } from "./provisioner";
const cli = new Cli({
bridgeConfig: {
affectsRegistration: true,
schema: "./config/config.schema.yaml",
},
registrationPath: "discord-registration.yaml",
generateRegistration,
run,
});
try {
cli.run();
} catch (err) {
console.error("Init", "Failed to start bridge."); // eslint-disable-line no-console
console.error("Init", err); // eslint-disable-line no-console
}
function generateRegistration(reg, callback) {
reg.setId(AppServiceRegistration.generateToken());
reg.setHomeserverToken(AppServiceRegistration.generateToken());
reg.setAppServiceToken(AppServiceRegistration.generateToken());
reg.setSenderLocalpart("_discord_bot");
reg.addRegexPattern("users", "@_discord_.*", true);
reg.addRegexPattern("aliases", "#_discord_.*", true);
reg.setRateLimited(false);
callback(reg);
}
function run (port: number, config: DiscordBridgeConfig) {
log.level = config.logging ? (config.logging.level || "warn") : "warn";
log.info("discordas", "Starting Discord AS");
const yamlConfig = yaml.safeLoad(fs.readFileSync("discord-registration.yaml", "utf8"));
const registration = AppServiceRegistration.fromObject(yamlConfig);
if (registration === null) {
throw new Error("Failed to parse registration file");
}
const botUserId = "@" + registration.sender_localpart + ":" + config.bridge.domain;
const clientFactory = new ClientFactory({
appServiceUserId: botUserId,
token: registration.as_token,
url: config.bridge.homeserverUrl,
});
const provisioner = new Provisioner();
const discordstore = new DiscordStore(config.database ? config.database.filename : "discord.db");
const discordbot = new DiscordBot(config, discordstore, provisioner);
const roomhandler = new MatrixRoomHandler(discordbot, config, botUserId, provisioner);
const bridge = new Bridge({
clientFactory,
controller: {
// onUserQuery: userQuery,
onAliasQuery: roomhandler.OnAliasQuery.bind(roomhandler),
onEvent: roomhandler.OnEvent.bind(roomhandler),
onAliasQueried: roomhandler.OnAliasQueried.bind(roomhandler),
thirdPartyLookup: roomhandler.ThirdPartyLookup,
onLog: (line, isError) => {
log.verbose("matrix-appservice-bridge", line);
},
},
domain: config.bridge.domain,