add request command

development v0.0.45
DustyP 5 years ago
parent 552664268b
commit e19f987c4e

@ -14,4 +14,5 @@ type ChannelService interface {
DeleteChannel(c Channel) error
GuildChannels(g Guild) ([]Channel, error)
UpdateChannel(c Channel) (Channel, error)
GetOrCreateChannel(id string, guild_id string) (Channel, error)
}

@ -9,4 +9,5 @@ require (
github.com/golang-migrate/migrate v3.5.4+incompatible // indirect
github.com/golang-migrate/migrate/v4 v4.14.1
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/lib/pq v1.8.0
)

@ -24,4 +24,5 @@ type GuildService interface {
Role(id string) (Role, error)
UpdateRole(r Role) (Role, error)
DeleteRole(r Role) error
GetOrCreateGuild(id string) (Guild, error)
}

@ -66,3 +66,21 @@ func (s channelService) GuildChannels(g geeksbot.Guild) ([]geeksbot.Channel, err
}
return channels, nil
}
func (s channelService) GetOrCreateChannel(id string, guild_id string) (geeksbot.Channel, error) {
channel, err := s.Channel(id)
if err == sql.ErrNoRows {
guild, err := GuildService.GetOrCreateGuild(guild_id)
if err != nil {
return geeksbot.Channel{}, err
}
channel, err = s.CreateChannel(geeksbot.Channel{
ID: id,
Guild: guild,
Admin: false,
Default: false,
NewPatron: false,
})
}
return channel, err
}

@ -99,3 +99,15 @@ func (s guildService) DeleteRole(r geeksbot.Role) error {
_, err := s.db.Exec(queryString, r.ID)
return err
}
func (s guildService) GetOrCreateGuild(id string) (geeksbot.Guild, error) {
guild, err := s.Guild(id)
if err == sql.ErrNoRows {
guild = geeksbot.Guild{
ID: id,
Prefixes: []string{},
}
guild, err = s.CreateGuild(guild)
}
return guild, err
}

@ -36,3 +36,16 @@ func (s userService) UpdateUser(u geeksbot.User) (geeksbot.User, error) {
_, err := s.db.Exec(queryString, u.ID, u.SteamID, u.IsActive, u.IsStaff, u.IsAdmin)
return u, err
}
func (s userService) GetOrCreateUser(id string) (geeksbot.User, error) {
user, err := s.User(id)
if err == sql.ErrNoRows {
user, err = s.CreateUser(geeksbot.User{
ID: id,
IsActive: true,
IsAdmin: false,
IsStaff: false,
})
}
return user, err
}

@ -0,0 +1,63 @@
package requests
import (
"strconv"
"strings"
"github.com/dustinpianalto/disgoman"
"github.com/dustinpianalto/geeksbot"
"github.com/dustinpianalto/geeksbot/internal/discord_utils"
"github.com/dustinpianalto/geeksbot/internal/services"
)
var RequestCommand = &disgoman.Command{
Name: "request",
Aliases: nil,
Description: "Submit a request for the guild staff",
OwnerOnly: false,
Hidden: false,
RequiredPermissions: 0,
Invoke: requestCommandFunc,
}
func requestCommandFunc(ctx disgoman.Context, args []string) {
guild, err := services.GuildService.GetOrCreateGuild(ctx.Guild.ID)
if err != nil {
discord_utils.SendErrorMessage(ctx, "Error getting Guild from the database", err)
return
}
requestMsg := strings.Join(args, " ")
author, err := services.UserService.GetOrCreateUser(ctx.Message.Author.ID)
if err != nil {
discord_utils.SendErrorMessage(ctx, "Error creating the request", err)
return
}
channel, err := services.ChannelService.GetOrCreateChannel(ctx.Message.ChannelID, ctx.Guild.ID)
if err != nil {
discord_utils.SendErrorMessage(ctx, "Error creating the request", err)
return
}
int64ID, _ := strconv.ParseInt(ctx.Message.ID, 10, 64)
s := discord_utils.ParseSnowflake(int64ID)
message, err := services.MessageService.CreateMessage(geeksbot.Message{
ID: ctx.Message.ID,
CreatedAt: s.CreationTime,
Content: ctx.Message.Content,
Channel: channel,
Author: author,
})
request := geeksbot.Request{
Author: author,
Channel: channel,
Guild: guild,
Content: requestMsg,
RequestedAt: s.CreationTime,
Completed: false,
Message: message,
}
request, err = services.RequestService.CreateRequest(request)
if err != nil {
discord_utils.SendErrorMessage(ctx, "Error creating the request", err)
return
}
}

@ -1,10 +1,13 @@
package geeksbot
import "database/sql"
import (
"database/sql"
"time"
)
type Message struct {
ID string
CreatedAt int64
CreatedAt time.Time
ModifiedAt sql.NullTime
Content string
PreviousContent []string

@ -15,4 +15,5 @@ type UserService interface {
CreateUser(u User) (User, error)
DeleteUser(u User) error
UpdateUser(u User) (User, error)
GetOrCreateUser(id string) (User, error)
}

Loading…
Cancel
Save