-
Notifications
You must be signed in to change notification settings - Fork 1
/
event.go
88 lines (70 loc) · 2.08 KB
/
event.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package eventview
import (
"darkbot/app/settings/logus"
"darkbot/app/settings/types"
"darkbot/app/viewer/apis"
"darkbot/app/viewer/views"
_ "embed"
"encoding/json"
"fmt"
"strings"
"time"
)
type EventRenderer struct {
main views.TemplateShared
api *apis.API
}
func NewEventRenderer(api *apis.API) *EventRenderer {
base := EventRenderer{}
base.api = api
base.main.Header = "#darkbot-event-view"
return &base
}
func (t *EventRenderer) DiscoverMessageID(content string, msgID types.DiscordMessageID) {
if strings.Contains(content, t.main.Header) {
t.main.MessageID = msgID
}
}
func (t *EventRenderer) MatchMessageID(messageID types.DiscordMessageID) bool {
return messageID == t.main.MessageID
}
func (t *EventRenderer) Send() {
t.main.Send(t.api)
}
type PlayerTemplate struct {
Time string
Name string
System string
}
func (t *EventRenderer) Render() error {
record, err := t.api.Scrappy.GetPlayerStorage().GetLatestRecord()
if logus.CheckWarn(err, "unable to get players") {
return err
}
logus.Debug("rendered events", logus.DiscordMessageID(t.main.MessageID))
eventTags, err := t.api.Players.Events.TagsList(t.api.ChannelID)
logus.CheckWarn(err, "failed to acquire player event list", logus.ChannelID(t.api.ChannelID))
if len(eventTags) > 0 {
var sb strings.Builder
sb.WriteString(fmt.Sprintf("**%s** %s\n", t.main.Header, time.Now().String()))
sb.WriteString("**Event table of players**\n")
sb.WriteString("```json\n")
for _, eventTag := range eventTags {
sb.WriteString(fmt.Sprintf(`"%s": `, eventTag))
matchedPlayers := []PlayerTemplate{}
for _, player := range record.List {
if views.TagContains(player.Name, []types.Tag{eventTag}) {
matchedPlayers = append(matchedPlayers, PlayerTemplate{Name: player.Name, Time: player.Time, System: player.System})
continue
}
}
result, err := json.Marshal(matchedPlayers)
logus.CheckError(err, "failed to marshal event matched players")
sb.WriteString(fmt.Sprintf("%s", string(result)))
sb.WriteString("\n")
}
sb.WriteString("```\n")
t.main.Content = sb.String()
}
return nil
}