grim/wasdead
Clone
Summary
Browse
Changes
Graph
make the status command require a mention
draft
2019-06-08, Gary Kramlich
947250a2da50
make the status command require a mention
package
discord
import
(
"errors"
"strings"
"time"
"github.com/bwmarrin/discordgo"
log
"github.com/sirupsen/logrus"
"bitbucket.org/rw_grim/wasdead/database"
)
type
DiscordClient
struct
{
client
*
discordgo
.
Session
started
time
.
Time
userID
string
mentionString
string
}
var
(
ErrAnnouncementChannelNotSet
=
errors
.
New
(
"no announcement channel set"
)
)
func
New
(
token
string
)
(
*
DiscordClient
,
error
)
{
client
,
err
:=
discordgo
.
New
(
"Bot "
+
strings
.
TrimSpace
(
token
))
if
err
!=
nil
{
return
nil
,
err
}
dc
:=
&
DiscordClient
{
client
:
client
,
started
:
time
.
Now
().
UTC
(),
}
client
.
AddHandler
(
dc
.
messageHandler
)
client
.
AddHandler
(
dc
.
presenceHandler
)
return
dc
,
nil
}
func
(
c
*
DiscordClient
)
Start
(
errChan
chan
error
)
{
err
:=
c
.
client
.
Open
()
if
err
!=
nil
{
errChan
<-
err
return
}
c
.
userID
=
c
.
client
.
State
.
Ready
.
User
.
ID
c
.
mentionString
=
"<@"
+
c
.
userID
+
"> "
c
.
client
.
UpdateStatus
(
0
,
"Use - @"
+
c
.
client
.
State
.
Ready
.
User
.
Username
+
" help"
)
}
func
(
c
*
DiscordClient
)
Shutdown
()
error
{
return
c
.
client
.
Close
()
}
func
(
c
*
DiscordClient
)
send
(
guildID
,
message
string
)
error
{
guild
,
err
:=
database
.
LoadGuild
(
guildID
)
if
err
!=
nil
{
return
err
}
if
guild
.
Channel
==
""
{
return
ErrAnnouncementChannelNotSet
}
return
c
.
sendChannel
(
guild
.
Channel
,
message
)
}
func
(
c
*
DiscordClient
)
sendChannel
(
channelID
,
message
string
)
error
{
// ignore the message that we sent
_
,
err
:=
c
.
client
.
ChannelMessageSend
(
channelID
,
message
)
return
err
}
func
(
c
*
DiscordClient
)
sendEmbed
(
guildId
string
,
embed
*
discordgo
.
MessageEmbed
)
error
{
guild
,
err
:=
database
.
LoadGuild
(
guildId
)
if
err
!=
nil
{
return
err
}
if
guild
.
Channel
==
""
{
return
ErrAnnouncementChannelNotSet
}
return
c
.
sendEmbedChannel
(
guild
.
Channel
,
embed
)
}
func
(
c
*
DiscordClient
)
sendEmbedChannel
(
channelID
string
,
embed
*
discordgo
.
MessageEmbed
)
error
{
_
,
err
:=
c
.
client
.
ChannelMessageSendEmbed
(
channelID
,
embed
,
)
return
err
}
func
(
c
*
DiscordClient
)
getPresence
(
guildId
,
userId
string
)
*
discordgo
.
Presence
{
p
,
err
:=
c
.
client
.
State
.
Presence
(
guildId
,
userId
)
if
err
!=
nil
{
log
.
Warnf
(
"failed to get discord presence for %d: %v"
,
userId
,
err
)
return
nil
}
return
p
}