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