diff options
author | Ashelyn Rose <git@ashen.earth> | 2025-02-28 21:52:16 -0700 |
---|---|---|
committer | Ashelyn Rose <git@ashen.earth> | 2025-02-28 21:52:16 -0700 |
commit | e9253bd959bf5bf6e8bcc6de4db247895b015a16 (patch) | |
tree | 1817aed80c8255d1292007a81e7f0a16138d25cc /src/system/bot/gateway.rs | |
parent | 5cb49a76c2cedb500b82f405af3cf1dcc0507f98 (diff) |
Partial refactor
Handles message prefixes and autoproxy
Diffstat (limited to 'src/system/bot/gateway.rs')
-rw-r--r-- | src/system/bot/gateway.rs | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/src/system/bot/gateway.rs b/src/system/bot/gateway.rs deleted file mode 100644 index bfe4603..0000000 --- a/src/system/bot/gateway.rs +++ /dev/null @@ -1,123 +0,0 @@ -use std::sync::Arc; -use tokio::sync::RwLock; -use tokio::sync::Mutex; -use twilight_model::gateway::OpCode; -use twilight_model::gateway::payload::outgoing::{update_presence::UpdatePresencePayload, UpdatePresence}; -use twilight_gateway::{ - Intents, Shard, ShardId, -}; - -use super::{Message, Status, SystemEvent, BotConfig}; - -pub struct Gateway { - shard: Arc<Mutex<Shard>>, - bot_conf: Arc<RwLock<BotConfig>>, -} - -impl Gateway { - pub fn new(discord_token: &String, bot_conf: &Arc<RwLock<BotConfig>>) -> Self { - let intents = Intents::GUILD_MEMBERS - | Intents::GUILD_PRESENCES - | Intents::GUILD_MESSAGES - | Intents::MESSAGE_CONTENT; - - Self { - shard: Arc::new(Mutex::new(Shard::new( - ShardId::ONE, - discord_token.clone(), - intents, - ))), - bot_conf: bot_conf.clone(), - } - } - - pub async fn set_status(&self, status: Status) { - { - let last_status = { (*self.bot_conf.read().await).last_status }; - - if status == last_status { - return - } - } - - - { - let mut shard = self.shard.lock().await; - - shard.command(&UpdatePresence { - d: UpdatePresencePayload { - activities: Vec::new(), - afk: false, - since: None, - status, - }, - op: OpCode::PresenceUpdate, - }).await.expect("Could not send command to gateway"); - } - - self.bot_conf.write().await.last_status = status; - } - - pub fn start_listening(&self) { - let bot_conf = self.bot_conf.clone(); - let shard = self.shard.clone(); - tokio::spawn(async move { - loop { - let bot_conf = { (*bot_conf.read().await).clone() }; - let next_event = { shard.lock().await.next_event().await }; - let system_channel = bot_conf.system_handler.as_ref().expect("No system channel"); - let message_channel = bot_conf.message_handler.as_ref().expect("No message channel"); - - match next_event { - Err(source) => { - system_channel - .send(SystemEvent::GatewayError(bot_conf.member_id, source.to_string())) - .await; - - if source.is_fatal() { - system_channel.send(SystemEvent::GatewayClosed(bot_conf.member_id)).await; - return; - } - } - Ok(event) => match event { - twilight_gateway::Event::Ready(ready) => { - system_channel - .send(SystemEvent::GatewayConnected(bot_conf.member_id, ready.user.id)) - .await; - } - - twilight_gateway::Event::MessageCreate(message_create) => { - let message = message_create.0; - - if message.author.id != bot_conf.reference_user_id { - continue; - } - - message_channel - .send((message.timestamp, Message::Complete(message, bot_conf.member_id))) - .await; - } - - twilight_gateway::Event::MessageUpdate(message_update) => { - if message_update.author.is_none() - || message_update.author.as_ref().unwrap().id != bot_conf.reference_user_id - { - continue; - } - - if message_update.edited_timestamp.is_none() || message_update.content.is_none() { - continue; - } - - message_channel - .send((message_update.edited_timestamp.unwrap(), Message::Partial(*message_update, bot_conf.member_id))) - .await; - } - - _ => (), - }, - }; - } - }); - } -} |