From f2e66451468751df6d19faf71f03529313223fa8 Mon Sep 17 00:00:00 2001 From: Sean Hinchee Date: Wed, 16 Jan 2019 21:00:55 -0600 Subject: [PATCH] fix s/// regex (thanks viktuor) --- README.md | 2 +- commands.go | 53 +++++++++++++++++++++++------------------------------ 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 2599c3f92baf11abbccd3993ce744277fea95182..0faf90703786f6bdd062d571c0fc2cbc3e46e9e6 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Commands available in chat: You can regex the last message sent using a format such as: - s/forsynth/forsyth/g + s/forsynth/forsyth/ ## Config diff --git a/commands.go b/commands.go index ec0fe6e4c8a744f03cdcafdfd1db42fbb3ecfe59..e312d225514152480f31dd90dd932d26b09c61b5 100644 --- a/commands.go +++ b/commands.go @@ -9,45 +9,38 @@ import ( //ParseForCommands parses input for Commands, returns message if no command specified, else return is empty func ParseForCommands(line string) string { - if len(line) < 2 { - return line - } switch line[:2] { case "s/": - r := regexp.MustCompile(`s\/((\w|\s)+)\/((\w|\s|)+)\/`) + r := regexp.MustCompile(`s/([^/]+)/([^/]*)/$`) n := r.FindStringSubmatchIndex(line) if len(n) < 1 { return "" } - msg := State.Messages - for i := len(msg)-1; i >= 0; i-- { - if (msg[i].ChannelID != State.Channel.ID && msg[i].GuildID != State.Guild.ID) { + i := 0 + var m *discordgo.Message + for i = len(State.Messages) - 1; i >= 0; i-- { + m = State.Messages[i] + if m.ChannelID == State.Channel.ID && m.GuildID == State.Guild.ID && m.Author.ID == Session.User.ID { break } - if msg[i].Author.ID != Session.User.ID { - break - } - if strings.Contains(msg[i].Content, line[n[2]:n[3]]) { - cmd, err := regexp.Compile("(" + line[n[2]:n[3]] + ")") - if err != nil { - Msg(ErrorMsg, "%s - invalid regex\n", line) - } - rep := cmd.ReplaceAllString(msg[i].Content, "") - if len(line) == 5 { - rep = cmd.ReplaceAllString(msg[i].Content, line[n[4]:n[5]]) - } - data := discordgo.NewMessageEdit(msg[i].ChannelID, msg[i].ID) - data = data.SetContent(rep) - _, err = State.Session.DiscordGo.ChannelMessageEditComplex(data) - if err != nil { - Msg(ErrorMsg, "%s\n", err) - return "" - } - Msg(TextMsg, "%s -> %s\n", msg[i].Content, rep) - return "" - } } - return line + if i == 0 || !strings.Contains(m.Content, line[n[2]:n[3]]) { + return "" + } + r, err := regexp.Compile("(" + line[n[2]:n[3]] + ")") + if err != nil { + Msg(ErrorMsg, "%s - invalid regex\n", line) + } + rep := r.ReplaceAllString(m.Content, line[n[4]:n[5]]) + newm := discordgo.NewMessageEdit(m.ChannelID, m.ID) + newm = newm.SetContent(rep) + _, err = State.Session.DiscordGo.ChannelMessageEditComplex(newm) + if err != nil { + Msg(ErrorMsg, "%s\n", err) + return "" + } + Msg(TextMsg, "%s -> %s\n", m.Content, rep) + return "" case ":?": // Show help menu Msg(TextMsg, "Commands: \n")