summaryrefslogtreecommitdiffstats
path: root/plugin/example_help_test.go
blob: 3f9be9a20dd2959296f6496416f431d5fcfb3ce9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package plugin_test

import (
	"strings"

	"github.com/mattermost/mattermost-server/model"
	"github.com/mattermost/mattermost-server/plugin"
)

type HelpPlugin struct {
	plugin.MattermostPlugin

	TeamName    string
	ChannelName string

	channelId string
}

func (p *HelpPlugin) OnConfigurationChange() error {
	// Reuse the default implementation of OnConfigurationChange to automatically load the
	// required TeamName and ChannelName.
	if err := p.MattermostPlugin.OnConfigurationChange(); err != nil {
		p.API.LogError(err.Error())
		return nil
	}

	team, err := p.API.GetTeamByName(p.TeamName)
	if err != nil {
		p.API.LogError("failed to find team", "team_name", p.TeamName)
		return nil
	}

	channel, err := p.API.GetChannelByName(p.ChannelName, team.Id)
	if err != nil {
		p.API.LogError("failed to find channel", "channel_name", p.ChannelName)
		return nil
	}

	p.channelId = channel.Id

	return nil
}

func (p *HelpPlugin) MessageHasBeenPosted(c *plugin.Context, post *model.Post) {
	// Ignore posts not in the configured channel
	if post.ChannelId != p.channelId {
		return
	}

	// Ignore posts this plugin made.
	if sentByPlugin, _ := post.Props["sent_by_plugin"].(bool); sentByPlugin {
		return
	}

	// Ignore posts without a plea for help.
	if !strings.Contains(post.Message, "help") {
		return
	}

	p.API.SendEphemeralPost(post.UserId, &model.Post{
		ChannelId: p.channelId,
		Message:   "You asked for help? Checkout https://about.mattermost.com/help/",
		Props: map[string]interface{}{
			"sent_by_plugin": true,
		},
	})
}

func Example_helpPlugin() {
	plugin.ClientMain(&HelpPlugin{})
}