package Ġbot . t bd . extensions Ċ Ċ import Ġbot . t bd . scheduling . Rem ind Me Task Ċ import Ġbot . t bd . scheduling . schedule Task Ċ import Ġbot . t bd . util . Date Parsing Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . converters . impl . co ale sc edString Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . parser . Arguments Ċ import Ġcom . kot l ind is cord . k ord . extensions . extensions . Extension Ċ import Ġcom . kot l ind is cord . k ord . extensions . utils . respond Ċ import Ġjava . time . Instant Ċ Ċ class ĠEcho Extension : ĠExtension () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= Ġ" echo " ĊĊĠĠĠ Ġinner Ġclass ĠRem ind Me Args Ġ: ĠArguments () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġby Ġco ale sc edString (" reminder Ġarguments ", Ġdescription Ġ= Ġ"< time >, Ġ< message >") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġcommand { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" ping " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" tis Ġa Ġping " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . respond (" p ong , Ġ${ message . author ?. tag }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcommand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" dm _ ping " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" ping Ġin Ġd ms " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . author ?. get Dm Channel OrNull ()?. create Message (" DM ĠP ong , Ġ${ message . author ?. tag }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcommand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" version " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" version " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . respond (" TB DB ot - Kotlin Ġ${ this :: class . java .` package `. implementation Version }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcommand (:: Rem ind Me Args ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" rem ind me " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" rem ind Ġyou Ġof Ġsomething " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġarguments . str . split (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . respond (" At Ġleast Ġneed Ġsomething Ġre semb ling Ġa Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Time Ġ= ĠDate Parsing . nat Language To Instant ( split [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parsed Time Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . respond (" Couldn 't Ġparse Ġa Ġtime Ġout Ġof Ġthat ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġmessage . author Ġ?: Ġlet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . respond (" Couldn 't Ġget Ġmessage Ġauthor , Ġw tf ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠRem ind Me Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Time . to Epoch Milli (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor . id . asString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit . take Last ( split . size Ġ- Ġ 1 ). join ToString ("," ). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Task ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . respond ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġwill Ġbe Ġre min ded Ġat Ġ${ Instant . of Epoch Milli ( task . execution Time )} Ġof Ġ${ task . reminder Text }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }