@stack.thefennec.dev/telegram-export-parser
Version:
TypeScript library for parsing Telegram Desktop's data export with full type safety
226 lines • 6.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasReply = hasReply;
exports.hasReactions = hasReactions;
exports.isForwarded = isForwarded;
exports.isSavedMessage = isSavedMessage;
exports.isEdited = isEdited;
exports.isViaBot = isViaBot;
exports.isTextMessage = isTextMessage;
exports.isPhotoMessage = isPhotoMessage;
exports.isLocationMessage = isLocationMessage;
exports.isContactMessage = isContactMessage;
exports.isPollMessage = isPollMessage;
exports.isGameMessage = isGameMessage;
exports.isInvoiceMessage = isInvoiceMessage;
exports.isMediaMessage = isMediaMessage;
exports.isAnimationMessage = isAnimationMessage;
exports.isAudioFileMessage = isAudioFileMessage;
exports.isStickerMessage = isStickerMessage;
exports.isVideoFileMessage = isVideoFileMessage;
exports.isVideoNoteMessage = isVideoNoteMessage;
exports.isVoiceMessage = isVoiceMessage;
exports.isDocumentMessage = isDocumentMessage;
// =====================================================
// TYPE GUARD FUNCTIONS
// =====================================================
// Common property guards
/**
* Type guard to check if a message or event has a reply reference.
*
* @param msg - The message or event to check
* @returns True if the item is replying to another message
*
* @example
* ```typescript
* if (hasReply(msg)) {
* console.log(`Replying to message ${msg.replyToMessageId}`)
* }
* ```
*/
function hasReply(msg) {
return "replyToMessageId" in msg && typeof msg.replyToMessageId === "number";
}
/**
* Type guard to check if a message or event has user reactions.
*
* @param msg - The message or event to check
* @returns True if the item has at least one reaction
*/
function hasReactions(msg) {
return "reactions" in msg && Array.isArray(msg.reactions) && msg.reactions.length > 0;
}
/**
* Type guard to check if a message or event was forwarded from another chat.
*
* @param msg - The message or event to check
* @returns True if the item was forwarded
*/
function isForwarded(msg) {
return "forwardedFrom" in msg && msg.forwardedFrom !== undefined;
}
/**
* Type guard to check if a message or event was saved from another chat.
*
* @param msg - The message or event to check
* @returns True if the item was saved
*/
function isSavedMessage(msg) {
return "savedFrom" in msg && msg.savedFrom !== undefined;
}
/**
* Type guard to check if a message or event has been edited after sending.
*
* @param msg - The message or event to check
* @returns True if the item was edited
*/
function isEdited(msg) {
return "edited" in msg && msg.edited === true;
}
/**
* Type guard to check if a message or event was sent via a bot.
*
* @param msg - The message or event to check
* @returns True if the item was sent through a bot
*/
function isViaBot(msg) {
return "viaBot" in msg && msg.viaBot !== undefined;
}
// Message type guards
/**
* Type guard to check if an item is a simple text message.
*
* @param msg - The message or event to check
* @returns True if the item is a TextMessage
*/
function isTextMessage(msg) {
return msg.type === "message" && "textEntities" in msg && !("fileURL" in msg) && !("photoURL" in msg) && !("locationInformation" in msg);
}
/**
* Type guard to check if an item is a photo message.
*
* @param msg - The message or event to check
* @returns True if the item is a PhotoMessage
*/
function isPhotoMessage(msg) {
return msg.type === "message" && "photoURL" in msg;
}
/**
* Type guard to check if an item is a location message.
*
* @param msg - The message or event to check
* @returns True if the item is a LocationMessage
*/
function isLocationMessage(msg) {
return msg.type === "message" && "locationInformation" in msg;
}
/**
* Type guard to check if an item is a contact message.
*
* @param msg - The message or event to check
* @returns True if the item is a ContactMessage
*/
function isContactMessage(msg) {
return msg.type === "message" && "contactInformation" in msg;
}
/**
* Type guard to check if an item is a poll message.
*
* @param msg - The message or event to check
* @returns True if the item is a PollMessage
*/
function isPollMessage(msg) {
return msg.type === "message" && "poll" in msg;
}
/**
* Type guard to check if an item is a game message.
*
* @param msg - The message or event to check
* @returns True if the item is a GameMessage
*/
function isGameMessage(msg) {
return msg.type === "message" && "gameTitle" in msg;
}
/**
* Type guard to check if an item is an invoice message.
*
* @param msg - The message or event to check
* @returns True if the item is an InvoiceMessage
*/
function isInvoiceMessage(msg) {
return msg.type === "message" && "invoiceInformation" in msg;
}
// Media message guards
/**
* Type guard to check if an item is any type of media message.
*
* @param msg - The message or event to check
* @returns True if the item is a MediaMessage
*/
function isMediaMessage(msg) {
return msg.type === "message" && "fileURL" in msg && "mediaType" in msg;
}
/**
* Type guard to check if an item is an animation message.
*
* @param msg - The message or event to check
* @returns True if the item is an AnimationMessage
*/
function isAnimationMessage(msg) {
return isMediaMessage(msg) && msg.mediaType === "animation";
}
/**
* Type guard to check if an item is a music/audio file message.
*
* @param msg - The message or event to check
* @returns True if the item is a MusicMessage
*/
function isAudioFileMessage(msg) {
return isMediaMessage(msg) && msg.mediaType === "audio_file";
}
/**
* Type guard to check if an item is a sticker message.
*
* @param msg - The message or event to check
* @returns True if the item is a StickerMessage
*/
function isStickerMessage(msg) {
return isMediaMessage(msg) && msg.mediaType === "sticker";
}
/**
* Type guard to check if an item is a video file message.
*
* @param msg - The message or event to check
* @returns True if the item is a VideoMessage
*/
function isVideoFileMessage(msg) {
return isMediaMessage(msg) && msg.mediaType === "video_file";
}
/**
* Type guard to check if an item is a video note message.
*
* @param msg - The message or event to check
* @returns True if the item is a VideoNoteMessage
*/
function isVideoNoteMessage(msg) {
return isMediaMessage(msg) && msg.mediaType === "video_message";
}
/**
* Type guard to check if an item is a voice message.
*
* @param msg - The message or event to check
* @returns True if the item is a VoiceNoteMessage
*/
function isVoiceMessage(msg) {
return isMediaMessage(msg) && msg.mediaType === "voice_message";
}
/**
* Type guard to check if an item is a document message.
*
* @param msg - The message or event to check
* @returns True if the item is a DocumentMessage
*/
function isDocumentMessage(msg) {
return isMediaMessage(msg) && msg.mediaType === "file";
}
//# sourceMappingURL=messages.js.map