github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/slashcommands/command_channel_purpose.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 "github.com/masterhung0112/hk_server/v5/app" 8 "github.com/masterhung0112/hk_server/v5/app/request" 9 "github.com/masterhung0112/hk_server/v5/model" 10 "github.com/masterhung0112/hk_server/v5/shared/i18n" 11 ) 12 13 type PurposeProvider struct { 14 } 15 16 const ( 17 CmdPurpose = "purpose" 18 ) 19 20 func init() { 21 app.RegisterCommandProvider(&PurposeProvider{}) 22 } 23 24 func (*PurposeProvider) GetTrigger() string { 25 return CmdPurpose 26 } 27 28 func (*PurposeProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Command { 29 return &model.Command{ 30 Trigger: CmdPurpose, 31 AutoComplete: true, 32 AutoCompleteDesc: T("api.command_channel_purpose.desc"), 33 AutoCompleteHint: T("api.command_channel_purpose.hint"), 34 DisplayName: T("api.command_channel_purpose.name"), 35 } 36 } 37 38 func (*PurposeProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse { 39 channel, err := a.GetChannel(args.ChannelId) 40 if err != nil { 41 return &model.CommandResponse{ 42 Text: args.T("api.command_channel_purpose.channel.app_error"), 43 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 44 } 45 } 46 47 switch channel.Type { 48 case model.CHANNEL_OPEN: 49 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) { 50 return &model.CommandResponse{ 51 Text: args.T("api.command_channel_purpose.permission.app_error"), 52 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 53 } 54 } 55 case model.CHANNEL_PRIVATE: 56 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) { 57 return &model.CommandResponse{ 58 Text: args.T("api.command_channel_purpose.permission.app_error"), 59 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 60 } 61 } 62 default: 63 return &model.CommandResponse{ 64 Text: args.T("api.command_channel_purpose.direct_group.app_error"), 65 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 66 } 67 } 68 69 if message == "" { 70 return &model.CommandResponse{ 71 Text: args.T("api.command_channel_purpose.message.app_error"), 72 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 73 } 74 } 75 76 patch := &model.ChannelPatch{ 77 Purpose: new(string), 78 } 79 *patch.Purpose = message 80 81 _, err = a.PatchChannel(c, channel, patch, args.UserId) 82 if err != nil { 83 text := args.T("api.command_channel_purpose.update_channel.app_error") 84 if err.Id == "model.channel.is_valid.purpose.app_error" { 85 text = args.T("api.command_channel_purpose.update_channel.max_length", map[string]interface{}{ 86 "MaxLength": model.CHANNEL_PURPOSE_MAX_RUNES, 87 }) 88 } 89 90 return &model.CommandResponse{ 91 Text: text, 92 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 93 } 94 } 95 96 return &model.CommandResponse{} 97 }