Skip to content

Commit 52b9389

Browse files
committed
goop: Add support for webhook avatars
1 parent 9e297ee commit 52b9389

File tree

5 files changed

+29
-20
lines changed

5 files changed

+29
-20
lines changed

cmd/goop/bnet.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type bnetConfig struct {
2222
ReconnectDelay time.Duration
2323
FirstChannel string
2424
CommandTrigger string
25+
AvatarURL string
2526

2627
RankWhisper Rank
2728
RankTalk Rank
@@ -158,7 +159,7 @@ func (b *BNetRealm) user(u *bnet.User) User {
158159
res.Rank = b.RankOperator
159160
}
160161

161-
var prod, _, lvl, tag = u.Stat()
162+
var prod, icon, lvl, tag = u.Stat()
162163
if prod != 0 {
163164
switch prod {
164165
case w3gs.ProductDemo, w3gs.ProductROC, w3gs.ProductTFT:
@@ -168,15 +169,17 @@ func (b *BNetRealm) user(u *bnet.User) User {
168169
return res
169170
}
170171

172+
res.AvatarURL = strings.Replace(b.AvatarURL, "${ICON}", icon.String(), -1)
173+
171174
if lvl > 0 && b.RankLevel != nil {
172175
for l, r := range b.RankLevel {
173176
if lvl >= l && r > res.Rank {
174177
res.Rank = r
175178
}
176179
}
177180
}
178-
if tag != "" && b.RankClanTag != nil {
179-
var rank = b.RankClanTag[tag]
181+
if tag != 0 && b.RankClanTag != nil {
182+
var rank = b.RankClanTag[tag.String()]
180183
if rank > res.Rank {
181184
res.Rank = rank
182185
}
@@ -215,7 +218,7 @@ func (b *BNetRealm) onUserLeft(ev *network.Event) {
215218
return
216219
}
217220

218-
b.Fire(&Join{
221+
b.Fire(&Leave{
219222
User: b.user(&user.User),
220223
Channel: b.channel(),
221224
})

cmd/goop/discord.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,10 @@ func (d *DiscordRealm) onMessageCreate(s *discordgo.Session, msg *discordgo.Mess
155155

156156
var chat = Chat{
157157
User: User{
158-
ID: msg.Author.ID,
159-
Name: msg.Author.Username,
160-
Rank: d.RankNoChannel,
158+
ID: msg.Author.ID,
159+
Name: msg.Author.Username,
160+
Rank: d.RankNoChannel,
161+
AvatarURL: msg.Author.AvatarURL(""),
161162
},
162163
Channel: Channel{
163164
ID: msg.ChannelID,
@@ -282,13 +283,15 @@ func (c *DiscordChannel) Relay(ev *network.Event, sender string) {
282283
err = c.Say(fmt.Sprintf("⬅️ **%s@%s** has left the channel", msg.User.Name, sender))
283284
case *Chat:
284285
err = c.WebhookOrSay(&discordgo.WebhookParams{
285-
Content: c.filter(msg.Content, msg.User.Rank),
286-
Username: fmt.Sprintf("%s@%s", msg.User.Name, sender),
286+
Content: c.filter(msg.Content, msg.User.Rank),
287+
Username: fmt.Sprintf("%s@%s", msg.User.Name, sender),
288+
AvatarURL: msg.User.AvatarURL,
287289
})
288290
case *PrivateChat:
289291
err = c.WebhookOrSay(&discordgo.WebhookParams{
290-
Content: c.filter(msg.Content, msg.User.Rank),
291-
Username: fmt.Sprintf("%s@%s", msg.User.Name, sender),
292+
Content: c.filter(msg.Content, msg.User.Rank),
293+
Username: fmt.Sprintf("[DM] %s@%s", msg.User.Name, sender),
294+
AvatarURL: msg.User.AvatarURL,
292295
})
293296
default:
294297
err = ErrUnknownEvent

cmd/goop/realm.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ type SystemMessage struct {
5353

5454
// User event
5555
type User struct {
56-
ID string
57-
Name string
58-
Rank Rank
56+
ID string
57+
Name string
58+
Rank Rank
59+
AvatarURL string
5960
}
6061

6162
// Channel event

cmd/goop/stdio.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type StdIOConfig struct {
2626
Read bool
2727
Rank Rank
2828
CommandTrigger string
29+
AvatarURL string
2930
}
3031

3132
// StdIO relays between stdin/stdout
@@ -47,9 +48,10 @@ func (o *StdIO) read() error {
4748

4849
o.Fire(&Chat{
4950
User: User{
50-
ID: "STDIO",
51-
Name: "stdin",
52-
Rank: o.Rank,
51+
ID: "STDIO",
52+
Name: "stdin",
53+
Rank: o.Rank,
54+
AvatarURL: o.AvatarURL,
5355
},
5456
Channel: Channel{
5557
ID: "STDIO",

network/bnet/user.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func reverse(s string) string {
3939
}
4040

4141
// Stat split into (icon, level, clan)
42-
func (u User) Stat() (product protocol.DWordString, icon string, lvl int, tag string) {
42+
func (u User) Stat() (product protocol.DWordString, icon protocol.DWordString, lvl int, tag protocol.DWordString) {
4343
lvl = -1
4444

4545
var s = strings.Split(u.StatString, " ")
@@ -50,7 +50,7 @@ func (u User) Stat() (product protocol.DWordString, icon string, lvl int, tag st
5050
product = protocol.DString(reverse(s[0]))
5151

5252
if len(s) >= 2 {
53-
icon = s[1]
53+
icon = protocol.DString(reverse(s[1]))
5454
}
5555

5656
if len(s) >= 3 {
@@ -59,7 +59,7 @@ func (u User) Stat() (product protocol.DWordString, icon string, lvl int, tag st
5959
}
6060
}
6161
if len(s) >= 4 {
62-
tag = strings.ToUpper(s[3])
62+
tag = protocol.DString(reverse(s[3]))
6363
}
6464

6565
return

0 commit comments

Comments
 (0)