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 }