# Marvin, the paranoid bot (β stage) [![Travis](https://travis-ci.org/JustusAdam/marvin.svg?branch=master)](https://travis-ci.org/JustusAdam/marvin) [![Hackage](https://img.shields.io/hackage/v/marvin.svg)](http://hackage.haskell.org/package/marvin) Marvin is an attempt to combine the ease of use of [hubot](https://hubot.github.com) with the typesafety and easy syntax of Haskell and the performance gains from compiled languages. ## Installing and using marvin The verbose documentation can be found on readthedocs https://marvin.readthedocs.io. It should hopefully answer all your questions. Installation instructions are on [this](http://marvin.readthedocs.io/en/latest/getting-started.html) documentation page. ## Links - [Documentation](https://marvin.readthedocs.io) - [Hackage](https://hackage.haskell.org/package/marvin) - [Repository](https://github.com/JustusAdam/marvin) - [Bugtracker](https://github.com/JustusAdam/marvin/issues) - [Documentation repository](https://github.com/JustusAdam/marvin-docs) and [bugtracker](https://github.com/JustusAdam/marvin-docs/issues) - [Slack channel][slack-channel] ([signup instructions](#testing-and-talking)) [slack-channel]: https://marvin-bot.slack.com ## A teaser ```Haskell module MyScript where import Marvin.Prelude script :: IsAdapter a => ScriptInit a script = defineScript "my-script" $ do hear "sudo (.+)" $ do match <- getMatch reply $(isL "All right, i'll do #{match !! 1}") respond "repeat" $ do message <- getMessage send $(isL "You wrote #{message}") respond "what is in file (\\w+)\\??" $ do match <- getMatch let file = match !! 1 contents <- liftIO $ readFile file send contents enterIn "#random" $ do user <- getUser username <- getUsername user send $(isL "Hello #{username} welcome to the random channel!") ``` ## Testing and Talking There's a [slack channel][slack-channel] where you can ask questions or play around with a [test instance of marvin](https://github.com/JustusAdam/marvin/blob/master/test/integration/slack/Script1.hs). It's currently invite-only, so [send me an email](mailto:dev@justus.science) if you would like to join. ## Contributing Any kind of contribution is very welcome. ### Issues and errors If you are a marvin user, please report any error, issues, or improvement suggestions to the [issue section](https://github.com/JustusAdam/marvin/issues) or [write me an email](mailto:dev@justus.science). ### Testing I welcome anybody who tests marvin by deploying it. Especially testing different adapters is a huge help. ### Hacking If you want to hack on marvin, feel free to do so and send me your changes as pull requests. Current hot places to get started: - Convenient HTTP requests API in `Marvin.Util.HTTP`. - Convenient JSON handling API in `Marvin.Util.JSON`. - New adapters as submodules of `Marvin.Adapter`. - A basic library of scripts (maybe as a `Marvin.Scripts.Prelude` module?) (inspiration: https://github.com/github/hubot-scripts)