diff --git a/src/clientfactory.ts b/src/clientfactory.ts index 84bebbd9aac950fe1a13a51e81a89a830a5cec08..18c8a2e6dcba61e9504b54e865585a3f741d75e1 100644 --- a/src/clientfactory.ts +++ b/src/clientfactory.ts @@ -65,7 +65,9 @@ export class DiscordClientFactory { await client.login(token); const id = client.user.id; - client.destroy(); + client.destroy().catch(() => { + log.warn("Failed to destroy client ", id); + }); return id; } @@ -73,7 +75,7 @@ export class DiscordClientFactory { if (userId === null) { return this.botClient; } - + if (this.clients.has(userId)) { log.verbose("Returning cached user client for", userId); return this.clients.get(userId) as DiscordClient; diff --git a/src/discordas.ts b/src/discordas.ts index e7f6db7569db71669e700cf10f660118601fff5d..6e28a0493c3f2a248c26b52fb200374b122790a5 100644 --- a/src/discordas.ts +++ b/src/discordas.ts @@ -94,9 +94,12 @@ async function run(port: number, fileConfig: DiscordBridgeConfig) { } catch (err) { log.error("Exception thrown while handling \"onAliasQuery\" event", err); } }, onEvent: async (request) => { - const done = function (resolve, reject) { - (this as Promise<any>).then(resolve); - (this as Promise<any>).then(reject); + // tslint:disable-next-line no-any + const done = function(resolve: (res: any) => void, reject: (err: Error) => void) { + // tslint:disable-next-line no-invalid-this no-floating-promises + (this as Promise<{}>).then(resolve); + // tslint:disable-next-line no-invalid-this no-floating-promises + (this as Promise<{}>).then(reject); }; try { // Build our own context. @@ -115,8 +118,8 @@ async function run(port: number, fileConfig: DiscordBridgeConfig) { await request.outcomeFrom({ done, - ...callbacks.onEvent(request, context) - } as IRequestPromise<any>); + ...callbacks.onEvent(request, context), + } as IRequestPromise<{}>); } catch (err) { log.error("Exception thrown while handling \"onEvent\" event", err); await request.outcomeFrom({done, ...Promise.reject("Failed to handle")}); diff --git a/src/util.ts b/src/util.ts index fd3790dd7fe84fdaa88c5594e950e2689a013071..96ab13dcdc95ea44fad10a8bccf66ba2b7a01034 100644 --- a/src/util.ts +++ b/src/util.ts @@ -52,7 +52,7 @@ export interface IPatternMap { } export interface IRequestPromise<T> extends PromiseLike<T> { - done (resolve: (msg: T) => {}, reject: (err: Error) => {}): void; + done(resolve: (msg: T) => {}, reject: (err: Error) => {}): void; } export class Util { diff --git a/test/test_discordbot.ts b/test/test_discordbot.ts index dc3b79f9bc8e574c4d8344e7183320ffc115753b..4730603bdd0f634e0e4dee54049a9a3f1986598e 100644 --- a/test/test_discordbot.ts +++ b/test/test_discordbot.ts @@ -65,11 +65,10 @@ const modDiscordBot = Proxyquire("../src/bot", { "./clientfactory": require("./mocks/discordclientfactory"), "./util": { Util: { - AsyncForEach: Util.AsyncForEach, + ...Util, UploadContentFromUrl: async () => { return {mxcUrl: "uploaded"}; }, - DelayedPromise: Util.DelayedPromise, }, }, }); diff --git a/test/test_util.ts b/test/test_util.ts index 45c39b16755a0869393c7c877f18bb3f61d29cc6..17664269950452f36138dacec1f8ad3e0ce13a97 100644 --- a/test/test_util.ts +++ b/test/test_util.ts @@ -181,9 +181,10 @@ describe("Util", () => { }); describe("DelayedPromise", () => { it("delays for some time", async () => { + const DELAY_FOR = 250; const t = Date.now(); - await Util.DelayedPromise(250); - expect(Date.now()).to.be.greaterThan(t + 249); + await Util.DelayedPromise(DELAY_FOR); + expect(Date.now()).to.be.greaterThan(t + DELAY_FOR - 1); }); }); });