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{})
}
|