Skip to content

Commit 415c6e5

Browse files
authored
Merge pull request #16 from scopeclient/fix-blank-avi
fix: unwrap on blank avatar
2 parents a1d6ad1 + 9f8a23d commit 415c6e5

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

src/discord/src/client.rs

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,27 @@ impl RawEventHandler for RawClient {
7878
async fn raw_event(&self, ctx: Context, ev: serenity::model::prelude::Event) {
7979
if let Event::Unknown(unk) = ev {
8080
if unk.kind == "READY" {
81-
let user = unk.value.as_object().unwrap().get("user").unwrap().as_object().unwrap();
82-
83-
self.0.user.get_or_init(|| DiscordMessageAuthor {
84-
display_name: DisplayName(user.get("username").unwrap().as_str().unwrap().to_owned()),
85-
icon: format!(
86-
"https://cdn.discordapp.com/avatars/{}/{}",
87-
user.get("id").unwrap().as_str().unwrap(),
88-
user.get("avatar").unwrap().as_str().unwrap()
89-
),
90-
});
81+
if let Some(user) = unk.value.as_object().and_then(|obj| obj.get("user")).and_then(|u| u.as_object()) {
82+
let username = user.get("username").and_then(|u| u.as_str()).unwrap_or("Unknown User").to_owned();
83+
84+
let user_id = user.get("id").and_then(|id| id.as_str()).unwrap_or_default();
85+
86+
let icon = user
87+
.get("avatar")
88+
.and_then(|avatar| avatar.as_str())
89+
.map(|avatar| format!("https://cdn.discordapp.com/avatars/{}/{}", user_id, avatar))
90+
.unwrap_or_else(|| {
91+
format!(
92+
"https://cdn.discordapp.com/embed/avatars/{}.png",
93+
(user_id.parse::<u64>().unwrap_or(0) % 5)
94+
)
95+
});
96+
97+
self.0.user.get_or_init(|| DiscordMessageAuthor {
98+
display_name: DisplayName(username),
99+
icon,
100+
});
101+
}
91102
}
92103
}
93104
}

0 commit comments

Comments
 (0)