mirror of https://github.com/velour/catbase.git
hacked poc for edits as an animation mechanism
This commit is contained in:
parent
5c1b1abbf1
commit
34e2404e8b
|
@ -110,6 +110,10 @@ func (b *bot) DB() *sqlx.DB {
|
|||
return b.db
|
||||
}
|
||||
|
||||
func (b *bot) Conn() Connector {
|
||||
return b.conn
|
||||
}
|
||||
|
||||
// Create any tables if necessary based on version of DB
|
||||
// Plugins should create their own tables, these are only for official bot stuff
|
||||
// Note: This does not return an error. Database issues are all fatal at this stage.
|
||||
|
@ -145,7 +149,7 @@ func (b *bot) migrateDB() {
|
|||
|
||||
// Adds a constructed handler to the bots handlers list
|
||||
func (b *bot) AddHandler(name string, h Handler) {
|
||||
b.plugins[strings.ToLower(name)] = h
|
||||
b.plugins[name] = h
|
||||
b.pluginOrdering = append(b.pluginOrdering, name)
|
||||
if entry := h.RegisterWeb(); entry != nil {
|
||||
b.httpEndPoints[name] = *entry
|
||||
|
|
|
@ -23,6 +23,8 @@ func (b *bot) MsgReceived(msg msg.Message) {
|
|||
// msg := b.buildMessage(client, inMsg)
|
||||
// do need to look up user and fix it
|
||||
|
||||
log.Println(msg.User.Name)
|
||||
|
||||
if strings.HasPrefix(msg.Body, "help ") && msg.Command {
|
||||
parts := strings.Fields(strings.ToLower(msg.Body))
|
||||
b.checkHelp(msg.Channel, parts)
|
||||
|
@ -65,6 +67,10 @@ func (b *bot) React(channel, reaction string, message msg.Message) {
|
|||
b.conn.React(channel, reaction, message)
|
||||
}
|
||||
|
||||
func (b *bot) Edit(channel, newMessage, identifier string) {
|
||||
b.conn.Edit(channel, newMessage, identifier)
|
||||
}
|
||||
|
||||
func (b *bot) GetEmojiList() map[string]string {
|
||||
return b.conn.GetEmojiList()
|
||||
}
|
||||
|
|
|
@ -13,11 +13,13 @@ type Bot interface {
|
|||
Config() *config.Config
|
||||
DBVersion() int64
|
||||
DB() *sqlx.DB
|
||||
Conn() Connector
|
||||
Who(string) []user.User
|
||||
AddHandler(string, Handler)
|
||||
SendMessage(string, string)
|
||||
SendAction(string, string)
|
||||
React(string, string, msg.Message)
|
||||
Edit(string, string, string)
|
||||
MsgReceived(msg.Message)
|
||||
EventReceived(msg.Message)
|
||||
Filter(msg.Message, string) string
|
||||
|
@ -34,6 +36,7 @@ type Connector interface {
|
|||
SendMessage(channel, message string)
|
||||
SendAction(channel, message string)
|
||||
React(string, string, msg.Message)
|
||||
Edit(string, string, string)
|
||||
GetEmojiList() map[string]string
|
||||
Serve() error
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ type MockBot struct {
|
|||
func (mb *MockBot) Config() *config.Config { return &mb.Cfg }
|
||||
func (mb *MockBot) DBVersion() int64 { return 1 }
|
||||
func (mb *MockBot) DB() *sqlx.DB { return mb.db }
|
||||
func (mb *MockBot) Conn() Connector { return nil }
|
||||
func (mb *MockBot) Who(string) []user.User { return []user.User{} }
|
||||
func (mb *MockBot) AddHandler(name string, f Handler) {}
|
||||
func (mb *MockBot) SendMessage(ch string, msg string) {
|
||||
|
@ -40,6 +41,7 @@ func (mb *MockBot) LastMessage(ch string) (msg.Message, error) { return msg.Mess
|
|||
func (mb *MockBot) CheckAdmin(nick string) bool { return false }
|
||||
|
||||
func (mb *MockBot) React(channel, reaction string, message msg.Message) {}
|
||||
func (mb *MockBot) Edit(channel, newMessage, identifier string) {}
|
||||
func (mb *MockBot) GetEmojiList() map[string]string { return make(map[string]string) }
|
||||
func (mb *MockBot) RegisterFilter(s string, f func(string) string) {}
|
||||
|
||||
|
|
|
@ -103,6 +103,10 @@ func (i *Irc) React(channel, reaction string, message msg.Message) {
|
|||
//we're not goign to do anything because it's IRC
|
||||
}
|
||||
|
||||
func (i *Irc) Edit(channel, newMessage, identifier string) {
|
||||
//we're not goign to do anything because it's IRC
|
||||
}
|
||||
|
||||
func (i *Irc) GetEmojiList() map[string]string {
|
||||
//we're not goign to do anything because it's IRC
|
||||
return make(map[string]string)
|
||||
|
|
2
main.go
2
main.go
|
@ -21,6 +21,7 @@ import (
|
|||
"github.com/velour/catbase/plugins/leftpad"
|
||||
"github.com/velour/catbase/plugins/reaction"
|
||||
"github.com/velour/catbase/plugins/reminder"
|
||||
"github.com/velour/catbase/plugins/rpgORdie"
|
||||
"github.com/velour/catbase/plugins/rss"
|
||||
"github.com/velour/catbase/plugins/stats"
|
||||
"github.com/velour/catbase/plugins/talker"
|
||||
|
@ -69,6 +70,7 @@ func main() {
|
|||
b.AddHandler("emojifyme", emojifyme.New(b))
|
||||
b.AddHandler("twitch", twitch.New(b))
|
||||
b.AddHandler("inventory", inventory.New(b))
|
||||
b.AddHandler("rpgORdie", rpgORdie.New(b))
|
||||
// catches anything left, will always return true
|
||||
b.AddHandler("factoid", fact.New(b))
|
||||
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
package rpgORdie
|
||||
|
||||
import (
|
||||
"strings"
|
||||
// "log"
|
||||
"time"
|
||||
|
||||
"github.com/velour/catbase/bot"
|
||||
"github.com/velour/catbase/bot/msg"
|
||||
"github.com/velour/catbase/slack"
|
||||
)
|
||||
|
||||
type RPGPlugin struct {
|
||||
Bot bot.Bot
|
||||
Slack *slack.Slack //nasty
|
||||
}
|
||||
|
||||
func New(b bot.Bot) *RPGPlugin {
|
||||
return &RPGPlugin{
|
||||
Bot: b,
|
||||
Slack: b.Conn().(*slack.Slack), //oh boy, this is just filthy
|
||||
}
|
||||
}
|
||||
|
||||
func (p *RPGPlugin) Message(message msg.Message) bool {
|
||||
if strings.ToLower(message.Body) == "start rpg" {
|
||||
p.Bot.SendMessage(message.Channel, "I'll edit this.")
|
||||
ts := p.Slack.GetLastMessageId()
|
||||
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
edited := ""
|
||||
for i := 0; i <= 5; i++ {
|
||||
p.Bot.Edit(message.Channel, edited, ts)
|
||||
edited += ":fire:"
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
p.Bot.Edit(message.Channel, "HECK YES", ts)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *RPGPlugin) LoadData() {
|
||||
|
||||
}
|
||||
|
||||
func (p *RPGPlugin) Help(channel string, parts []string) {
|
||||
p.Bot.SendMessage(channel, "Go find a walkthrough or something.")
|
||||
}
|
||||
|
||||
func (p *RPGPlugin) Event(kind string, message msg.Message) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *RPGPlugin) BotMessage(message msg.Message) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *RPGPlugin) RegisterWeb() *string {
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
package rpgORdie
|
||||
|
||||
import (
|
||||
)
|
|
@ -15,7 +15,7 @@ import (
|
|||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
// "sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/velour/catbase/bot"
|
||||
|
@ -38,6 +38,8 @@ type Slack struct {
|
|||
|
||||
emoji map[string]string
|
||||
|
||||
lastMessageId string
|
||||
|
||||
eventReceived func(msg.Message)
|
||||
messageReceived func(msg.Message)
|
||||
}
|
||||
|
@ -160,6 +162,7 @@ func New(c *config.Config) *Slack {
|
|||
lastRecieved: time.Now(),
|
||||
users: make(map[string]string),
|
||||
emoji: make(map[string]string),
|
||||
lastMessageId: "",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,17 +175,47 @@ func (s *Slack) RegisterMessageReceived(f func(msg.Message)) {
|
|||
}
|
||||
|
||||
func (s *Slack) SendMessageType(channel, messageType, subType, message string) error {
|
||||
m := slackMessage{
|
||||
ID: atomic.AddUint64(&idCounter, 1),
|
||||
Type: messageType,
|
||||
SubType: subType,
|
||||
Channel: channel,
|
||||
Text: message,
|
||||
}
|
||||
err := websocket.JSON.Send(s.ws, m)
|
||||
resp, err := http.PostForm("https://slack.com/api/chat.postMessage",
|
||||
url.Values{"token": {s.config.Slack.Token},
|
||||
"channel": {channel},
|
||||
"text": {message},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Printf("Error sending Slack message: %s", err)
|
||||
log.Printf("Error sending Slack reaction: %s", err)
|
||||
}
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatalf("Error reading Slack API body: %s", err)
|
||||
}
|
||||
|
||||
log.Println(string(body))
|
||||
|
||||
type MessageResponse struct {
|
||||
OK bool `json:ok`
|
||||
Channel string `json:channel`
|
||||
Timestamp string `json:ts`
|
||||
}
|
||||
|
||||
var mr MessageResponse
|
||||
err = json.Unmarshal(body, &mr)
|
||||
if err != nil {
|
||||
log.Fatalf("Error parsing message response: %s", err)
|
||||
}
|
||||
|
||||
bodyAsString := string(body)
|
||||
|
||||
//what the fuck
|
||||
if strings.Contains(bodyAsString, "\"ts\":\"") {
|
||||
mr.Timestamp = strings.Split(strings.Split(bodyAsString, "\"ts\":\"")[1], "\"")[0]
|
||||
}
|
||||
|
||||
s.lastMessageId = mr.Timestamp
|
||||
|
||||
log.Println(mr)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -209,6 +242,46 @@ func (s *Slack) React(channel, reaction string, message msg.Message) {
|
|||
log.Print(resp)
|
||||
}
|
||||
|
||||
func (s* Slack) GetLastMessageId() string {
|
||||
return s.lastMessageId
|
||||
}
|
||||
|
||||
func (s* Slack) PrintHistory(channel string, howMany int) {
|
||||
resp, err := http.PostForm("https://slack.com/api/channels.history",
|
||||
url.Values{"token": {s.config.Slack.Token},
|
||||
"channel": {channel},
|
||||
"count": {fmt.Sprintf("%d", howMany)}})
|
||||
if err != nil {
|
||||
log.Printf("Error getting slack history: %s", err)
|
||||
}
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatalf("Error reading Slack API body: %s", err)
|
||||
}
|
||||
|
||||
log.Println(string(body))
|
||||
}
|
||||
|
||||
func (s *Slack) Edit(channel, newMessage, identifier string) {
|
||||
log.Printf("Editing in (%s) %s: %s", identifier, channel, newMessage)
|
||||
resp, err := http.PostForm("https://slack.com/api/chat.update",
|
||||
url.Values{"token": {s.config.Slack.Token},
|
||||
"channel": {channel},
|
||||
"text": {newMessage},
|
||||
"ts": {identifier}})
|
||||
if err != nil {
|
||||
log.Printf("Error sending Slack reaction: %s", err)
|
||||
}
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatalf("Error reading Slack API body: %s", err)
|
||||
}
|
||||
|
||||
log.Println(string(body))
|
||||
}
|
||||
|
||||
func (s *Slack) GetEmojiList() map[string]string {
|
||||
return s.emoji
|
||||
}
|
||||
|
@ -275,6 +348,11 @@ func (s *Slack) Serve() error {
|
|||
case "message":
|
||||
if !msg.Hidden {
|
||||
m := s.buildMessage(msg)
|
||||
|
||||
log.Println()
|
||||
log.Println(m)
|
||||
log.Println()
|
||||
|
||||
if m.Time.Before(s.lastRecieved) {
|
||||
log.Printf("Ignoring message: %+v\nlastRecieved: %v msg: %v", msg.ID, s.lastRecieved, m.Time)
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue