parent
f40cf00f7a
commit
9355d3703b
@ -0,0 +1,77 @@
|
||||
package utils
|
||||
|
||||
import "log"
|
||||
|
||||
type postfix struct {
|
||||
Name string
|
||||
Invoke func(bool) error
|
||||
}
|
||||
|
||||
var postfixes = []postfix{
|
||||
postfix{
|
||||
Name: "1_Update_Guild_for_Puzzle",
|
||||
Invoke: updateGuildForPuzzle,
|
||||
},
|
||||
postfix{
|
||||
Name: "1_Update_X_Guild_Prefixes_to_add_ID",
|
||||
Invoke: updateXGuildPrefixesToAddID,
|
||||
},
|
||||
}
|
||||
|
||||
func RunPostfixes() {
|
||||
for _, postfix := range postfixes {
|
||||
queryString := "SELECT * from postfixes where name = $1"
|
||||
rows, err := Database.Query(queryString, postfix.Name)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
if rows.Next() {
|
||||
continue
|
||||
} else {
|
||||
err := postfix.Invoke(false)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
_, err = Database.Exec("INSERT INTO postfixes (name) VALUES ($1)", postfix.Name)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateGuildForPuzzle(revert bool) error {
|
||||
var queryString string
|
||||
if !revert {
|
||||
queryString = `ALTER TABLE guilds
|
||||
ADD COLUMN puzzle_channel varchar(30) not null default ''`
|
||||
} else {
|
||||
queryString = `ALTER TABLE guilds
|
||||
DROP COLUMN puzzleChat`
|
||||
}
|
||||
_, err := Database.Exec(queryString)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func updateXGuildPrefixesToAddID(revert bool) error {
|
||||
var queryString string
|
||||
if !revert {
|
||||
queryString = `ALTER TABLE x_guilds_prefixes
|
||||
ADD COLUMN id serial primary key`
|
||||
} else {
|
||||
queryString = `ALTER TABLE x_guilds_prefixes
|
||||
DROP COLUMN id`
|
||||
}
|
||||
_, err := Database.Exec(queryString)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -0,0 +1,93 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
"github.com/emersion/go-message/mail"
|
||||
)
|
||||
|
||||
func ProcessPuzzleEmail(mr *mail.Reader, dg *discordgo.Session) {
|
||||
var body []byte
|
||||
for {
|
||||
p, err := mr.NextPart()
|
||||
if err == io.EOF {
|
||||
break
|
||||
} else if err != nil {
|
||||
log.Println(err)
|
||||
break
|
||||
}
|
||||
|
||||
switch h := p.Header.(type) {
|
||||
case *mail.InlineHeader:
|
||||
// This is the message's text (can be plain-text or HTML)
|
||||
if t, _, _ := h.ContentType(); t == "text/plain" {
|
||||
body, _ = ioutil.ReadAll(p.Body)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(body) > 0 {
|
||||
s := string(body)
|
||||
puzzle := strings.Split(s, "----------")[0]
|
||||
date, err := mr.Header.Date()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
e := discordgo.MessageEmbed{
|
||||
Title: "Daily Coding Problem",
|
||||
URL: "https://dailycodingproblem.com/",
|
||||
Description: "```" + puzzle + "```",
|
||||
Timestamp: date.Format(time.RFC3339),
|
||||
Footer: &discordgo.MessageEmbedFooter{
|
||||
Text: "Daily Coding Problem",
|
||||
},
|
||||
}
|
||||
var guilds []Guild
|
||||
queryString := `SELECT id, puzzle_channel from guilds`
|
||||
rows, err := Database.Query(queryString)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
for rows.Next() {
|
||||
var guild Guild
|
||||
err := rows.Scan(&guild.ID, &guild.PuzzleChannel)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
guilds = append(guilds, guild)
|
||||
}
|
||||
var puzzleID int64
|
||||
queryString = "INSERT INTO puzzles (text, time) VALUES ($1, $2) RETURNING id"
|
||||
err = Database.QueryRow(queryString, puzzle, date).Scan(&puzzleID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
for _, g := range guilds {
|
||||
if g.PuzzleChannel == "" {
|
||||
continue
|
||||
}
|
||||
msg := discordgo.MessageSend{
|
||||
Embed: &e,
|
||||
}
|
||||
m, err := dg.ChannelMessageSendComplex(g.PuzzleChannel, &msg)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
queryString = "INSERT INTO x_guilds_puzzles (guild_id, puzzle_id, message_id) VALUES ($1, $2, $3)"
|
||||
_, err = Database.Exec(queryString, g.ID, puzzleID, m.ID)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package utils
|
||||
|
||||
type Guild struct {
|
||||
ID string
|
||||
WelcomeMessage string
|
||||
GoodbyeMessage string
|
||||
LoggingChannel string
|
||||
WelcomeChannel string
|
||||
PuzzleChannel string
|
||||
}
|
||||
Loading…
Reference in new issue