packages feed

lambdabot-4.1: Plugin/Maya.hs

--
-- Copyright (c) 2004 Donald Bruce Stewart - http://www.cse.unsw.edu.au/~dons
-- GPL version 2 or later (see http://www.gnu.org/copyleft/gpl.html)
--

--
-- maya, useful commands for #maya
--

--
-- TEMP:

-- current temperature at UNSW
-- 'temp' is the following script, with line breaks for readability. Should be
-- converted into a MiniHTTP call and a regex:
--

-- PAGE='http://www.bom.gov.au/products/IDN65066.shtml'
-- 
-- w3m -dump_source $PAGE | perl -naWF", " -e '
-- sub f($) {
 --        my $i = shift @_;
--         return ($i == -9999) ? "-" : sprintf "%.1f", $i;
-- }
-- 
-- if (/DATA.*Sydney Airport/) {
-- printf "now %s°, min %s°, max %s°, rain %smm, wind %dkm/h%s\n", 
--         f($F[3]),f($F[11]),f($F[13]),f($F[10]),$F[7], $F[6];
-- exit
-- }'
--
------------------------------------------------------------------------
-- 
-- FORECAST:
--
--PAGE='http://www.bom.gov.au/cgi-bin/wrap_fwo.pl?IDN10064.txt'
--
--w3m -dump_source $PAGE | perl -nW -e '
--if (/Issued at/) {
--        $_ =~ s/ on.*$/./ and print $_;
--        while (<>) {
--                next if (/^\s*$/ or /Precis/ or /Liver|Penrith|Richm/);
--                print;
--                exit if /UV Index/;
--        }
--}' | sed 's/  / /g; s/ *$//' | perl -p -e 's/\n/ / if $. == 1'
--

module Plugin.Maya where

import Plugin
import Control.Monad.Trans      ( liftIO        )

newtype MayaModule = MayaModule ()

theModule :: MODULE
theModule = MODULE $ MayaModule ()

instance Module MayaModule () where
        moduleHelp _ s = case s of
                            "temp"          -> "Local temperature"
                            "forecast"      -> "Local forecast"
                            "ring"          -> "@ring <user>, CSE phonebook"
                            _           -> "Maya module: @temp, @forecast, @ring"

        moduleCmds   _ = ["temp","forecast", "ring"]

        process_ _ "temp" s = 
         if s == "help"
            then return ["  Sydney Ap (http://www.bom.gov.au/images/syd_aws.gif)" ]
            else do (o,_,_) <- liftIO $ popen "/home/dons/bin-pc.i86.linux/temp" [] Nothing
                    return [ "  " ++ o ]

        process_  _  "ring" s =
            do (o,_,_) <- liftIO $ popen "/usr/local/bin/ring" [s] Nothing
               return ["  " ++ o]

        process_ _ "forecast" s =
         if s == "help"
            then return ["  Sydney Metro (http://www.bom.gov.au/cgi-bin/wrap_fwo.pl?IDN10064.txt)" ]
            else do (o,e,_) <- liftIO $ popen "/home/dons/bin-pc.i86.linux/forecast" [s] Nothing
                    liftIO $ print (o,e)
                    let o' = map (\t -> "  "++t) $ lines o
                    return o'