|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"time"
|
|
|
|
"twitch-hooks/config"
|
|
|
|
"twitch-hooks/discordhooks"
|
|
|
|
"twitch-hooks/twitchhooks"
|
|
|
|
"twitch-hooks/vkhooks"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
logo string = ` _______ _ _ _ _ _
|
|
|
|
|__ __| (_) | | | | | | |
|
|
|
|
| |_ ___| |_ ___| |__ ______| |__ ___ ___ | | _____
|
|
|
|
| \ \ /\ / / | __/ __| '_ \______| '_ \ / _ \ / _ \| |/ / __|
|
|
|
|
| |\ V V /| | || (__| | | | | | | | (_) | (_) | <\__ \
|
|
|
|
|_| \_/\_/ |_|\__\___|_| |_| |_| |_|\___/ \___/|_|\_\___/ by Unbewohnte`
|
|
|
|
Config config.Config
|
|
|
|
pathToConfig *string = flag.String("config", config.DefaultConfigFilename, "Specifies path to a config in another directory")
|
|
|
|
delay *uint = flag.Uint("delay", 5000, "Delay in seconds for each check cycle")
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
// process the config file
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
if *pathToConfig != config.DefaultConfigFilename {
|
|
|
|
// config in another place
|
|
|
|
config.ReadConfig(*pathToConfig)
|
|
|
|
}
|
|
|
|
|
|
|
|
if !config.ConfigExists(*pathToConfig) {
|
|
|
|
// there is no existing config file;
|
|
|
|
// create a new one and exit
|
|
|
|
err := config.CreateConfig(filepath.Dir(*pathToConfig))
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Println("Created a new config file")
|
|
|
|
os.Exit(0)
|
|
|
|
}
|
|
|
|
|
|
|
|
configContents, err := config.ReadConfig(*pathToConfig)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
Config = *configContents
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
fmt.Println(logo)
|
|
|
|
|
|
|
|
if Config.Keys.Twitch.ClientID == "" || Config.Keys.Twitch.ClientSecret == "" {
|
|
|
|
// no twitch api key used. Notify the user and check for the force-send flag
|
|
|
|
fmt.Println("No Twitch API keys found")
|
|
|
|
|
|
|
|
if !Config.ForceSend {
|
|
|
|
// not forced to send messages. Exiting
|
|
|
|
fmt.Println("Not forced to send. Exiting...")
|
|
|
|
os.Exit(0)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for {
|
|
|
|
// retrieve access token
|
|
|
|
tokenResp, err := twitchhooks.GetToken(&Config.Keys.Twitch)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// check if live
|
|
|
|
is_live, err := twitchhooks.IsLive(Config.TwitchName, &twitchhooks.RequestOptions{
|
|
|
|
ApplicationKeys: Config.Keys.Twitch,
|
|
|
|
AccessToken: *tokenResp,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if is_live || Config.ForceSend {
|
|
|
|
// live or forced to send -> send alerts
|
|
|
|
if Config.Keys.Discord.WebhookUrl != "" {
|
|
|
|
err := discordhooks.Post(Config.Keys.Discord.WebhookUrl, Config.Messages.DiscordMessage)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if Config.Keys.VK.Key != "" {
|
|
|
|
vkhooks.Initialise(Config.Keys.VK.Key)
|
|
|
|
err := vkhooks.Send(Config.Messages.VKmessage)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// alerted. Now exiting
|
|
|
|
fmt.Println("Alerts has been sent ! My work is done here...")
|
|
|
|
os.Exit(0)
|
|
|
|
}
|
|
|
|
duration, _ := time.ParseDuration(fmt.Sprintf("%ds", *delay))
|
|
|
|
time.Sleep(duration)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|