Source: enums.js

/**
 * @fileoverview Definitions of enums
 * @author Vlad Vnukovskiy <vvlad1973@gmail.com>
 * 
 */

/**
 * @module enums
 */

'use strict'

/**
 * Enum definitions of request poll button types
 * 
 * @enum {string}
 */
export const ChatPermissionsTypes = {
  CAN_SEND_MESSAGES: 'can_send_messages',
  CAN_SEND_AUDIOS: 'can_send_audios',
  CAN_SEND_DOCUMENTS: 'can_send_documents',
  CAN_SEND_PHOTOS: 'can_send_photos',
  CAN_SEND_VIDEOS: 'can_send_videos',
  CAN_SEND_VIDEO_NOTES: 'can_send_video_notes',
  CAN_SEND_VOICE_NOTES: 'can_send_voice_notes',
  CAN_SEND_POLLS: 'can_send_polls',
  CAN_SEND_OTHER_MESSAGES: 'can_send_other_messages',
  CAN_ADD_WEB_PAGE_PREVIEWS: 'can_add_web_page_previews',
  CAN_CHANGE_INFO: 'can_change_info',
  CAN_INVITE_USERS: 'can_invite_users',
  CAN_PIN_MESSAGES: 'can_pin_messages',
  CAN_MANAGE_TOPICS: 'can_manage_topics',
}

/**
* Enum definitions of request poll button types
* 
* @enum {string}
*/
export const KeyboardButtonPollTypes = {
  QUIZ: 'quiz',
  REGULAR: 'regular',
  ANY: 'any',
}

/**
 * Enum definitions of bot commands scope types
 * 
 * @enum {string}
 */
export const BotCommandScopeTypes = {
  DEFAULT: 'default',
  ALL_PRIVATE_CHATS: 'all_private_chats',
  ALL_GROUP_CHATS: 'all_group_chats',
  ALL_CHAT_ADMINISTRATORS: 'all_chat_administrators',
  CHAT: 'chat',
  CHAT_ADMINISTRATORS: 'chat_administrators',
  CHAT_MEMBER: 'chat_member',
}

/**
 * Enum definitions of media types
 * 
 * @enum {string}
 */
export const MediaTypes = {
  PHOTO: 'photo',
  AUDIO: 'audio',
  VIDEO: 'video',
  VIDEO_NOTE: 'video_note',
  VOICE: 'voice',
  ANIMATION: 'animation',
  DOCUMENT: 'document',
  STICKER: 'sticker',
}

/**
 * Emum definition for chat actions
 * 
 * @enum {number}
 */
export const DiceTypes = {
  DICE: '🎲',
  TARGET: '🎯',
  BASKETBALL: '🏀',
  FOOTBALL: '⚽',
  BOWLING: '🎳',
  SLOT_MACHINE: '🎰',
}

/**
 * Emum definition for chat actions
 * 
 * @enum {number}
 */
export const ChatActions = {
  TYPING: 'typing',
  UPLOAD_PHOTO: 'upload_photo',
  RECORD_VIDEO: 'record_video',
  UPLOAD_VIDEO: 'upload_video',
  RECORD_VOICE: 'record_voice',
  UPLOAD_VOICE: 'upload_voice',
  UPLOAD_DOCUMENT: 'upload_document',
  CHOOSE_STICKER: 'choose_sticker',
  FIND_LOCATION: 'find_location',
  RECORD_VIDEO_NOTE: 'record_video_note',
  UPLOAD_VIDEO_NOTE: 'upload_video_note',
}

/**
 * Emum definition for HTTP status codes
 * 
 * @enum {number}
 */
export const StatusCodes = {
  OK: 200,
  BAD_REQUEST: 400,
  NOT_FOUND: 404,
  METHOD_NOT_ALLOWED: 405,
  INTERNAL_SERVER_ERROR: 500,
  NOT_IMPLEMENTED: 501,
}

/**
 * Enum definition fo Telegram Update types
 * 
 * @enum {string} 
 */
export const UpdateTypes = {
  MESSAGE: 'message',
  CALLBACK_QUERY: 'callback_query',
  MY_CHAT_MEMBER: 'my_chat_member',
  CHAT_MEMBER: 'chat_member',
  CHAT_JOIN_REQUEST: 'chat_join_request',
  EDITED_MESSAGE: 'edited_message',
  CHANNEL_POST: 'channel_post',
  EDITED_CHANNEL_POST: 'edited_chattel_post',
  INLINE_QUERY: 'inline_query',
  CHOSEN_INLINE_RESULT: 'chosen_inline_result',
  PRE_CHECKOUT_QUERY: 'pre_checkout_query',
  POLL: 'pool',
  POLL_ANSWER: 'pool_answer',
  SHIPPING_QUERY: 'shipping_query',
}

/**
 * Enum definition fo Telegram Poll types
 * 
 * @enum {string} 
 */
export const PollTypes = {
  REGULAR: 'regular',
  QUIZ: 'quiz',
}

/**
 * Enum definition fo Telegram Message types
 * 
 * @enum {string}
 */
export const MessageTypes = {
  COMMAND: 'command',
  TEXT: 'message.text',
  AUDIO: 'message.audio',
  ANIMATION: 'message.animation',
  VIDEO: 'message.video',
  PHOTO: 'message.photo',
  DOCUMENT: 'message.document',
  CONTACT: 'message.contact',
  LOCATION: 'message.location',
  POLL: 'message.poll',
  NEW_CHAT_MEMBER: 'message.new_chat_member',
  LEFT_CHAT_MEMBER: 'message.left_chat_member',
  STICKER: 'message.sticker',
  VIDEO_NOTE: 'message.video_note',
  VOICE: 'message.voice',
  DICE: 'message.dice',
  GAME: 'message.game',
  VENUE: 'message.venue',
  INVOICE: 'message.invoice',

  SERVICE_MESSAGE: 'service_message',
  NEW_CHAT_MEMBER: 'message.new_chat_member',
  LEFT_CHAT_MEMBER: 'message.left_chat_member',
  NEW_CHAT_TITLE: 'message.new_chat_title',
  NEW_CHAT_PHOTO: 'message.new_chat_photo',
  DELETE_CHAT_PHOTO: 'message.delete_chat_photo',
  GROUP_CHAT_CREATED: 'message.group_chat_created',
  MESSAGE_AUTO_DELETE_TIMER_CHANGED: 'message.message_auto_delete_timer_changed',
  MIGRATE_CHAT: 'message.migrate_chat',
  PINNED_MESSAGE: 'message.pinned_message',
  SUCCESSFUL_PAYMENT: 'message.successful_payment',
  PROXIMITY_ALERT_TRIGGERED: 'message.proximity_alert_triggered',
  VIDEO_CHAT_SCHEDULED: 'message.video_chat_scheduled',
  VIDEO_CHAT_STARTED: 'message.video_chat_started',
  VIDEO_CHAT_ENDED: 'message.video_chat_ended',
  VIDEO_CHAT_PARTICIPANTS_INVITED: 'message.video_chat_participants_invited',
  WEB_APP_DATA: 'message.web_app_data',
}

export const ServiceMessages = [
  MessageTypes.NEW_CHAT_MEMBER,
  MessageTypes.LEFT_CHAT_MEMBER,
  MessageTypes.NEW_CHAT_TITLE,
  MessageTypes.NEW_CHAT_PHOTO,
  MessageTypes.DELETE_CHAT_PHOTO,
  MessageTypes.GROUP_CHAT_CREATED,
  MessageTypes.MESSAGE_AUTO_DELETE_TIMER_CHANGED,
  MessageTypes.MIGRATE_CHAT,
  MessageTypes.MIGRATE_CHAT,
  MessageTypes.PINNED_MESSAGE,
  MessageTypes.SUCCESSFUL_PAYMENT,
  MessageTypes.PROXIMITY_ALERT_TRIGGERED,
  MessageTypes.VIDEO_CHAT_SCHEDULED,
  MessageTypes.VIDEO_CHAT_STARTED,
  MessageTypes.VIDEO_CHAT_ENDED,
  MessageTypes.VIDEO_CHAT_PARTICIPANTS_INVITED,
  MessageTypes.WEB_APP_DATA,
]

/**
 * Enum definition fo Telegram Bot API methods
 * 
 * @enum {string}
 */
export const TelegramBotApiMethods = {
  SEND_MESSAGE: 'sendMessage',
  ANSWER_CALLBACK_QUERY: 'answerCallbackQuery',
  FORWARD_MESSAGE: 'forwardMessage',
  COPY_MESSAGE: 'copyMessage',
  GET_ME: 'getMe',
  GET_WEBHOOK_INFO: 'getWebhookInfo',
  DELETE_WEBHOOK: 'deleteWebhook',
  SET_WEBHOOK: 'setWebhook',
  SEND_PHOTO: 'sendPhoto',
  DELETE_MESSAGE: 'deleteMessage',
  PIN_CHAT_MESSAGE: 'pinChatMessage',
  UNPIN_CHAT_MESSAGE: 'unpinChatMessage',
  UNPIN_ALL_CHAT_MESSAGES: 'unpinAllChatMessages',
  GET_MY_COMMANDS: 'getMyCommands',
  SET_MY_COMMANDS: 'setMyCommands',
  DELETE_MY_COMMANDS: 'deleteMyCommands',
  EDIT_MESSAGE_TEXT: 'editMessageText',
  EDIT_MESSAGE_CAPTION: 'editMessageCaption',
  EDIT_MESSAGE_REPLY_MARKUP: 'editMessageReplyMarkup',
  EDIT_MESSAGE_MEDIA: 'editMessageMedia',
  SEND_CHAT_ACTION: 'sendChatAction',
  SEND_DICE: 'sendDice',
  SEND_VIDEO: 'sendVideo',
  SEND_VIDEO_NOTE: 'sendVideoNote',
  SEND_CONTACT: 'sendContact',
  SEND_AUDIO: 'sendAudio',
  SEND_VOICE: 'sendVoice',
  SEND_DOCUMENT: 'sendDocument',
  SEND_ANIMATION: 'sendAnimation',
  SEND_MEDIA_GROUP: 'sendMediaGroup',
  GET_CHAT: 'getChat',
  GET_CHAT_ADMINISTRATORS: 'getChatAdministrators',
  GET_CHAT_MEMBER_COUNT: 'getChatMemberCount',
  GET_CHAT_MEMBER: 'getChatMember',
  GET_FILE: 'getFile',
  SEND_POLL: 'sendPoll',
  STOP_POLL: 'stopPoll',
  SEND_STICKER: 'sendSticker',
  BAN_CHAT_MEMBER: 'banChatMember',
  UNBAN_CHAT_MEMBER: 'unbanChatMember',
  RESTRICT_CHAT_MEMBER: 'restrictChatMember',
  PROMOTE_CHAT_MEMBER: 'promoteChatMember',
}

/**
 * Enum definitions methods with media
 * 
 * @enum {string}
 */
export const TelegramBotApiMethodsWithMedia = {
  SEND_VIDEO: 'sendVideo',
  SEND_AUDIO: 'sendAudio',
  SEND_VOICE: 'sendVoice',
  SEND_DOCUMENT: 'sendDocument',
  SEND_ANIMATION: 'sendAnimation',
  EDIT_MESSAGE_MEDIA: 'editMessageMedia',
  SEND_MEDIA_GROUP: 'sendMediaGroup',
  SEND_VIDEO_NOTE: 'sendVideoNote',
  SET_CHAT_PHOTO: 'setChatPhoto',
  SEND_PHOTO: 'sendPhoto',
}

/**
 * Enum definitions properties with media
 * 
 * @enum {string}
 */
export const MediaProperties = {
  PHOTO: 'photo',
  AUDIO: 'audio',
  VIDEO: 'video',
  VOICE: 'voice',
  ANIMATION: 'animation',
  MEDIA: 'media',
  DOCUMENT: 'document',
  THUMB: 'thumb',
  VIDEO_NOTE: 'video_note',
}

/**
 * Enum definition for Telegram entity types
 * 
 * @enum {string}
 */
export const EntityTypes = {
  BOLD: 'bold',
  ITALIC: 'italic',
  UNDERLINE: 'underline',
  STRIKETHROUGH: 'strikethrough',
  CODE: 'code',
  PRE: 'pre',
  TEXT_LINK: 'text_link',
  TEXT_MENTION: 'text_mention',
  EMAIL: 'email',
  PHONE_NUMBER: 'phone_number',
  URL: 'url',
  BOT_COMMAND: 'bot_command',
  CASHTAG: 'cashtag',
  HASHTAG: 'hashtag',
  MENTION: 'mention',
  SPOILER: 'spoiler',
}

/**
 * Enum definition for Telegram parse modes
 * 
 * @enum {string}
 */
export const ParseModes = {
  NONE: '',
  MARKDOWN2: 'MarkdownV2',
  MARKDOWN: 'Markdown',
  HTML: 'HTML',
}