@@ -103,35 +103,69 @@ func formatPayload(e *event.Event, format string) []byte {
103
103
switch format {
104
104
case "discord" :
105
105
var dwe DiscordWebhookEvent
106
+ var dme DiscordMessageEmbed
107
+ var dmes []* DiscordMessageEmbed
108
+ var dmefs []* DiscordMessageEmbedField
106
109
switch e .Type {
107
110
case "chainsync.block" :
108
111
be := e .Payload .(chainsync.BlockEvent )
109
- dwe .Content = fmt .Sprintf (
110
- "New Cardano block!\n Number: %d, Slot: %d\n Hash: %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 )
115
127
case "chainsync.rollback" :
116
128
be := e .Payload .(chainsync.RollbackEvent )
117
- dwe .Content = fmt .Sprintf (
118
- "Cardano rollback!\n Slot: %d\n Hash: %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
+ })
122
138
case "chainsync.transaction" :
123
139
te := e .Payload .(chainsync.TransactionEvent )
124
- dwe .Content = fmt .Sprintf (
125
- "New Cardano transaction!\n Block: %d, Slot: %d, Inputs: %d, Outputs: %d\n Hash: %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 )
132
163
default :
133
164
dwe .Content = fmt .Sprintf ("%v" , e .Payload )
134
165
}
166
+ dme .Fields = dmefs
167
+ dmes = append (dmes , & dme )
168
+ dwe .Embeds = dmes
135
169
136
170
data , err = json .Marshal (dwe )
137
171
if err != nil {
@@ -147,7 +181,19 @@ func formatPayload(e *event.Event, format string) []byte {
147
181
}
148
182
149
183
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"`
151
197
}
152
198
153
199
func (w * WebhookOutput ) SendWebhook (e * event.Event ) error {
0 commit comments