github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/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 "github.com/masterhung0112/hk_server/v5/app" 10 "github.com/masterhung0112/hk_server/v5/app/request" 11 "github.com/masterhung0112/hk_server/v5/model" 12 "github.com/masterhung0112/hk_server/v5/shared/i18n" 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 i18n.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, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse { 41 channelName := strings.ToLower(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(c, 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 }