Add Guild Member Add and Remove handlers

pull/1/head
DustyP 6 years ago
parent 60c6cc7d36
commit 795f396a19

@ -1,7 +1,112 @@
package events
import "github.com/bwmarrin/discordgo"
import (
"djpianalto.com/goff/djpianalto.com/goff/utils"
"fmt"
"github.com/bwmarrin/discordgo"
"log"
"strconv"
"time"
)
func OnMemberAdd(s *discordgo.Session, event *discordgo.GuildMemberAdd) {
func OnGuildMemberAddLogging(s *discordgo.Session, member *discordgo.GuildMemberAdd) {
defer func() {
if r := recover(); r != nil {
log.Println("Recovered from panic in OnGuildMemberAddLogging", r)
}
}()
var channelID string
row := utils.Database.QueryRow("SELECT logging_channel FROM guilds where id=$1", member.GuildID)
err := row.Scan(&channelID)
if err != nil || channelID == "" {
return
}
guild, err := s.Guild(member.GuildID)
if err != nil {
log.Println(err)
return
}
var title string
if member.User.Bot {
title = "Bot Joined"
} else {
title = "Member Joined"
}
thumb := &discordgo.MessageEmbedThumbnail{
URL: member.User.AvatarURL(""),
}
int64ID, _ := strconv.ParseInt(member.User.ID, 10, 64)
snow := utils.ParseSnowflake(int64ID)
field := &discordgo.MessageEmbedField{
Name: "User was created:",
Value: utils.ParseDateString(snow.CreationTime),
Inline: false,
}
joinTime, _ := member.JoinedAt.Parse()
embed := &discordgo.MessageEmbed{
Title: title,
Description: fmt.Sprintf("%v (%v) Has Joined the Server", member.User.Mention(), member.User.ID),
Color: 0x0cc56a,
Thumbnail: thumb,
Footer: &discordgo.MessageEmbedFooter{
Text: fmt.Sprintf("Current Member Count: %v", guild.MemberCount),
IconURL: guild.IconURL(),
},
Timestamp: joinTime.Format(time.RFC3339),
Fields: []*discordgo.MessageEmbedField{field},
}
s.ChannelMessageSendEmbed(channelID, embed)
}
func OnGuildMemberRemoveLogging(s *discordgo.Session, member *discordgo.GuildMemberRemove) {
defer func() {
if r := recover(); r != nil {
log.Println("Recovered from panic in OnGuildMemberAddLogging", r)
}
}()
timeNow := time.Now()
var channelID string
row := utils.Database.QueryRow("SELECT logging_channel FROM guilds where id=$1", member.GuildID)
err := row.Scan(&channelID)
if err != nil || channelID == "" {
return
}
guild, err := s.Guild(member.GuildID)
if err != nil {
log.Println(err)
return
}
var title string
if member.User.Bot {
title = "Bot Left"
} else {
title = "Member Left"
}
thumb := &discordgo.MessageEmbedThumbnail{
URL: member.User.AvatarURL(""),
}
joinTime, _ := member.JoinedAt.Parse()
duration := utils.ParseDurationString(timeNow.Sub(joinTime))
embed := &discordgo.MessageEmbed{
Title: title,
Description: fmt.Sprintf("%v (%v) Has Left the Server\nThey were here for %v", member.User.Mention(), member.User.ID, duration),
Color: 0xff9431,
Thumbnail: thumb,
Footer: &discordgo.MessageEmbedFooter{
Text: fmt.Sprintf("Current Member Count: %v", guild.MemberCount),
IconURL: guild.IconURL(),
},
Timestamp: timeNow.Format(time.RFC3339),
}
s.ChannelMessageSendEmbed(channelID, embed)
}

@ -71,6 +71,8 @@ func main() {
dg.AddHandler(handler.StatusManager.OnReady)
dg.AddHandler(events.OnMessageUpdate)
dg.AddHandler(events.OnMessageDelete)
dg.AddHandler(events.OnGuildMemberAddLogging)
dg.AddHandler(events.OnGuildMemberRemoveLogging)
err = dg.Open()
if err != nil {

@ -35,3 +35,30 @@ func ParseDateString(inTime time.Time) string {
stamp := inTime.Format("2006-01-02 15:04:05")
return fmt.Sprintf("%v\n%v", dateString, stamp)
}
func ParseDurationString(inDur time.Duration) string {
s := int64(inDur.Seconds())
days := s / 86400
s = s - (days * 86400)
hours := s / 3600
s = s - (hours * 3600)
minutes := s / 60
seconds := s - (minutes * 60)
durString := ""
if days != 0 {
durString += fmt.Sprintf("%v days ", days)
}
if hours != 0 {
durString += fmt.Sprintf("%v hours ", hours)
}
if minutes != 0 {
durString += fmt.Sprintf("%v minutes ", minutes)
}
if seconds != 0 {
durString += fmt.Sprintf("%v seconds ", seconds)
}
if durString == "" {
durString = "0 seconds"
}
return fmt.Sprintf("%v", durString)
}

Loading…
Cancel
Save