haskbot-core-0.0.1.1: Easily-extensible chatbot for Slack messaging service

Safe HaskellNone

Network.Haskbot.Plugin

Contents

Description

Haskbot plugins are functions returning a Plugin data type. The Plugin type is not exported directly; you should create new plugins via newPlugin.

The recommended process for exporting plugins is to create a new module that exports a single function currying the first three arguments to newPlugin. The remaining argument, the Slack secret token, can be supplied in a separate file exporting the list of installed commands for Haskbot. This enables you to recreate a registry of installed tokens and corresponding secret tokens in a separate file outside of version control.

A basic Hello World plugin can be created via:

 {-# LANGUAGE OverloadedStrings #-}

 module MyPlugins.HelloWorld (register) where

 import Network.Haskbot.Plugin

 name :: NameStr
 name = "hello_world"

 helpText :: HelpStr
 helpText = "Have Haskbot say _Hello, World!_ in your current channel."

 handler :: HandlerFn
 handler slashCom = return $ replySameChan slashCom "Hello, World!"

 register :: TokenStr -> Plugin
 register = newPlugin name helpText handler

To run the plugin, create a new Slack slash command integration corresponding to the command /hello_world that points to your Haskbot server. Add the plugin's register function to your Haskbot server's plugin registry like detailed in Network.Haskbot, giving it the Slack integration's secret token as the remaining argument. Rebuild and run the server. Typing /hello_word into any Slack channel should return a Haskbot response of Hello, world!

Synopsis

The Plugin type

data Plugin Source

Constructors

Plugin 

Fields

plCommand :: !Command

The command that invokes this plugin

plHelpText :: !Text

Help text displayed for this plugin via Network.Haskbot.Plugin.Help

plHandler :: !HandlerFn

The function that receives a Network.Haskbot.SlashCommand and maybe returns a Network.Haskbot.Incoming

plToken :: !Token

The secret token corresponding with this plugin's slash command Slack integration

Creating Plugins

Helpful Type aliases

Creating a new Plugin

newPluginSource

Arguments

:: NameStr

The text name of the plugin command

-> HelpStr

(see plHelpText)

-> HandlerFn

(see plHandler)

-> TokenStr

The text value of the slash command secret token

-> Plugin

Creates a plugin to be run by Haskbot

Common Slack replies

replySameChan :: SlashCom -> Text -> Maybe IncomingSource

Send a Slack reply to the same channel as where the corresponding /slash command/ was invoked, formatted according to Slack

replyAsDM :: SlashCom -> Text -> Maybe IncomingSource

Send a Slack reply as a DM to the user who invoked the slash command, formatted according to Slack