command_channel_purpose.go 2.5 KB
Newer Older
1 2 3 4 5 6 7
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.

package app

import (
	goi18n "github.com/nicksnyder/go-i18n/i18n"
8 9

	"github.com/mattermost/mattermost-server/model"
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
)

type PurposeProvider struct {
}

const (
	CMD_PURPOSE = "purpose"
)

func init() {
	RegisterCommandProvider(&PurposeProvider{})
}

func (me *PurposeProvider) GetTrigger() string {
	return CMD_PURPOSE
}

27
func (me *PurposeProvider) GetCommand(a *App, T goi18n.TranslateFunc) *model.Command {
28 29 30 31 32 33 34 35 36
	return &model.Command{
		Trigger:          CMD_PURPOSE,
		AutoComplete:     true,
		AutoCompleteDesc: T("api.command_channel_purpose.desc"),
		AutoCompleteHint: T("api.command_channel_purpose.hint"),
		DisplayName:      T("api.command_channel_purpose.name"),
	}
}

37 38
func (me *PurposeProvider) DoCommand(a *App, args *model.CommandArgs, message string) *model.CommandResponse {
	channel, err := a.GetChannel(args.ChannelId)
39
	if err != nil {
40 41 42 43
		return &model.CommandResponse{
			Text:         args.T("api.command_channel_purpose.channel.app_error"),
			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
		}
44 45
	}

46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
	switch channel.Type {
	case model.CHANNEL_OPEN:
		if !a.SessionHasPermissionToChannel(args.Session, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) {
			return &model.CommandResponse{
				Text:         args.T("api.command_channel_purpose.permission.app_error"),
				ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
			}
		}
	case model.CHANNEL_PRIVATE:
		if !a.SessionHasPermissionToChannel(args.Session, args.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) {
			return &model.CommandResponse{
				Text:         args.T("api.command_channel_purpose.permission.app_error"),
				ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
			}
		}
	default:
		return &model.CommandResponse{
			Text:         args.T("api.command_channel_purpose.direct_group.app_error"),
			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
		}
66 67 68
	}

	if len(message) == 0 {
69 70 71 72
		return &model.CommandResponse{
			Text:         args.T("api.command_channel_purpose.message.app_error"),
			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
		}
73 74 75 76 77 78 79
	}

	patch := &model.ChannelPatch{
		Purpose: new(string),
	}
	*patch.Purpose = message

80
	_, err = a.PatchChannel(channel, patch, args.UserId)
81
	if err != nil {
82 83 84 85
		return &model.CommandResponse{
			Text:         args.T("api.command_channel_purpose.update_channel.app_error"),
			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
		}
86 87 88 89
	}

	return &model.CommandResponse{}
}