diff --git a/common/chatdata.go b/common/chatdata.go
index 1fd77c7..bc7a191 100644
--- a/common/chatdata.go
+++ b/common/chatdata.go
@@ -1,10 +1,12 @@
package common
import (
+ "bytes"
"encoding/json"
"errors"
"fmt"
"strings"
+ "text/template"
)
type DataInterface interface {
@@ -89,38 +91,51 @@ type DataMessage struct {
Type MessageType
}
+var (
+ cmdme = template.Must(template.New("cmdme").Parse(`{{.From}} {{.Message}}`))
+ announcement = template.Must(template.New("announcement").Parse(`{{.Message}}`))
+ errormsg = template.Must(template.New("error").Parse(`{{.Message}}`))
+ notice = template.Must(template.New("notice").Parse(`{{.Message}}`))
+ command = template.Must(template.New("command").Parse(`{{.Message}}`))
+ commanderror = template.Must(template.New("commanderror").Parse(`{{.Message}}`))
+ cmdlMod = template.Must(template.New("cmdlMod").Parse(`{{.From}}: {{.Message}}`))
+ cmdlAdmin = template.Must(template.New("CmdlAdmin").Parse(`{{.From}}: {{.Message}}`))
+ defaultMsg = template.Must(template.New("defaultMsg").Parse(`{{.From}}: {{.Message}}`))
+)
+
// TODO: Read this HTML from a template somewhere
func (dc DataMessage) HTML() string {
+ buf := &bytes.Buffer{}
switch dc.Type {
case MsgAction:
- return `` + dc.From +
- ` ` + dc.Message + ``
-
+ cmdme.Execute(buf, dc)
+ return buf.String()
case MsgServer:
- return `` + dc.Message + ``
-
+ announcement.Execute(buf, dc)
+ return buf.String()
case MsgError:
- return `` + dc.Message + ``
-
+ errormsg.Execute(buf, dc)
+ return buf.String()
case MsgNotice:
- return `` + dc.Message + ``
-
+ notice.Execute(buf, dc)
+ return buf.String()
case MsgCommandResponse:
- return `` + dc.Message + ``
-
+ command.Execute(buf, dc)
+ return buf.String()
case MsgCommandError:
- return `` + dc.Message + ``
+ commanderror.Execute(buf, dc)
+ return buf.String()
default:
- badge := ""
switch dc.Level {
case CmdlMod:
- badge = ``
+ cmdlMod.Execute(buf, dc)
case CmdlAdmin:
- badge = ``
+ cmdlAdmin.Execute(buf, dc)
+ default:
+ defaultMsg.Execute(buf, dc)
}
- return `` + badge + `` + dc.From +
- `: ` + dc.Message + ``
+ return buf.String()
}
}
@@ -165,42 +180,51 @@ type DataEvent struct {
Event EventType
User string
Color string
+ Users []string
}
+var (
+ evKick = template.Must(template.New("evKick").Parse(`{{.User}} has been kicked.`))
+ evLeave = template.Must(template.New("evLeave").Parse(`{{.User}} has left the chat.`))
+ evBan = template.Must(template.New("evBan").Parse(`{{.User}} has been banned.`))
+ evJoin = template.Must(template.New("evJoin").Parse(`{{.User}} has joined the chat.`))
+ evNameChangeWC = template.Must(template.New("evNameChangeWC").Parse(`Somebody changed their name, but IDK who {{.}}.`))
+ evNameChange = template.Must(template.New("evNameChange").Parse(`{{index .Users 0}} has changed their name to {{index .Users 1}}.`))
+ evNameChangeForced = template.Must(template.New("evNameChangeForced").Parse(`{{index .Users 0}} has had their name changed to {{index .Users 1}} by an admin.`))
+ evNameChangeForcedWC = template.Must(template.New("evNameChangeForcedWC").Parse(`An admin changed somebody's name, but IDK who {{.}}.`))
+)
+
func (de DataEvent) HTML() string {
+ buf := &bytes.Buffer{}
switch de.Event {
case EvKick:
- return `` +
- de.User + ` has been kicked.`
+ evKick.Execute(buf, de)
+ return buf.String()
case EvLeave:
- return `` +
- de.User + ` has left the chat.`
+ evLeave.Execute(buf, de)
+ return buf.String()
case EvBan:
- return `` +
- de.User + ` has been banned.`
+ evBan.Execute(buf, de)
+ return buf.String()
case EvJoin:
- return `` +
- de.User + ` has joined the chat.`
+ evJoin.Execute(buf, de)
+ return buf.String()
case EvNameChange:
- names := strings.Split(de.User, ":")
- if len(names) != 2 {
- return `Somebody changed their name, but IDK who ` +
- ParseEmotes("Jebaited") + `.`
+ de.Users = strings.Split(de.User, ":")
+ if len(de.Users) < 2 {
+ evNameChangeWC.Execute(buf, ParseEmotes("Jebaited"))
+ } else {
+ evNameChange.Execute(buf, de)
}
-
- return `` +
- names[0] + ` has changed their name to ` + names[1] + `.`
+ return buf.String()
case EvNameChangeForced:
- names := strings.Split(de.User, ":")
- if len(names) != 2 {
- return `An admin changed somebody's name, but IDK who ` +
- ParseEmotes("Jebaited") + `.`
+ de.Users = strings.Split(de.User, ":")
+ if len(de.Users) < 2 {
+ evNameChangeForcedWC.Execute(buf, ParseEmotes("Jebaited"))
+ } else {
+ evNameChangeForced.Execute(buf, de)
}
-
- return `` +
- names[0] + ` has had their name changed to ` + names[1] + ` by an admin.`
+ return buf.String()
}
return ""
}