github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/app/command_join.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "strings" 8 9 goi18n "github.com/mattermost/go-i18n/i18n" 10 "github.com/mattermost/mattermost-server/v5/model" 11 ) 12 13 type JoinProvider struct { 14 } 15 16 const ( 17 CMD_JOIN = "join" 18 ) 19 20 func init() { 21 RegisterCommandProvider(&JoinProvider{}) 22 } 23 24 func (me *JoinProvider) GetTrigger() string { 25 return CMD_JOIN 26 } 27 28 func (me *JoinProvider) GetCommand(a *App, T goi18n.TranslateFunc) *model.Command { 29 return &model.Command{ 30 Trigger: CMD_JOIN, 31 AutoComplete: true, 32 AutoCompleteDesc: T("api.command_join.desc"), 33 AutoCompleteHint: T("api.command_join.hint"), 34 DisplayName: T("api.command_join.name"), 35 } 36 } 37 38 func (me *JoinProvider) DoCommand(a *App, args *model.CommandArgs, message string) *model.CommandResponse { 39 channelName := message 40 41 if strings.HasPrefix(message, "~") { 42 channelName = message[1:] 43 } 44 45 channel, err := a.Srv().Store.Channel().GetByName(args.TeamId, channelName, true) 46 if err != nil { 47 return &model.CommandResponse{Text: args.T("api.command_join.list.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 48 } 49 50 if channel.Name != channelName { 51 return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: args.T("api.command_join.missing.app_error")} 52 } 53 54 switch channel.Type { 55 case model.CHANNEL_OPEN: 56 if !a.HasPermissionToChannel(args.UserId, channel.Id, model.PERMISSION_JOIN_PUBLIC_CHANNELS) { 57 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 58 } 59 case model.CHANNEL_PRIVATE: 60 if !a.HasPermissionToChannel(args.UserId, channel.Id, model.PERMISSION_READ_CHANNEL) { 61 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 62 } 63 default: 64 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 65 } 66 67 if appErr := a.JoinChannel(channel, args.UserId); appErr != nil { 68 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 69 } 70 71 team, appErr := a.GetTeam(channel.TeamId) 72 if appErr != nil { 73 return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 74 } 75 76 return &model.CommandResponse{GotoLocation: args.SiteURL + "/" + team.Name + "/channels/" + channel.Name} 77 }