package main import ( "fmt" "strings" "time" "github.com/bwmarrin/discordgo" ) func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { defer log.PanicSafe() var b BotCommand if strings.Contains(m.Content, s.State.User.ID) { b = BotCommand{ Session: s, Message: m, Parts: strings.Split(m.Content, " ")[1:], } } else { log.LogDebug("strings.Contains(m.Content, s.State.User.ID) was false for %+v", m.Content) } 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 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 } config.LastBumper = m.Author.ID go bumpTimer(s) return } if bump { s.ChannelMessageSend(m.ChannelID, fmt.Sprintf("%+v please say \"!d bump\" without the quotes to bump our server :)", m.Author.Mention())) } if strings.Contains(m.Content, s.State.User.ID) { for _, cmd := range commands { for _, keyword := range cmd.Keywords { if strings.Contains(m.Content, keyword) { b.Command = keyword if !cmd.RequiresAdmin { if !cmd.Exec(b) { s.ChannelMessageSend(config.AdminChannel, fmt.Sprintf("There was an error running %+v\n%+v", cmd.Name, cmd.Help)) } } else { 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)) } } } } } } } } 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 } 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, "⛔") }