From 7098c4db15b3974353d5f5f8c0d76f30131ad95a Mon Sep 17 00:00:00 2001 From: David Pewzner Date: Tue, 19 Nov 2024 19:37:12 -0500 Subject: [PATCH] Use Ready event handler instead of raw event handler --- Cargo.lock | 8 +++--- src/discord/Cargo.toml | 2 +- src/discord/src/client.rs | 43 ++++++------------------------- src/discord/src/message/author.rs | 6 ++++- 4 files changed, 18 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6878ef0..48bc979 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1073,8 +1073,8 @@ dependencies = [ [[package]] name = "command_attr" -version = "0.5.2" -source = "git+https://github.com/scopeclient/serenity#a7238a1d46a28e8c5006a9961a292fc37cbedef2" +version = "0.5.3" +source = "git+https://github.com/scopeclient/serenity#136a8abb9ff7d0e3526ec6e6f5547cd8985e2d6b" dependencies = [ "proc-macro2", "quote", @@ -5711,8 +5711,8 @@ dependencies = [ [[package]] name = "serenity" -version = "0.13.0" -source = "git+https://github.com/scopeclient/serenity#a7238a1d46a28e8c5006a9961a292fc37cbedef2" +version = "0.12.4" +source = "git+https://github.com/scopeclient/serenity#136a8abb9ff7d0e3526ec6e6f5547cd8985e2d6b" dependencies = [ "arrayvec", "async-trait", diff --git a/src/discord/Cargo.toml b/src/discord/Cargo.toml index e54d714..eb168f8 100644 --- a/src/discord/Cargo.toml +++ b/src/discord/Cargo.toml @@ -9,7 +9,7 @@ gpui = { git = "https://github.com/huacnlee/zed.git", branch = "export-platform- "font-kit", ] } scope-chat = { version = "0.1.0", path = "../chat" } -serenity = { git = "https://github.com/scopeclient/serenity", version = "0.13.0" } +serenity = { git = "https://github.com/scopeclient/serenity", version = "0.12" } tokio = "1.41.1" chrono.workspace = true scope-backend-cache = { version = "0.1.0", path = "../cache" } diff --git a/src/discord/src/client.rs b/src/discord/src/client.rs index b3d0c9c..cc33f78 100644 --- a/src/discord/src/client.rs +++ b/src/discord/src/client.rs @@ -4,7 +4,7 @@ use std::{ }; use serenity::{ - all::{Cache, ChannelId, Context, CreateMessage, Event, EventHandler, GatewayIntents, GetMessages, Http, Message, MessageId, RawEventHandler}, + all::{Cache, ChannelId, Context, CreateMessage, EventHandler, GatewayIntents, GetMessages, Http, Message, MessageId, Ready}, async_trait, }; use tokio::sync::{broadcast, RwLock}; @@ -40,7 +40,6 @@ impl DiscordClient { let mut discord = serenity::Client::builder(token, GatewayIntents::all()) .event_handler_arc(client.clone()) - .raw_event_handler(RawClient(client.clone())) .await .expect("Error creating client"); @@ -110,42 +109,16 @@ impl DiscordClient { } } -struct RawClient(Arc); - -#[async_trait] -impl RawEventHandler for RawClient { - async fn raw_event(&self, _: Context, ev: serenity::model::prelude::Event) { - if let Event::Unknown(unk) = ev { - if unk.kind == "READY" { - if let Some(user) = unk.value.as_object().and_then(|obj| obj.get("user")).and_then(|u| u.as_object()) { - let username = user.get("username").and_then(|u| u.as_str()).unwrap_or("Unknown User").to_owned(); - - let user_id = user.get("id").and_then(|id| id.as_str()).unwrap_or_default(); - - let icon = user - .get("avatar") - .and_then(|avatar| avatar.as_str()) - .map(|avatar| format!("https://cdn.discordapp.com/avatars/{}/{}", user_id, avatar)) - .unwrap_or_else(|| { - format!( - "https://cdn.discordapp.com/embed/avatars/{}.png", - (user_id.parse::().unwrap_or(0) % 5) - ) - }); - - self.0.user.get_or_init(|| DiscordMessageAuthor { - display_name: DisplayName(username), - icon, - id: user_id.to_owned(), - }); - } - } - } - } -} #[async_trait] impl EventHandler for DiscordClient { + async fn ready(&self, _: Context, ready: Ready) { + self.user.get_or_init(|| DiscordMessageAuthor { + display_name: DisplayName(ready.user.name.clone()), + icon: ready.user.face(), + id: ready.user.id.to_string(), + }); + } async fn message(&self, _: Context, msg: Message) { let snowflake = Snowflake { content: msg.channel_id.get(), diff --git a/src/discord/src/message/author.rs b/src/discord/src/message/author.rs index 11e73f9..67f2f34 100644 --- a/src/discord/src/message/author.rs +++ b/src/discord/src/message/author.rs @@ -25,7 +25,11 @@ impl MessageAuthor for DiscordMessageAuthor { } fn get_small_icon(&self) -> String { - self.icon.clone() + "?size=32" + let icon = match self.icon.strip_suffix("?size=1024") { + Some(strip) => strip.to_owned(), + None => self.icon.to_owned(), + }; + icon + "?size=32" } fn get_id(&self) -> String {