package Ġcom . github . ins an us mo kr ass ar . Auto Post Bot Lik es Plugin . listeners Ċ Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Bot Lik es Plugin . database . Lik es Plugin Lik es Table Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Bot Lik es Plugin . models . Button Mark Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Bot Lik es Plugin . models . Mark Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Bot Lik es Plugin . models . config . Button Config Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . base . plugins . common Logger Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . flow Filter Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . utils . flow . collect With Errors Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . bot . Requests Executor Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . requests . answers . create Answer Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types .* Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . Callback Query . Callback Query Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . Callback Query . Message Data Callback Query Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . buttons . Inline Keyboard Buttons . Callback Data Inline Keyboard Button Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . buttons . Inline Keyboard Buttons . Inline Keyboard Button Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . message . Forward From Channel Info Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . message . abstract s . Po ss ibly Forwarded Message Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . utils . extensions . execute Unsafe Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . flow .* ĊĊ Ċ private Ġconst Ġval Ġlike _ plugin _ data Ġ= Ġ" like _ plugin Ġ" Ċ private Ġconst Ġval Ġmark Callback Data Ġ= Ġ"$ like _ plugin _ data % s " Ċ fun Ġcreate Mark Button ( button Config : ĠButton Config , Ġbutton Mark : ĠButton Mark ): ĠInline Keyboard Button Ġ= ĠCallback Data Inline Keyboard Button ( ĊĠĠĠ Ġbutton Config . format ( button Mark . count ), ĊĠĠĠ Ġmark Callback Data . format ( button Config . id ) Ċ ) Ċ Ċ private Ġfun ĠCor outine Scope . create Actor ( ĊĠĠĠ Ġupdate Flow : ĠFlow < Message Data Callback Query >, ĊĠĠĠ Ġtarget Chat Id : ĠChat Id , ĊĠĠĠ Ġlikes Plugin Lik es Table : ĠL ikes Plugin Lik es Table , ĊĠĠĠ Ġradio Buttons Ids : ĠList < String >, ĊĠĠĠ Ġbot : ĠRequests Executor , ĊĠĠĠ Ġbutton : ĠButton Config Ċ ) Ġ{ ĊĠĠĠ Ġval Ġbutton Id Ġ= Ġbutton . id ĊĠĠĠ Ġval Ġanswer ing ExceptionHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠ Ġcommon Logger . throw ing (" Mark Ġ${ button . text }", Ġ" register Ġmark ", Ġthrowable ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Flow . collect Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( answer ing ExceptionHandler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Id Ġ= Ġquery . message . chat . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġquery . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chat Id Ġ== Ġtarget Chat Id Ġ&& Ġdata . startsWith ( like _ plugin _ data ) Ġ&& Ġdata . split (" Ġ" )[ 1 ] Ġ== Ġbutton Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= Ġquery . message . message Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġquery . user . id ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmark Ġ= ĠMark ( userId . chat Id , ĠmessageId , Ġbutton Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarked Ġ= Ġlikes Plugin Lik es Table . insert Mark Delete Other ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmark , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradio Buttons Ids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery . create Answer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . positive Answer Ġ? . text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . negative Answer Ġ? . text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠCor outine Scope . create Actor ( ĊĠĠĠ Ġupdate Flow : ĠFlow < Message Data Callback Query >, ĊĠĠĠ Ġtarget Chat Id : ĠChat Id , ĊĠĠĠ Ġlikes Plugin Lik es Table : ĠL ikes Plugin Lik es Table , ĊĠĠĠ Ġbot : ĠRequests Executor , ĊĠĠĠ Ġbutton : ĠButton Config Ċ ) Ġ{ ĊĠĠĠ Ġval Ġbutton Id Ġ= Ġbutton . id ĊĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Flow . collect With Errors Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Id Ġ= Ġquery . message . chat . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġquery . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chat Id Ġ== Ġtarget Chat Id Ġ&& Ġdata . startsWith ( like _ plugin _ data ) Ġ&& Ġdata . split (" Ġ" )[ 1 ] Ġ== Ġbutton Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= Ġquery . message . message Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġquery . user . id ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmark Ġ= ĠMark ( userId . chat Id , ĠmessageId , Ġbutton Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarked Ġ= Ġlikes Plugin Lik es Table . insert Or Delete Mark ( mark ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot . execute Unsafe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery . create Answer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . positive Answer Ġ? . text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . negative Answer Ġ? . text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġsuspend Ġfun Ġcreate Actor ( ĊĠĠĠ Ġupdate Flow : ĠFlow < Message Data Callback Query >, ĊĠĠĠ Ġtarget Chat Id : ĠChat Id , ĊĠĠĠ Ġlikes Plugin Lik es Table : ĠL ikes Plugin Lik es Table , ĊĠĠĠ Ġbot : ĠRequests Executor , ĊĠĠĠ Ġbutton : ĠButton Config , ĊĠĠĠ Ġradio Buttons : ĠList < String >? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġradio Buttons Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Actor ( update Flow , Ġtarget Chat Id , Ġlikes Plugin Lik es Table , Ġradio Buttons , Ġbot , Ġbutton ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġcreate Actor ( update Flow , Ġtarget Chat Id , Ġlikes Plugin Lik es Table , Ġbot , Ġbutton ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCor outine Scope . enable Marks Listener ( ĊĠĠĠ Ġtarget Chat Id : ĠChat Id , ĊĠĠĠ Ġlikes Plugin Lik es Table : ĠL ikes Plugin Lik es Table , ĊĠĠĠ Ġbuttons : ĠList < Button Config >, ĊĠĠĠ Ġradio Groups By OneOf Buttons : ĠMap < Button Config , ĠList < String >>, ĊĠĠĠ Ġbot : ĠRequests Executor Ċ ) Ġ{ ĊĠĠĠ Ġval Ġassociated Buttons Ġ= Ġbuttons . associate By Ġ{ Ġit . id Ġ} ĊĠĠĠ Ġval Ġinternal Channel Ġ= ĠChannel < Message Data Callback Query >( Channel . UN LIMIT ED ) ĊĠĠĠ Ġval Ġas Flow Ġ= Ġinternal Channel . consume As Flow () ĊĠĠĠ Ġval Ġmarks Listener ExceptionHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠ Ġcommon Logger . throw ing (" Marks Listener ", Ġ" Mark Ġupdate Ġhandling ", Ġthrowable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġtrigger Mark Reaction ( data : ĠString , Ġquery : ĠCallback Query , ĠuserId : ĠUserId , ĠmessageId : ĠMessage Identifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbutton Id Ġ= Ġdata . split (" Ġ" )[ 1 ] ĊĠĠĠĠĠĠĠ Ġassociated Buttons [ button Id ] Ġ? . let Ġ{ Ġbutton Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmark Ġ= ĠMark ( userId . chat Id , ĠmessageId , Ġbutton Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarked Ġ= Ġradio Groups By OneOf Buttons [ button ] Ġ? . let Ġ{ Ġradio Buttons Ids Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Plugin Lik es Table . insert Mark Delete Other ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmark , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradio Buttons Ids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġlikes Plugin Lik es Table . insert Or Delete Mark ( mark ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbot . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery . create Answer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . positive Answer Ġ? . text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . negative Answer Ġ? . text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġas Flow . collect With Errors Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( marks Listener ExceptionHandler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Id Ġ= Ġquery . message . chat . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġquery . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . startsWith ( like _ plugin _ data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chat Id Ġ== Ġtarget Chat Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Mark Reaction ( data , Ġquery , Ġquery . user . id , Ġquery . message . message Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforward Info Ġ= Ġ( query . message Ġas ? ĠPo ss ibly Forwarded Message ) Ġ? . forward Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( forward Info Ġ!= Ġnull Ġ&& Ġforward Info Ġis ĠForward From Channel Info Ġ&& Ġforward Info . channel Chat . id Ġ== Ġtarget Chat Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Mark Reaction ( data , Ġquery , Ġquery . user . id , Ġforward Info . message Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Filter . callback Query Flow . collect With Errors Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Channel . send ( it . data Ġas ? ĠMessage Data Callback Query Ġ?: Ġreturn @ collect With Errors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ