@@ -164,6 +164,55 @@ func (d *discordBot) handleMemberUpdate(m *discordgo.Member) {
164
164
}
165
165
}
166
166
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
+
167
216
// GetMemberNick returns the real display name for a Discord GuildMember
168
217
func GetMemberNick (m * discordgo.Member ) string {
169
218
if m .Nick == "" {
0 commit comments