UNPKG

bottender

Version:

A framework for building conversational user interfaces.

419 lines 20.8 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chunk_1 = __importDefault(require("lodash/chunk")); const invariant_1 = __importDefault(require("invariant")); const warning_1 = __importDefault(require("warning")); const messaging_api_line_1 = require("messaging-api-line"); const Context_1 = __importDefault(require("../context/Context")); class LineContext extends Context_1.default { constructor({ client, event, session, initialState, requestContext, customAccessToken, shouldBatch, sendMethod, emitter, }) { super({ client, event, session, initialState, requestContext, emitter }); this._isReplied = false; this._replyMessages = []; this._pushMessages = []; this._shouldBatch = shouldBatch || false; this._sendMethod = sendMethod || 'reply'; if (customAccessToken) { this.useAccessToken(customAccessToken); } } get platform() { return 'line'; } get accessToken() { return this._client.accessToken; } useAccessToken(accessToken) { warning_1.default(false, '`useAccessToken` is deprecated.'); this._client.accessToken = accessToken; } get isReplied() { return this._isReplied; } handlerDidEnd() { return __awaiter(this, void 0, void 0, function* () { if (this._shouldBatch) { this._shouldBatch = false; if (this._replyMessages.length > 0) { const messageChunks = chunk_1.default(this._replyMessages, 5); warning_1.default(messageChunks.length === 1, 'one replyToken can only be used to reply 5 messages'); if (this._event.replyToken) { yield this._client.reply(this._event.replyToken, messageChunks[0]); } } if (this._pushMessages.length > 0) { if (this._session) { const sessionTypeId = this._session[this._session.type].id; const messageChunks = chunk_1.default(this._pushMessages, 5); for (let i = 0; i < messageChunks.length; i++) { const messages = messageChunks[i]; yield this._client.push(sessionTypeId, messages); } } else { warning_1.default(false, 'push: should not be called in context without session'); } } } }); } getMessageContent() { if (!(this._event.isImage || this._event.isVideo || this._event.isAudio)) { warning_1.default(false, 'getMessageContent: should only be called with image, video or audio message'); return; } const messageId = this._event.message.id; return this._client.getMessageContent(messageId); } leave() { return __awaiter(this, void 0, void 0, function* () { if (!this._session) { warning_1.default(false, 'leave: should not be called in context without session'); return; } switch (this._session.type) { case 'room': return this._client.leaveRoom(this._session.room.id); case 'group': return this._client.leaveGroup(this._session.group.id); default: warning_1.default(false, 'leave: should not be called in context which is not room or group session'); } }); } getUserProfile() { return __awaiter(this, void 0, void 0, function* () { if (!this._session) { warning_1.default(false, 'getUserProfile: should not be called in context without session'); return null; } if (!this._session.user) { warning_1.default(false, 'getUserProfile: should not be called in context without user in session'); return null; } switch (this._session.type) { case 'room': return this._client.getRoomMemberProfile(this._session.room.id, this._session.user.id); case 'group': return this._client.getGroupMemberProfile(this._session.group.id, this._session.user.id); case 'user': default: return this._client.getUserProfile(this._session.user.id); } }); } getMemberProfile(userId) { return __awaiter(this, void 0, void 0, function* () { if (!this._session) { warning_1.default(false, 'getMemberProfile: should not be called in context without session'); return null; } switch (this._session.type) { case 'room': return this._client.getRoomMemberProfile(this._session.room.id, userId); case 'group': return this._client.getGroupMemberProfile(this._session.group.id, userId); default: warning_1.default(false, 'getMemberProfile: should not be called in context which is not room or group session'); return null; } }); } getMembersCount() { return __awaiter(this, void 0, void 0, function* () { if (!this._session) { warning_1.default(false, 'getMembersCount: should not be called in context without session'); return null; } switch (this._session.type) { case 'room': return this._client.getRoomMembersCount(this._session.room.id); case 'group': return this._client.getGroupMembersCount(this._session.group.id); default: return 1; } }); } getMemberIds(start) { return __awaiter(this, void 0, void 0, function* () { if (!this._session) { warning_1.default(false, 'getMemberIds: should not be called in context without session'); return null; } switch (this._session.type) { case 'room': return this._client.getRoomMemberIds(this._session.room.id, start); case 'group': return this._client.getGroupMemberIds(this._session.group.id, start); default: warning_1.default(false, 'getMemberIds: should not be called in context which is not room or group session'); return null; } }); } getAllMemberIds() { return __awaiter(this, void 0, void 0, function* () { if (!this._session) { warning_1.default(false, 'getAllMemberIds: should not be called in context without session'); return null; } switch (this._session.type) { case 'room': return this._client.getAllRoomMemberIds(this._session.room.id); case 'group': return this._client.getAllGroupMemberIds(this._session.group.id); default: warning_1.default(false, 'getAllMemberIds: should not be called in context which is not room or group session'); return null; } }); } getLinkedRichMenu() { return __awaiter(this, void 0, void 0, function* () { if (this._session && this._session.user) { return this._client.getLinkedRichMenu(this._session.user.id); } warning_1.default(false, 'getLinkedRichMenu: should not be called in context without session user'); }); } linkRichMenu(richMenuId) { return __awaiter(this, void 0, void 0, function* () { if (this._session && this._session.user) { return this._client.linkRichMenu(this._session.user.id, richMenuId); } warning_1.default(false, 'linkRichMenu: should not be called in context without session user'); }); } unlinkRichMenu() { return __awaiter(this, void 0, void 0, function* () { if (this._session && this._session.user) { return this._client.unlinkRichMenu(this._session.user.id); } warning_1.default(false, 'unlinkRichMenu: should not be called in context without session user'); }); } issueLinkToken() { return __awaiter(this, void 0, void 0, function* () { if (this._session && this._session.user) { return this._client.issueLinkToken(this._session.user.id); } warning_1.default(false, 'issueLinkToken: should not be called in context without session user'); }); } reply(messages) { invariant_1.default(!this._isReplied, 'Can not reply event multiple times'); if (this._shouldBatch) { this._replyMessages.push(...messages); return; } this._isReplied = true; return this._client.reply(this._event.replyToken, messages); } replyText(text, options) { return this.reply([messaging_api_line_1.Line.createText(text, options)]); } replyImage(image, options) { return this.reply([messaging_api_line_1.Line.createImage(image, options)]); } replyVideo(video, options) { return this.reply([messaging_api_line_1.Line.createVideo(video, options)]); } replyAudio(audio, options) { return this.reply([messaging_api_line_1.Line.createAudio(audio, options)]); } replyLocation(location, options) { return this.reply([messaging_api_line_1.Line.createLocation(location, options)]); } replySticker(sticker, options) { return this.reply([messaging_api_line_1.Line.createSticker(sticker, options)]); } replyImagemap(altText, imagemap, options) { return this.reply([messaging_api_line_1.Line.createImagemap(altText, imagemap, options)]); } replyFlex(altText, flex, options) { return this.reply([messaging_api_line_1.Line.createFlex(altText, flex, options)]); } replyTemplate(altText, template, options) { return this.reply([messaging_api_line_1.Line.createTemplate(altText, template, options)]); } replyButtonTemplate(altText, buttonTemplate, options) { warning_1.default(false, '`context.replyButtonTemplate()` is deprecated. Use `context.replyButtonsTemplate()` instead.'); return this.reply([ messaging_api_line_1.Line.createButtonTemplate(altText, buttonTemplate, options), ]); } replyButtonsTemplate(altText, buttonTemplate, options) { return this.replyButtonTemplate(altText, buttonTemplate, options); } replyConfirmTemplate(altText, confirmTemplate, options) { return this.reply([ messaging_api_line_1.Line.createConfirmTemplate(altText, confirmTemplate, options), ]); } replyCarouselTemplate(altText, columns, options) { return this.reply([messaging_api_line_1.Line.createCarouselTemplate(altText, columns, options)]); } replyImageCarouselTemplate(altText, columns, options) { return this.reply([ messaging_api_line_1.Line.createImageCarouselTemplate(altText, columns, options), ]); } push(messages) { warning_1.default(false, '`context.push()` is deprecated. Use `context.client.push()` instead.'); if (!this._session) { warning_1.default(false, `push: should not be called in context without session`); return; } if (this._shouldBatch) { this._pushMessages.push(...messages); return; } const sessionType = this._session.type; return this._client.push(this._session[sessionType].id, messages); } pushText(text, options) { warning_1.default(false, '`context.pushText()` is deprecated. Use `context.client.pushText()` instead.'); return this.push([messaging_api_line_1.Line.createText(text, options)]); } pushImage(image, options) { warning_1.default(false, '`context.pushImage()` is deprecated. Use `context.client.pushImage()` instead.'); return this.push([messaging_api_line_1.Line.createImage(image, options)]); } pushVideo(video, options) { warning_1.default(false, '`context.pushVideo()` is deprecated. Use `context.client.pushVideo()` instead.'); return this.push([messaging_api_line_1.Line.createVideo(video, options)]); } pushAudio(audio, options) { warning_1.default(false, '`context.pushAudio()` is deprecated. Use `context.client.pushAudio()` instead.'); return this.push([messaging_api_line_1.Line.createAudio(audio, options)]); } pushLocation(location, options) { warning_1.default(false, '`context.pushLocation()` is deprecated. Use `context.client.pushLocation()` instead.'); return this.push([messaging_api_line_1.Line.createLocation(location, options)]); } pushSticker(sticker, options) { warning_1.default(false, '`context.pushSticker()` is deprecated. Use `context.client.pushSticker()` instead.'); return this.push([messaging_api_line_1.Line.createSticker(sticker, options)]); } pushImagemap(altText, imagemap, options) { warning_1.default(false, '`context.pushImagemap()` is deprecated. Use `context.client.pushImagemap()` instead.'); return this.push([messaging_api_line_1.Line.createImagemap(altText, imagemap, options)]); } pushFlex(altText, flex, options) { warning_1.default(false, '`context.pushFlex()` is deprecated. Use `context.client.pushFlex()` instead.'); return this.push([messaging_api_line_1.Line.createFlex(altText, flex, options)]); } pushTemplate(altText, template, options) { warning_1.default(false, '`context.pushTemplate()` is deprecated. Use `context.client.pushTemplate()` instead.'); return this.push([messaging_api_line_1.Line.createTemplate(altText, template, options)]); } pushButtonTemplate(altText, buttonTemplate, options) { warning_1.default(false, '`context.pushButtonTemplate()` is deprecated. Use `context.client.pushButtonTemplate()` instead.'); return this.push([ messaging_api_line_1.Line.createButtonTemplate(altText, buttonTemplate, options), ]); } pushButtonsTemplate(altText, buttonTemplate, options) { warning_1.default(false, '`context.pushButtonsTemplate()` is deprecated. Use `context.client.pushButtonsTemplate()` instead.'); return this.pushButtonTemplate(altText, buttonTemplate, options); } pushConfirmTemplate(altText, confirmTemplate, options) { warning_1.default(false, '`context.pushConfirmTemplate()` is deprecated. Use `context.client.pushConfirmTemplate()` instead.'); return this.push([ messaging_api_line_1.Line.createConfirmTemplate(altText, confirmTemplate, options), ]); } pushCarouselTemplate(altText, columns, options) { warning_1.default(false, '`context.pushCarouselTemplate()` is deprecated. Use `context.client.pushCarouselTemplate()` instead.'); return this.push([messaging_api_line_1.Line.createCarouselTemplate(altText, columns, options)]); } pushImageCarouselTemplate(altText, columns, options) { warning_1.default(false, '`context.pushImageCarouselTemplate()` is deprecated. Use `context.client.pushImageCarouselTemplate()` instead.'); return this.push([ messaging_api_line_1.Line.createImageCarouselTemplate(altText, columns, options), ]); } send(messages) { warning_1.default(false, '`context.send()` is deprecated. Use `context.reply()` instead.'); if (this._sendMethod === 'push') { return this.push(messages); } return this.reply(messages); } sendText(text, options) { return this.send([messaging_api_line_1.Line.createText(text, options)]); } sendImage(image, options) { warning_1.default(false, '`context.sendImage()` is deprecated. Use `context.replyImage()` instead.'); return this.send([messaging_api_line_1.Line.createImage(image, options)]); } sendVideo(video, options) { warning_1.default(false, '`context.sendVideo()` is deprecated. Use `context.replyVideo()` instead.'); return this.send([messaging_api_line_1.Line.createVideo(video, options)]); } sendAudio(audio, options) { warning_1.default(false, '`context.sendAudio()` is deprecated. Use `context.replyAudio()` instead.'); return this.send([messaging_api_line_1.Line.createAudio(audio, options)]); } sendLocation(location, options) { warning_1.default(false, '`context.sendLocation()` is deprecated. Use `context.replyLocation()` instead.'); return this.send([messaging_api_line_1.Line.createLocation(location, options)]); } sendSticker(sticker, options) { warning_1.default(false, '`context.sendSticker()` is deprecated. Use `context.replySticker()` instead.'); return this.send([messaging_api_line_1.Line.createSticker(sticker, options)]); } sendImagemap(altText, imagemap, options) { warning_1.default(false, '`context.sendImagemap()` is deprecated. Use `context.replyImagemap()` instead.'); return this.send([messaging_api_line_1.Line.createImagemap(altText, imagemap, options)]); } sendFlex(altText, flex, options) { warning_1.default(false, '`context.sendFlex()` is deprecated. Use `context.replyFlex()` instead.'); return this.send([messaging_api_line_1.Line.createFlex(altText, flex, options)]); } sendTemplate(altText, template, options) { warning_1.default(false, '`context.sendTemplate()` is deprecated. Use `context.replyTemplate()` instead.'); return this.send([messaging_api_line_1.Line.createTemplate(altText, template, options)]); } sendButtonTemplate(altText, buttonTemplate, options) { warning_1.default(false, '`context.sendButtonTemplate()` is deprecated. Use `context.replyButtonsTemplate()` instead.'); return this.send([ messaging_api_line_1.Line.createButtonTemplate(altText, buttonTemplate, options), ]); } sendButtonsTemplate(altText, buttonTemplate, options) { warning_1.default(false, '`context.sendButtonsTemplate()` is deprecated. Use `context.replyButtonsTemplate()` instead.'); return this.sendButtonTemplate(altText, buttonTemplate, options); } sendConfirmTemplate(altText, confirmTemplate, options) { warning_1.default(false, '`context.sendConfirmTemplate()` is deprecated. Use `context.replyConfirmTemplate()` instead.'); return this.send([ messaging_api_line_1.Line.createConfirmTemplate(altText, confirmTemplate, options), ]); } sendCarouselTemplate(altText, columns, options) { warning_1.default(false, '`context.sendCarouselTemplate()` is deprecated. Use `context.replyCarouselTemplate()` instead.'); return this.send([messaging_api_line_1.Line.createCarouselTemplate(altText, columns, options)]); } sendImageCarouselTemplate(altText, columns, options) { warning_1.default(false, '`context.sendImageCarouselTemplate()` is deprecated. Use `context.replyImageCarouselTemplate()` instead.'); return this.send([ messaging_api_line_1.Line.createImageCarouselTemplate(altText, columns, options), ]); } } exports.default = LineContext; //# sourceMappingURL=LineContext.js.map