github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/slashcommands/command_leave.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 "github.com/masterhung0112/hk_server/v5/app" 8 "github.com/masterhung0112/hk_server/v5/app/request" 9 "github.com/masterhung0112/hk_server/v5/model" 10 "github.com/masterhung0112/hk_server/v5/shared/i18n" 11 ) 12 13 type LeaveProvider struct { 14 } 15 16 const ( 17 CmdLeave = "leave" 18 ) 19 20 func init() { 21 app.RegisterCommandProvider(&LeaveProvider{}) 22 } 23 24 func (*LeaveProvider) GetTrigger() string { 25 return CmdLeave 26 } 27 28 func (*LeaveProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Command { 29 return &model.Command{ 30 Trigger: CmdLeave, 31 AutoComplete: true, 32 AutoCompleteDesc: T("api.command_leave.desc"), 33 DisplayName: T("api.command_leave.name"), 34 } 35 } 36 37 func (*LeaveProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse { 38 var channel *model.Channel 39 var noChannelErr *model.AppError 40 if channel, noChannelErr = a.GetChannel(args.ChannelId); noChannelErr != nil { 41 return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 42 } 43 44 team, err := a.GetTeam(args.TeamId) 45 if err != nil { 46 return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 47 } 48 49 err = a.LeaveChannel(c, args.ChannelId, args.UserId) 50 if err != nil { 51 if channel.Name == model.DEFAULT_CHANNEL { 52 return &model.CommandResponse{Text: args.T("api.channel.leave.default.app_error", map[string]interface{}{"Channel": model.DEFAULT_CHANNEL}), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 53 } 54 return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 55 } 56 57 member, err := a.GetTeamMember(team.Id, args.UserId) 58 if err != nil || member.DeleteAt != 0 { 59 return &model.CommandResponse{GotoLocation: args.SiteURL + "/"} 60 } 61 62 user, err := a.GetUser(args.UserId) 63 if err != nil { 64 return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 65 } 66 67 if user.IsGuest() { 68 members, err := a.GetChannelMembersForUser(team.Id, args.UserId) 69 if err != nil || len(*members) == 0 { 70 return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 71 } 72 channel, err := a.GetChannel((*members)[0].ChannelId) 73 if err != nil { 74 return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 75 } 76 return &model.CommandResponse{GotoLocation: args.SiteURL + "/" + team.Name + "/channels/" + channel.Name} 77 } 78 79 return &model.CommandResponse{GotoLocation: args.SiteURL + "/" + team.Name + "/channels/" + model.DEFAULT_CHANNEL} 80 }