github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/slashcommands/command_channel_rename.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 RenameProvider struct { 14 } 15 16 const ( 17 CmdRename = "rename" 18 ) 19 20 func init() { 21 app.RegisterCommandProvider(&RenameProvider{}) 22 } 23 24 func (*RenameProvider) GetTrigger() string { 25 return CmdRename 26 } 27 28 func (*RenameProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Command { 29 renameAutocompleteData := model.NewAutocompleteData(CmdRename, T("api.command_channel_rename.hint"), T("api.command_channel_rename.desc")) 30 renameAutocompleteData.AddTextArgument(T("api.command_channel_rename.hint"), "[text]", "") 31 return &model.Command{ 32 Trigger: CmdRename, 33 AutoComplete: true, 34 AutoCompleteDesc: T("api.command_channel_rename.desc"), 35 AutoCompleteHint: T("api.command_channel_rename.hint"), 36 DisplayName: T("api.command_channel_rename.name"), 37 AutocompleteData: renameAutocompleteData, 38 } 39 } 40 41 func (*RenameProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse { 42 channel, err := a.GetChannel(args.ChannelId) 43 if err != nil { 44 return &model.CommandResponse{ 45 Text: args.T("api.command_channel_rename.channel.app_error"), 46 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 47 } 48 } 49 50 switch channel.Type { 51 case model.CHANNEL_OPEN: 52 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) { 53 return &model.CommandResponse{ 54 Text: args.T("api.command_channel_rename.permission.app_error"), 55 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 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_rename.permission.app_error"), 62 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 63 } 64 } 65 default: 66 return &model.CommandResponse{Text: args.T("api.command_channel_rename.direct_group.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 67 } 68 69 if message == "" { 70 return &model.CommandResponse{ 71 Text: args.T("api.command_channel_rename.message.app_error"), 72 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 73 } 74 } else if len(message) > model.CHANNEL_NAME_MAX_LENGTH { 75 return &model.CommandResponse{ 76 Text: args.T("api.command_channel_rename.too_long.app_error", map[string]interface{}{ 77 "Length": model.CHANNEL_NAME_MAX_LENGTH, 78 }), 79 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 80 } 81 } else if len(message) < model.CHANNEL_NAME_MIN_LENGTH { 82 return &model.CommandResponse{ 83 Text: args.T("api.command_channel_rename.too_short.app_error", map[string]interface{}{ 84 "Length": model.CHANNEL_NAME_MIN_LENGTH, 85 }), 86 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 87 } 88 } 89 90 patch := &model.ChannelPatch{ 91 DisplayName: new(string), 92 } 93 *patch.DisplayName = message 94 95 _, err = a.PatchChannel(c, channel, patch, args.UserId) 96 if err != nil { 97 return &model.CommandResponse{ 98 Text: args.T("api.command_channel_rename.update_channel.app_error"), 99 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 100 } 101 } 102 103 return &model.CommandResponse{} 104 }