package Ġcom . github . dj aler . evil bot . service Ċ Ċ import Ġcom . github . dj aler . evil bot . config . Bot Properties Ċ import Ġcom . github . dj aler . evil bot . entity . Dice Poll Captcha Restriction Ċ import Ġcom . github . dj aler . evil bot . repository . Dice Poll Captcha Restriction Repository Ċ import Ġcom . github . dj aler . evil bot . utils . userId Ċ import Ġdev . in mo . tg bot api . types . Chat Id Ċ import Ġdev . in mo . tg bot api . types . Poll Identifier Ċ import Ġdev . in mo . tg bot api . types . User Ċ import Ġdev . in mo . tg bot api . types . UserId Ċ import Ġdev . in mo . tg bot api . types . chat . Chat Permissions Ċ import Ġdev . in mo . tg bot api . types . chat . abstract s . Public Chat Ċ import Ġdev . in mo . tg bot api . types . message . abstract s . Chat Event Message Ċ import Ġdev . in mo . tg bot api . types . message . abstract s . Content Message Ċ import Ġdev . in mo . tg bot api . types . message . abstract s . Message Ċ import Ġdev . in mo . tg bot api . types . message . content . Dice Content Ċ import Ġdev . in mo . tg bot api . types . message . content . Poll Content Ċ import Ġorg . hibernate . exception . Constraint Violation Exception Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ Service Ċ class ĠD ice Poll Captcha Service ( ĊĠĠĠ Ġprivate Ġval Ġchat Service : ĠChat Service , ĊĠĠĠ Ġprivate Ġval Ġcapt cha Restriction Repository : ĠD ice Poll Captcha Restriction Repository , ĊĠĠĠ Ġprivate Ġval Ġbot Properties : ĠBot Properties Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġfix Restriction ( ĊĠĠĠĠĠĠĠ Ġchat : ĠPublic Chat , ĊĠĠĠĠĠĠĠ Ġmember : ĠUser , ĊĠĠĠĠĠĠĠ Ġjoin Message : ĠChat Event Message <* >, ĊĠĠĠĠĠĠĠ Ġdice Message : ĠContent Message < Dice Content >, ĊĠĠĠĠĠĠĠ Ġpoll Message : ĠContent Message < Poll Content >, ĊĠĠĠĠĠĠĠ Ġcorrect Answer Index : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠChat Permissions ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( chat Entity , Ġ_) Ġ= Ġchat Service . get OrCreate Chat From ( chat ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapt cha Restriction Repository . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ice Poll Captcha Restriction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Entity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember . id . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Message . message Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdice Message . message Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Message . message Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Message . content . poll . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorrect Answer Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Send Messages Ġ= Ġpermissions . can Send Messages , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Send Media Messages Ġ= Ġpermissions . can Send Media Messages , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Send Pol ls Ġ= Ġpermissions . can Send Pol ls , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Send Other Messages Ġ= Ġpermissions . can Send Other Messages , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Add Web Page Pre views Ġ= Ġpermissions . can Add Web Page Pre views , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Change Info Ġ= Ġpermissions . can Change Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Invite Users Ġ= Ġpermissions . can Invite Users , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Pin Messages Ġ= Ġpermissions . can Pin Messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠConstraint Violation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore Ġduplicate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Restriction ( restriction : ĠD ice Poll Captcha Restriction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcapt cha Restriction Repository . delete ( restriction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Over due Restrictions (): ĠList < Dice Poll Captcha Restriction > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġover due Date Ġ= ĠLocalDateTime . now (). minus ( bot Properties . captcha Kick Timeout ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcapt cha Restriction Repository . findBy DateTime Before ( over due Date ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Restrictions For Kick ed (): ĠList < Dice Poll Captcha Restriction > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcapt cha Restriction Repository . find Kick ed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Restriction ( chat Id : ĠChat Id , Ġmember Id : ĠUserId ): ĠD ice Poll Captcha Restriction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcapt cha Restriction Repository . findBy Chat Telegram Id And Member Telegram Id ( chat Id . chat Id , Ġmember Id . userId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Restriction For Poll OrNull ( poll Id : ĠPoll Identifier ): ĠD ice Poll Captcha Restriction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcapt cha Restriction Repository . findBy Poll Id ( poll Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Restriction ( restriction : ĠD ice Poll Captcha Restriction , Ġdice Message : ĠMessage , Ġpoll Message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcapt cha Restriction Repository . save ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestriction . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdice MessageId Ġ= Ġdice Message . message Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll MessageId Ġ= Ġpoll Message . message Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmark As Kick ed ( restriction : ĠD ice Poll Captcha Restriction , Ġkick MessageId : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcapt cha Restriction Repository . save ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestriction . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkick MessageId Ġ= Ġkick MessageId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkick ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ