add plugin to show colors
This commit is contained in:
parent
e09d5853ac
commit
945b6afd85
73
plugins/palette.go
Normal file
73
plugins/palette.go
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package plugins
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"image"
|
||||||
|
"image/color"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
|
"github.com/matrix-org/gomatrix"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Palette responds to color messages
|
||||||
|
type Palette struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Descr describes this plugin
|
||||||
|
func (h *Palette) Descr() string {
|
||||||
|
return "Creates an solid 256x56 image of the color specified."
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re is the regex for matching color messages.
|
||||||
|
func (h *Palette) Re() string {
|
||||||
|
return `(?i)^#[a-f0-9]{6}$`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Match determines if we are asking for a color
|
||||||
|
func (h *Palette) Match(user, msg string) bool {
|
||||||
|
re := regexp.MustCompile(h.Re())
|
||||||
|
return re.MatchString(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStore we don't need a store here
|
||||||
|
func (h *Palette) SetStore(s PluginStore) {}
|
||||||
|
|
||||||
|
func (h *Palette) parseHexColor(s string) (*color.RGBA, error) {
|
||||||
|
c := &color.RGBA{
|
||||||
|
A: 0xff,
|
||||||
|
}
|
||||||
|
_, err := fmt.Sscanf(s, "#%02x%02x%02x", &c.R, &c.G, &c.B)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RespondText to color request events
|
||||||
|
func (h *Palette) RespondText(c *gomatrix.Client, ev *gomatrix.Event, user, post string) {
|
||||||
|
const width, height = 256, 56
|
||||||
|
|
||||||
|
img := image.NewRGBA(image.Rect(0, 0, 256, 56))
|
||||||
|
color, err := h.parseHexColor(post)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
SendText(c, ev.RoomID, fmt.Sprintf("%s", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
for y := 0; y < height; y++ {
|
||||||
|
for x := 0; x < width; x++ {
|
||||||
|
img.Set(x, y, color)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = SendImage(c, ev.RoomID, img)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Name color
|
||||||
|
func (h *Palette) Name() string {
|
||||||
|
return "Palette"
|
||||||
|
}
|
@ -188,6 +188,7 @@ var Plugs = Plugins{
|
|||||||
&Hi{},
|
&Hi{},
|
||||||
&LoveYou{},
|
&LoveYou{},
|
||||||
&OpenBSDMan{},
|
&OpenBSDMan{},
|
||||||
|
&Palette{},
|
||||||
&Snap{},
|
&Snap{},
|
||||||
&Source{},
|
&Source{},
|
||||||
&Thanks{},
|
&Thanks{},
|
||||||
|
Loading…
Reference in New Issue
Block a user