UNPKG

regraf

Version:

Continuation of best modern Telegram Bot Framework

1,032 lines (871 loc) 31 kB
const UpdateTypes = [ 'callback_query', 'channel_post', 'chosen_inline_result', 'edited_channel_post', 'edited_message', 'inline_query', 'shipping_query', 'pre_checkout_query', 'message', 'poll', 'poll_answer', 'my_chat_member', 'chat_member', 'chat_join_request', 'message_reaction_count', 'message_reaction' ] const MessageSubTypes = [ 'voice', 'video_note', 'video', 'animation', 'venue', 'text', 'supergroup_chat_created', 'successful_payment', 'sticker', 'pinned_message', 'photo', 'new_chat_title', 'new_chat_photo', 'new_chat_members', 'migrate_to_chat_id', 'migrate_from_chat_id', 'location', 'left_chat_member', 'invoice', 'group_chat_created', 'game', 'dice', 'document', 'delete_chat_photo', 'contact', 'channel_chat_created', 'audio', 'connected_website', 'passport_data', 'poll', 'forward_date', 'message_auto_delete_timer_changed', 'video_chat_started', 'video_chat_ended', 'video_chat_participants_invited', 'video_chat_scheduled', 'web_app_data', 'forum_topic_created', 'forum_topic_edited', 'forum_topic_closed', 'forum_topic_reopened', 'users_shared', 'chat_shared', 'giveaway', 'giveaway_created', 'giveaway_winners', 'giveaway_completed', 'story', 'boost_added' ] const MessageSubTypesMapping = { forward_date: 'forward' } let TelegrafContext try { TelegrafContext = require('telegraf').Context } catch (e) { TelegrafContext = class {} } class RegrafContext extends TelegrafContext { static get UpdateTypes () { return UpdateTypes } static get MessageSubTypes () { return MessageSubTypes } constructor (update, telegram, options) { super(update, telegram, options) this.tg = telegram this.update = update this.options = options this.updateType = UpdateTypes.find((key) => key in this.update) if (this.updateType === 'message' || (this.options.channelMode && this.updateType === 'channel_post')) { this.updateSubTypes = MessageSubTypes .filter((key) => key in this.update[this.updateType]) .map((type) => MessageSubTypesMapping[type] || type) } else { this.updateSubTypes = [] } Object.getOwnPropertyNames(RegrafContext.prototype) .filter((key) => key !== 'constructor' && typeof this[key] === 'function') .forEach((key) => (this[key] = this[key].bind(this))) } get me () { return this.options && this.options.username } get telegram () { return this.tg } get message () { return this.update.message } get editedMessage () { return this.update.edited_message } get inlineQuery () { return this.update.inline_query } get shippingQuery () { return this.update.shipping_query } get preCheckoutQuery () { return this.update.pre_checkout_query } get chosenInlineResult () { return this.update.chosen_inline_result } get channelPost () { return this.update.channel_post } get editedChannelPost () { return this.update.edited_channel_post } get callbackQuery () { return this.update.callback_query } get poll () { return this.update.poll } get pollAnswer () { return this.update.poll_answer } get myChatMember () { return this.update.my_chat_member } get chatMember () { return this.update.chat_member } get messageReaction () { return this.update.message_reaction } get messageReactionCount () { return this.update.message_reaction_count } get chat () { return (this.message && this.message.chat) || (this.editedMessage && this.editedMessage.chat) || (this.callbackQuery && this.callbackQuery.message && this.callbackQuery.message.chat) || (this.channelPost && this.channelPost.chat) || (this.editedChannelPost && this.editedChannelPost.chat) || (this.myChatMember && this.myChatMember.chat) || (this.chatMember && this.chatMember.chat) || (this.messageReaction && this.messageReaction.chat) || (this.messageReactionCount && this.messageReactionCount.chat) || (this.chatJoinRequest && this.chatJoinRequest.chat) || (this.chatMember && this.chatMember.chat) } get from () { return (this.message && this.message.from) || (this.editedMessage && this.editedMessage.from) || (this.callbackQuery && this.callbackQuery.from) || (this.inlineQuery && this.inlineQuery.from) || (this.channelPost && this.channelPost.from) || (this.editedChannelPost && this.editedChannelPost.from) || (this.shippingQuery && this.shippingQuery.from) || (this.preCheckoutQuery && this.preCheckoutQuery.from) || (this.chosenInlineResult && this.chosenInlineResult.from) || (this.myChatMember && this.myChatMember.from) || (this.chatMember && this.chatMember.from) || (this.messageReaction && this.messageReaction.user) || (this.chatJoinRequest && this.chatJoinRequest.from) } get senderChat () { return this.message?.sender_chat } get chatJoinRequest () { return this.update.chat_join_request } get inlineMessageId () { return (this.callbackQuery && this.callbackQuery.inline_message_id) || (this.chosenInlineResult && this.chosenInlineResult.inline_message_id) } get passportData () { return this.message && this.message.passport_data } get usersShared () { return this.message && this.message.users_shared } get chatShared () { return this.message && this.message.chat_shared } get story () { return this.message && this.message.story } get chatBoost () { return this.update.chat_boost } get chatBoostRemoved () { return this.update.removed_chat_boost } get giveaway () { return this.message && this.message.giveaway } get giveawayCreated () { return this.message && this.message.giveaway_created } get giveawayWinners () { return this.message && this.message.giveaway_winners } get giveawayCompleted () { return this.message && this.message.giveaway_completed } get boostAdded () { return this.message && this.message.boost_added } get state () { if (!this.contextState) { this.contextState = {} } return this.contextState } set state (value) { this.contextState = { ...value } } get webhookReply () { return this.tg.webhookReply } set webhookReply (enable) { this.tg.webhookReply = enable } assert (value, method) { if (!value) { throw new Error(`Regraf: "${method}" isn't available for "${this.updateType}::${this.updateSubTypes}"`) } } answerInlineQuery (...args) { this.assert(this.inlineQuery, 'answerInlineQuery') return this.telegram.answerInlineQuery(this.inlineQuery.id, ...args) } answerCbQuery (...args) { this.assert(this.callbackQuery, 'answerCbQuery') return this.telegram.answerCbQuery(this.callbackQuery.id, ...args) } getUserChatBoosts () { this.assert(this.chat, 'getUserChatBoosts') this.assert(this.from, 'getUserChatBoosts') return this.telegram.getUserChatBoosts(this.chat.id, this.from.id) } answerGameQuery (...args) { this.assert(this.callbackQuery, 'answerGameQuery') return this.telegram.answerGameQuery(this.callbackQuery.id, ...args) } answerShippingQuery (...args) { this.assert(this.shippingQuery, 'answerShippingQuery') return this.telegram.answerShippingQuery(this.shippingQuery.id, ...args) } answerPreCheckoutQuery (...args) { this.assert(this.preCheckoutQuery, 'answerPreCheckoutQuery') return this.telegram.answerPreCheckoutQuery(this.preCheckoutQuery.id, ...args) } editMessageText (text, extra) { this.assert(this.callbackQuery || this.inlineMessageId, 'editMessageText') return this.inlineMessageId ? this.telegram.editMessageText( undefined, undefined, this.inlineMessageId, text, extra ) : this.telegram.editMessageText( this.chat.id, this.callbackQuery.message.message_id, undefined, text, extra ) } editMessageCaption (caption, extra) { this.assert(this.callbackQuery || this.inlineMessageId, 'editMessageCaption') return this.inlineMessageId ? this.telegram.editMessageCaption( undefined, undefined, this.inlineMessageId, caption, extra ) : this.telegram.editMessageCaption( this.chat.id, this.callbackQuery.message.message_id, undefined, caption, extra ) } editMessageMedia (media, extra) { this.assert(this.callbackQuery || this.inlineMessageId, 'editMessageMedia') return this.inlineMessageId ? this.telegram.editMessageMedia( undefined, undefined, this.inlineMessageId, media, extra ) : this.telegram.editMessageMedia( this.chat.id, this.callbackQuery.message.message_id, undefined, media, extra ) } editMessageReplyMarkup (markup) { this.assert(this.callbackQuery || this.inlineMessageId, 'editMessageReplyMarkup') return this.inlineMessageId ? this.telegram.editMessageReplyMarkup( undefined, undefined, this.inlineMessageId, markup ) : this.telegram.editMessageReplyMarkup( this.chat.id, this.callbackQuery.message.message_id, undefined, markup ) } editMessageLiveLocation (latitude, longitude, extra) { this.assert(this.callbackQuery || this.inlineMessageId, 'editMessageLiveLocation') return this.inlineMessageId ? this.telegram.editMessageLiveLocation( undefined, undefined, this.inlineMessageId, latitude, longitude, extra ) : this.telegram.editMessageLiveLocation( this.chat.id, this.callbackQuery.message.message_id, undefined, latitude, longitude, extra ) } stopMessageLiveLocation (markup) { this.assert(this.callbackQuery || this.inlineMessageId, 'stopMessageLiveLocation') return this.inlineMessageId ? this.telegram.stopMessageLiveLocation( undefined, undefined, this.inlineMessageId, markup ) : this.telegram.stopMessageLiveLocation( this.chat.id, this.callbackQuery.message.message_id, undefined, markup ) } reply (text, args) { this.assert(this.chat, 'reply') const extra = this.options.parseMode ? { parse_mode: this.options.parseMode } : { ...args } if (this.message?.message_thread_id && !extra.reply_to_message_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendMessage(this.chat.id, text, extra) } getChat (...args) { this.assert(this.chat, 'getChat') return this.telegram.getChat(this.chat.id, ...args) } exportChatInviteLink (...args) { this.assert(this.chat, 'exportChatInviteLink') return this.telegram.exportChatInviteLink(this.chat.id, ...args) } banChatMember (...args) { this.assert(this.chat, 'banChatMember') return this.telegram.banChatMember(this.chat.id, ...args) } kickChatMember (...args) { this.assert(this.chat, 'kickChatMember') return this.telegram.kickChatMember(this.chat.id, ...args) } unbanChatMember (...args) { this.assert(this.chat, 'unbanChatMember') return this.telegram.unbanChatMember(this.chat.id, ...args) } restrictChatMember (...args) { this.assert(this.chat, 'restrictChatMember') return this.telegram.restrictChatMember(this.chat.id, ...args) } promoteChatMember (...args) { this.assert(this.chat, 'promoteChatMember') return this.telegram.promoteChatMember(this.chat.id, ...args) } setChatAdministratorCustomTitle (...args) { this.assert(this.chat, 'setChatAdministratorCustomTitle') return this.telegram.setChatAdministratorCustomTitle(this.chat.id, ...args) } banChatSenderChat (...args) { this.assert(this.chat, 'banChatSenderChat') return this.telegram.banChatSenderChat(this.chat.id, ...args) } unbanChatSenderChat (...args) { this.assert(this.chat, 'unbanChatSenderChat') return this.telegram.unbanChatSenderChat(this.chat.id, ...args) } setChatPhoto (...args) { this.assert(this.chat, 'setChatPhoto') return this.telegram.setChatPhoto(this.chat.id, ...args) } deleteChatPhoto (...args) { this.assert(this.chat, 'deleteChatPhoto') return this.telegram.deleteChatPhoto(this.chat.id, ...args) } setChatTitle (...args) { this.assert(this.chat, 'setChatTitle') return this.telegram.setChatTitle(this.chat.id, ...args) } setChatDescription (...args) { this.assert(this.chat, 'setChatDescription') return this.telegram.setChatDescription(this.chat.id, ...args) } pinChatMessage (...args) { this.assert(this.chat, 'pinChatMessage') return this.telegram.pinChatMessage(this.chat.id, ...args) } unpinChatMessage (...args) { this.assert(this.chat, 'unpinChatMessage') return this.telegram.unpinChatMessage(this.chat.id, ...args) } unpinAllChatMessages () { this.assert(this.chat, 'unpinAllChatMessages') return this.telegram.unpinAllChatMessages(this.chat.id) } leaveChat (...args) { this.assert(this.chat, 'leaveChat') return this.telegram.leaveChat(this.chat.id, ...args) } setChatPermissions (...args) { this.assert(this.chat, 'setChatPermissions') return this.telegram.setChatPermissions(this.chat.id, ...args) } getChatAdministrators (...args) { this.assert(this.chat, 'getChatAdministrators') return this.telegram.getChatAdministrators(this.chat.id, ...args) } getChatMember (...args) { this.assert(this.chat, 'getChatMember') return this.telegram.getChatMember(this.chat.id, ...args) } getChatMembersCount (...args) { this.assert(this.chat, 'getChatMembersCount') return this.telegram.getChatMemberCount(this.chat.id, ...args) } getChatMemberCount (...args) { this.assert(this.chat, 'getChatMemberCount') return this.telegram.getChatMemberCount(this.chat.id, ...args) } setPassportDataErrors (errors) { this.assert(this.chat, 'setPassportDataErrors') return this.telegram.setPassportDataErrors(this.from.id, errors) } replyWithPhoto (photo, extra = {}) { this.assert(this.chat, 'replyWithPhoto') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendPhoto(this.chat.id, photo, extra) } replyWithMediaGroup (media, extra = {}) { this.assert(this.chat, 'replyWithMediaGroup') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendMediaGroup(this.chat.id, media, extra) } replyWithAudio (audio, extra = {}) { this.assert(this.chat, 'replyWithAudio') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendAudio(this.chat.id, audio, extra) } replyWithDice (extra = {}) { this.assert(this.chat, 'replyWithDice') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendDice(this.chat.id, extra) } replyWithDocument (document, extra = {}) { this.assert(this.chat, 'replyWithDocument') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendDocument(this.chat.id, document, extra) } replyWithSticker (sticker, extra = {}) { this.assert(this.chat, 'replyWithSticker') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendSticker(this.chat.id, sticker, extra) } replyWithVideo (video, extra = {}) { this.assert(this.chat, 'replyWithVideo') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendVideo(this.chat.id, video, extra) } replyWithAnimation (animation, extra = {}) { this.assert(this.chat, 'replyWithAnimation') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendAnimation(this.chat.id, animation, extra) } replyWithVideoNote (videoNote, extra = {}) { this.assert(this.chat, 'replyWithVideoNote') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendVideoNote(this.chat.id, videoNote, extra) } replyWithInvoice (invoice, extra = {}) { this.assert(this.chat, 'replyWithInvoice') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendInvoice(this.chat.id, invoice, extra) } replyWithGame (gameShortName, extra = {}) { this.assert(this.chat, 'replyWithGame') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendGame(this.chat.id, gameShortName, extra) } replyWithVoice (voice, extra = {}) { this.assert(this.chat, 'replyWithVoice') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendVoice(this.chat.id, voice, extra) } replyWithPoll (question, options, extra = {}) { this.assert(this.chat, 'replyWithPoll') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendPoll(this.chat.id, question, options, extra) } replyWithQuiz (question, options, extra = {}) { this.assert(this.chat, 'replyWithQuiz') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendQuiz(this.chat.id, question, options, extra) } stopPoll (...args) { this.assert(this.chat, 'stopPoll') return this.telegram.stopPoll(this.chat.id, ...args) } replyWithChatAction (action) { this.assert(this.chat, 'replyWithChatAction') return this.telegram.sendChatAction(this.chat.id, action, this.message?.message_thread_id) } setMessageReaction (reaction, isBig) { this.assert(this.chat, 'setMessageReaction') this.assert(this.message, 'setMessageReaction') return this.telegram.setMessageReaction(this.chat.id, this.message.message_id, reaction, isBig) } replyWithLocation (latitude, longitude, extra = {}) { this.assert(this.chat, 'replyWithLocation') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendLocation(this.chat.id, latitude, longitude, extra) } replyWithVenue (latitude, longitude, title, address, extra = {}) { this.assert(this.chat, 'replyWithVenue') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendVenue(this.chat.id, latitude, longitude, title, address, extra) } replyWithContact (phoneNumber, firstName, extra = {}) { this.assert(this.from, 'replyWithContact') if (this.message?.message_thread_id) { extra.reply_to_message_id = this.message.message_thread_id } return this.telegram.sendContact(this.chat.id, phoneNumber, firstName, extra) } getStickerSet (setName) { return this.telegram.getStickerSet(setName) } getCustomEmojiStickers (customEmojiIds) { return this.telegram.getCustomEmojiStickers(customEmojiIds) } setChatStickerSet (setName) { this.assert(this.chat, 'setChatStickerSet') return this.telegram.setChatStickerSet(this.chat.id, setName) } deleteChatStickerSet () { this.assert(this.chat, 'deleteChatStickerSet') return this.telegram.deleteChatStickerSet(this.chat.id) } getForumTopicIconStickers () { return this.telegram.getForumTopicIconStickers() } createForumTopic (name, extra) { this.assert(this.chat, 'createForumTopic') return this.telegram.createForumTopic(this.chat.id, name, extra) } editForumTopic (name = undefined, iconCustomEmojiId = undefined) { this.assert(this.chat, 'editForumTopic') this.assert(this.message.message_thread_id, 'editForumTopic') return this.telegram.editForumTopic(this.chat.id, this.message.message_thread_id, name, iconCustomEmojiId) } closeForumTopic () { this.assert(this.chat, 'closeForumTopic') this.assert(this.message.message_thread_id, 'closeForumTopic') return this.telegram.closeForumTopic(this.chat.id, this.message.message_thread_id) } reopenForumTopic () { this.assert(this.chat, 'reopenForumTopic') this.assert(this.message.message_thread_id, 'reopenForumTopic') return this.telegram.reopenForumTopic(this.chat.id, this.message.message_thread_id) } deleteForumTopic () { this.assert(this.chat, 'deleteForumTopic') this.assert(this.message.message_thread_id, 'deleteForumTopic') return this.telegram.deleteForumTopic(this.chat.id, this.message.message_thread_id) } unpinAllForumTopicMessages () { this.assert(this.chat, 'unpinAllForumTopicMessages') this.assert(this.message.message_thread_id, 'unpinAllForumTopicMessages') return this.telegram.unpinAllForumTopicMessages(this.chat.id, this.message.message_thread_id) } editGeneralForumTopic (name) { this.assert(this.chat, 'editGeneralForumTopic') return this.telegram.editGeneralForumTopic(this.chat.id, name) } closeGeneralForumTopic () { this.assert(this.chat, 'closeGeneralForumTopic') return this.telegram.closeGeneralForumTopic(this.chat.id) } reopenGeneralForumTopic () { this.assert(this.chat, 'reopenGeneralForumTopic') return this.telegram.reopenGeneralForumTopic(this.chat.id) } hideGeneralForumTopic () { this.assert(this.chat, 'hideGeneralForumTopic') return this.telegram.hideGeneralForumTopic(this.chat.id) } unhideGeneralForumTopic () { this.assert(this.chat, 'unhideGeneralForumTopic') return this.telegram.unhideGeneralForumTopic(this.chat.id) } unpinAllGeneralForumTopicMessages () { this.assert(this.chat, 'unpinAllGeneralForumTopicMessages') return this.telegram.unpinAllGeneralForumTopicMessages(this.chat.id) } setStickerPositionInSet (sticker, position) { return this.telegram.setStickerPositionInSet(sticker, position) } deleteStickerFromSet (sticker) { return this.telegram.deleteStickerFromSet(sticker) } replaceStickerInSet (name, oldSticker, sticker) { this.assert(this.from, 'replaceStickerInSet') return this.telegram.replaceStickerInSet(this.from.id, name, oldSticker, sticker) } setStickerEmojiList (sticker, emojiList) { return this.telegram.setStickerEmojiList(sticker, emojiList) } setStickerKeywords (sticker, keywords) { return this.telegram.setStickerKeywords(sticker, keywords) } setStickerMaskPosition (sticker, maskPosition) { return this.telegram.setStickerMaskPosition(sticker, maskPosition) } setStickerSetTitle (name, title) { return this.telegram.setStickerSetTitle(name, title) } setStickerSetThumbnail (name, format, thumbnail) { this.assert(this.from, 'setStickerSetThumbnail') return this.telegram.setStickerSetThumbnail(name, this.from.id, format, thumbnail) } setCustomEmojiStickerSetThumbnail (name, customEmojiId) { return this.telegram.setCustomEmojiStickerSetThumbnail(name, customEmojiId) } deleteStickerSet (name) { return this.telegram.deleteStickerSet(name) } uploadStickerFile (...args) { this.assert(this.from, 'uploadStickerFile') return this.telegram.uploadStickerFile(this.from.id, ...args) } createNewStickerSet (...args) { this.assert(this.from, 'createNewStickerSet') return this.telegram.createNewStickerSet(this.from.id, ...args) } addStickerToSet (...args) { this.assert(this.from, 'addStickerToSet') return this.telegram.addStickerToSet(this.from.id, ...args) } getMyCommands (...args) { return this.telegram.getMyCommands(...args) } setMyName (...args) { return this.telegram.setMyName(...args) } getMyName (...args) { return this.telegram.getMyName(...args) } setMyDescription (...args) { return this.telegram.setMyDescription(...args) } getMyDescription (...args) { return this.telegram.getMyDescription(...args) } setMyShortDescription (...args) { return this.telegram.setMyShortDescription(...args) } getMyShortDescription (...args) { return this.telegram.getMyShortDescription(...args) } setMyCommands (...args) { return this.telegram.setMyCommands(...args) } deleteMyCommands (...args) { return this.telegram.deleteMyCommands(...args) } replyWithMarkdown (markdown, extra) { return this.reply(markdown, { parse_mode: 'Markdown', ...extra }) } replyWithMarkdownV2 (markdown, extra) { return this.reply(markdown, { parse_mode: 'MarkdownV2', ...extra }) } replyWithHTML (html, extra) { return this.reply(html, { parse_mode: 'HTML', ...extra }) } deleteMessage (messageId) { this.assert(this.chat, 'deleteMessage') if (typeof messageId !== 'undefined') { return this.telegram.deleteMessage(this.chat.id, messageId) } const message = this.message || this.editedMessage || this.channelPost || this.editedChannelPost || (this.callbackQuery && this.callbackQuery.message) this.assert(message, 'deleteMessage') return this.telegram.deleteMessage(this.chat.id, message.message_id) } deleteMessages (messageIds) { this.assert(this.chat, 'deleteMessage') if (typeof messageIds !== 'undefined') { return this.telegram.deleteMessages(this.chat.id, messageIds) } const message = this.message || this.editedMessage || this.channelPost || this.editedChannelPost || (this.callbackQuery && this.callbackQuery.message) this.assert(message, 'deleteMessage') return this.telegram.deleteMessages(this.chat.id, [message.message_id]) } forwardMessage (chatId, extra) { this.assert(this.chat, 'forwardMessage') const message = this.message || this.editedMessage || this.channelPost || this.editedChannelPost || (this.callbackQuery && this.callbackQuery.message) this.assert(message, 'forwardMessage') return this.telegram.forwardMessage(chatId, this.chat.id, message.message_id, extra) } forwardMessages (chatId, messageIds, extra) { this.assert(this.chat, 'forwardMessage') if (typeof messageIds !== 'undefined') { return this.telegram.forwardMessages(chatId, this.chat.id, messageIds, extra) } const message = this.message || this.editedMessage || this.channelPost || this.editedChannelPost || (this.callbackQuery && this.callbackQuery.message) this.assert(message, 'forwardMessage') return this.telegram.forwardMessages(chatId, this.chat.id, [message.message_id], extra) } copyMessage (chatId, extra) { const message = this.message || this.editedMessage || this.channelPost || this.editedChannelPost || (this.callbackQuery && this.callbackQuery.message) this.assert(message, 'copyMessage') return this.telegram.copyMessage(chatId, message.chat.id, message.message_id, extra) } copyMessages (chatId, messageIds, extra) { this.assert(this.chat, 'copyMessages') if (typeof messageIds !== 'undefined') { return this.telegram.copyMessages(chatId, this.chat.id, messageIds, extra) } const message = this.message || this.editedMessage || this.channelPost || this.editedChannelPost || (this.callbackQuery && this.callbackQuery.message) this.assert(message, 'copyMessages') return this.telegram.copyMessages(chatId, this.chat.id, [message.message_id], extra) } createChatInviteLink (...args) { this.assert(this.chat, 'createChatInviteLink') return this.telegram.createChatInviteLink(this.chat.id, ...args) } editChatInviteLink (...args) { this.assert(this.chat, 'editChatInviteLink') return this.telegram.editChatInviteLink(this.chat.id, ...args) } revokeChatInviteLink (...args) { this.assert(this.chat, 'revokeChatInviteLink') return this.telegram.revokeChatInviteLink(this.chat.id, ...args) } approveChatJoinRequest () { this.assert(this.chat, 'approveChatJoinRequest') this.assert(this.from, 'approveChatJoinRequest') return this.telegram.approveChatJoinRequest(this.chat.id, this.from.id) } declineChatJoinRequest () { this.assert(this.chat, 'declineChatJoinRequest') this.assert(this.from, 'declineChatJoinRequest') return this.telegram.declineChatJoinRequest(this.chat.id, this.from.id) } setChatMenuButton (...args) { this.assert(this.chat, 'setChatMenuButton') return this.telegram.setChatMenuButton(this.chat.id, ...args) } getChatMenuButton () { this.assert(this.chat, 'getChatMenuButton') return this.telegram.getChatMenuButton(this.chat.id) } setMyDefaultAdministratorRights (rights, forChannels) { return this.telegram.setMyDefaultAdministratorRights(rights, forChannels) } getMyDefaultAdministratorRights (forChannels) { return this.telegram.getMyDefaultAdministratorRights(forChannels) } } module.exports = RegrafContext