github.com/adacta-ru/mattermost-server/v6@v6.0.0/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  	goi18n "github.com/mattermost/go-i18n/i18n"
     8  
     9  	"github.com/adacta-ru/mattermost-server/v6/app"
    10  	"github.com/adacta-ru/mattermost-server/v6/model"
    11  )
    12  
    13  type RenameProvider struct {
    14  }
    15  
    16  const (
    17  	CMD_RENAME = "rename"
    18  )
    19  
    20  func init() {
    21  	app.RegisterCommandProvider(&RenameProvider{})
    22  }
    23  
    24  func (*RenameProvider) GetTrigger() string {
    25  	return CMD_RENAME
    26  }
    27  
    28  func (*RenameProvider) GetCommand(a *app.App, T goi18n.TranslateFunc) *model.Command {
    29  	renameAutocompleteData := model.NewAutocompleteData(CMD_RENAME, 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:          CMD_RENAME,
    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, 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 len(message) == 0 {
    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(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  }