parent
98dfe5455a
commit
7b63fbeaf6
@ -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\/\-\.,@?^=%&~\+#]*[\w\-\@?^=%&/~\+#])?`
|
||||
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…
Reference in new issue