@jikey/fcazero
Version:
Facebook Messenger bot, and is one of the most advanced next-generation Facebook Chat API (FCA)
2 lines (1 loc) • 6.54 kB
JavaScript
;var d=Object.create;var g=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var M=(r,t)=>{for(var e in t)g(r,e,{get:t[e],enumerable:!0})},l=(r,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of x(t))!w.call(r,s)&&s!==e&&g(r,s,{get:()=>t[s],enumerable:!(a=f(t,s))||a.enumerable});return r};var I=(r,t,e)=>(e=r!=null?d(b(r)):{},l(t||!r||!r.__esModule?g(e,"default",{value:r,enumerable:!0}):e,r)),v=r=>l(g({},"__esModule",{value:!0}),r);var D={};M(D,{default:()=>o});module.exports=v(D);var h=require("../utils/clients.js"),_=require("../utils/constants.js"),c=require("../utils/formatters.js"),u=I(require("../utils/logger.js"),1),y=require("./core/colors.js");class o{constructor(t,e,a){this.defaultFuncs=t;this.ctx=a}static formatMessage(t,e){switch(e.__typename){case"ThreadNameMessage":return{type:"event",threadID:t,messageID:e.message_id,logMessageType:"log:thread-name",logMessageData:{name:e.thread_name},logMessageBody:e.snippet,timestamp:e.timestamp_precise,author:e.message_sender.id};case"ThreadImageMessage":const a=e.image_with_metadata;return{type:"event",threadID:t,messageID:e.message_id,logMessageType:"log:thread-image",logMessageData:a?{attachmentID:a.legacy_attachment_id,width:a.original_dimensions.x,height:a.original_dimensions.y,url:a.preview.uri}:{attachmentID:null,width:null,height:null,url:null},logMessageBody:e.snippet,timestamp:e.timestamp_precise,author:e.message_sender.id};case"GenericAdminTextMessage":switch(e.extensible_message_admin_text_type){case"CHANGE_THREAD_THEME":return{type:"event",threadID:t,messageID:e.message_id,logMessageType:"log:thread-color",logMessageData:y.colors.find(n=>n.theme_color===e.extensible_message_admin_text.theme_color)||{theme_color:e.extensible_message_admin_text.theme_color,theme_id:null,theme_emoji:null,gradient:null,should_show_icon:null,theme_name_with_subtitle:null},logMessageBody:e.snippet,timestamp:e.timestamp_precise,author:e.message_sender.id};case"CHANGE_THREAD_ICON":const s=e.extensible_message_admin_text.thread_icon;return{type:"event",threadID:t,messageID:e.message_id,logMessageType:"log:thread-icon",logMessageData:{thread_icon_url:`https://static.xx.fbcdn.net/images/emoji.php/v9/t3c/1/16/${s.codePointAt(0).toString(16)}.png`,thread_icon:s},logMessageBody:e.snippet,timestamp:e.timestamp_precise,author:e.message_sender.id};case"CHANGE_THREAD_NICKNAME":return{type:"event",threadID:t,messageID:e.message_id,logMessageType:"log:user-nickname",logMessageData:{nickname:e.extensible_message_admin_text.nickname,participant_id:e.extensible_message_admin_text.participant_id},logMessageBody:e.snippet,timestamp:e.timestamp_precise,author:e.message_sender.id};case"GROUP_POLL":const i=e.extensible_message_admin_text.question;return{type:"event",threadID:t,messageID:e.message_id,logMessageType:"log:thread-poll",logMessageData:{question_json:JSON.stringify({id:i.id,text:i.text,total_count:e.extensible_message_admin_text.total_count,viewer_has_voted:i.viewer_has_voted,question_type:"",creator_id:e.message_sender.id,options:i.options.nodes.map(n=>({id:n.id,text:n.text,total_count:n.voters.nodes.length,viewer_has_voted:n.viewer_has_voted,voters:n.voters.nodes.map(m=>m.id)}))}),event_type:e.extensible_message_admin_text.event_type.toLowerCase(),question_id:i.id},logMessageBody:e.snippet,timestamp:e.timestamp_precise,author:e.message_sender.id};default:throw new Error(`Unknown admin text type: "${e.extensible_message_admin_text_type}", if this happens to you let me know when it happens. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.`)}case"UserMessage":return{senderID:e.message_sender.id,body:e.message.text,threadID:t,messageID:e.message_id,reactions:e.message_reactions.map(s=>({[s.user.id]:s.reaction})),attachments:e.blob_attachments&&e.blob_attachments.length>0?e.blob_attachments.length.map(s=>{let i;try{i=c.Formatters._formatAttachment(s)}catch(n){i=s,i.error=n,i.type="unknown"}return i}):e.extensible_attachment&&Object.keys(e.extensible_attachment).length>0?[{type:"share",ID:e.extensible_attachment.legacy_attachment_id,url:e.extensible_attachment.story_attachment.url,title:e.extensible_attachment.story_attachment.title_with_entities.text,description:e.extensible_attachment.story_attachment.description.text,source:e.extensible_attachment.story_attachment.source,image:((e.extensible_attachment.story_attachment.media||{}).image||{}).uri,width:((e.extensible_attachment.story_attachment.media||{}).image||{}).width,height:((e.extensible_attachment.story_attachment.media||{}).image||{}).height,playable:(e.extensible_attachment.story_attachment.media||{}).is_playable||!1,duration:(e.extensible_attachment.story_attachment.media||{}).playable_duration_in_ms||0,subattachments:e.extensible_attachment.subattachments,properties:e.extensible_attachment.story_attachment.properties}]:[],mentions:e.message.ranges.map(s=>({[s.entity.id]:e.message.text.substring(s.offset,s.offset+s.length)})),timestamp:e.timestamp_precise};default:throw new Error(`Unknown message type: "${e.__typename}", if this happens to you let me know when it happens. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.`)}}static parseDelta(t,e){return e.replied_to_message?Object.assign({type:"message_reply"},o.formatMessage(t,e),{messageReply:o.formatMessage(t,e.replied_to_message.message)}):o.formatMessage(t,e)}call(t,e){return new Promise((a,s)=>{try{if(!t.threadID)throw new Error("please pass a threadID as a second argument.");if(_.Constants.getType(t.threadID)!=="Number"&&_.Constants.getType(t.threadID)!=="String")throw new Error("threadID must be a number or a string");if(!t.messageID)throw new Error("please pass a messageID as a second argument.");const i={queries:JSON.stringify({o0:{doc_id:"1768656253222505",query_params:{thread_and_message_id:{thread_id:t.threadID,message_id:t.messageID}}}})};return this.defaultFuncs.post("https://www.facebook.com/api/graphqlbatch/",this.ctx.jar,i).then(h.Clients.parseAndCheckLogin(this.ctx,this.defaultFuncs)).then(n=>{if(n&&n[n.length-1].error_results>0)throw n[0].o0.errors;if(n&&n[n.length-1].successful_results===0)throw{error:"getMessage: there was no successful_results",res:n};const m=n&&n[0].o0.data.message;if(m){const p=o.parseDelta(t.threadID,m);return e&&typeof e=="function"&&e(null,p),a(p)}else throw m})}catch(i){return u.default.error({error:i},"GetMessage error"),e&&typeof e=="function"&&e(i),s(i)}})}}