diff --git a/src/discordas.ts b/src/discordas.ts index 2e989ceaab9566e27befd17dda64acb0c52db876..01b69d73ce199311860eddded7f016f93fd3b40a 100644 --- a/src/discordas.ts +++ b/src/discordas.ts @@ -14,7 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Cli, Bridge, AppServiceRegistration, ClientFactory, BridgeContext } from "matrix-appservice-bridge"; +import { + AppServiceRegistration, + Bridge, + BridgeContext, + Cli, + ClientFactory, + thirdPartyLookup, +} from "matrix-appservice-bridge"; import * as yaml from "js-yaml"; import * as fs from "fs"; import { DiscordBridgeConfig } from "./config"; @@ -55,8 +62,19 @@ function generateRegistration(reg, callback) { callback(reg); } -// tslint:disable-next-line no-any -type callbackFn = (...args: any[]) => Promise<any>; +interface IBridgeCallbacks { + onAliasQueried?: (alias: string, roomId: string) => Promise<void>; + onAliasQuery?: (alias: string, aliasLocalpart: string) => Promise<IProvisionedRoom>; + onEvent: (request: Request, context: BridgeContext) => Promise<void>; + thirdPartyLookup?: thirdPartyLookup; +} + +type RemoteRoom = any; // tslint:disable-line no-any + +interface IProvisionedRoom { + creationOpts: Record<string, any>; // tslint:disable-line no-any + remote?: RemoteRoom; +} async function run(port: number, fileConfig: DiscordBridgeConfig) { const config = new DiscordBridgeConfig(); @@ -78,20 +96,20 @@ async function run(port: number, fileConfig: DiscordBridgeConfig) { }); const store = new DiscordStore(config.database); - const callbacks: { [id: string]: callbackFn; } = {}; + let callbacks: IBridgeCallbacks; const bridge = new Bridge({ clientFactory, controller: { // onUserQuery: userQuery, - onAliasQueried: async (alias: string, roomId: string) => { + onAliasQueried: async (alias: string, roomId: string): Promise<void> => { try { - return await callbacks.onAliasQueried(alias, roomId); + return await callbacks.onAliasQueried!(alias, roomId); } catch (err) { log.error("Exception thrown while handling \"onAliasQueried\" event", err); } }, - onAliasQuery: async (alias: string, aliasLocalpart: string) => { + onAliasQuery: async (alias: string, aliasLocalpart: string): Promise<IProvisionedRoom|undefined> => { try { - return await callbacks.onAliasQuery(alias, aliasLocalpart); + return await callbacks.onAliasQuery!(alias, aliasLocalpart); } catch (err) { log.error("Exception thrown while handling \"onAliasQuery\" event", err); } }, onEvent: async (request) => { @@ -183,11 +201,13 @@ async function run(port: number, fileConfig: DiscordBridgeConfig) { const eventProcessor = discordbot.MxEventProcessor; try { - callbacks.onAliasQueried = roomhandler.OnAliasQueried.bind(roomhandler); - callbacks.onAliasQuery = roomhandler.OnAliasQuery.bind(roomhandler); - callbacks.onEvent = eventProcessor.OnEvent.bind(eventProcessor); - callbacks.thirdPartyLookup = async () => { - return roomhandler.ThirdPartyLookup; + callbacks = { + onAliasQueried: roomhandler.OnAliasQueried.bind(roomhandler), + onAliasQuery: roomhandler.OnAliasQuery.bind(roomhandler), + onEvent: eventProcessor.OnEvent.bind(eventProcessor), + thirdPartyLookup: async () => { + return roomhandler.ThirdPartyLookup; + }, }; } catch (err) { log.error("Failed to register callbacks. Exiting.", err);