Add base structure and url webhook logic

main
DustyP 5 years ago
parent 98dfe5455a
commit 7b63fbeaf6

2
.gitignore vendored

@ -13,3 +13,5 @@
# Dependency directories (remove the comment below to include it)
# vendor/
.env

@ -0,0 +1,20 @@
FROM golang:1.15-alpine as dev
WORKDIR /go/src/prepbot
COPY ./go.mod .
COPY ./go.sum .
RUN go mod download
COPY . .
RUN go install github.com/dustinpianalto/prepbot/...
CMD [ "go", "run", "cmd/prepbot/main.go"]
from alpine
WORKDIR /bin
COPY --from=dev /go/bin/prepbot ./prepbot
CMD [ "prepbot" ]

@ -0,0 +1,79 @@
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"github.com/bwmarrin/discordgo"
"github.com/dustinpianalto/disgoman"
"github.com/dustinpianalto/prepbot/internal/exts/messages"
)
func main() {
Token := os.Getenv("DISCORD_TOKEN")
dg, err := discordgo.New("Bot " + Token)
if err != nil {
fmt.Println("There was an error when creating the Discord Session, ", err)
return
}
dg.State.MaxMessageCount = 100
dg.StateEnabled = true
dg.Identify = discordgo.Identify{
Intents: discordgo.MakeIntent(discordgo.IntentsAll),
}
owners := []string{
"351794468870946827",
}
manager := disgoman.CommandManager{
Prefixes: getPrefixes,
Owners: owners,
StatusManager: disgoman.GetDefaultStatusManager(),
ErrorChannel: make(chan disgoman.CommandError, 10),
Commands: make(map[string]*disgoman.Command),
IgnoreBots: true,
CheckPermissions: false,
}
dg.AddHandler(messages.OnMessage)
err = dg.Open()
if err != nil {
fmt.Println("There was an error opening the connection, ", err)
return
}
// Start the Error handler in a goroutine
go ErrorHandler(manager.ErrorChannel)
fmt.Println("The Bot is now running.")
sc := make(chan os.Signal, 1)
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
<-sc
fmt.Println("Shutting Down...")
err = dg.Close()
if err != nil {
fmt.Println(err)
}
}
func getPrefixes(guildID string) []string {
return []string{"!"}
}
func ErrorHandler(ErrorChan chan disgoman.CommandError) {
for ce := range ErrorChan {
msg := ce.Message
if msg == "" {
msg = ce.Error.Error()
}
_, _ = ce.Context.Send(msg)
fmt.Println(ce.Error)
}
}

@ -0,0 +1,8 @@
module github.com/dustinpianalto/prepbot
go 1.14
require (
github.com/bwmarrin/discordgo v0.22.0
github.com/dustinpianalto/disgoman v0.0.15
)

@ -0,0 +1,10 @@
github.com/bwmarrin/discordgo v0.20.2/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q=
github.com/bwmarrin/discordgo v0.22.0 h1:uBxY1HmlVCsW1IuaPjpCGT6A2DBwRn0nvOguQIxDdFM=
github.com/bwmarrin/discordgo v0.22.0/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M=
github.com/dustinpianalto/disgoman v0.0.15 h1:kdIw6jhC82WBut7+4BarqxBw06dozU+Hu47LQzkkoGM=
github.com/dustinpianalto/disgoman v0.0.15/go.mod h1:v3FM6n+4dH9XlvO+IDx6MN3DUnGq6YVDBvy1A1k202g=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16 h1:y6ce7gCWtnH+m3dCjzQ1PCuwl28DDIc3VNnvY29DlIA=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=

@ -0,0 +1,49 @@
package messages
import (
"log"
"regexp"
"strings"
"github.com/bwmarrin/discordgo"
)
func OnMessage(s *discordgo.Session, message *discordgo.MessageCreate) {
defer func() {
if r := recover(); r != nil {
log.Println("Recovered from panic in OnMessage")
}
}()
if message.Author.Bot {
return
}
content := message.Content
amazonRegexString := `(http|https):\/\/((?:[\w-_\.]+)amazon(?:\.[\w\-_]+)+)([\w\/\-\.,@?^=%&amp;~\+#]*[\w\-\@?^=%&amp;/~\+#])?`
amazonRegex := regexp.MustCompile(amazonRegexString)
urls := amazonRegex.FindAllString(message.Content, -1)
if len(urls) == 0 {
return
}
for _, url := range urls {
if strings.Contains(url, "ref=") || strings.Contains(url, "?") {
parts := strings.Split(url, "/")
new := strings.Join(parts[:len(parts)-1], "/")
content = strings.ReplaceAll(content, url, new)
}
}
webhook, err := s.WebhookCreate(message.ChannelID, message.ID, "")
if err != nil {
return
}
defer s.WebhookDelete(webhook.ID)
params := &discordgo.WebhookParams{
Content: content,
Username: message.Author.Username,
AvatarURL: message.Author.AvatarURL(""),
}
_, err = s.WebhookExecute(webhook.ID, webhook.Token, true, params)
if err != nil {
return
}
s.ChannelMessageDelete(message.ChannelID, message.ID)
}
Loading…
Cancel
Save