initial commit
This commit is contained in:
parent
fe9c0e7188
commit
189f92c54b
54 changed files with 9238 additions and 0 deletions
180
server/message_hooks.go
Normal file
180
server/message_hooks.go
Normal file
|
@ -0,0 +1,180 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/mattermost/mattermost-server/model"
|
||||
"github.com/mattermost/mattermost-server/plugin"
|
||||
)
|
||||
|
||||
// MessageWillBePosted is invoked when a message is posted by a user before it is committed to the
|
||||
// database. If you also want to act on edited posts, see MessageWillBeUpdated. Return values
|
||||
// should be the modified post or nil if rejected and an explanation for the user.
|
||||
//
|
||||
// If you don't need to modify or reject posts, use MessageHasBeenPosted instead.
|
||||
//
|
||||
// Note that this method will be called for posts created by plugins, including the plugin that created the post.
|
||||
//
|
||||
// This sample implementation rejects posts in the sample channel, as well as posts that @-mention
|
||||
// the sample plugin user.
|
||||
func (p *Plugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
|
||||
if p.disabled {
|
||||
return post, ""
|
||||
}
|
||||
|
||||
// Always allow posts by the sample plugin user.
|
||||
if post.UserId == p.sampleUserId {
|
||||
return post, ""
|
||||
}
|
||||
|
||||
// Reject posts by other users in the sample channels, effectively making it read-only.
|
||||
for _, channelId := range p.sampleChannelIds {
|
||||
if channelId == post.ChannelId {
|
||||
p.API.SendEphemeralPost(post.UserId, &model.Post{
|
||||
UserId: p.sampleUserId,
|
||||
ChannelId: channelId,
|
||||
Message: "Posting is not allowed in this channel.",
|
||||
})
|
||||
|
||||
return nil, "disallowing post in sample channel"
|
||||
}
|
||||
}
|
||||
|
||||
// Reject posts mentioning the sample plugin user.
|
||||
if strings.Contains(post.Message, fmt.Sprintf("@%s", p.Username)) {
|
||||
p.API.SendEphemeralPost(post.UserId, &model.Post{
|
||||
UserId: p.sampleUserId,
|
||||
ChannelId: post.ChannelId,
|
||||
Message: "You must not talk about the sample plugin user.",
|
||||
})
|
||||
|
||||
return nil, "disallowing mention of sample plugin user"
|
||||
}
|
||||
|
||||
// Otherwise, allow the post through.
|
||||
return post, ""
|
||||
}
|
||||
|
||||
// MessageWillBeUpdated is invoked when a message is updated by a user before it is committed to
|
||||
// the database. If you also want to act on new posts, see MessageWillBePosted. Return values
|
||||
// should be the modified post or nil if rejected and an explanation for the user. On rejection,
|
||||
// the post will be kept in its previous state.
|
||||
//
|
||||
// If you don't need to modify or rejected updated posts, use MessageHasBeenUpdated instead.
|
||||
//
|
||||
// Note that this method will be called for posts updated by plugins, including the plugin that
|
||||
// updated the post.
|
||||
//
|
||||
// This sample implementation rejects posts that @-mention the sample plugin user.
|
||||
func (p *Plugin) MessageWillBeUpdated(c *plugin.Context, newPost, oldPost *model.Post) (*model.Post, string) {
|
||||
if p.disabled {
|
||||
return newPost, ""
|
||||
}
|
||||
|
||||
// Reject posts mentioning the sample plugin user.
|
||||
if strings.Contains(newPost.Message, fmt.Sprintf("@%s", p.Username)) {
|
||||
p.API.SendEphemeralPost(newPost.UserId, &model.Post{
|
||||
UserId: p.sampleUserId,
|
||||
ChannelId: newPost.ChannelId,
|
||||
Message: "You must not talk about the sample plugin user.",
|
||||
})
|
||||
|
||||
return nil, "disallowing mention of sample plugin user"
|
||||
}
|
||||
|
||||
// Otherwise, allow the post through.
|
||||
return newPost, ""
|
||||
}
|
||||
|
||||
// MessageHasBeenPosted is invoked after the message has been committed to the database. If you
|
||||
// need to modify or reject the post, see MessageWillBePosted Note that this method will be called
|
||||
// for posts created by plugins, including the plugin that created the post.
|
||||
//
|
||||
// This sample implementation logs a message to the sample channel whenever a message is posted,
|
||||
// unless by the sample plugin user itself.
|
||||
func (p *Plugin) MessageHasBeenPosted(c *plugin.Context, post *model.Post) {
|
||||
if p.disabled {
|
||||
return
|
||||
}
|
||||
|
||||
// Ignore posts by the sample plugin user.
|
||||
if post.UserId == p.sampleUserId {
|
||||
return
|
||||
}
|
||||
|
||||
user, err := p.API.GetUser(post.UserId)
|
||||
if err != nil {
|
||||
p.API.LogError("failed to query user", "user_id", post.UserId)
|
||||
return
|
||||
}
|
||||
|
||||
channel, err := p.API.GetChannel(post.ChannelId)
|
||||
if err != nil {
|
||||
p.API.LogError("failed to query channel", "channel_id", post.ChannelId)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := p.API.CreatePost(&model.Post{
|
||||
UserId: p.sampleUserId,
|
||||
ChannelId: p.sampleChannelIds[channel.TeamId],
|
||||
Message: fmt.Sprintf(
|
||||
"MessageHasBeenPosted in ~%s by @%s",
|
||||
channel.Name,
|
||||
user.Username,
|
||||
),
|
||||
}); err != nil {
|
||||
p.API.LogError(
|
||||
"failed to post MessageHasBeenPosted message",
|
||||
"channel_id", channel.Id,
|
||||
"user_id", user.Id,
|
||||
"error", err.Error(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// MessageHasBeenUpdated is invoked after a message is updated and has been updated in the
|
||||
// database. If you need to modify or reject the post, see MessageWillBeUpdated Note that this
|
||||
// method will be called for posts created by plugins, including the plugin that created the post.
|
||||
//
|
||||
// This sample implementation logs a message to the sample channel whenever a message is updated,
|
||||
// unless by the sample plugin user itself.
|
||||
func (p *Plugin) MessageHasBeenUpdated(c *plugin.Context, newPost, oldPost *model.Post) {
|
||||
if p.disabled {
|
||||
return
|
||||
}
|
||||
|
||||
// Ignore updates by the sample plugin user.
|
||||
if newPost.UserId == p.sampleUserId {
|
||||
return
|
||||
}
|
||||
|
||||
user, err := p.API.GetUser(newPost.UserId)
|
||||
if err != nil {
|
||||
p.API.LogError("failed to query user", "user_id", newPost.UserId)
|
||||
return
|
||||
}
|
||||
|
||||
channel, err := p.API.GetChannel(newPost.ChannelId)
|
||||
if err != nil {
|
||||
p.API.LogError("failed to query channel", "channel_id", newPost.ChannelId)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := p.API.CreatePost(&model.Post{
|
||||
UserId: p.sampleUserId,
|
||||
ChannelId: p.sampleChannelIds[channel.TeamId],
|
||||
Message: fmt.Sprintf(
|
||||
"MessageHasBeenUpdated in ~%s by @%s",
|
||||
channel.Name,
|
||||
user.Username,
|
||||
),
|
||||
}); err != nil {
|
||||
p.API.LogError(
|
||||
"failed to post MessageHasBeenUpdated message",
|
||||
"channel_id", channel.Id,
|
||||
"user_id", user.Id,
|
||||
"error", err.Error(),
|
||||
)
|
||||
}
|
||||
}
|
Reference in a new issue