Skip to content

Commit 3b706b5

Browse files
committed
Determine avatar from Discord user of same name
1 parent 0af3ebc commit 3b706b5

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

bridge/discord.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,55 @@ func (d *discordBot) handleMemberUpdate(m *discordgo.Member) {
164164
}
165165
}
166166

167+
// See https://github.com/reactiflux/discord-irc/pull/230/files#diff-7202bb7fb017faefd425a2af32df2f9dR357
168+
func (d *discordBot) GetAvatar(guildID, username string) (_ string) {
169+
// First get all members
170+
guild, err := d.State.Guild(guildID)
171+
if err != nil {
172+
panic(err)
173+
}
174+
175+
// Matching members
176+
var foundMember *discordgo.Member
177+
178+
// First check an exact match, aborting on multiple
179+
for _, member := range guild.Members {
180+
if (username != member.Nick) && (username != member.User.Username) {
181+
continue
182+
}
183+
184+
if foundMember == nil {
185+
foundMember = member
186+
} else {
187+
return
188+
}
189+
}
190+
191+
// If no member found, check case-insensitively
192+
if foundMember == nil {
193+
for _, member := range guild.Members {
194+
if !strings.EqualFold(username, member.Nick) && !strings.EqualFold(username, member.User.Username) {
195+
continue
196+
}
197+
198+
if foundMember == nil {
199+
foundMember = member
200+
} else {
201+
return
202+
}
203+
}
204+
}
205+
206+
// Do not provide an avatar if:
207+
// - no matching user OR
208+
// - multiple matching users
209+
if foundMember == nil {
210+
return
211+
}
212+
213+
return discordgo.EndpointUserAvatar(foundMember.User.ID, foundMember.User.Avatar)
214+
}
215+
167216
// GetMemberNick returns the real display name for a Discord GuildMember
168217
func GetMemberNick(m *discordgo.Member) string {
169218
if m.Nick == "" {

bridge/home.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ func (h *home) loop() {
8080

8181
// TOOD: What if it takes a long time? wait=true below.
8282
err := h.discord.WebhookExecute(mapping.ID, mapping.Token, true, &discordgo.WebhookParams{
83-
Content: msg.Message,
84-
Username: msg.Username,
83+
Content: msg.Message,
84+
Username: msg.Username,
85+
AvatarURL: h.discord.GetAvatar(mapping.GuildID, msg.Username),
8586
})
8687

8788
if err != nil {

0 commit comments

Comments
 (0)