move match check a bit
This commit is contained in:
parent
5d73848661
commit
02b75ee7b0
6
main.go
6
main.go
@ -152,8 +152,10 @@ func main() {
|
|||||||
if mtype, ok := ev.MessageType(); ok {
|
if mtype, ok := ev.MessageType(); ok {
|
||||||
switch mtype {
|
switch mtype {
|
||||||
case "m.text":
|
case "m.text":
|
||||||
p.SetStore(store)
|
if p.Match(username, post) {
|
||||||
p.RespondText(cli, ev, username, post)
|
p.SetStore(store)
|
||||||
|
p.RespondText(cli, ev, username, post)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,8 @@ func (h *Beer) fix(msg string) string {
|
|||||||
return re.ReplaceAllString(msg, "$1")
|
return re.ReplaceAllString(msg, "$1")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Beer) match(msg string) bool {
|
// Match determines if we should call the response for Beer
|
||||||
|
func (h *Beer) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(h.re())
|
re := regexp.MustCompile(h.re())
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg)
|
||||||
}
|
}
|
||||||
@ -138,23 +139,21 @@ func (h *Beer) SetStore(s PluginStore) {}
|
|||||||
|
|
||||||
// RespondText to looking up of beer requests
|
// RespondText to looking up of beer requests
|
||||||
func (h *Beer) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *Beer) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
if h.match(post) {
|
beer := h.fix(post)
|
||||||
beer := h.fix(post)
|
if beer != "" {
|
||||||
if beer != "" {
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
brr, err := h.get(beer)
|
||||||
brr, err := h.get(beer)
|
if err != nil {
|
||||||
if err != nil {
|
SendText(c, ev.RoomID, fmt.Sprintf("sorry %s, I can't look for beer. (%s)", ev.Sender, err))
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("sorry %s, I can't look for beer. (%s)", ev.Sender, err))
|
}
|
||||||
}
|
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case brr.Nhits == 0:
|
case brr.Nhits == 0:
|
||||||
SendText(c, ev.RoomID, "¯\\_(ツ)_/¯")
|
SendText(c, ev.RoomID, "¯\\_(ツ)_/¯")
|
||||||
case brr.Nhits == 1:
|
case brr.Nhits == 1:
|
||||||
SendText(c, ev.RoomID, h.pretty(*brr, false))
|
SendText(c, ev.RoomID, h.pretty(*brr, false))
|
||||||
case brr.Nhits > 1:
|
case brr.Nhits > 1:
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("Found %d beers, here is a random one:\n%s", brr.Nhits, h.pretty(*brr, true)))
|
SendText(c, ev.RoomID, fmt.Sprintf("Found %d beers, here is a random one:\n%s", brr.Nhits, h.pretty(*brr, true)))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,8 @@ import (
|
|||||||
type BotSnack struct {
|
type BotSnack struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *BotSnack) match(msg string) bool {
|
// Match determines if we should execute BotSnack
|
||||||
|
func (h *BotSnack) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(`(?i)botsnack`)
|
re := regexp.MustCompile(`(?i)botsnack`)
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg)
|
||||||
}
|
}
|
||||||
@ -38,10 +39,8 @@ func (h *BotSnack) SetStore(s PluginStore) {}
|
|||||||
func (h *BotSnack) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *BotSnack) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
u := NameRE.ReplaceAllString(user, "$1")
|
u := NameRE.ReplaceAllString(user, "$1")
|
||||||
if ToMe(u, post) {
|
if ToMe(u, post) {
|
||||||
if h.match(post) {
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
SendText(c, ev.RoomID, h.resp())
|
||||||
SendText(c, ev.RoomID, h.resp())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,9 +12,10 @@ import (
|
|||||||
type Hi struct {
|
type Hi struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Hi) match(msg string) bool {
|
// Match determines if we are highfiving
|
||||||
|
func (h *Hi) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(`(?i)^hi|hi$`)
|
re := regexp.MustCompile(`(?i)^hi|hi$`)
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg) && ToMe(user, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetStore we don't need a store here
|
// SetStore we don't need a store here
|
||||||
@ -22,14 +23,10 @@ func (h *Hi) SetStore(s PluginStore) {}
|
|||||||
|
|
||||||
// RespondText to hi events
|
// RespondText to hi events
|
||||||
func (h *Hi) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *Hi) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
u := NameRE.ReplaceAllString(user, "$1")
|
|
||||||
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
||||||
if ToMe(u, post) {
|
|
||||||
if h.match(post) {
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
SendText(c, ev.RoomID, fmt.Sprintf("hi %s!", s))
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("hi %s!", s))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name hi
|
// Name hi
|
||||||
|
@ -15,19 +15,22 @@ type HighFive struct {
|
|||||||
// SetStore we don't need a store here.
|
// SetStore we don't need a store here.
|
||||||
func (h *HighFive) SetStore(s PluginStore) {}
|
func (h *HighFive) SetStore(s PluginStore) {}
|
||||||
|
|
||||||
|
// Match determines if we should bother giving a high five
|
||||||
|
func (h *HighFive) Match(user, msg string) bool {
|
||||||
|
return ToMe(user, msg)
|
||||||
|
}
|
||||||
|
|
||||||
// RespondText to high five events
|
// RespondText to high five events
|
||||||
func (h *HighFive) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *HighFive) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
u := NameRE.ReplaceAllString(user, "$1")
|
|
||||||
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
||||||
if ToMe(u, post) {
|
|
||||||
if strings.Contains(post, "o/") {
|
if strings.Contains(post, "o/") {
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("\\o %s", s))
|
SendText(c, ev.RoomID, fmt.Sprintf("\\o %s", s))
|
||||||
}
|
}
|
||||||
if strings.Contains(post, "\\o") {
|
if strings.Contains(post, "\\o") {
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("%s o/", s))
|
SendText(c, ev.RoomID, fmt.Sprintf("%s o/", s))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,9 +13,10 @@ import (
|
|||||||
type LoveYou struct {
|
type LoveYou struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *LoveYou) match(msg string) bool {
|
// Match checks for 'i love you' and a reference to the bot name
|
||||||
|
func (h *LoveYou) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(`(?i)i love you`)
|
re := regexp.MustCompile(`(?i)i love you`)
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg) && ToMe(user, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *LoveYou) resp() string {
|
func (h *LoveYou) resp() string {
|
||||||
@ -37,13 +38,8 @@ func (h *LoveYou) SetStore(s PluginStore) {}
|
|||||||
|
|
||||||
// RespondText to love events
|
// RespondText to love events
|
||||||
func (h *LoveYou) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *LoveYou) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
u := NameRE.ReplaceAllString(user, "$1")
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
if ToMe(u, post) {
|
SendText(c, ev.RoomID, h.resp())
|
||||||
if h.match(post) {
|
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
|
||||||
SendText(c, ev.RoomID, h.resp())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name i love you
|
// Name i love you
|
||||||
|
@ -32,7 +32,8 @@ func (h *OpenBSDMan) fix(msg string) string {
|
|||||||
return resp
|
return resp
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *OpenBSDMan) match(msg string) bool {
|
// Match checks for our man page re
|
||||||
|
func (h *OpenBSDMan) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(h.re())
|
re := regexp.MustCompile(h.re())
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg)
|
||||||
}
|
}
|
||||||
@ -42,12 +43,10 @@ func (h *OpenBSDMan) SetStore(s PluginStore) {}
|
|||||||
|
|
||||||
// RespondText sends back a man page.
|
// RespondText sends back a man page.
|
||||||
func (h *OpenBSDMan) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *OpenBSDMan) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
if h.match(post) {
|
page := h.fix(post)
|
||||||
page := h.fix(post)
|
if page != "" {
|
||||||
if page != "" {
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
SendText(c, ev.RoomID, fmt.Sprintf("https://man.openbsd.org/%s", page))
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("https://man.openbsd.org/%s", page))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,18 +7,27 @@ import (
|
|||||||
"github.com/matrix-org/gomatrix"
|
"github.com/matrix-org/gomatrix"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PluginStore matches MCStore so that the main store can be used by plugins.
|
// PluginStore matches MCStore. This allows the main store to be used by
|
||||||
|
// plugins.
|
||||||
type PluginStore interface {
|
type PluginStore interface {
|
||||||
Set(key, values string)
|
Set(key, values string)
|
||||||
Get(key string) (string, error)
|
Get(key string) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plugin defines the functions a plugin must implement to be used by
|
// Plugin defines the interface a plugin must implement to be used by
|
||||||
// mcchunkie.
|
// mcchunkie.
|
||||||
type Plugin interface {
|
type Plugin interface {
|
||||||
//Respond(c *gomatrix.Client, ev *gomatrix.Event, user string)
|
// RespondText responds to a "m.text" event
|
||||||
RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, path string)
|
RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, path string)
|
||||||
|
|
||||||
|
// Name should return the human readable name of the bot
|
||||||
Name() string
|
Name() string
|
||||||
|
|
||||||
|
// Match determines if the plugin's main Respond function should be
|
||||||
|
// called
|
||||||
|
Match(user, message string) bool
|
||||||
|
|
||||||
|
// SetStore exposes the top level MCStore to a plugin
|
||||||
SetStore(s PluginStore)
|
SetStore(s PluginStore)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,7 +37,8 @@ var NameRE = regexp.MustCompile(`@(.+):.+$`)
|
|||||||
|
|
||||||
// ToMe returns true of the message pertains to the bot
|
// ToMe returns true of the message pertains to the bot
|
||||||
func ToMe(user, message string) bool {
|
func ToMe(user, message string) bool {
|
||||||
return strings.Contains(message, user)
|
u := NameRE.ReplaceAllString(user, "$1")
|
||||||
|
return strings.Contains(message, u)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendText sends a text message to a given room. It pretends to be
|
// SendText sends a text message to a given room. It pretends to be
|
||||||
|
@ -12,9 +12,10 @@ import (
|
|||||||
type Source struct {
|
type Source struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Source) match(msg string) bool {
|
// Match determins if someone is asking about the source code
|
||||||
|
func (h *Source) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(`(?i)where is your (source|code)`)
|
re := regexp.MustCompile(`(?i)where is your (source|code)`)
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg) && ToMe(user, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetStore does nothing in here
|
// SetStore does nothing in here
|
||||||
@ -22,14 +23,10 @@ func (h *Source) SetStore(s PluginStore) {}
|
|||||||
|
|
||||||
// RespondText to questions about TheSource™©®⑨
|
// RespondText to questions about TheSource™©®⑨
|
||||||
func (h *Source) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *Source) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
u := NameRE.ReplaceAllString(user, "$1")
|
|
||||||
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
||||||
if ToMe(u, post) {
|
|
||||||
if h.match(post) {
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
SendText(c, ev.RoomID, fmt.Sprintf("%s: %s ;D", s, "https://git.sr.ht/~qbit/mcchunkie"))
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("%s: %s ;D", s, "https://git.sr.ht/~qbit/mcchunkie"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name Source
|
// Name Source
|
||||||
|
@ -13,9 +13,11 @@ import (
|
|||||||
type Version struct {
|
type Version struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Version) match(msg string) bool {
|
// Match checks for "version" anywhere. Might want to tighten this one down at
|
||||||
|
// some point
|
||||||
|
func (v *Version) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(`(?i)version$`)
|
re := regexp.MustCompile(`(?i)version$`)
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg) && ToMe(user, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Version) print(to string) string {
|
func (v *Version) print(to string) string {
|
||||||
@ -23,18 +25,14 @@ func (v *Version) print(to string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetStore does nothing in here
|
// SetStore does nothing in here
|
||||||
func (h *Version) SetStore(s PluginStore) {}
|
func (v *Version) SetStore(s PluginStore) {}
|
||||||
|
|
||||||
// RespondText to version events
|
// RespondText to version events
|
||||||
func (v *Version) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (v *Version) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
u := NameRE.ReplaceAllString(user, "$1")
|
|
||||||
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
||||||
if ToMe(u, post) {
|
|
||||||
if v.match(post) {
|
log.Printf("%s: responding to '%s'", v.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", v.Name(), ev.Sender)
|
SendText(c, ev.RoomID, v.print(s))
|
||||||
SendText(c, ev.RoomID, v.print(s))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name Version
|
// Name Version
|
||||||
|
@ -146,7 +146,8 @@ func (h *Weather) re() string {
|
|||||||
return `(?i)^weather: (\d+)$`
|
return `(?i)^weather: (\d+)$`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Weather) match(msg string) bool {
|
// Match checks for "weather: " messages
|
||||||
|
func (h *Weather) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(h.re())
|
re := regexp.MustCompile(h.re())
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg)
|
||||||
}
|
}
|
||||||
@ -158,23 +159,21 @@ func (h *Weather) fix(msg string) string {
|
|||||||
|
|
||||||
// RespondText to looking up of weather lookup requests
|
// RespondText to looking up of weather lookup requests
|
||||||
func (h *Weather) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *Weather) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
if h.match(post) {
|
weather := h.fix(post)
|
||||||
weather := h.fix(post)
|
if weather != "" {
|
||||||
if weather != "" {
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
wd, err := h.get(weather)
|
||||||
wd, err := h.get(weather)
|
if err != nil {
|
||||||
if err != nil {
|
SendText(c, ev.RoomID, fmt.Sprintf("sorry %s, I can't look up the weather. %s", ev.Sender, err))
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("sorry %s, I can't look up the weather. %s", ev.Sender, err))
|
|
||||||
}
|
|
||||||
SendText(c, ev.RoomID,
|
|
||||||
fmt.Sprintf("%s: %s (%s) Humidity: %s%%, %s",
|
|
||||||
wd.Name,
|
|
||||||
wd.f(),
|
|
||||||
wd.c(),
|
|
||||||
wd.humidity(),
|
|
||||||
wd.conditions(),
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
SendText(c, ev.RoomID,
|
||||||
|
fmt.Sprintf("%s: %s (%s) Humidity: %s%%, %s",
|
||||||
|
wd.Name,
|
||||||
|
wd.f(),
|
||||||
|
wd.c(),
|
||||||
|
wd.humidity(),
|
||||||
|
wd.conditions(),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,9 +12,10 @@ import (
|
|||||||
type Wb struct {
|
type Wb struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Wb) match(msg string) bool {
|
// Match determins if we are welcomed back
|
||||||
|
func (h *Wb) Match(user, msg string) bool {
|
||||||
re := regexp.MustCompile(`(?i)^welcome back|welcome back$|^wb|wb$`)
|
re := regexp.MustCompile(`(?i)^welcome back|welcome back$|^wb|wb$`)
|
||||||
return re.MatchString(msg)
|
return re.MatchString(msg) && ToMe(user, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetStore we don't need a store here
|
// SetStore we don't need a store here
|
||||||
@ -22,14 +23,10 @@ func (h *Wb) SetStore(s PluginStore) {}
|
|||||||
|
|
||||||
// RespondText to welcome back events
|
// RespondText to welcome back events
|
||||||
func (h *Wb) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
func (h *Wb) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
u := NameRE.ReplaceAllString(user, "$1")
|
|
||||||
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
s := NameRE.ReplaceAllString(ev.Sender, "$1")
|
||||||
if ToMe(u, post) {
|
|
||||||
if h.match(post) {
|
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
||||||
log.Printf("%s: responding to '%s'", h.Name(), ev.Sender)
|
SendText(c, ev.RoomID, fmt.Sprintf("thanks %s!", s))
|
||||||
SendText(c, ev.RoomID, fmt.Sprintf("thanks %s!", s))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name Wb
|
// Name Wb
|
||||||
|
Loading…
Reference in New Issue
Block a user