From cb5edb1e9f72d28704a9dcb50376c89e59154131 Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Sun, 13 Oct 2019 20:57:44 -0300 Subject: [PATCH 1/4] Add thread support to slash commands --- package-lock.json | 7 +++---- package.json | 1 + src/definition/accessors/IMessageBuilder.ts | 13 +++++++++++++ src/definition/messages/IMessage.ts | 1 + src/definition/slashcommands/SlashCommandContext.ts | 11 ++++++++++- src/server/accessors/MessageBuilder.ts | 10 ++++++++++ src/server/managers/AppSlashCommandManager.ts | 2 +- 7 files changed, 39 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0e7f024e..21224607f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,10 +114,9 @@ "dev": true }, "@types/node": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.4.tgz", - "integrity": "sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw==", - "dev": true + "version": "12.7.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", + "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==" }, "@types/semver": { "version": "5.5.0", diff --git a/package.json b/package.json index c7a7d3133..32c3db0e2 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "typedoc": "^0.11.1" }, "dependencies": { + "@types/node": "^12.7.12", "adm-zip": "^0.4.9", "lodash.clonedeep": "^4.5.0", "semver": "^5.5.0", diff --git a/src/definition/accessors/IMessageBuilder.ts b/src/definition/accessors/IMessageBuilder.ts index f5ccd35ef..810aeef02 100644 --- a/src/definition/accessors/IMessageBuilder.ts +++ b/src/definition/accessors/IMessageBuilder.ts @@ -19,6 +19,19 @@ export interface IMessageBuilder { */ setData(message: IMessage): IMessageBuilder; + /** + * Sets the thread to which this message belongs, if any. + * + * @param threadId The id of the thread + */ + setThreadId(threadId: string): IMessageBuilder; + + /** + * Retrieves the thread to which this message belongs, + * if any. + */ + getThreadId(): string; + /** * Sets the room where this message should be sent to. * diff --git a/src/definition/messages/IMessage.ts b/src/definition/messages/IMessage.ts index 510e7dc4b..331fea552 100644 --- a/src/definition/messages/IMessage.ts +++ b/src/definition/messages/IMessage.ts @@ -6,6 +6,7 @@ import { IMessageReactions } from './IMessageReaction'; export interface IMessage { id?: string; + threadId?: string; room: IRoom; sender: IUser; text?: string; diff --git a/src/definition/slashcommands/SlashCommandContext.ts b/src/definition/slashcommands/SlashCommandContext.ts index 39ec5a7a5..f5d09a2ff 100644 --- a/src/definition/slashcommands/SlashCommandContext.ts +++ b/src/definition/slashcommands/SlashCommandContext.ts @@ -6,7 +6,12 @@ import { IUser } from '../users'; * executes a slash command. */ export class SlashCommandContext { - constructor(private sender: IUser, private room: IRoom, private params: Array) { } + constructor( + private sender: IUser, + private room: IRoom, + private params: Array, + private threadId?: string, + ) { } /** The user who sent the command. */ public getSender(): IUser { @@ -22,4 +27,8 @@ export class SlashCommandContext { public getArguments(): Array { return this.params; } + + public getThreadId(): string | undefined { + return this.threadId; + } } diff --git a/src/server/accessors/MessageBuilder.ts b/src/server/accessors/MessageBuilder.ts index 29bcb819c..b7eafb73c 100644 --- a/src/server/accessors/MessageBuilder.ts +++ b/src/server/accessors/MessageBuilder.ts @@ -20,6 +20,16 @@ export class MessageBuilder implements IMessageBuilder { return this; } + public setThreadId(threadId: string): IMessageBuilder { + this.msg.threadId = threadId; + + return this; + } + + public getThreadId(): string { + return this.msg.threadId; + } + public setRoom(room: IRoom): IMessageBuilder { this.msg.room = room; return this; diff --git a/src/server/managers/AppSlashCommandManager.ts b/src/server/managers/AppSlashCommandManager.ts index 3b8d4ff9f..909e927c2 100644 --- a/src/server/managers/AppSlashCommandManager.ts +++ b/src/server/managers/AppSlashCommandManager.ts @@ -385,7 +385,7 @@ export class AppSlashCommandManager { room = new Room(context.getRoom(), this.manager); } - return new SlashCommandContext(context.getSender(), room, context.getArguments()); + return new SlashCommandContext(context.getSender(), room, context.getArguments(), context.getThreadId()); } /** From 88ec07574ede17e7f1b042a9d2a957b3d23d4ef5 Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Sun, 13 Oct 2019 21:18:35 -0300 Subject: [PATCH 2/4] Add tests for new methods on IMessage --- tests/server/accessors/MessageBuilder.spec.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/server/accessors/MessageBuilder.spec.ts b/tests/server/accessors/MessageBuilder.spec.ts index bbc99c8ab..93e4c8dc2 100644 --- a/tests/server/accessors/MessageBuilder.spec.ts +++ b/tests/server/accessors/MessageBuilder.spec.ts @@ -21,6 +21,11 @@ export class MessageBuilderAccessorTestFixture { const msg: IMessage = {} as IMessage; const mb = new MessageBuilder(msg); + + Expect(mb.setThreadId('a random thread id')).toBe(mb); + Expect(msg.threadId).toBe('a random thread id'); + Expect(mb.getThreadId()).toBe('a random thread id'); + Expect(mb.setRoom(TestData.getRoom())).toBe(mb); Expect(msg.room).toEqual(TestData.getRoom()); Expect(mb.getRoom()).toEqual(TestData.getRoom()); From 1b2c4027c99be9cb98934bc297737d1880d4bf2f Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Mon, 14 Oct 2019 15:20:32 -0300 Subject: [PATCH 3/4] Move @types/node package to devDependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 32c3db0e2..59039c6b1 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ }, "homepage": "https://github.com/RocketChat/Rocket.Chat.Apps-engine#readme", "devDependencies": { + "@types/node": "^12.7.12", "@types/adm-zip": "^0.4.31", "@types/lodash.clonedeep": "^4.5.3", "@types/nedb": "^1.8.5", @@ -83,7 +84,6 @@ "typedoc": "^0.11.1" }, "dependencies": { - "@types/node": "^12.7.12", "adm-zip": "^0.4.9", "lodash.clonedeep": "^4.5.0", "semver": "^5.5.0", From 9a582ef4e2045aba52d33f792f77b2ab6328e978 Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Sat, 19 Oct 2019 11:20:15 +0200 Subject: [PATCH 4/4] Update description of threadId method on builder --- src/definition/accessors/IMessageBuilder.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/definition/accessors/IMessageBuilder.ts b/src/definition/accessors/IMessageBuilder.ts index 810aeef02..d360e412c 100644 --- a/src/definition/accessors/IMessageBuilder.ts +++ b/src/definition/accessors/IMessageBuilder.ts @@ -27,8 +27,12 @@ export interface IMessageBuilder { setThreadId(threadId: string): IMessageBuilder; /** - * Retrieves the thread to which this message belongs, + * Retrieves the threadId to which this message belongs, * if any. + * + * If you would like to retrieve the actual message that + * the thread originated from, you can use the + * `IMessageRead.getById()` method */ getThreadId(): string;