grim/wasdead

Fix all the line endings
draft
2019-04-06, Ruin
4a849898cd49
Parents 85f135c14ee7
Children 17444953eb59
Fix all the line endings
  • +34 -34
    .hgignore
  • +35 -35
    database/bitcask.go
  • +21 -21
    database/database.go
  • +39 -39
    database/redis.go
  • +250 -250
    main.go
  • --- a/.hgignore Sat Apr 06 02:34:52 2019 -0500
    +++ b/.hgignore Sat Apr 06 00:39:10 2019 -0700
    @@ -1,34 +1,34 @@
    -syntax: glob
    -nowdead # ignore the binary
    -
    -# This line is a comment, and will be skipped.
    -# Empty lines are skipped too.
    -# Backup files left behind by the Emacs editor.
    -*~
    -
    -# Lock files used by the Emacs editor.
    -# Notice that the "#" character is quoted with a backslash.
    -# This prevents it from being interpreted as starting a comment.
    -.\#*
    -
    -# Temporary files used by the vim editor.
    -.*.swp
    -
    -# A hidden file created by the Mac OS X Finder.
    -.DS_Store
    -
    -# copied from go repo
    -*.[568ao]
    -*.ao
    -*.so
    -*.pyc
    -._*
    -.nfs.*
    -[568a].out
    -*.orig
    -core
    -_obj
    -_test
    -.vscode
    -debug
    -db
    +syntax: glob
    +nowdead # ignore the binary
    +
    +# This line is a comment, and will be skipped.
    +# Empty lines are skipped too.
    +# Backup files left behind by the Emacs editor.
    +*~
    +
    +# Lock files used by the Emacs editor.
    +# Notice that the "#" character is quoted with a backslash.
    +# This prevents it from being interpreted as starting a comment.
    +.\#*
    +
    +# Temporary files used by the vim editor.
    +.*.swp
    +
    +# A hidden file created by the Mac OS X Finder.
    +.DS_Store
    +
    +# copied from go repo
    +*.[568ao]
    +*.ao
    +*.so
    +*.pyc
    +._*
    +.nfs.*
    +[568a].out
    +*.orig
    +core
    +_obj
    +_test
    +.vscode
    +debug
    +db
    --- a/database/bitcask.go Sat Apr 06 02:34:52 2019 -0500
    +++ b/database/bitcask.go Sat Apr 06 00:39:10 2019 -0700
    @@ -1,35 +1,35 @@
    -package database
    -
    -import (
    - "github.com/prologic/bitcask"
    -)
    -
    -type db_bitcask struct {
    - database *bitcask.Bitcask
    -}
    -
    -func init() {
    - database, _ := bitcask.Open("./db")
    -
    - Register("bitcask", db_bitcask{
    - database: database,
    - })
    -}
    -
    -func (db db_bitcask) GetChannel(guildid string) string {
    - data, err := db.database.Get(guildid)
    -
    - if err != nil {
    - return ""
    - }
    -
    - return string(data)
    -}
    -
    -func (db db_bitcask) SetChannel(guildid, channel string) {
    - db.database.Put(guildid, []byte(channel))
    -}
    -
    -func (db db_bitcask) Close() {
    - db.database.Close()
    -}
    +package database
    +
    +import (
    + "github.com/prologic/bitcask"
    +)
    +
    +type db_bitcask struct {
    + database *bitcask.Bitcask
    +}
    +
    +func init() {
    + database, _ := bitcask.Open("./db")
    +
    + Register("bitcask", db_bitcask{
    + database: database,
    + })
    +}
    +
    +func (db db_bitcask) GetChannel(guildid string) string {
    + data, err := db.database.Get(guildid)
    +
    + if err != nil {
    + return ""
    + }
    +
    + return string(data)
    +}
    +
    +func (db db_bitcask) SetChannel(guildid, channel string) {
    + db.database.Put(guildid, []byte(channel))
    +}
    +
    +func (db db_bitcask) Close() {
    + db.database.Close()
    +}
    --- a/database/database.go Sat Apr 06 02:34:52 2019 -0500
    +++ b/database/database.go Sat Apr 06 00:39:10 2019 -0700
    @@ -1,21 +1,21 @@
    -package database
    -
    -type Database interface {
    - SetChannel(guildid, channel string)
    - GetChannel(guildid string) string
    - Close()
    -}
    -
    -var supported map[string]Database
    -
    -func Register(name string, db Database) {
    - if len(supported) <= 0 {
    - supported = make(map[string]Database)
    - }
    -
    - supported[name] = db
    -}
    -
    -func Get(name string) Database {
    - return supported[name]
    -}
    +package database
    +
    +type Database interface {
    + SetChannel(guildid, channel string)
    + GetChannel(guildid string) string
    + Close()
    +}
    +
    +var supported map[string]Database
    +
    +func Register(name string, db Database) {
    + if len(supported) <= 0 {
    + supported = make(map[string]Database)
    + }
    +
    + supported[name] = db
    +}
    +
    +func Get(name string) Database {
    + return supported[name]
    +}
    --- a/database/redis.go Sat Apr 06 02:34:52 2019 -0500
    +++ b/database/redis.go Sat Apr 06 00:39:10 2019 -0700
    @@ -1,39 +1,39 @@
    -package database
    -
    -import (
    - "github.com/go-redis/redis"
    -)
    -
    -type db_redis struct {
    - database *redis.Client
    -}
    -
    -func init() {
    - database := redis.NewClient(&redis.Options{
    - Addr: "localhost:6379",
    - Password: "", // no password set
    - DB: 0, // use default DB
    - })
    -
    - Register("redis", db_redis{
    - database: database,
    - })
    -}
    -
    -func (db db_redis) GetChannel(guildid string) string {
    - data, err := db.database.Get(guildid).Result()
    -
    - if err != nil {
    - return ""
    - }
    -
    - return data
    -}
    -
    -func (db db_redis) SetChannel(guildid, channel string) {
    - db.database.Set(guildid, []byte(channel), 0)
    -}
    -
    -func (db db_redis) Close() {
    - db.database.Close()
    -}
    +package database
    +
    +import (
    + "github.com/go-redis/redis"
    +)
    +
    +type db_redis struct {
    + database *redis.Client
    +}
    +
    +func init() {
    + database := redis.NewClient(&redis.Options{
    + Addr: "localhost:6379",
    + Password: "", // no password set
    + DB: 0, // use default DB
    + })
    +
    + Register("redis", db_redis{
    + database: database,
    + })
    +}
    +
    +func (db db_redis) GetChannel(guildid string) string {
    + data, err := db.database.Get(guildid).Result()
    +
    + if err != nil {
    + return ""
    + }
    +
    + return data
    +}
    +
    +func (db db_redis) SetChannel(guildid, channel string) {
    + db.database.Set(guildid, []byte(channel), 0)
    +}
    +
    +func (db db_redis) Close() {
    + db.database.Close()
    +}
    --- a/main.go Sat Apr 06 02:34:52 2019 -0500
    +++ b/main.go Sat Apr 06 00:39:10 2019 -0700
    @@ -1,250 +1,250 @@
    -package main
    -
    -import (
    - "errors"
    - "flag"
    - "fmt"
    - "log"
    - "net/url"
    - "os"
    - "os/signal"
    - "strings"
    - "syscall"
    - "time"
    -
    - "bitbucket.org/TheToyz/nowdead/database"
    -
    - "github.com/dustin/go-humanize"
    -
    - "github.com/bwmarrin/discordgo"
    - "github.com/nicklaw5/helix"
    -)
    -
    -var (
    - DiscordToken string
    - TwitchToken string
    - DatabaseType string
    - TwitchClient *helix.Client
    - logger *log.Logger
    - startTime time.Time
    -
    - db database.Database
    -)
    -
    -func init() {
    - logger = log.New(os.Stderr, " ", log.Ldate|log.Ltime)
    - startTime = time.Now()
    -
    - flag.StringVar(&DiscordToken, "t", "", "Discord Bot Token")
    - flag.StringVar(&TwitchToken, "tcid", "", "Twitch Client ID")
    - flag.StringVar(&DatabaseType, "db_type", "bitcask", "Database type to use (default: bitcask)")
    -
    - flag.Parse()
    -}
    -
    -func logDebug(v ...interface{}) {
    - logger.SetPrefix("DEBUG ")
    - logger.Println(v...)
    -}
    -
    -func logInfo(v ...interface{}) {
    - logger.SetPrefix("INFO ")
    - logger.Println(v...)
    -}
    -
    -func logError(v ...interface{}) {
    - logger.SetPrefix("ERROR ")
    - logger.Println(v...)
    -}
    -
    -func logPanic(v ...interface{}) {
    - logger.SetPrefix("PANIC ")
    - logger.Panicln(v...)
    -}
    -
    -func main() {
    - db = database.Get(DatabaseType)
    -
    - if len(DiscordToken) <= 0 || len(TwitchToken) <= 0 {
    - logPanic("Discord Token and Twitch Client ID must be set")
    - }
    -
    - logDebug("Discord Token:", DiscordToken)
    - logDebug("Twitch Token:", TwitchToken)
    -
    - client, err := helix.NewClient(&helix.Options{
    - ClientID: TwitchToken,
    - })
    - if err != nil {
    - logPanic(err)
    - }
    - TwitchClient = client
    -
    - dg, err := discordgo.New("Bot " + strings.TrimSpace(DiscordToken))
    - if err != nil {
    - fmt.Println("error creating Discord session,", err)
    - return
    - }
    -
    - dg.AddHandler(presenceUpdate)
    - dg.AddHandler(messageCreate)
    -
    - err = dg.Open()
    - if err != nil {
    - log.Panic(err)
    - return
    - }
    -
    - fmt.Println("Bot is now running. Press CTRL-C to exit.")
    - sc := make(chan os.Signal, 1)
    - signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
    - <-sc
    -
    - dg.Close()
    -}
    -
    -func presenceUpdate(sess *discordgo.Session, evt *discordgo.PresenceUpdate) {
    - logDebug("PRESENSE UPDATE user-ID:", evt.User.ID)
    -
    - if evt.Game != nil {
    - logDebug(fmt.Sprintf("PRESENSE UPDATE game: %#v", evt.Game))
    -
    - if evt.Game.Type == discordgo.GameTypeStreaming {
    - pURL, _ := url.Parse(evt.Game.URL)
    -
    - channel := db.GetChannel(evt.GuildID)
    - if channel != "" {
    - err := processPresenceUpdate(sess, channel, strings.TrimLeft(pURL.Path, "/"), evt.Game.URL)
    -
    - if err != nil {
    - logError(err)
    - }
    - }
    - }
    - }
    -}
    -
    -func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
    - if m.Author.ID == s.State.User.ID {
    - return
    - }
    -
    - commandItems := strings.Split(m.Content, " ")
    -
    - if strings.EqualFold(commandItems[0], "!uptime") {
    - duration := time.Now().Sub(startTime)
    - channel := db.GetChannel(m.GuildID)
    - if channel != "" {
    - if channel != m.ChannelID {
    - return
    - }
    - err := sendMessage(s, channel, fmt.Sprintf(
    - "Uptime is: **%02d:%02d:%02d** (since **%s**)",
    - int(duration.Hours()),
    - int(duration.Minutes())%60,
    - int(duration.Seconds())%60,
    - startTime.Format(time.Stamp)))
    -
    - logError(err)
    - }
    - }
    -
    - if strings.EqualFold(commandItems[0], "!isLive") {
    - if len(commandItems) == 1 {
    - return
    - }
    -
    - channel := db.GetChannel(m.GuildID)
    - if channel != "" {
    - if channel != m.ChannelID {
    - return
    - }
    - err := processPresenceUpdate(s, channel, commandItems[1], "https://twitch.com/"+commandItems[1])
    -
    - if err != nil {
    - logError(err)
    -
    - sendMessage(s, channel, fmt.Sprintf("_%s_ does not seem to be live right now!", commandItems[1]))
    - }
    -
    - }
    - }
    -
    - if strings.EqualFold(commandItems[0], "!init") {
    - sendMessage(s, m.ChannelID, "All set up to talk in this channel!")
    -
    - db.SetChannel(m.GuildID, m.ChannelID)
    - }
    -}
    -
    -func sendMessage(sess *discordgo.Session, channelid, message string) error {
    - logInfo("SENDING MESSAGE:", channelid, message)
    - _, err := sess.ChannelMessageSend(channelid, message)
    - return err
    -}
    -
    -func processPresenceUpdate(s *discordgo.Session, channelid, twitchName, url string) error {
    - resp, err := TwitchClient.GetUsers(&helix.UsersParams{
    - Logins: []string{twitchName},
    - })
    -
    - if err != nil {
    - return err
    - }
    -
    - data, _ := TwitchClient.GetStreams(&helix.StreamsParams{
    - UserLogins: []string{twitchName},
    - })
    -
    - if len(resp.Data.Users) <= 0 || len(data.Data.Streams) <= 0 {
    - return errors.New("user was not found")
    - }
    -
    - user := resp.Data.Users[0]
    - stream := data.Data.Streams[0]
    -
    - f := make([]*discordgo.MessageEmbedField, 0)
    - f = append(f, &discordgo.MessageEmbedField{
    - Name: "Title",
    - Value: stream.Title,
    - })
    -
    - f = append(f, &discordgo.MessageEmbedField{
    - Name: "Viewer",
    - Value: humanize.Comma(int64(stream.ViewerCount)),
    - Inline: true,
    - })
    -
    - f = append(f, &discordgo.MessageEmbedField{
    - Name: "Lagnauge",
    - Value: stream.Language,
    - Inline: true,
    - })
    -
    - image := strings.Replace(stream.ThumbnailURL, "{width}", "400", -1)
    - image = strings.Replace(image, "{height}", "225", -1)
    - _, err = s.ChannelMessageSendEmbed(channelid, &discordgo.MessageEmbed{
    - Image: &discordgo.MessageEmbedImage{
    - URL: image,
    - },
    - Author: &discordgo.MessageEmbedAuthor{
    - URL: url,
    - Name: user.DisplayName + " is now live",
    - },
    - Thumbnail: &discordgo.MessageEmbedThumbnail{
    - URL: user.ProfileImageURL,
    - },
    - Fields: f,
    - })
    -
    - return err
    -}
    -
    -func fileExist(name string) bool {
    - if _, err := os.Stat(name); err != nil {
    - if os.IsNotExist(err) {
    - return false
    - }
    - }
    - return true
    -}
    +package main
    +
    +import (
    + "errors"
    + "flag"
    + "fmt"
    + "log"
    + "net/url"
    + "os"
    + "os/signal"
    + "strings"
    + "syscall"
    + "time"
    +
    + "bitbucket.org/TheToyz/nowdead/database"
    +
    + "github.com/dustin/go-humanize"
    +
    + "github.com/bwmarrin/discordgo"
    + "github.com/nicklaw5/helix"
    +)
    +
    +var (
    + DiscordToken string
    + TwitchToken string
    + DatabaseType string
    + TwitchClient *helix.Client
    + logger *log.Logger
    + startTime time.Time
    +
    + db database.Database
    +)
    +
    +func init() {
    + logger = log.New(os.Stderr, " ", log.Ldate|log.Ltime)
    + startTime = time.Now()
    +
    + flag.StringVar(&DiscordToken, "t", "", "Discord Bot Token")
    + flag.StringVar(&TwitchToken, "tcid", "", "Twitch Client ID")
    + flag.StringVar(&DatabaseType, "db_type", "bitcask", "Database type to use (default: bitcask)")
    +
    + flag.Parse()
    +}
    +
    +func logDebug(v ...interface{}) {
    + logger.SetPrefix("DEBUG ")
    + logger.Println(v...)
    +}
    +
    +func logInfo(v ...interface{}) {
    + logger.SetPrefix("INFO ")
    + logger.Println(v...)
    +}
    +
    +func logError(v ...interface{}) {
    + logger.SetPrefix("ERROR ")
    + logger.Println(v...)
    +}
    +
    +func logPanic(v ...interface{}) {
    + logger.SetPrefix("PANIC ")
    + logger.Panicln(v...)
    +}
    +
    +func main() {
    + db = database.Get(DatabaseType)
    +
    + if len(DiscordToken) <= 0 || len(TwitchToken) <= 0 {
    + logPanic("Discord Token and Twitch Client ID must be set")
    + }
    +
    + logDebug("Discord Token:", DiscordToken)
    + logDebug("Twitch Token:", TwitchToken)
    +
    + client, err := helix.NewClient(&helix.Options{
    + ClientID: TwitchToken,
    + })
    + if err != nil {
    + logPanic(err)
    + }
    + TwitchClient = client
    +
    + dg, err := discordgo.New("Bot " + strings.TrimSpace(DiscordToken))
    + if err != nil {
    + fmt.Println("error creating Discord session,", err)
    + return
    + }
    +
    + dg.AddHandler(presenceUpdate)
    + dg.AddHandler(messageCreate)
    +
    + err = dg.Open()
    + if err != nil {
    + log.Panic(err)
    + return
    + }
    +
    + fmt.Println("Bot is now running. Press CTRL-C to exit.")
    + sc := make(chan os.Signal, 1)
    + signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
    + <-sc
    +
    + dg.Close()
    +}
    +
    +func presenceUpdate(sess *discordgo.Session, evt *discordgo.PresenceUpdate) {
    + logDebug("PRESENSE UPDATE user-ID:", evt.User.ID)
    +
    + if evt.Game != nil {
    + logDebug(fmt.Sprintf("PRESENSE UPDATE game: %#v", evt.Game))
    +
    + if evt.Game.Type == discordgo.GameTypeStreaming {
    + pURL, _ := url.Parse(evt.Game.URL)
    +
    + channel := db.GetChannel(evt.GuildID)
    + if channel != "" {
    + err := processPresenceUpdate(sess, channel, strings.TrimLeft(pURL.Path, "/"), evt.Game.URL)
    +
    + if err != nil {
    + logError(err)
    + }
    + }
    + }
    + }
    +}
    +
    +func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
    + if m.Author.ID == s.State.User.ID {
    + return
    + }
    +
    + commandItems := strings.Split(m.Content, " ")
    +
    + if strings.EqualFold(commandItems[0], "!uptime") {
    + duration := time.Now().Sub(startTime)
    + channel := db.GetChannel(m.GuildID)
    + if channel != "" {
    + if channel != m.ChannelID {
    + return
    + }
    + err := sendMessage(s, channel, fmt.Sprintf(
    + "Uptime is: **%02d:%02d:%02d** (since **%s**)",
    + int(duration.Hours()),
    + int(duration.Minutes())%60,
    + int(duration.Seconds())%60,
    + startTime.Format(time.Stamp)))
    +
    + logError(err)
    + }
    + }
    +
    + if strings.EqualFold(commandItems[0], "!isLive") {
    + if len(commandItems) == 1 {
    + return
    + }
    +
    + channel := db.GetChannel(m.GuildID)
    + if channel != "" {
    + if channel != m.ChannelID {
    + return
    + }
    + err := processPresenceUpdate(s, channel, commandItems[1], "https://twitch.com/"+commandItems[1])
    +
    + if err != nil {
    + logError(err)
    +
    + sendMessage(s, channel, fmt.Sprintf("_%s_ does not seem to be live right now!", commandItems[1]))
    + }
    +
    + }
    + }
    +
    + if strings.EqualFold(commandItems[0], "!init") {
    + sendMessage(s, m.ChannelID, "All set up to talk in this channel!")
    +
    + db.SetChannel(m.GuildID, m.ChannelID)
    + }
    +}
    +
    +func sendMessage(sess *discordgo.Session, channelid, message string) error {
    + logInfo("SENDING MESSAGE:", channelid, message)
    + _, err := sess.ChannelMessageSend(channelid, message)
    + return err
    +}
    +
    +func processPresenceUpdate(s *discordgo.Session, channelid, twitchName, url string) error {
    + resp, err := TwitchClient.GetUsers(&helix.UsersParams{
    + Logins: []string{twitchName},
    + })
    +
    + if err != nil {
    + return err
    + }
    +
    + data, _ := TwitchClient.GetStreams(&helix.StreamsParams{
    + UserLogins: []string{twitchName},
    + })
    +
    + if len(resp.Data.Users) <= 0 || len(data.Data.Streams) <= 0 {
    + return errors.New("user was not found")
    + }
    +
    + user := resp.Data.Users[0]
    + stream := data.Data.Streams[0]
    +
    + f := make([]*discordgo.MessageEmbedField, 0)
    + f = append(f, &discordgo.MessageEmbedField{
    + Name: "Title",
    + Value: stream.Title,
    + })
    +
    + f = append(f, &discordgo.MessageEmbedField{
    + Name: "Viewer",
    + Value: humanize.Comma(int64(stream.ViewerCount)),
    + Inline: true,
    + })
    +
    + f = append(f, &discordgo.MessageEmbedField{
    + Name: "Lagnauge",
    + Value: stream.Language,
    + Inline: true,
    + })
    +
    + image := strings.Replace(stream.ThumbnailURL, "{width}", "400", -1)
    + image = strings.Replace(image, "{height}", "225", -1)
    + _, err = s.ChannelMessageSendEmbed(channelid, &discordgo.MessageEmbed{
    + Image: &discordgo.MessageEmbedImage{
    + URL: image,
    + },
    + Author: &discordgo.MessageEmbedAuthor{
    + URL: url,
    + Name: user.DisplayName + " is now live",
    + },
    + Thumbnail: &discordgo.MessageEmbedThumbnail{
    + URL: user.ProfileImageURL,
    + },
    + Fields: f,
    + })
    +
    + return err
    +}
    +
    +func fileExist(name string) bool {
    + if _, err := os.Stat(name); err != nil {
    + if os.IsNotExist(err) {
    + return false
    + }
    + }
    + return true
    +}