118 lines
2.7 KiB
Go
118 lines
2.7 KiB
Go
package router
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"ticket-pimp/internal/controller"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
)
|
|
|
|
func (c *client) CreateRepoHandler(repoNameMinLength int) Command {
|
|
const (
|
|
repoType = "repo_type"
|
|
projectRepo = "project_repo"
|
|
buildRepo = "build_repo"
|
|
nameOption = "repo_name"
|
|
)
|
|
|
|
return Command{
|
|
Command: discordgo.ApplicationCommand{
|
|
Name: "repo",
|
|
Description: "Creates repository of selected type. Name used for projects channels only",
|
|
Options: []*discordgo.ApplicationCommandOption{
|
|
{
|
|
Type: discordgo.ApplicationCommandOptionString,
|
|
Name: repoType,
|
|
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: nameOption,
|
|
Description: "Type the repository's name",
|
|
Required: false,
|
|
MinLength: &repoNameMinLength,
|
|
},
|
|
},
|
|
},
|
|
Handler: c.createRepoHandler,
|
|
}
|
|
}
|
|
|
|
func (c *client) createRepoHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
|
const (
|
|
repoType = "repo_type"
|
|
projectRepo = "project_repo"
|
|
buildRepo = "build_repo"
|
|
nameOption = "repo_name"
|
|
)
|
|
|
|
// Определение переменной для ответа
|
|
var result string = "unexpected result"
|
|
|
|
// 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
|
|
}
|
|
|
|
// Creating request:
|
|
var req controller.GitRequest
|
|
name, insertedValueNotNil := optionMap[nameOption]
|
|
isBuild := optionMap[repoType]
|
|
switch isBuild.StringValue() {
|
|
case buildRepo:
|
|
req.IsBuildGit = true
|
|
case projectRepo:
|
|
req.IsBuildGit = false
|
|
}
|
|
dchan, err := s.Channel(i.ChannelID)
|
|
|
|
if err != nil {
|
|
log.Printf("error while identifying channel: %v", err)
|
|
} else {
|
|
|
|
if dchan.ParentID == c.conf.IsProjectChannel {
|
|
req.ChannelID = dchan.ID
|
|
if insertedValueNotNil {
|
|
req.InsertedName = name.StringValue()
|
|
}
|
|
} else {
|
|
req.ChannelID = ""
|
|
if insertedValueNotNil {
|
|
req.InsertedName = name.StringValue()
|
|
}
|
|
}
|
|
}
|
|
|
|
// Making request:
|
|
resp := c.controller.CreateGit(context.TODO(), req)
|
|
if resp.Project == nil {
|
|
if resp.Message != nil {
|
|
result = resp.Message.Error()
|
|
}
|
|
} else {
|
|
|
|
result = resp.Project.DiscordString()
|
|
if resp.Message != nil {
|
|
result += "Errors: " + resp.Message.Error()
|
|
}
|
|
|
|
}
|
|
c.defaultFollowUp(result, s, i)
|
|
}
|