github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/app/slashcommands/command_mute.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package slashcommands
     5  
     6  import (
     7  	"strings"
     8  
     9  	goi18n "github.com/mattermost/go-i18n/i18n"
    10  
    11  	"github.com/mattermost/mattermost-server/v5/app"
    12  	"github.com/mattermost/mattermost-server/v5/model"
    13  )
    14  
    15  type MuteProvider struct {
    16  }
    17  
    18  const (
    19  	CmdMute = "mute"
    20  )
    21  
    22  func init() {
    23  	app.RegisterCommandProvider(&MuteProvider{})
    24  }
    25  
    26  func (*MuteProvider) GetTrigger() string {
    27  	return CmdMute
    28  }
    29  
    30  func (*MuteProvider) GetCommand(a *app.App, T goi18n.TranslateFunc) *model.Command {
    31  	return &model.Command{
    32  		Trigger:          CmdMute,
    33  		AutoComplete:     true,
    34  		AutoCompleteDesc: T("api.command_mute.desc"),
    35  		AutoCompleteHint: T("api.command_mute.hint"),
    36  		DisplayName:      T("api.command_mute.name"),
    37  	}
    38  }
    39  
    40  func (*MuteProvider) DoCommand(a *app.App, args *model.CommandArgs, message string) *model.CommandResponse {
    41  	var channel *model.Channel
    42  	var noChannelErr *model.AppError
    43  
    44  	if channel, noChannelErr = a.GetChannel(args.ChannelId); noChannelErr != nil {
    45  		return &model.CommandResponse{Text: args.T("api.command_mute.no_channel.error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    46  	}
    47  
    48  	channelName := ""
    49  	splitMessage := strings.Split(message, " ")
    50  	// Overwrite channel with channel-handle if set
    51  	if strings.HasPrefix(message, "~") {
    52  		channelName = splitMessage[0][1:]
    53  	} else {
    54  		channelName = splitMessage[0]
    55  	}
    56  
    57  	if channelName != "" && message != "" {
    58  		channel, _ = a.Srv().Store.Channel().GetByName(channel.TeamId, channelName, true)
    59  
    60  		if channel == nil {
    61  			return &model.CommandResponse{Text: args.T("api.command_mute.error", map[string]interface{}{"Channel": channelName}), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    62  		}
    63  	}
    64  
    65  	channelMember, err := a.ToggleMuteChannel(channel.Id, args.UserId)
    66  	if err != nil {
    67  		return &model.CommandResponse{Text: args.T("api.command_mute.not_member.error", map[string]interface{}{"Channel": channelName}), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    68  	}
    69  
    70  	// Direct and Group messages won't have a nice channel title, omit it
    71  	if channel.Type == model.CHANNEL_DIRECT || channel.Type == model.CHANNEL_GROUP {
    72  		if channelMember.NotifyProps[model.MARK_UNREAD_NOTIFY_PROP] == model.CHANNEL_NOTIFY_MENTION {
    73  			return &model.CommandResponse{Text: args.T("api.command_mute.success_mute_direct_msg"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    74  		}
    75  		return &model.CommandResponse{Text: args.T("api.command_mute.success_unmute_direct_msg"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    76  	}
    77  
    78  	if channelMember.NotifyProps[model.MARK_UNREAD_NOTIFY_PROP] == model.CHANNEL_NOTIFY_MENTION {
    79  		return &model.CommandResponse{Text: args.T("api.command_mute.success_mute", map[string]interface{}{"Channel": channel.DisplayName}), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    80  	}
    81  	return &model.CommandResponse{Text: args.T("api.command_mute.success_unmute", map[string]interface{}{"Channel": channel.DisplayName}), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    82  }