Added Administrative plugin that will permit dynamic reloading
This commit is contained in:
parent
4f50db8409
commit
fe1acc3db5
2 changed files with 46 additions and 0 deletions
45
Hsbot/Plugin/Admin.hs
Normal file
45
Hsbot/Plugin/Admin.hs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
module Hsbot.Plugin.Admin
|
||||||
|
( admin
|
||||||
|
, theAdmin
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Control.Concurrent.Chan ()
|
||||||
|
import Control.Monad.Reader
|
||||||
|
import qualified Network.IRC as IRC
|
||||||
|
import Prelude hiding (catch)
|
||||||
|
|
||||||
|
import Hsbot.Message
|
||||||
|
import Hsbot.Types
|
||||||
|
import Hsbot.Utils
|
||||||
|
|
||||||
|
-- | The Admin plugin identity
|
||||||
|
admin :: PluginId
|
||||||
|
admin = PluginId
|
||||||
|
{ pluginName = "admin"
|
||||||
|
, pluginEp = theAdmin }
|
||||||
|
|
||||||
|
-- | An IRC plugin for manage hsbot
|
||||||
|
theAdmin :: Plugin (Env IO) ()
|
||||||
|
theAdmin = forever $ readMsg >>= eval
|
||||||
|
where
|
||||||
|
eval :: Message -> Plugin (Env IO) ()
|
||||||
|
eval (IncomingMsg msg)
|
||||||
|
| IRC.msg_command msg == "PRIVMSG" = do
|
||||||
|
cmdArgs <- lift $ getCommand msg
|
||||||
|
case cmdArgs of
|
||||||
|
"exit":"help":_ -> answerMsg msg "exit hsbot."
|
||||||
|
"exit":_ -> lift (hasAccess (IRC.msg_prefix msg) Admin) >>= \right -> if right
|
||||||
|
then lift $ setGlobalQuitMVar BotExit
|
||||||
|
else answerMsg msg "Only admins can do that."
|
||||||
|
"restart":"help":_ -> answerMsg msg "restart hsbot, reset the running state to config file directives."
|
||||||
|
"restart":_ -> lift (hasAccess (IRC.msg_prefix msg) Admin) >>= \right -> if right
|
||||||
|
then lift $ setGlobalQuitMVar BotRestart
|
||||||
|
else answerMsg msg "Only admins can do that."
|
||||||
|
"reload":"help":_ -> answerMsg msg "reload hsbot, and try merge the new config file directives with actual running state)."
|
||||||
|
"reload":_ -> lift (hasAccess (IRC.msg_prefix msg) Admin) >>= \right -> if right
|
||||||
|
then lift $ setGlobalQuitMVar BotReload
|
||||||
|
else answerMsg msg "Only admins can do that."
|
||||||
|
_ -> return ()
|
||||||
|
| otherwise = return ()
|
||||||
|
eval _ = return ()
|
||||||
|
|
|
@ -23,6 +23,7 @@ Library
|
||||||
Hsbot.Core
|
Hsbot.Core
|
||||||
Hsbot.Message
|
Hsbot.Message
|
||||||
Hsbot.Plugin
|
Hsbot.Plugin
|
||||||
|
Hsbot.Plugin.Admin
|
||||||
Hsbot.Plugin.Duck
|
Hsbot.Plugin.Duck
|
||||||
Hsbot.Plugin.Ping
|
Hsbot.Plugin.Ping
|
||||||
Hsbot.Types
|
Hsbot.Types
|
||||||
|
|
Reference in a new issue