github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/app/slashcommands/command_join.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 JoinProvider struct { 16 } 17 18 const ( 19 CmdJoin = "join" 20 ) 21 22 func init() { 23 app.RegisterCommandProvider(&JoinProvider{}) 24 } 25 26 func (*JoinProvider) GetTrigger() string { 27 return CmdJoin 28 } 29 30 func (*JoinProvider) GetCommand(a *app.App, T goi18n.TranslateFunc) *model.Command { 31 return &model.Command{ 32 Trigger: CmdJoin, 33 AutoComplete: true, 34 AutoCompleteDesc: T("api.command_join.desc"), 35 AutoCompleteHint: T("api.command_join.hint"), 36 DisplayName: T("api.command_join.name"), 37 } 38 } 39 40 func (*JoinProvider) DoCommand(a *app.App, args *model.CommandArgs, message string) *model.CommandResponse { 41 channelName := message 42 43 if strings.HasPrefix(message, "~") { 44 channelName = message[1:] 45 } 46 47 channel, err := a.Srv().Store.Channel().GetByName(args.TeamId, channelName, true) 48 if err != nil { 49 return &model.CommandResponse{Text: args.T("api.command_join.list.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 50 } 51 52 if channel.Name != channelName { 53 return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: args.T("api.command_join.missing.app_error")} 54 } 55 56 switch channel.Type { 57 case model.CHANNEL_OPEN: 58 if !a.HasPermissionToChannel(args.UserId, channel.Id, model.PERMISSION_JOIN_PUBLIC_CHANNELS) { 59 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 60 } 61 case model.CHANNEL_PRIVATE: 62 if !a.HasPermissionToChannel(args.UserId, channel.Id, model.PERMISSION_READ_CHANNEL) { 63 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 64 } 65 default: 66 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 67 } 68 69 if appErr := a.JoinChannel(channel, args.UserId); appErr != nil { 70 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 71 } 72 73 team, appErr := a.GetTeam(channel.TeamId) 74 if appErr != nil { 75 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 76 } 77 78 return &model.CommandResponse{GotoLocation: args.SiteURL + "/" + team.Name + "/channels/" + channel.Name} 79 }