From 449396b94c1a0540f9026b577c73ae8dbe8af4ca Mon Sep 17 00:00:00 2001 From: mgerb42 Date: Fri, 13 Jan 2017 23:32:18 +0100 Subject: [PATCH] init --- .gitignore | 1 + bot/bot.go | 53 ++++++++++++++++++++++++++++++++++++ config/config.go | 37 +++++++++++++++++++++++++ main.go | 20 ++++++++++++++ readme.md | 7 +++++ serverstatus/serverstatus.go | 34 +++++++++++++++++++++++ 6 files changed, 152 insertions(+) create mode 100644 .gitignore create mode 100644 bot/bot.go create mode 100644 config/config.go create mode 100644 main.go create mode 100644 readme.md create mode 100644 serverstatus/serverstatus.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0cffcb3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.json \ No newline at end of file diff --git a/bot/bot.go b/bot/bot.go new file mode 100644 index 0000000..48739e7 --- /dev/null +++ b/bot/bot.go @@ -0,0 +1,53 @@ +package bot + +import ( + "fmt" + "github.com/bwmarrin/discordgo" +) + +// Variables used for command line parameters +var ( + BotID string + Session *discordgo.Session +) + +func Connect(token string) { + // Create a new Discord session using the provided bot token. + var err error + Session, err = discordgo.New("Bot " + token) + + if err != nil { + fmt.Println("error creating Discord session,", err) + return + } + + // Get the account information. + u, err := Session.User("@me") + if err != nil { + fmt.Println("error obtaining account details,", err) + } + + // Store the account ID for later use. + BotID = u.ID + + fmt.Println("Bot connected") +} + +func Start() { + // Open the websocket and begin listening. + err := Session.Open() + if err != nil { + fmt.Println("error opening connection,", err) + return + } + + fmt.Println("Bot is now running. Press CTRL-C to exit.") + + // Simple way to keep program running until CTRL-C is pressed. + <-make(chan struct{}) + return +} + +func AddHandler(handler interface{}) { + Session.AddHandler(handler) +} diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..2b50380 --- /dev/null +++ b/config/config.go @@ -0,0 +1,37 @@ +package config + +import ( + "encoding/json" + "io/ioutil" + "log" + "os" +) + +// Variables used for command line parameters +var Config configStruct + +type configStruct struct { + Token string `json:"Token"` + AlertRoomID string `json:"AlertRoomID"` +} + +func Configure() { + + log.Println("Reading config file...") + + file, e := ioutil.ReadFile("./config.json") + + if e != nil { + log.Printf("File error: %v\n", e) + os.Exit(1) + } + + log.Printf("%s\n", string(file)) + + err := json.Unmarshal(file, &Config) + + if err != nil { + log.Println(err) + } + +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..d03fe81 --- /dev/null +++ b/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "./bot" + "./config" + "./serverstatus" +) + +// Variables used for command line parameters +var ( + BotID string +) + +func main() { + config.Configure() + bot.Connect(config.Config.Token) + serverstatus.Start() + bot.Start() + +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..98d3ec0 --- /dev/null +++ b/readme.md @@ -0,0 +1,7 @@ +# GoBot + +My experimental Discord bot + +## Server Status + +This scans the Elysium PvP server checking to see if it is up. diff --git a/serverstatus/serverstatus.go b/serverstatus/serverstatus.go new file mode 100644 index 0000000..b1000e6 --- /dev/null +++ b/serverstatus/serverstatus.go @@ -0,0 +1,34 @@ +package serverstatus + +import ( + "../bot" + "../config" + "github.com/anvie/port-scanner" + "time" +) + +func Start() { + go loop() +} + +func loop() { + prevServerUp := true + elysiumPvP := portscanner.NewPortScanner("149.202.207.235", time.Second*2) + + for { + serverUp := elysiumPvP.IsOpen(8099) + + if serverUp && serverUp != prevServerUp { + sendMessage("@everyone Elysium PVP is now online!") + } else if !serverUp && serverUp != prevServerUp { + sendMessage("@everyone Elysium PVP is offline.") + } + + prevServerUp = serverUp + time.Sleep(time.Second * 5) + } +} + +func sendMessage(message string) { + bot.Session.ChannelMessageSend(config.Config.AlertRoomID, message) +}