grim/wasdead
Clone
Summary
Browse
Changes
Graph
use shlex.Split instead of our crappy regex split
draft
2019-05-11, Gary Kramlich
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
,
},
},
}
}