Skip to content

Commit 8104b17

Browse files
authored
Merge pull request #99 from blinklabs-io/feat/improve-discord-output
feat: improved discord output
2 parents 6461306 + f44188b commit 8104b17

File tree

1 file changed

+66
-20
lines changed

1 file changed

+66
-20
lines changed

output/webhook/webhook.go

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -103,35 +103,69 @@ func formatPayload(e *event.Event, format string) []byte {
103103
switch format {
104104
case "discord":
105105
var dwe DiscordWebhookEvent
106+
var dme DiscordMessageEmbed
107+
var dmes []*DiscordMessageEmbed
108+
var dmefs []*DiscordMessageEmbedField
106109
switch e.Type {
107110
case "chainsync.block":
108111
be := e.Payload.(chainsync.BlockEvent)
109-
dwe.Content = fmt.Sprintf(
110-
"New Cardano block!\nNumber: %d, Slot: %d\nHash: %s",
111-
be.BlockNumber,
112-
be.SlotNumber,
113-
be.BlockHash,
114-
)
112+
dme.Title = "New Cardano Block"
113+
dmefs = append(dmefs, &DiscordMessageEmbedField{
114+
Name: "Block Number",
115+
Value: fmt.Sprintf("%d", be.BlockNumber),
116+
})
117+
dmefs = append(dmefs, &DiscordMessageEmbedField{
118+
Name: "Slot Number",
119+
Value: fmt.Sprintf("%d", be.SlotNumber),
120+
})
121+
dmefs = append(dmefs, &DiscordMessageEmbedField{
122+
Name: "Block Hash",
123+
Value: be.BlockHash,
124+
})
125+
// TODO: fix this URL for different networks
126+
dme.URL = fmt.Sprintf("https://cexplorer.io/block/%s", be.BlockHash)
115127
case "chainsync.rollback":
116128
be := e.Payload.(chainsync.RollbackEvent)
117-
dwe.Content = fmt.Sprintf(
118-
"Cardano rollback!\nSlot: %d\nHash: %s",
119-
be.SlotNumber,
120-
be.BlockHash,
121-
)
129+
dme.Title = "Cardano Rollback"
130+
dmefs = append(dmefs, &DiscordMessageEmbedField{
131+
Name: "Slot Number",
132+
Value: fmt.Sprintf("%d", be.SlotNumber),
133+
})
134+
dmefs = append(dmefs, &DiscordMessageEmbedField{
135+
Name: "Block Hash",
136+
Value: be.BlockHash,
137+
})
122138
case "chainsync.transaction":
123139
te := e.Payload.(chainsync.TransactionEvent)
124-
dwe.Content = fmt.Sprintf(
125-
"New Cardano transaction!\nBlock: %d, Slot: %d, Inputs: %d, Outputs: %d\nHash: %s",
126-
te.BlockNumber,
127-
te.SlotNumber,
128-
len(te.Inputs),
129-
len(te.Outputs),
130-
te.TransactionHash,
131-
)
140+
dme.Title = "New Cardano Transaction"
141+
dmefs = append(dmefs, &DiscordMessageEmbedField{
142+
Name: "Block Number",
143+
Value: fmt.Sprintf("%d", te.BlockNumber),
144+
})
145+
dmefs = append(dmefs, &DiscordMessageEmbedField{
146+
Name: "Slot Number",
147+
Value: fmt.Sprintf("%d", te.SlotNumber),
148+
})
149+
dmefs = append(dmefs, &DiscordMessageEmbedField{
150+
Name: "Inputs",
151+
Value: fmt.Sprintf("%d", len(te.Inputs)),
152+
})
153+
dmefs = append(dmefs, &DiscordMessageEmbedField{
154+
Name: "Outputs",
155+
Value: fmt.Sprintf("%d", len(te.Outputs)),
156+
})
157+
dmefs = append(dmefs, &DiscordMessageEmbedField{
158+
Name: "Transaction Hash",
159+
Value: te.TransactionHash,
160+
})
161+
// TODO: fix this URL for different networks
162+
dme.URL = fmt.Sprintf("https://cexplorer.io/tx/%s", te.TransactionHash)
132163
default:
133164
dwe.Content = fmt.Sprintf("%v", e.Payload)
134165
}
166+
dme.Fields = dmefs
167+
dmes = append(dmes, &dme)
168+
dwe.Embeds = dmes
135169

136170
data, err = json.Marshal(dwe)
137171
if err != nil {
@@ -147,7 +181,19 @@ func formatPayload(e *event.Event, format string) []byte {
147181
}
148182

149183
type DiscordWebhookEvent struct {
150-
Content string `json:"content"`
184+
Content string `json:"content,omitempty"`
185+
Embeds []*DiscordMessageEmbed `json:"embeds,omitempty"`
186+
}
187+
188+
type DiscordMessageEmbed struct {
189+
URL string `json:"url,omitempty"`
190+
Title string `json:"title,omitempty"`
191+
Fields []*DiscordMessageEmbedField `json:"fields,omitempty"`
192+
}
193+
194+
type DiscordMessageEmbedField struct {
195+
Name string `json:"name"`
196+
Value string `json:"value"`
151197
}
152198

153199
func (w *WebhookOutput) SendWebhook(e *event.Event) error {

0 commit comments

Comments
 (0)