summaryrefslogtreecommitdiff
path: root/Omni/Bot.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Omni/Bot.hs')
-rw-r--r--Omni/Bot.hs66
1 files changed, 66 insertions, 0 deletions
diff --git a/Omni/Bot.hs b/Omni/Bot.hs
new file mode 100644
index 0000000..77a0408
--- /dev/null
+++ b/Omni/Bot.hs
@@ -0,0 +1,66 @@
+#!/usr/bin/env run.sh
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+
+-- | Omni Bot - Family assistant via Telegram.
+--
+-- Usage:
+-- bot # Uses TELEGRAM_BOT_TOKEN env var
+-- bot --token=XXX # Explicit token
+-- bot --model=MODEL # Override LLM model
+--
+-- : out bot
+-- : dep aeson
+-- : dep http-conduit
+-- : dep stm
+module Omni.Bot where
+
+import Alpha
+import qualified Data.Text as Text
+import qualified Omni.Agent.Telegram as Telegram
+import qualified Omni.Cli as Cli
+import qualified Omni.Test as Test
+import qualified System.Console.Docopt as Docopt
+
+main :: IO ()
+main = Cli.main plan
+
+plan :: Cli.Plan ()
+plan =
+ Cli.Plan
+ { Cli.help = help,
+ Cli.move = move,
+ Cli.test = test,
+ Cli.tidy = \_ -> pure ()
+ }
+
+help :: Cli.Docopt
+help =
+ [Cli.docopt|
+bot - Omni family assistant via Telegram
+
+Usage:
+ bot [--token=TOKEN] [--model=MODEL]
+ bot test
+ bot (-h | --help)
+
+Options:
+ -h --help Show this help
+ --token=TOKEN Telegram bot token (or use TELEGRAM_BOT_TOKEN env)
+ --model=MODEL LLM model to use [default: anthropic/claude-sonnet-4]
+|]
+
+move :: Cli.Arguments -> IO ()
+move args = do
+ let maybeToken = fmap Text.pack (Cli.getArg args (Cli.longOption "token"))
+ Telegram.startBot maybeToken
+
+test :: Test.Tree
+test =
+ Test.group
+ "Omni.Bot"
+ [ Test.unit "help is non-empty" <| do
+ let usage = str (Docopt.usage help) :: String
+ null usage Test.@=? False
+ ]