grim/wasdead
Clone
Summary
Browse
Changes
Graph
Make the bot only look at messages that mention it
draft
2019-04-07, Gary Kramlich
9c111fecaf67
Make the bot only look at messages that mention it
package
discord
import
(
"errors"
"strings"
"time"
"github.com/bwmarrin/discordgo"
log
"github.com/sirupsen/logrus"
"bitbucket.org/TheToyz/nowdead/database"
)
type
DiscordClient
struct
{
client
*
discordgo
.
Session
db
database
.
Database
started
time
.
Time
userID
string
mentionString
string
}
func
New
(
token
string
,
db
database
.
Database
)
(
*
DiscordClient
,
error
)
{
client
,
err
:=
discordgo
.
New
(
"Bot "
+
strings
.
TrimSpace
(
token
))
if
err
!=
nil
{
return
nil
,
err
}
dc
:=
&
DiscordClient
{
client
:
client
,
db
:
db
,
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
+
"> "
}
func
(
c
*
DiscordClient
)
Shutdown
()
error
{
return
c
.
client
.
Close
()
}
func
(
c
*
DiscordClient
)
send
(
guild
,
message
string
)
error
{
channelID
:=
c
.
db
.
GetChannel
(
guild
)
if
channelID
==
""
{
return
errors
.
New
(
"No channel set"
)
}
return
c
.
sendChannel
(
channelID
,
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
)
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
}