github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/slashcommands/command_channel_header.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 "context" 8 9 "github.com/masterhung0112/hk_server/v5/app" 10 "github.com/masterhung0112/hk_server/v5/app/request" 11 "github.com/masterhung0112/hk_server/v5/model" 12 "github.com/masterhung0112/hk_server/v5/shared/i18n" 13 ) 14 15 type HeaderProvider struct { 16 } 17 18 const ( 19 CmdHeader = "header" 20 ) 21 22 func init() { 23 app.RegisterCommandProvider(&HeaderProvider{}) 24 } 25 26 func (*HeaderProvider) GetTrigger() string { 27 return CmdHeader 28 } 29 30 func (*HeaderProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Command { 31 return &model.Command{ 32 Trigger: CmdHeader, 33 AutoComplete: true, 34 AutoCompleteDesc: T("api.command_channel_header.desc"), 35 AutoCompleteHint: T("api.command_channel_header.hint"), 36 DisplayName: T("api.command_channel_header.name"), 37 } 38 } 39 40 func (*HeaderProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse { 41 channel, err := a.GetChannel(args.ChannelId) 42 if err != nil { 43 return &model.CommandResponse{ 44 Text: args.T("api.command_channel_header.channel.app_error"), 45 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 46 } 47 } 48 49 switch channel.Type { 50 case model.CHANNEL_OPEN: 51 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) { 52 return &model.CommandResponse{ 53 Text: args.T("api.command_channel_header.permission.app_error"), 54 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 55 } 56 } 57 58 case model.CHANNEL_PRIVATE: 59 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) { 60 return &model.CommandResponse{ 61 Text: args.T("api.command_channel_header.permission.app_error"), 62 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 63 } 64 } 65 66 case model.CHANNEL_GROUP, model.CHANNEL_DIRECT: 67 // Modifying the header is not linked to any specific permission for group/dm channels, so just check for membership. 68 var channelMember *model.ChannelMember 69 channelMember, err = a.GetChannelMember(context.Background(), args.ChannelId, args.UserId) 70 if err != nil || channelMember == nil { 71 return &model.CommandResponse{ 72 Text: args.T("api.command_channel_header.permission.app_error"), 73 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 74 } 75 } 76 77 default: 78 return &model.CommandResponse{ 79 Text: args.T("api.command_channel_header.permission.app_error"), 80 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 81 } 82 } 83 84 if message == "" { 85 return &model.CommandResponse{ 86 Text: args.T("api.command_channel_header.message.app_error"), 87 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 88 } 89 } 90 91 patch := &model.ChannelPatch{ 92 Header: new(string), 93 } 94 *patch.Header = message 95 96 _, err = a.PatchChannel(c, channel, patch, args.UserId) 97 if err != nil { 98 text := args.T("api.command_channel_header.update_channel.app_error") 99 if err.Id == "model.channel.is_valid.header.app_error" { 100 text = args.T("api.command_channel_header.update_channel.max_length", map[string]interface{}{ 101 "MaxLength": model.CHANNEL_HEADER_MAX_RUNES, 102 }) 103 } 104 105 return &model.CommandResponse{ 106 Text: text, 107 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 108 } 109 } 110 111 return &model.CommandResponse{} 112 }