This commit is contained in:
parent
552664268b
commit
e19f987c4e
@ -14,4 +14,5 @@ type ChannelService interface {
|
|||||||
DeleteChannel(c Channel) error
|
DeleteChannel(c Channel) error
|
||||||
GuildChannels(g Guild) ([]Channel, error)
|
GuildChannels(g Guild) ([]Channel, error)
|
||||||
UpdateChannel(c Channel) (Channel, error)
|
UpdateChannel(c Channel) (Channel, error)
|
||||||
|
GetOrCreateChannel(id string, guild_id string) (Channel, error)
|
||||||
}
|
}
|
||||||
|
|||||||
1
go.mod
1
go.mod
@ -9,4 +9,5 @@ require (
|
|||||||
github.com/golang-migrate/migrate v3.5.4+incompatible // indirect
|
github.com/golang-migrate/migrate v3.5.4+incompatible // indirect
|
||||||
github.com/golang-migrate/migrate/v4 v4.14.1
|
github.com/golang-migrate/migrate/v4 v4.14.1
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
|
github.com/lib/pq v1.8.0
|
||||||
)
|
)
|
||||||
|
|||||||
1
guild.go
1
guild.go
@ -24,4 +24,5 @@ type GuildService interface {
|
|||||||
Role(id string) (Role, error)
|
Role(id string) (Role, error)
|
||||||
UpdateRole(r Role) (Role, error)
|
UpdateRole(r Role) (Role, error)
|
||||||
DeleteRole(r 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
|
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)
|
_, err := s.db.Exec(queryString, r.ID)
|
||||||
return err
|
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)
|
_, err := s.db.Exec(queryString, u.ID, u.SteamID, u.IsActive, u.IsStaff, u.IsAdmin)
|
||||||
return u, err
|
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
|
||||||
|
}
|
||||||
|
|||||||
63
internal/exts/requests/requests.go
Normal file
63
internal/exts/requests/requests.go
Normal file
@ -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
|
package geeksbot
|
||||||
|
|
||||||
import "database/sql"
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type Message struct {
|
type Message struct {
|
||||||
ID string
|
ID string
|
||||||
CreatedAt int64
|
CreatedAt time.Time
|
||||||
ModifiedAt sql.NullTime
|
ModifiedAt sql.NullTime
|
||||||
Content string
|
Content string
|
||||||
PreviousContent []string
|
PreviousContent []string
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user