110 lines
2.6 KiB
Go
110 lines
2.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
)
|
|
|
|
func (h *router) CreateRepoHandler(repoNameMinLength int) route {
|
|
const (
|
|
projectRepo = "project_repo"
|
|
buildRepo = "build_repo"
|
|
)
|
|
|
|
return route{
|
|
Command: discordgo.ApplicationCommand{
|
|
Name: "repo",
|
|
Description: "Command for repository creation",
|
|
Options: []*discordgo.ApplicationCommandOption{
|
|
{
|
|
Type: discordgo.ApplicationCommandOptionString,
|
|
Name: "repo_type",
|
|
Description: "The type of repo",
|
|
Required: true,
|
|
Choices: []*discordgo.ApplicationCommandOptionChoice{
|
|
{
|
|
Name: "Unity project repo",
|
|
Value: projectRepo,
|
|
},
|
|
{
|
|
Name: "XCode build repo",
|
|
Value: buildRepo,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Type: discordgo.ApplicationCommandOptionString,
|
|
Name: "repo_name",
|
|
Description: "Type the repository's name",
|
|
Required: false,
|
|
MinLength: &repoNameMinLength,
|
|
},
|
|
},
|
|
},
|
|
Handler: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
|
var result string
|
|
// Access options in the order provided by the user.
|
|
options := i.ApplicationCommandData().Options
|
|
|
|
// Or convert the slice into a map
|
|
optionMap := make(map[string]*discordgo.ApplicationCommandInteractionDataOption, len(options))
|
|
for _, opt := range options {
|
|
optionMap[opt.Name] = opt
|
|
}
|
|
|
|
var str string = ""
|
|
|
|
project, err := h.controller.GetProjectByChannelID(context.TODO(), i.ChannelID)
|
|
if err != nil {
|
|
result = fmt.Sprintf("unable to retrieve project from db, error: %v", err)
|
|
} else {
|
|
var suffix string
|
|
if option, ok := optionMap["repo_type"]; ok {
|
|
switch option.Value {
|
|
case projectRepo:
|
|
suffix = ""
|
|
case buildRepo:
|
|
suffix = "-build"
|
|
}
|
|
}
|
|
|
|
if project == nil {
|
|
if option, ok := optionMap["repo_name"]; ok {
|
|
str = option.StringValue()
|
|
} else {
|
|
str = ""
|
|
}
|
|
} else {
|
|
str = project.ShortName
|
|
}
|
|
|
|
if str == "" {
|
|
result = "Ты, либо в проекте репо создавай, либо имя напиши, блет!"
|
|
} else {
|
|
str = str + suffix
|
|
|
|
// var g *domain.Git
|
|
|
|
g, err := h.controller.IGit.CreateRepo(str)
|
|
if err != nil {
|
|
result = fmt.Sprintf("error while repo creation: %v", err)
|
|
} else {
|
|
result = "🚀 " + g.HtmlUrl + " was created"
|
|
}
|
|
}
|
|
}
|
|
|
|
resp := &discordgo.InteractionResponse{
|
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
|
Data: &discordgo.InteractionResponseData{
|
|
Content: result,
|
|
},
|
|
}
|
|
|
|
s.InteractionRespond(i.Interaction, resp)
|
|
},
|
|
}
|
|
}
|