mirror of
https://github.com/mgerb/ServerStatus
synced 2026-01-09 02:52:47 +00:00
83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package serverstatus
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/anvie/port-scanner"
|
|
"github.com/bwmarrin/discordgo"
|
|
"github.com/mgerb/serverstatus/bot"
|
|
"github.com/mgerb/serverstatus/config"
|
|
)
|
|
|
|
func Start() {
|
|
//set each server status as online to start
|
|
for i, _ := range config.Config.Servers {
|
|
config.Config.Servers[i].Online = true
|
|
}
|
|
|
|
err := bot.Session.UpdateStatus(0, config.Config.GameStatus)
|
|
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
|
|
//start a new go routine
|
|
go scanServers()
|
|
}
|
|
|
|
func scanServers() {
|
|
|
|
//check if server are in config file
|
|
if len(config.Config.Servers) < 1 {
|
|
log.Println("No servers in config file.")
|
|
return
|
|
}
|
|
|
|
for {
|
|
|
|
for index, server := range config.Config.Servers {
|
|
prevServerUp := server.Online //set value to previous server status
|
|
|
|
serverScanner := portscanner.NewPortScanner(server.Address, time.Second*2, 1)
|
|
serverUp := serverScanner.IsOpen(server.Port) //check if the port is open
|
|
|
|
if serverUp && serverUp != prevServerUp {
|
|
sendMessage(config.Config.RoleToNotify + " " + server.Name + " is now online!")
|
|
} else if !serverUp && serverUp != prevServerUp {
|
|
sendMessage(config.Config.RoleToNotify + " " + server.Name + " went offline!")
|
|
}
|
|
|
|
config.Config.Servers[index].Online = serverUp
|
|
}
|
|
|
|
time.Sleep(time.Second * 5)
|
|
}
|
|
}
|
|
|
|
func sendMessage(message string) {
|
|
for _, roomID := range config.Config.RoomIDList {
|
|
bot.Session.ChannelMessageSend(roomID, message)
|
|
}
|
|
}
|
|
|
|
// This function will be called every time a new
|
|
// message is created on any channel that the autenticated bot has access to.
|
|
func MessageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
|
|
|
|
// Ignore all messages created by the bot itself
|
|
if m.Author.ID == bot.BotID {
|
|
return
|
|
}
|
|
|
|
if m.Content == "!ServerStatus" {
|
|
for _, server := range config.Config.Servers {
|
|
if server.Online {
|
|
s.ChannelMessageSend(m.ChannelID, server.Name+" is online!")
|
|
} else {
|
|
s.ChannelMessageSend(m.ChannelID, server.Name+" is down!")
|
|
}
|
|
}
|
|
}
|
|
}
|