-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
35213fc
commit 7876d1b
Showing
16 changed files
with
951 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
82 changes: 82 additions & 0 deletions
82
bulbbot.Gateway/src/events/handler/guild_member_addition.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
use crate::events::event_handler::Handler; | ||
use crate::events::models::event::Event; | ||
use crate::manger_container_structs::RabbitMQMangerContainer; | ||
use crate::rabbit_mq::RabbitMqInjector; | ||
use lapin::types::FieldTable; | ||
use lapin::{options::BasicPublishOptions, BasicProperties}; | ||
use opentelemetry::global::ObjectSafeSpan; | ||
use opentelemetry::trace::{SpanKind, Status, TraceContextExt}; | ||
use opentelemetry::KeyValue; | ||
use opentelemetry::{global, trace::Tracer}; | ||
use serde::{Deserialize, Serialize}; | ||
use serenity::all::Member; | ||
use serenity::prelude::Context; | ||
use tracing::debug; | ||
|
||
#[derive(Serialize, Deserialize)] | ||
pub struct GuildMemberAdditionEvent { | ||
pub event: Event, | ||
pub shard_id: u32, | ||
pub timestamp: u64, | ||
pub content: Member, | ||
} | ||
|
||
impl Handler { | ||
pub async fn handle_guild_member_addition(&self, ctx: Context, member: Member) { | ||
let tracer = global::tracer(String::new()); | ||
|
||
let mut span = tracer | ||
.span_builder("guild_member_addition") | ||
.with_kind(SpanKind::Producer) | ||
.start(&tracer); | ||
|
||
span.set_attribute(KeyValue::new("guild_id", member.guild_id.to_string())); | ||
span.set_attribute(KeyValue::new("user_id", member.user.id.to_string())); | ||
span.set_attribute(KeyValue::new("shard_id", ctx.shard_id.0.to_string())); | ||
|
||
let cx = opentelemetry::Context::current_with_span(span); | ||
|
||
let mut headers = FieldTable::default(); | ||
global::get_text_map_propagator(|propagator| { | ||
propagator.inject_context(&cx, &mut RabbitMqInjector(&mut headers)) | ||
}); | ||
|
||
let data = ctx.clone(); | ||
let data_read = data.data.read().await; | ||
|
||
let channel = data_read | ||
.get::<RabbitMQMangerContainer>() | ||
.expect("[EVENT/GUILD_MEMBER_ADDITION] failed to get the Rabbit MQ Channel"); | ||
|
||
let event = GuildMemberAdditionEvent { | ||
event: Event::GuildMemberAddition, | ||
shard_id: ctx.shard_id.0, | ||
timestamp: Handler::get_unix_time(), | ||
content: member, | ||
}; | ||
let serialized = serde_json::to_string(&event) | ||
.expect("[EVENT/GUILD_MEMBER_ADDITION] failed to serialize event"); | ||
|
||
let payload = serialized.as_bytes(); | ||
|
||
let confirm = channel | ||
.basic_publish( | ||
"", | ||
"bulbbot.gateway", | ||
BasicPublishOptions::default(), | ||
payload, | ||
BasicProperties::default().with_headers(headers), | ||
) | ||
.await | ||
.expect("[EVENT/GUILD_MEMBER_ADDITION] failed to publish to channel") | ||
.await | ||
.expect( | ||
"[EVENT/GUILD_MEMBER_ADDITION] failed to get confirmation message from channel", | ||
); | ||
|
||
debug!("Rabbit MQ channel publish return message: {:#?}", confirm); | ||
|
||
cx.span().set_status(Status::Ok); | ||
cx.span().end(); | ||
} | ||
} |
86 changes: 86 additions & 0 deletions
86
bulbbot.Gateway/src/events/handler/guild_member_removal.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
use crate::events::event_handler::Handler; | ||
use crate::events::models::event::Event; | ||
use crate::manger_container_structs::RabbitMQMangerContainer; | ||
use crate::rabbit_mq::RabbitMqInjector; | ||
use lapin::types::FieldTable; | ||
use lapin::{options::BasicPublishOptions, BasicProperties}; | ||
use opentelemetry::global::ObjectSafeSpan; | ||
use opentelemetry::trace::{SpanKind, Status, TraceContextExt}; | ||
use opentelemetry::KeyValue; | ||
use opentelemetry::{global, trace::Tracer}; | ||
use serde::{Deserialize, Serialize}; | ||
use serenity::all::{GuildId, User}; | ||
use serenity::prelude::Context; | ||
use tracing::debug; | ||
|
||
#[derive(Serialize, Deserialize)] | ||
pub struct GuildMemberRemovalEventContent { | ||
pub guild_id: GuildId, | ||
pub user: User, | ||
} | ||
|
||
#[derive(Serialize, Deserialize)] | ||
pub struct GuildMemberRemovalEvent { | ||
pub event: Event, | ||
pub shard_id: u32, | ||
pub timestamp: u64, | ||
pub content: GuildMemberRemovalEventContent, | ||
} | ||
|
||
impl Handler { | ||
pub async fn handle_guild_member_removal(&self, ctx: Context, guild_id: GuildId, user: User) { | ||
let tracer = global::tracer(String::new()); | ||
|
||
let mut span = tracer | ||
.span_builder("guild_member_removal") | ||
.with_kind(SpanKind::Producer) | ||
.start(&tracer); | ||
|
||
span.set_attribute(KeyValue::new("guild_id", guild_id.to_string())); | ||
span.set_attribute(KeyValue::new("user_id", user.id.to_string())); | ||
span.set_attribute(KeyValue::new("shard_id", ctx.shard_id.0.to_string())); | ||
|
||
let cx = opentelemetry::Context::current_with_span(span); | ||
|
||
let mut headers = FieldTable::default(); | ||
global::get_text_map_propagator(|propagator| { | ||
propagator.inject_context(&cx, &mut RabbitMqInjector(&mut headers)) | ||
}); | ||
|
||
let data = ctx.clone(); | ||
let data_read = data.data.read().await; | ||
|
||
let channel = data_read | ||
.get::<RabbitMQMangerContainer>() | ||
.expect("[EVENT/GUILD_MEMBER_REMOVAL] failed to get the Rabbit MQ Channel"); | ||
|
||
let event = GuildMemberRemovalEvent { | ||
event: Event::GuildMemberAddition, | ||
shard_id: ctx.shard_id.0, | ||
timestamp: Handler::get_unix_time(), | ||
content: GuildMemberRemovalEventContent { guild_id, user }, | ||
}; | ||
let serialized = serde_json::to_string(&event) | ||
.expect("[EVENT/GUILD_MEMBER_REMOVAL] failed to serialize event"); | ||
|
||
let payload = serialized.as_bytes(); | ||
|
||
let confirm = channel | ||
.basic_publish( | ||
"", | ||
"bulbbot.gateway", | ||
BasicPublishOptions::default(), | ||
payload, | ||
BasicProperties::default().with_headers(headers), | ||
) | ||
.await | ||
.expect("[EVENT/GUILD_MEMBER_REMOVAL] failed to publish to channel") | ||
.await | ||
.expect("[EVENT/GUILD_MEMBER_REMOVAL] failed to get confirmation message from channel"); | ||
|
||
debug!("Rabbit MQ channel publish return message: {:#?}", confirm); | ||
|
||
cx.span().set_status(Status::Ok); | ||
cx.span().end(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 52 additions & 0 deletions
52
bulbbot.GatewayHandler/src/events/guild_member_addition.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
use crate::injector::ReqwestInjector; | ||
use crate::{handler::Handler, models::event_type::EventType}; | ||
use opentelemetry::{global, Context}; | ||
use opentelemetry::{global::BoxedSpan, trace::Span}; | ||
use serde::{Deserialize, Serialize}; | ||
use serenity::all::Member; | ||
use tracing::{debug, error}; | ||
|
||
#[derive(Serialize, Deserialize)] | ||
pub struct GuildMemberAdditionEvent { | ||
pub event: EventType, | ||
pub shard_id: u32, | ||
pub timestamp: u64, | ||
pub content: Member, | ||
} | ||
|
||
impl Handler { | ||
pub async fn handle_guild_member_addition_event( | ||
&self, | ||
event_data: &str, | ||
span: &mut BoxedSpan, | ||
cx: &Context, | ||
) -> bool { | ||
let message: GuildMemberAdditionEvent = | ||
serde_json::from_str(event_data).expect("Failed to parse data as message delete event"); | ||
|
||
let url = format!("{}/guilds/member/add", self.get_url(&message.event)); | ||
span.add_event(format!("Sending post request to {}", url), Vec::new()); | ||
|
||
let mut request = self.client.post(&url).json(&message).build().unwrap(); | ||
global::get_text_map_propagator(|propagator| { | ||
propagator.inject_context( | ||
cx, | ||
&mut ReqwestInjector { | ||
headers: request.headers_mut(), | ||
}, | ||
) | ||
}); | ||
let response = self.client.execute(request).await; | ||
|
||
match response { | ||
Ok(_) => { | ||
debug!("Sucessful request to {}", url); | ||
true | ||
} | ||
Err(err) => { | ||
error!("Request to {} errored with {:#?}", url, err); | ||
false | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
use crate::injector::ReqwestInjector; | ||
use crate::{handler::Handler, models::event_type::EventType}; | ||
use opentelemetry::{global, Context}; | ||
use opentelemetry::{global::BoxedSpan, trace::Span}; | ||
use serde::{Deserialize, Serialize}; | ||
use serenity::all::{GuildId, User}; | ||
use tracing::{debug, error}; | ||
|
||
#[derive(Serialize, Deserialize)] | ||
pub struct GuildMemberRemovalEventContent { | ||
pub guild_id: GuildId, | ||
pub user: User, | ||
} | ||
|
||
#[derive(Serialize, Deserialize)] | ||
pub struct GuildMemberRemovalEvent { | ||
pub event: EventType, | ||
pub shard_id: u32, | ||
pub timestamp: u64, | ||
pub content: GuildMemberRemovalEventContent, | ||
} | ||
|
||
impl Handler { | ||
pub async fn handle_guild_member_removal_event( | ||
&self, | ||
event_data: &str, | ||
span: &mut BoxedSpan, | ||
cx: &Context, | ||
) -> bool { | ||
let message: GuildMemberRemovalEvent = | ||
serde_json::from_str(event_data).expect("Failed to parse data as message delete event"); | ||
|
||
let url = format!("{}/guilds/member/remove", self.get_url(&message.event)); | ||
span.add_event(format!("Sending post request to {}", url), Vec::new()); | ||
|
||
let mut request = self.client.post(&url).json(&message).build().unwrap(); | ||
global::get_text_map_propagator(|propagator| { | ||
propagator.inject_context( | ||
cx, | ||
&mut ReqwestInjector { | ||
headers: request.headers_mut(), | ||
}, | ||
) | ||
}); | ||
let response = self.client.execute(request).await; | ||
|
||
match response { | ||
Ok(_) => { | ||
debug!("Sucessful request to {}", url); | ||
true | ||
} | ||
Err(err) => { | ||
error!("Request to {} errored with {:#?}", url, err); | ||
false | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
pub mod guild_member_addition; | ||
pub mod guild_member_removal; | ||
pub mod mesage_update; | ||
pub mod message; | ||
pub mod message_delete; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.