Open
Description
When I retrieve a GuildScheduledEvent and access it's users or members property. The list returned contains all users in the guild instead of all users that have signed up for the event. I am using caching and I traced this issue back to the following CacheEntitySupplier code:
override fun getGuildScheduledEventMembersAfter(
guildId: Snowflake,
eventId: Snowflake,
after: Snowflake,
limit: Int?,
): Flow<Member> {
checkLimit(limit)
return cache
.query<MemberData> {
idGt(MemberData::userId, after)
idEq(MemberData::guildId, guildId)
}
.asFlow()
.mapNotNull {
val userData = cache.query<UserData> { idEq(UserData::id, it.userId) }.singleOrNull()
?: return@mapNotNull null
Member(it, userData, kord)
}
.limit(limit)
}
At no point are users filtered for the relevant event. This information isn't stored in MemberData as far as I can tell.
The code that runs in the RestEntitySupplier does return the expected results of only users that have signed up for an event.
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
HopeBaron commentedon Jun 23, 2022
Thanks for the report and sorry for the delay.
I'll look into it when possible
HopeBaron commentedon Jun 25, 2022
Back to you on this one, we don't seem to cache the members of the scheduled events regardless of the code provided being incorrect.
TRiGGY commentedon Jun 25, 2022
The cache with MemberData items will still be filled when members are retrieved from the Guild. My code does that too. Therefore the cache will be filled and wrong items are returned. I'll make an attempt to fix this myself tomorrow.
HopeBaron commentedon Jun 26, 2022
In order to fix this we need to introduce a new ScheduledEventMember that contains eventId - user - member given by discord
and make a data model to store it in cache
HopeBaron commentedon Jun 27, 2022
Please keep an eye on #631