module Lambdabot.Plugin.Novelty.Filter (filterPlugin) where
import Lambdabot.Plugin
import Lambdabot.Util
import Control.Applicative
import Data.Maybe
import System.Directory (findExecutable)
import System.Process
filterPlugin :: Module [(String, FilePath, String)]
filterPlugin = newModule
{ moduleDefState = catMaybes <$> sequence
[ do
mbPath <- io (findExecutable name)
return $! do
path <- mbPath
Just (name, path, descr)
| (name, descr) <- filters
]
, moduleCmds = do
activeFilters <- readMS
return
[ (command name)
{ help = say descr
, process = \s -> do
case words s of
[] -> say ("usage: " ++ name ++ " <phrase>")
t -> ios80 (runFilter path (unwords t))
}
| (name, path, descr) <- activeFilters
]
}
filters :: [(String, String)]
filters =
[ ("austro", "austro <phrase>. Talk like Ahhhnold")
, ("b1ff", "b1ff <phrase>. B1ff of usenet yore")
, ("brooklyn", "brooklyn <phrase>. Yo")
, ("chef", "chef <phrase>. Bork bork bork")
, ("cockney", "cockney <phrase>. Londoner accent")
, ("drawl", "drawl <phrase>. Southern drawl")
, ("dubya", "dubya <phrase>. Presidential filter")
, ("fudd", "fudd <phrase>. Fudd, Elmer")
, ("funetak", "funetak <phrase>. Southern drawl")
, ("jethro", "jethro <phrase>. Now listen to a story 'bout a man named Jed...")
, ("jive", "jive <phrase>. Slap ma fro")
, ("kraut", "kraut <phrase>. German accent")
, ("pansy", "pansy <phrase>. Effeminate male")
, ("pirate", "pirate <phrase>. Talk like a pirate")
, ("postmodern", "postmodern <phrase>. Feminazi")
, ("redneck", "redneck <phrase>. Deep south")
, ("valspeak", "valley <phrase>. Like, ya know?")
, ("warez", "warez <phrase>. H4x0r")
]
runFilter :: String -> String -> IO String
runFilter f s = do
out <- readProcess f [] s
return $ result out
where result [] = "Couldn't run the filter."
result xs = unlines . filter (not . all (==' ')) . lines $ xs