Skip to content

Commit

Permalink
Don't send guilds twice in READY, add guild scheduled events support
Browse files Browse the repository at this point in the history
Signed-off-by: Jens Reidel <[email protected]>
  • Loading branch information
Gelbpunkt committed Jun 25, 2024
1 parent 84076d8 commit 72a9fb0
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 21 deletions.
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ Create a file `config.json` and fill in these fields as you wish:
"current_member": false,
"members": false,
"roles": false,
"scheduled_events": false,
"stage_instances": false,
"stickers": false,
"users": false,
Expand Down
1 change: 1 addition & 0 deletions config.example.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"current_member": false,
"members": false,
"roles": false,
"scheduled_events": false,
"stage_instances": false,
"stickers": false,
"users": false,
Expand Down
27 changes: 24 additions & 3 deletions src/cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use twilight_model::{
presence::{Presence, UserOrId},
OpCode,
},
guild::{Emoji, Guild, Member, Role, UnavailableGuild},
guild::{scheduled_event::GuildScheduledEvent, Emoji, Guild, Member, Role, UnavailableGuild},
id::{
marker::{GuildMarker, UserMarker},
Id,
Expand Down Expand Up @@ -80,7 +80,14 @@ impl Guilds {
.0
.iter()
.guilds()
.map(|guild| guild_id_to_json(guild.id()))
.filter_map(|guild| {
if guild.unavailable() {
// Will be part of unavailable_guilds iterator
None
} else {
Some(guild_id_to_json(guild.id()))
}
})
.chain(self.0.iter().unavailable_guilds().map(guild_id_to_json))
.collect();

Expand Down Expand Up @@ -207,6 +214,18 @@ impl Guilds {
.unwrap_or_default()
}

fn scheduled_events_in_guild(&self, guild_id: Id<GuildMarker>) -> Vec<GuildScheduledEvent> {
self.0
.guild_scheduled_events(guild_id)
.map(|reference| {
reference
.iter()
.filter_map(|event_id| Some(self.0.scheduled_event(*event_id)?.value().clone()))
.collect()
})
.unwrap_or_default()
}

fn stage_instances_in_guild(&self, guild_id: Id<GuildMarker>) -> Vec<StageInstance> {
self.0
.guild_stage_instances(guild_id)
Expand Down Expand Up @@ -319,6 +338,7 @@ impl Guilds {
let emojis = self.emojis_in_guild(guild.id());
let members = self.members_in_guild(guild.id());
let roles = self.roles_in_guild(guild.id());
let scheduled_events = self.scheduled_events_in_guild(guild.id());
let stage_instances = self.stage_instances_in_guild(guild.id());
let stickers = self.stickers_in_guild(guild.id());
let voice_states = self.voice_states_in_guild(guild.id());
Expand All @@ -338,13 +358,14 @@ impl Guilds {
emojis,
explicit_content_filter: guild.explicit_content_filter(),
features: guild.features().cloned().collect(),
guild_scheduled_events: scheduled_events,
icon: guild.icon().map(ToOwned::to_owned),
id: guild.id(),
joined_at: guild.joined_at(),
large: guild.large(),
max_members: guild.max_members(),
max_presences: guild.max_presences(),
max_video_channel_users: None, // Not in the cache model
max_video_channel_users: guild.max_video_channel_users(),
member_count: guild.member_count(),
members,
mfa_level: guild.mfa_level(),
Expand Down
10 changes: 10 additions & 0 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ pub struct Cache {
pub current_member: bool,
pub members: bool,
pub roles: bool,
pub scheduled_events: bool,
pub stage_instances: bool,
pub stickers: bool,
pub users: bool,
Expand All @@ -72,6 +73,7 @@ impl Default for Cache {
emojis: false,
members: false,
roles: true,
scheduled_events: false,
stage_instances: false,
stickers: false,
users: false,
Expand Down Expand Up @@ -114,6 +116,10 @@ impl From<Cache> for EventTypeFlags {
flags |= Self::GUILD_EMOJIS_UPDATE;
}

if cache.scheduled_events {
flags |= Self::GUILD_SCHEDULED_EVENTS;
}

if cache.stage_instances {
flags |= Self::STAGE_INSTANCE_CREATE
| Self::STAGE_INSTANCE_DELETE
Expand Down Expand Up @@ -160,6 +166,10 @@ impl From<Cache> for ResourceType {
resource_types |= Self::ROLE;
}

if cache.scheduled_events {
resource_types |= Self::GUILD_SCHEDULED_EVENT;
}

if cache.stage_instances {
resource_types |= Self::STAGE_INSTANCE;
}
Expand Down

0 comments on commit 72a9fb0

Please sign in to comment.