bottender
Version:
A framework for building conversational user interfaces.
419 lines • 20.8 kB
JavaScript
"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