summaryrefslogtreecommitdiff
path: root/Omni/Bot.hs
blob: 77a0408315d84141b7a752dbc82f0c9f850152b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
    ]