diff --git a/src/discordas.ts b/src/discordas.ts index 1bfbf460324196d5fe548ec656b6cc4b84170be1..c1952eec8196af74607b7d5be134b6e1936ce014 100644 --- a/src/discordas.ts +++ b/src/discordas.ts @@ -46,6 +46,8 @@ function run (port: number, config: DiscordBridgeConfig) { token: registration.as_token, url: config.bridge.homeserverUrl, }); + const discordbot = new DiscordBot(config); + const roomhandler = new MatrixRoomHandler(discordbot, config); const bridge = new Bridge({ clientFactory, @@ -54,8 +56,9 @@ function run (port: number, config: DiscordBridgeConfig) { onAliasQuery: (alias, aliasLocalpart) => { return roomhandler.OnAliasQuery(alias, aliasLocalpart); }, - onEvent: (request, context) => { roomhandler.OnEvent(request, context); }, - onAliasQueried: (alias, roomId) => { return roomhandler.OnAliasQueried(alias, roomId); }, + onEvent: roomhandler.OnEvent.bind(roomhandler), + onAliasQueried: roomhandler.OnAliasQueried.bind(roomhandler), + thirdPartyLookup: roomhandler.ThirdPartyLookup, // onLog: function (line, isError) { // if(isError) { // if(line.indexOf("M_USER_IN_USE") === -1) {//QUIET! @@ -68,9 +71,8 @@ function run (port: number, config: DiscordBridgeConfig) { homeserverUrl: config.bridge.homeserverUrl, registration, }); - - const discordbot = new DiscordBot(config, bridge); - const roomhandler = new MatrixRoomHandler(bridge, discordbot, config); + roomhandler.setBridge(bridge); + discordbot.setBridge(bridge); log.info("AppServ", "Started listening on port %s at %s", port, new Date().toUTCString() ); bridge.run(port, config); diff --git a/src/discordbot.ts b/src/discordbot.ts index 28712e5812ffa0821a45ea009f0a99caa0405281..fd06d4ed898545dc0028c44978e9f0d34ba06a2f 100644 --- a/src/discordbot.ts +++ b/src/discordbot.ts @@ -1,7 +1,7 @@ import { DiscordBridgeConfig } from "./config"; import * as Discord from "discord.js"; import * as log from "npmlog"; -import { MatrixUser, RemoteUser } from "matrix-appservice-bridge"; +import { MatrixUser, RemoteUser, Bridge } from "matrix-appservice-bridge"; import { Util } from "./util"; import * as Bluebird from "bluebird"; import * as mime from "mime"; @@ -11,9 +11,12 @@ export class DiscordBot { private config: DiscordBridgeConfig; private bot: Discord.Client; private discordUser: Discord.ClientUser; - private bridge; - constructor(config: DiscordBridgeConfig, bridge) { + private bridge: Bridge; + constructor(config: DiscordBridgeConfig) { this.config = config; + } + + public setBridge(bridge: Bridge) { this.bridge = bridge; } diff --git a/src/matrixroomhandler.ts b/src/matrixroomhandler.ts index faa37ca5c53627b3171113d0f4bfca5035429bf5..8be08bdddf3f9fbd51a65c96de7c7965eff7d7b2 100644 --- a/src/matrixroomhandler.ts +++ b/src/matrixroomhandler.ts @@ -1,5 +1,12 @@ import { DiscordBot } from "./discordbot"; -import { Bridge, RemoteRoom } from "matrix-appservice-bridge"; +import { + Bridge, + RemoteRoom, + thirdPartyLookup, + thirdPartyProtocolResult, + thirdPartyUserResult, + thirdPartyLocationResult, + } from "matrix-appservice-bridge"; import { DiscordBridgeConfig } from "./config"; import * as Discord from "discord.js"; @@ -10,13 +17,27 @@ export class MatrixRoomHandler { private bridge: Bridge; private discord: DiscordBot; private aliasList: any; - constructor (bridge: Bridge, discord: DiscordBot, config: DiscordBridgeConfig) { - this.bridge = bridge; + constructor (discord: DiscordBot, config: DiscordBridgeConfig) { this.discord = discord; this.config = config; this.aliasList = {}; } + public get ThirdPartyLookup(): thirdPartyLookup { + return { + protocols: ["discord"], + getProtocol: this.tpGetProtocol.bind(this), + getLocation: this.tpGetLocation.bind(this), + parseLocation: this.tpParseLocation.bind(this), + getUser: this.tpGetUser.bind(this), + parseUser: this.tpParseUser.bind(this), + }; + } + + public setBridge(bridge: Bridge) { + this.bridge = bridge; + } + public OnAliasQueried (alias: string, roomId: string) { const aliasLocalpart = alias.substr(1, alias.length - `:${this.config.bridge.domain}`.length - 1); log.info("MatrixRoomHandler", `Room created ${aliasLocalpart} => ${roomId}`); @@ -57,6 +78,26 @@ export class MatrixRoomHandler { }); } + public tpGetProtocol(protocol: string): Promise<thirdPartyProtocolResult> { + return Promise.reject({err: "Unsupported", code: 501}); + } + + public tpGetLocation(protocol: string, fields: any): Promise<[thirdPartyLocationResult]> { + return Promise.reject({err: "Unsupported", code: 501}); + } + + public tpParseLocation(alias: string): Promise<[thirdPartyLocationResult]> { + return Promise.reject({err: "Unsupported", code: 501}); + } + + public tpGetUser(protocol: string, fields: any): Promise<[thirdPartyUserResult]> { + return Promise.reject({err: "Unsupported", code: 501}); + } + + public tpParseUser(userid: string): Promise<[thirdPartyUserResult]> { + return Promise.reject({err: "Unsupported", code: 501}); + } + private createMatrixRoom (channel: Discord.TextChannel, alias: string) { const botID = this.bridge.getBot().getUserId(); // const roomOwner = "@_discord_" + user.id_str + ":" + this._bridge.opts.domain;