You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
6.1 KiB
153 lines
6.1 KiB
package main |
|
|
|
import ( |
|
"fmt" |
|
"strings" |
|
"time" |
|
"regexp" |
|
|
|
"github.com/bwmarrin/discordgo" |
|
) |
|
|
|
func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { |
|
defer log.PanicSafe() |
|
if m.Author.ID == "302050872383242240" && strings.Contains(m.Content, "minutes until the server can be bumped") { |
|
log.LogDebug("Failed bump detected") |
|
re := regexp.MustCompile("Please wait another (.*) minutes until the server can be bumped") |
|
match := re.FindStringSubmatch(m.Content) |
|
m.Content = fmt.Sprintf("@Thanos bs %+v", match[1]) |
|
s.ChannelMessageSend(config.AdminChannel, m.Content) |
|
BumpSet(BotCommand{ |
|
Message: m, |
|
Session: s, |
|
Parts: strings.Split(m.Content, " ")[2:], |
|
}) |
|
} else if m.Author.ID == "302050872383242240" { |
|
log.LogDebug("Not a failed bump.") |
|
log.LogDebug(fmt.Sprintf("%+v: %+v", m.Author.ID, m.Embeds[0])) |
|
} |
|
if m.Author.ID == s.State.User.ID || m.Author.Bot { |
|
return |
|
} |
|
if m.GuildID == "" { |
|
handlePM(s, m) |
|
return |
|
} |
|
if m.ChannelID == config.MonitorChann { |
|
if strings.Contains(m.Content, "erif") && !m.Author.Bot { |
|
s.ChannelMessageSend(m.ChannelID, fmt.Sprintf("%+v send me a private message for verification.", m.Author.Mention())) |
|
} |
|
return |
|
} |
|
if isAdmin(m.Member) { |
|
adminInteraction(s, m.Author.ID) |
|
} |
|
if m.ChannelID != config.AdminChannel { |
|
lastActiveChan = m.ChannelID |
|
lastActiveTime = time.Now() |
|
if len(m.Attachments) > 0 { |
|
activeInteraction(s, m.Author.ID) |
|
} |
|
} |
|
if strings.HasPrefix(m.Content, "!d bump") { |
|
if time.Since(config.BumpTime) < 2*time.Hour { |
|
s.ChannelMessageSend(m.ChannelID, fmt.Sprintf("Sorry, <@%+v> already claimed the bump. Better luck next time!", config.LastBumper)) |
|
return |
|
} |
|
activeInteraction(s, m.Author.ID) |
|
config.LastBumper = m.Author.ID |
|
go bumpTimer(s) |
|
return |
|
} |
|
if strings.Contains(m.Content, s.State.User.ID) { |
|
b := BotCommand{ |
|
Session: s, |
|
Message: m, |
|
Parts: strings.Split(m.Content, " ")[2:], |
|
} |
|
log.LogDebug("%+v", b.Parts) |
|
for _, cmd := range commands { |
|
for _, keyword := range cmd.Keywords { |
|
log.LogDebug("Checking if %+v contains %+v", m.Content, keyword) |
|
if strings.Contains(m.Content, keyword) { |
|
log.LogDebug("%+v found!", keyword) |
|
b.Command = keyword |
|
if !cmd.RequiresAdmin { |
|
log.LogDebug("%+v does not require admin, running!", cmd.Name) |
|
if !cmd.Exec(b) { |
|
s.ChannelMessageSend(config.AdminChannel, fmt.Sprintf("There was an error running %+v\n%+v", cmd.Name, cmd.Help)) |
|
} else { |
|
log.LogInfo("Ran command %+v for %+v", cmd.Name, m.Author.Username) |
|
} |
|
} else { |
|
log.LogDebug("%+v does require admin, checking!", cmd.Name) |
|
if isAdmin(m.Member) { |
|
if !cmd.Exec(b) { |
|
s.ChannelMessageSend(config.AdminChannel, fmt.Sprintf("There was an error running %+v\n%+v", cmd.Name, cmd.Help)) |
|
} else { |
|
log.LogInfo("Ran command %+v for %+v", cmd.Name, m.Author.Username) |
|
} |
|
} else { |
|
log.LogInfo("%+v tried to run an admin command (%+v) but isn't an admin.", m.Author.Username, keyword) |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
log.LogDebug("strings.Contains(m.Content, s.State.User.ID) was false for %+v", m.Content) |
|
if bump { |
|
s.ChannelMessageSend(m.ChannelID, fmt.Sprintf("%+v please say \"!d bump\" without the quotes to bump our server :)", m.Author.Mention())) |
|
} |
|
} |
|
|
|
} |
|
|
|
func handlePM(s *discordgo.Session, m *discordgo.MessageCreate) { |
|
defer log.PanicSafe() |
|
if strings.Contains(m.Content, "Rule") || strings.Contains(m.Content, "rule") { |
|
s.ChannelMessageSend(m.ChannelID, "I specifically said to say \"!rules\" without quotes in the _unverified_ channel for the rules.") |
|
} |
|
for _, uid := range config.Verifications { |
|
user := userFromID(uid.UserID) |
|
if m.Author.ID == user.ID { |
|
s.ChannelMessageSend(m.ChannelID, "Your verification is pending. An admin will respond to it when they are available.") |
|
s.ChannelMessageSend(config.AdminChannel, fmt.Sprintf("%+v said: %+v", m.Author.Mention(), m.Content)) |
|
return |
|
} |
|
} |
|
if len(m.Attachments) != 1 { |
|
s.ChannelMessageSend(m.ChannelID, "```I am a bot and this is an autoreply.\n\nUntil you send a verification, I will always say the following message:```\nYou may only send me your verification (and nothing else) to be passed to the admins (and no one else). Verification is a clear full face pic, with your pinky finger held to the corner of your mouth.") |
|
s.ChannelMessageSend(config.AdminChannel, fmt.Sprintf("%+v said: %+v", m.Author.Mention(), m.Content)) |
|
return |
|
} |
|
if strings.HasSuffix(strings.ToUpper(m.Attachments[0].ProxyURL), "HEIC") { |
|
s.ChannelMessageSend(m.ChannelID, "You have tried to send an unsupported file (HEIC). Please try again using an image (jpeg, jpg, png, etc).") |
|
return |
|
} |
|
if strings.HasSuffix(strings.ToUpper(m.Attachments[0].ProxyURL), "MP4") { |
|
s.ChannelMessageSend(m.ChannelID, "You have tried to send an unsupported file (MP4 Video). Please try again using an image (jpeg, jpg, png, etc).") |
|
return |
|
} |
|
if strings.HasSuffix(strings.ToUpper(m.Attachments[0].ProxyURL), "MP3") { |
|
s.ChannelMessageSend(m.ChannelID, "You have tried to send an unsupported file (MP3 Audio). Please try again using an image (jpeg, jpg, png, etc).") |
|
return |
|
} |
|
if !strings.HasSuffix(strings.ToUpper(m.Attachments[0].ProxyURL), "JPG") || !strings.HasSuffix(strings.ToUpper(m.Attachments[0].ProxyURL), "JPEG") || !strings.HasSuffix(strings.ToUpper(m.Attachments[0].ProxyURL), "PNG") || !strings.HasSuffix(strings.ToUpper(m.Attachments[0].ProxyURL), "BMP") { |
|
s.ChannelMessageSend(config.AdminChannel, "You have tried to send an unsupported file. Please try again using an image (jpeg, jpg, png, etc).") |
|
//return |
|
} |
|
delete(config.Unverified, m.Author.ID) |
|
var v Verification |
|
v.Submitted = time.Now() |
|
v.UserID = m.Author.ID |
|
v.Username = m.Author.Username |
|
v.Photo = m.Attachments[0].ProxyURL |
|
v.Status = "Submitted" |
|
msg, _ := s.ChannelMessageSend(config.AdminChannel, fmt.Sprintf("%+v\n%+v", v.Username, v.Photo)) |
|
config.Verifications[msg.ID] = v |
|
s.MessageReactionAdd(config.AdminChannel, msg.ID, "👎") |
|
s.MessageReactionAdd(config.AdminChannel, msg.ID, "👍") |
|
s.MessageReactionAdd(config.AdminChannel, msg.ID, "👶") |
|
s.MessageReactionAdd(config.AdminChannel, msg.ID, "⛔") |
|
}
|
|
|