Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
623df1d55a | ||
|
|
489d96594c | ||
|
|
580eea3dfa | ||
|
|
7a8e7bf213 | ||
|
|
96e8388562 |
@@ -1,8 +1,10 @@
|
||||
package geeksbot
|
||||
|
||||
import "database/sql"
|
||||
|
||||
type Guild struct {
|
||||
ID string
|
||||
NewPatronMessage string
|
||||
NewPatronMessage sql.NullString
|
||||
Prefixes []string
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,8 @@ func ConnectDatabase(dbConnString string) {
|
||||
func(name string) ([]byte, error) {
|
||||
return migrations.Asset(name)
|
||||
})
|
||||
db, err := sql.Open("postgres", dbConnString)
|
||||
var err error
|
||||
db, err = sql.Open("postgres", dbConnString)
|
||||
if err != nil {
|
||||
log.Fatal(fmt.Errorf("Can't connect to the database: %w", err))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
BEGIN;
|
||||
ALTER TABLE users
|
||||
ALTER COLUMN active DROP NOT NULL,
|
||||
ALTER COLUMN staff DROP NOT NULL,
|
||||
ALTER COLUMN admin DROP NOT NULL;
|
||||
ALTER TABLE channels
|
||||
ALTER COLUMN guild_id DROP NOT NULL,
|
||||
ALTER COLUMN admin DROP NOT NULL,
|
||||
ALTER COLUMN default_channel DROP NOT NULL,
|
||||
ALTER COLUMN new_patron DROP NOT NULL;
|
||||
ALTER TABLE messages
|
||||
ALTER COLUMN created_at DROP NOT NULL,
|
||||
ALTER COLUMN content DROP NOT NULL,
|
||||
ALTER COLUMN channel_id DROP NOT NULL,
|
||||
ALTER COLUMN author_id DROP NOT NULL,
|
||||
ADD COLUMN embed json,
|
||||
ADD COLUMN previous_embeds json[];
|
||||
ALTER TABLE patreon_creators
|
||||
RENAME TO patreon_creator,
|
||||
ALTER COLUMN creator DROP NOT NULL,
|
||||
ALTER COLUMN link DROP NOT NULL,
|
||||
ALTER COLUMN guild_id DROP NOT NULL;
|
||||
ALTER TABLE patreon_tiers
|
||||
RENAME TO patreon_tier,
|
||||
ALTER COLUMN name DROP NOT NULL,
|
||||
ALTER COLUMN creator DROP NOT NULL,
|
||||
ALTER COLUMN role DROP NOT NULL;
|
||||
ALTER TABLE requests
|
||||
ALTER COLUMN author_id DROP NOT NULL,
|
||||
ALTER COLUMN channel_id DROP NOT NULL,
|
||||
ALTER COLUMN content DROP NOT NULL,
|
||||
ALTER COLUMN requested_at DROP NOT NULL,
|
||||
ALTER COLUMN completed DROP NOT NULL,
|
||||
ALTER COLUMN message_id DROP NOT NULL,
|
||||
ALTER COLUMN guild_id DROP NOT NULL;
|
||||
ALTER TABLE roles
|
||||
ALTER COLUMN role_type DROP NOT NULL,
|
||||
ALTER COLUMN guild_id DROP NOT NULL;
|
||||
ALTER TABLE servers
|
||||
ALTER COLUMN name DROP NOT NULL,
|
||||
ALTER COLUMN ip_address DROP NOT NULL,
|
||||
ALTER COLUMN port DROP NOT NULL,
|
||||
ALTER COLUMN password DROP NOT NULL,
|
||||
ALTER COLUMN guild_id DROP NOT NULL;
|
||||
COMMIT;
|
||||
@@ -0,0 +1,45 @@
|
||||
BEGIN;
|
||||
ALTER TABLE users
|
||||
ALTER COLUMN active SET NOT NULL,
|
||||
ALTER COLUMN staff SET NOT NULL,
|
||||
ALTER COLUMN admin SET NOT NULL;
|
||||
ALTER TABLE channels
|
||||
ALTER COLUMN guild_id SET NOT NULL,
|
||||
ALTER COLUMN admin SET NOT NULL,
|
||||
ALTER COLUMN default_channel SET NOT NULL,
|
||||
ALTER COLUMN new_patron SET NOT NULL;
|
||||
ALTER TABLE messages
|
||||
ALTER COLUMN created_at SET NOT NULL,
|
||||
ALTER COLUMN content SET NOT NULL,
|
||||
ALTER COLUMN channel_id SET NOT NULL,
|
||||
ALTER COLUMN author_id SET NOT NULL,
|
||||
DROP COLUMN embed,
|
||||
DROP COLUMN previous_embeds;
|
||||
ALTER TABLE patreon_creator
|
||||
RENAME TO patreon_creators,
|
||||
ALTER COLUMN creator SET NOT NULL,
|
||||
ALTER COLUMN link SET NOT NULL,
|
||||
ALTER COLUMN guild_id SET NOT NULL;
|
||||
ALTER TABLE patreon_tier
|
||||
RENAME TO patreon_tiers,
|
||||
ALTER COLUMN name SET NOT NULL,
|
||||
ALTER COLUMN creator SET NOT NULL,
|
||||
ALTER COLUMN role SET NOT NULL;
|
||||
ALTER TABLE requests
|
||||
ALTER COLUMN author_id SET NOT NULL,
|
||||
ALTER COLUMN channel_id SET NOT NULL,
|
||||
ALTER COLUMN content SET NOT NULL,
|
||||
ALTER COLUMN requested_at SET NOT NULL,
|
||||
ALTER COLUMN completed SET NOT NULL,
|
||||
ALTER COLUMN message_id SET NOT NULL,
|
||||
ALTER COLUMN guild_id SET NOT NULL;
|
||||
ALTER TABLE roles
|
||||
ALTER COLUMN role_type SET NOT NULL,
|
||||
ALTER COLUMN guild_id SET NOT NULL;
|
||||
ALTER TABLE servers
|
||||
ALTER COLUMN name SET NOT NULL,
|
||||
ALTER COLUMN ip_address SET NOT NULL,
|
||||
ALTER COLUMN port SET NOT NULL,
|
||||
ALTER COLUMN password SET NOT NULL,
|
||||
ALTER COLUMN guild_id SET NOT NULL;
|
||||
COMMIT;
|
||||
@@ -16,7 +16,7 @@ func (s requestService) Request(id int64) (geeksbot.Request, error) {
|
||||
var aID string
|
||||
var cID string
|
||||
var gID string
|
||||
var uID string
|
||||
var uID sql.NullString
|
||||
var mID string
|
||||
queryString := `SELECT id, author_id, channel_id, guild_id, content, requested_at, completed,
|
||||
completed_at, completed_by, message_id, completed_message
|
||||
@@ -39,10 +39,15 @@ func (s requestService) Request(id int64) (geeksbot.Request, error) {
|
||||
if err != nil {
|
||||
return geeksbot.Request{}, err
|
||||
}
|
||||
completedBy, err := UserService.User(uID)
|
||||
if !uID.Valid {
|
||||
r.CompletedBy = nil
|
||||
} else {
|
||||
completedBy, err := UserService.User(uID.String)
|
||||
if err != nil {
|
||||
return geeksbot.Request{}, err
|
||||
}
|
||||
r.CompletedBy = &completedBy
|
||||
}
|
||||
message, err := MessageService.Message(mID)
|
||||
if err != nil {
|
||||
return geeksbot.Request{}, err
|
||||
@@ -50,7 +55,6 @@ func (s requestService) Request(id int64) (geeksbot.Request, error) {
|
||||
r.Author = author
|
||||
r.Guild = guild
|
||||
r.Channel = channel
|
||||
r.CompletedBy = completedBy
|
||||
r.Message = message
|
||||
return r, nil
|
||||
}
|
||||
|
||||
+28
-12
@@ -14,10 +14,10 @@ type serverService struct {
|
||||
func (s serverService) ServerByID(id int) (geeksbot.Server, error) {
|
||||
var server geeksbot.Server
|
||||
var guildID string
|
||||
var aChanID string
|
||||
var iChanID string
|
||||
var iMsgID string
|
||||
var sMsgID string
|
||||
var aChanID sql.NullString
|
||||
var iChanID sql.NullString
|
||||
var iMsgID sql.NullString
|
||||
var sMsgID sql.NullString
|
||||
queryString := `SELECT id, name, ip_address, port, password, alerts_channel_id,
|
||||
guild_id, info_channel_id, info_message_id, settings_message_id
|
||||
FROM servers WHERE id = $1`
|
||||
@@ -31,27 +31,43 @@ func (s serverService) ServerByID(id int) (geeksbot.Server, error) {
|
||||
if err != nil {
|
||||
return geeksbot.Server{}, err
|
||||
}
|
||||
alertChannel, err := ChannelService.Channel(aChanID)
|
||||
if !aChanID.Valid {
|
||||
server.AlertsChannel = nil
|
||||
} else {
|
||||
alertChannel, err := ChannelService.Channel(aChanID.String)
|
||||
if err != nil {
|
||||
return geeksbot.Server{}, err
|
||||
}
|
||||
infoChannel, err := ChannelService.Channel(iChanID)
|
||||
server.AlertsChannel = &alertChannel
|
||||
}
|
||||
if !iChanID.Valid {
|
||||
server.InfoChannel = nil
|
||||
} else {
|
||||
infoChannel, err := ChannelService.Channel(iChanID.String)
|
||||
if err != nil {
|
||||
return geeksbot.Server{}, err
|
||||
}
|
||||
infoMessage, err := MessageService.Message(iMsgID)
|
||||
server.InfoChannel = &infoChannel
|
||||
}
|
||||
if !iMsgID.Valid {
|
||||
server.InfoMessage = nil
|
||||
} else {
|
||||
infoMessage, err := MessageService.Message(iMsgID.String)
|
||||
if err != nil {
|
||||
return geeksbot.Server{}, err
|
||||
}
|
||||
settingsMessage, err := MessageService.Message(sMsgID)
|
||||
server.InfoMessage = &infoMessage
|
||||
}
|
||||
if !sMsgID.Valid {
|
||||
server.SettingsMessage = nil
|
||||
} else {
|
||||
settingsMessage, err := MessageService.Message(sMsgID.String)
|
||||
if err != nil {
|
||||
return geeksbot.Server{}, err
|
||||
}
|
||||
server.SettingsMessage = &settingsMessage
|
||||
}
|
||||
server.Guild = guild
|
||||
server.AlertsChannel = alertChannel
|
||||
server.InfoChannel = infoChannel
|
||||
server.InfoMessage = infoMessage
|
||||
server.SettingsMessage = settingsMessage
|
||||
return server, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package discord_utils
|
||||
|
||||
import "github.com/dustinpianalto/disgoman"
|
||||
|
||||
func SendErrorMessage(ctx disgoman.Context, msg string, err error) {
|
||||
ctx.CommandManager.ErrorChannel <- disgoman.CommandError{
|
||||
Context: ctx,
|
||||
Message: msg,
|
||||
Error: err,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package guild
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/dustinpianalto/disgoman"
|
||||
"github.com/dustinpianalto/geeksbot"
|
||||
"github.com/dustinpianalto/geeksbot/internal/discord_utils"
|
||||
"github.com/dustinpianalto/geeksbot/internal/services"
|
||||
)
|
||||
|
||||
var AddPrefixCommand = &disgoman.Command{
|
||||
Name: "addPrefix",
|
||||
Aliases: []string{"ap"},
|
||||
Description: "Add a prefix for use in this guild.",
|
||||
OwnerOnly: false,
|
||||
Hidden: false,
|
||||
RequiredPermissions: disgoman.PermissionManageServer,
|
||||
Invoke: addPrefixCommandFunc,
|
||||
}
|
||||
|
||||
func addPrefixCommandFunc(ctx disgoman.Context, args []string) {
|
||||
if len(args) == 0 {
|
||||
discord_utils.SendErrorMessage(ctx, "Please include at least one prefix to add", nil)
|
||||
return
|
||||
}
|
||||
guild, err := services.GuildService.Guild(ctx.Guild.ID)
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Guild not configured, adding new guild to the database", nil)
|
||||
guild = geeksbot.Guild{
|
||||
ID: ctx.Guild.ID,
|
||||
Prefixes: args,
|
||||
}
|
||||
guild, err = services.GuildService.CreateGuild(guild)
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Error adding guild to database.", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
guild.Prefixes = append(guild.Prefixes, args...)
|
||||
guild, err = services.GuildService.UpdateGuild(guild)
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Error adding prefixes to guild.", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
_, err = ctx.Send(fmt.Sprintf("Prefixes Updates.\nThe Prefixes for this guild are currently %#v", guild.Prefixes))
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Error sending update message", err)
|
||||
}
|
||||
}
|
||||
|
||||
var RemovePrefixCommand = &disgoman.Command{
|
||||
Name: "removePrefix",
|
||||
Aliases: []string{"rp"},
|
||||
Description: "Remove a prefix so it can't be used in this guild",
|
||||
OwnerOnly: false,
|
||||
Hidden: false,
|
||||
RequiredPermissions: disgoman.PermissionManageServer,
|
||||
Invoke: removePrefixCommandFunc,
|
||||
}
|
||||
|
||||
func removePrefixCommandFunc(ctx disgoman.Context, args []string) {
|
||||
if len(args) == 0 {
|
||||
discord_utils.SendErrorMessage(ctx, "Please include at least one prefix to remove", nil)
|
||||
return
|
||||
}
|
||||
guild, err := services.GuildService.Guild(ctx.Guild.ID)
|
||||
var removed []string
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Guild not configured, adding new guild to the database", nil)
|
||||
guild = geeksbot.Guild{
|
||||
ID: ctx.Guild.ID,
|
||||
Prefixes: []string{},
|
||||
}
|
||||
guild, err = services.GuildService.CreateGuild(guild)
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Error adding guild to database.", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
for _, a := range args {
|
||||
l := len(guild.Prefixes) - 1
|
||||
for i := 0; i < l; i++ {
|
||||
if a == guild.Prefixes[i] {
|
||||
guild.Prefixes = append(guild.Prefixes[:i], guild.Prefixes[i+1:]...)
|
||||
l--
|
||||
i--
|
||||
removed = append(removed, a)
|
||||
}
|
||||
}
|
||||
}
|
||||
guild, err = services.GuildService.UpdateGuild(guild)
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Error removing prefixes from guild.", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
_, err = ctx.Send(fmt.Sprintf("Prefixes Updates.\n"+
|
||||
"The Prefixes for this guild are currently %#v\n"+
|
||||
"Removed: %#v", guild.Prefixes, removed))
|
||||
if err != nil {
|
||||
discord_utils.SendErrorMessage(ctx, "Error sending update message", err)
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package exts
|
||||
|
||||
import (
|
||||
"github.com/dustinpianalto/disgoman"
|
||||
"github.com/dustinpianalto/geeksbot/internal/exts/guild"
|
||||
"github.com/dustinpianalto/geeksbot/internal/exts/utils"
|
||||
)
|
||||
|
||||
@@ -20,4 +21,6 @@ func AddCommandHandlers(g *disgoman.CommandManager) {
|
||||
_ = g.AddCommand(utils.GitCommand)
|
||||
_ = g.AddCommand(utils.InviteCommand)
|
||||
_ = g.AddCommand(utils.PingCommand)
|
||||
_ = g.AddCommand(guild.AddPrefixCommand)
|
||||
_ = g.AddCommand(guild.RemovePrefixCommand)
|
||||
}
|
||||
|
||||
@@ -263,7 +263,6 @@ func addUserCommandFunc(ctx disgoman.Context, args []string) {
|
||||
if ctx.Message.Author.ID == ctx.CommandManager.Owners[0] {
|
||||
user := geeksbot.User{
|
||||
ID: ctx.Message.Author.ID,
|
||||
SteamID: "",
|
||||
IsActive: true,
|
||||
IsStaff: true,
|
||||
IsAdmin: true,
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
package utils
|
||||
+3
-1
@@ -1,9 +1,11 @@
|
||||
package geeksbot
|
||||
|
||||
import "database/sql"
|
||||
|
||||
type Message struct {
|
||||
ID string
|
||||
CreatedAt int64
|
||||
ModifiedAt int64
|
||||
ModifiedAt sql.NullTime
|
||||
Content string
|
||||
PreviousContent []string
|
||||
Channel Channel
|
||||
|
||||
+3
-1
@@ -1,5 +1,7 @@
|
||||
package geeksbot
|
||||
|
||||
import "database/sql"
|
||||
|
||||
type PatreonCreator struct {
|
||||
ID int
|
||||
Creator string
|
||||
@@ -10,7 +12,7 @@ type PatreonCreator struct {
|
||||
type PatreonTier struct {
|
||||
ID int
|
||||
Name string
|
||||
Description string
|
||||
Description sql.NullString
|
||||
Creator PatreonCreator
|
||||
Role Role
|
||||
NextTier *PatreonTier
|
||||
|
||||
+7
-4
@@ -1,6 +1,9 @@
|
||||
package geeksbot
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Request struct {
|
||||
ID int64
|
||||
@@ -10,10 +13,10 @@ type Request struct {
|
||||
Content string
|
||||
RequestedAt time.Time
|
||||
Completed bool
|
||||
CompletedAt time.Time
|
||||
CompletedBy User
|
||||
CompletedAt sql.NullTime
|
||||
CompletedBy *User
|
||||
Message Message
|
||||
CompletedMessage string
|
||||
CompletedMessage sql.NullString
|
||||
}
|
||||
|
||||
type Comment struct {
|
||||
|
||||
@@ -6,11 +6,11 @@ type Server struct {
|
||||
IPAddr string
|
||||
Port int
|
||||
Password string
|
||||
AlertsChannel Channel
|
||||
AlertsChannel *Channel
|
||||
Guild Guild
|
||||
InfoChannel Channel
|
||||
InfoMessage Message
|
||||
SettingsMessage Message
|
||||
InfoChannel *Channel
|
||||
InfoMessage *Message
|
||||
SettingsMessage *Message
|
||||
}
|
||||
|
||||
type ServerService interface {
|
||||
|
||||
Reference in New Issue
Block a user