grim/wasdead

e42b44a80cf1
use shlex.Split instead of our crappy regex split
package discord
import (
"errors"
"fmt"
"github.com/bwmarrin/discordgo"
"github.com/dustin/go-humanize"
log "github.com/sirupsen/logrus"
"bitbucket.org/TheToyz/nowdead/database"
"bitbucket.org/TheToyz/nowdead/presence"
)
func (c *DiscordClient) presenceHandler(s *discordgo.Session, p *discordgo.PresenceUpdate) {
if p.Game == nil {
return
}
if p.Game.Type != discordgo.GameTypeStreaming {
return
}
guild, err := database.LoadGuild(p.GuildID)
if err != nil {
log.Errorf("error loading guild: %v", err)
return
}
log.Infof("server: %s username: %s is now streaming", guild.ID, p.Presence.User.Username)
presence, _ := presence.GetPresence(p.Game.URL)
if lastID, ok := guild.History[presence.UserID]; ok {
if lastID == presence.StreamID {
log.Infof("already sent presence to guild %s: %v", p.GuildID, presence)
return
}
}
guild.History[presence.UserID] = presence.StreamID
err = guild.Save()
if err != nil {
log.Warnf("failed to save stream update for %s: %v", presence.UserID, err)
}
if err := c.sendPresence(p.GuildID, presence); err != nil {
log.Warnf("failed to send presence to guild %s: %v, %v", p.GuildID, err, presence)
}
}
func (c *DiscordClient) sendPresence(guildID string, presence presence.Presence) error {
guild, err := database.LoadGuild(guildID)
if err != nil {
return err
}
if guild.ID == "" {
return errors.New("Guild does not exist")
}
if guild.Channel == "" {
return errors.New("No channel set")
}
return c.sendPresenceChannel(guild.Channel, presence)
}
func (c *DiscordClient) sendPresenceChannel(channelID string, presence presence.Presence) error {
_, err := c.client.ChannelMessageSendEmbed(
channelID,
presenceEmbed(presence),
)
return err
}
func presenceEmbed(presence presence.Presence) *discordgo.MessageEmbed {
return &discordgo.MessageEmbed{
Image: &discordgo.MessageEmbedImage{
URL: presence.ProfileImageURL,
},
Author: &discordgo.MessageEmbedAuthor{
URL: presence.URL,
Name: fmt.Sprintf("%s is now live", presence.Username),
},
Thumbnail: &discordgo.MessageEmbedThumbnail{
URL: presence.ThumbnailURL,
},
Fields: []*discordgo.MessageEmbedField{
&discordgo.MessageEmbedField{
Name: "Title",
Value: presence.Title,
},
&discordgo.MessageEmbedField{
Name: "Viewers",
Value: humanize.Comma(presence.Viewers),
Inline: true,
},
&discordgo.MessageEmbedField{
Name: "Language",
Value: presence.Language,
Inline: true,
},
},
}
}