-
Notifications
You must be signed in to change notification settings - Fork 1
/
discord.go
81 lines (71 loc) · 2.13 KB
/
discord.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main
import (
"regexp"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
)
func FindChannel(channels []*discordgo.Channel, channelName string) *discordgo.Channel {
for i := range channels {
if channels[i].Name == channelName {
return channels[i]
}
}
return nil
}
func CreateChannel(session *discordgo.Session, guildId, channelName string) (*discordgo.Channel, error) {
return session.GuildChannelCreate(guildId, channelName, discordgo.ChannelTypeGuildText)
}
func FindChannelMessage(session *discordgo.Session, channelID string, autorole *Autorole) (*discordgo.Message, error) {
limit := 100
var regexpNeedle *regexp.Regexp = nil
if autorole.Regexp != "" {
regexpNeedle = regexp.MustCompile(autorole.Regexp)
}
messages, err := session.ChannelMessages(channelID, limit, "", "", "")
for len(messages) > 0 {
if err != nil {
log.Errorf("Error getting messages from channel %s: %s", autorole.Channel, err)
return nil, err
}
message := findMessageInternal(messages, regexpNeedle, autorole.Message)
if message != nil {
return message, nil
}
messages, err = session.ChannelMessages(channelID, limit, messages[len(messages)-1].ID, "", "")
}
return nil, nil
}
func findMessageInternal(messages []*discordgo.Message, regexpNeedle *regexp.Regexp, needle string) *discordgo.Message {
for i := range messages {
if regexpNeedle != nil {
if regexpNeedle.MatchString(messages[i].Content) {
return messages[i]
}
} else {
if messages[i].Content == needle {
return messages[i]
}
}
}
return nil
}
func FindRole(session *discordgo.Session, guildId string, role string) (*discordgo.Role, error) {
roles, err := session.GuildRoles(guildId)
if err != nil {
return nil, err
}
for i := range roles {
if roles[i].Name == role {
return roles[i], nil
}
}
return nil, nil
}
func FindAutoroles(autoroles []*Autorole, channel *discordgo.Channel, message *discordgo.Message, emoji string) *Autorole {
for i := range autoroles {
if channel.Name == autoroles[i].Channel && message.Content == autoroles[i].Message && emoji == autoroles[i].Emoji {
return autoroles[i]
}
}
return nil
}