tkd-api/node_modules/telebot/lib/updates.js

151 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Command regexp
const REGEXP_COMMAND = /^\/([0-9а-я\w\d_-]+)/;
// Message types
const MESSAGE_TYPES = [
'new_chat_members', 'left_chat_member', 'new_chat_title',
'new_chat_photo', 'delete_chat_photo', 'group_chat_created',
'supergroup_chat_created', 'channel_chat_created', 'migrate_to_chat_id',
'migrate_from_chat_id', 'pinned_message', 'edit_date', 'forward_date',
'text', 'audio', 'voice', 'document', 'photo', 'sticker', 'video', 'video_note', 'animation',
'contact', 'location', 'venue', 'game', 'invoice', 'successful_payment', 'passport_data', 'reply_markup'
];
const SHORTCUTS = {
edit_date: 'edit',
video_note: 'videoNote',
forward_date: 'forward',
new_chat_members: 'newChatMembers',
left_chat_member: 'leftChatMember',
new_chat_title: 'newChatTitle',
new_chat_photo: 'newChatPhoto',
delete_chat_photo: 'deleteChatPhoto',
pinned_message: 'pinnedMessage',
group_chat_created: 'groupChatCreated',
channel_chat_created: 'channelChatCreated',
supergroup_chat_created: 'supergroupChatCreated',
migrate_to_chat_id: 'migrateToChat',
migrate_from_chat_id: 'migrateFromChat',
successful_payment: 'successfulPayment',
passport_data: 'passportData',
};
// Update type functions
const updateFunctions = {
// Message
message(update, props) {
// Any event status: ['*', '/*']
let anyEventFlags = [false, false];
let promise = Promise.resolve();
let mod = this.modRun('message', {message: update, props});
update = mod.message;
props = mod.props;
promise = promise.then(() => mod.promise);
for (let type of MESSAGE_TYPES) {
// Check for Telegram API documented types
if (!(type in update)) continue;
// Shortcut
if (SHORTCUTS[type]) type = SHORTCUTS[type];
// Set message type
props.type = type;
// Run message type mod
mod = this.modRun(type, {message: update, props});
update = mod.message;
props = mod.props;
promise = promise.then(() => mod.promise);
const eventList = [type];
if (!anyEventFlags[0]) {
eventList.push('*');
anyEventFlags[0] = true;
}
promise = promise.then(() => {
return this.event(eventList, update, props);
});
// Check for command
if (type === 'text') {
const match = REGEXP_COMMAND.exec(update.text);
if (!match) continue;
// Command found
props.type = 'command';
const eventList = ['/' + match[1]];
if (!anyEventFlags[1]) {
eventList.push(['/*']);
anyEventFlags[1] = true;
}
promise = promise.then(() => {
return this.event(eventList, update, props);
});
}
break;
}
return promise;
},
// Channel post
channel_post(update, props) {
return updateFunctions.message.call(this, update, props);
},
// Edited hannel post
edited_channel_post(update, props) {
return updateFunctions.message.call(this, update, props);
},
// Edited message
edited_message(update, props) {
return updateFunctions.message.call(this, update, props);
},
// Inline query
inline_query(update, props) {
props.type = 'inlineQuery';
return this.event('inlineQuery', update, props);
},
// Inline choice
chosen_inline_result(update, props) {
props.type = 'chosenInlineResult';
return this.event([props.type, 'inlineChoice'], update, props);
},
// Callback query
callback_query(update, props) {
props.type = 'callbackQuery';
return this.event('callbackQuery', update, props);
},
shipping_query(update, props) {
props.type = 'shippingQuery';
return this.event('shippingQuery', update, props);
},
pre_checkout_query(update, props) {
props.type = 'preShippingQuery';
return this.event('preShippingQuery', update, props);
}
};
module.exports = updateFunctions;