Skip to content

Commit

Permalink
Update low-level APIs for mutes (#448)
Browse files Browse the repository at this point in the history
* Update low-level APIs for mutes

* Add permission

* Update core representation
  • Loading branch information
DRSchlaubi authored Dec 23, 2021
1 parent 06bb870 commit 607f785
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 10 deletions.
11 changes: 10 additions & 1 deletion common/src/main/kotlin/entity/Member.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package dev.kord.common.entity
import dev.kord.common.entity.optional.Optional
import dev.kord.common.entity.optional.OptionalBoolean
import dev.kord.common.entity.optional.OptionalSnowflake
import kotlinx.datetime.Instant
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

Expand All @@ -23,6 +24,8 @@ data class DiscordGuildMember(
val mute: OptionalBoolean = OptionalBoolean.Missing,
val pending: OptionalBoolean = OptionalBoolean.Missing,
val avatar: Optional<String?> = Optional.Missing(),
@SerialName("communication_disabled_until")
val communicationDisabledUntil: Optional<Instant?> = Optional.Missing()
)


Expand All @@ -42,6 +45,8 @@ data class DiscordInteractionGuildMember(
val permissions: Permissions,
val pending: OptionalBoolean = OptionalBoolean.Missing,
val avatar: Optional<String?> = Optional.Missing(),
@SerialName("communication_disabled_until")
val communicationDisabledUntil: Optional<Instant?> = Optional.Missing()
)


Expand All @@ -64,6 +69,8 @@ data class DiscordAddedGuildMember(
val guildId: Snowflake,
val pending: OptionalBoolean = OptionalBoolean.Missing,
val avatar: Optional<String?> = Optional.Missing(),
@SerialName("communication_disabled_until")
val communicationDisabledUntil: Optional<Instant?> = Optional.Missing()
)

@Serializable
Expand All @@ -86,6 +93,8 @@ data class DiscordUpdatedGuildMember(
val premiumSince: Optional<String?> = Optional.Missing(),
val pending: OptionalBoolean = OptionalBoolean.Missing,
val avatar: Optional<String?> = Optional.Missing(),
@SerialName("communication_disabled_until")
val communicationDisabledUntil: Optional<Instant?> = Optional.Missing()
)

@Serializable
Expand All @@ -96,4 +105,4 @@ data class DiscordThreadMember(
@SerialName("join_timestamp")
val joinTimestamp: String,
val flags: Int
)
)
4 changes: 3 additions & 1 deletion common/src/main/kotlin/entity/Permission.kt
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ sealed class Permission(val code: DiscordBitSet) {
object CreatePublicThreads : Permission(0x0800000000)
object CreatePrivateThreads : Permission(0x1000000000)
object SendMessagesInThreads : Permission(0x4000000000)
object ModerateMembers : Permission(0x0000010000000000)
object All : Permission(values.fold(EmptyBitSet()) { acc, value -> acc.add(value.code); acc })

companion object {
Expand Down Expand Up @@ -202,7 +203,8 @@ sealed class Permission(val code: DiscordBitSet) {
ManageThreads,
CreatePublicThreads,
CreatePrivateThreads,
SendMessagesInThreads
SendMessagesInThreads,
ModerateMembers
)
}
}
49 changes: 44 additions & 5 deletions core/src/main/kotlin/cache/data/MemberData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import dev.kord.cache.api.data.description
import dev.kord.common.entity.*
import dev.kord.common.entity.optional.Optional
import dev.kord.common.entity.optional.OptionalBoolean
import kotlinx.datetime.Instant
import kotlinx.serialization.Serializable

private val MemberData.id get() = "$userId$guildId"
Expand All @@ -18,28 +19,66 @@ public data class MemberData(
val joinedAt: String,
val premiumSince: Optional<String?> = Optional.Missing(),
val pending: OptionalBoolean = OptionalBoolean.Missing,
val avatar: Optional<String?> = Optional.Missing()
val avatar: Optional<String?> = Optional.Missing(),
val communicationDisabledUntil: Optional<Instant?> = Optional.Missing()
) {

public companion object {
public val description: DataDescription<MemberData, String> = description(MemberData::id)

public fun from(userId: Snowflake, guildId: Snowflake, entity: DiscordGuildMember): MemberData = with(entity) {
MemberData(userId = userId, guildId = guildId, nick, roles, joinedAt, premiumSince, avatar = avatar)
MemberData(
userId = userId,
guildId = guildId,
nick,
roles,
joinedAt,
premiumSince,
avatar = avatar,
communicationDisabledUntil = communicationDisabledUntil
)
}


public fun from(userId: Snowflake, guildId: Snowflake, entity: DiscordInteractionGuildMember): MemberData =
with(entity) {
MemberData(userId = userId, guildId = guildId, nick, roles, joinedAt, premiumSince, avatar = avatar)
MemberData(
userId = userId,
guildId = guildId,
nick,
roles,
joinedAt,
premiumSince,
avatar = avatar,
communicationDisabledUntil = communicationDisabledUntil
)
}

public fun from(userId: Snowflake, entity: DiscordAddedGuildMember): MemberData = with(entity) {
MemberData(userId = userId, guildId = guildId, nick, roles, joinedAt, premiumSince, avatar = avatar)
MemberData(
userId = userId,
guildId = guildId,
nick,
roles,
joinedAt,
premiumSince,
avatar = avatar,
communicationDisabledUntil = communicationDisabledUntil
)
}

public fun from(entity: DiscordUpdatedGuildMember): MemberData = with(entity) {
MemberData(userId = user.id, guildId = guildId, nick, roles, joinedAt, premiumSince, pending, avatar = avatar)
MemberData(
userId = user.id,
guildId = guildId,
nick,
roles,
joinedAt,
premiumSince,
pending,
avatar = avatar,
communicationDisabledUntil
)
}

}
Expand Down
5 changes: 5 additions & 0 deletions core/src/main/kotlin/entity/Member.kt
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@ public class Member(
*/
public val isPending: Boolean get() = memberData.pending.discordBoolean

/**
* The [Instant] until the user's timeout expires, or `null` if the user does not have a timeout.
*/
public val communicationDisabledUntil: Instant? get() = memberData.communicationDisabledUntil.value

/**
* Whether this member's [id] equals the [Guild.ownerId].
*
Expand Down
11 changes: 8 additions & 3 deletions rest/src/main/kotlin/builder/member/MemberModifyBuilder.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package dev.kord.rest.builder.member

import dev.kord.rest.builder.AuditRequestBuilder
import dev.kord.common.annotation.KordDsl
import dev.kord.common.entity.Snowflake
import dev.kord.common.entity.optional.Optional
import dev.kord.common.entity.optional.OptionalBoolean
import dev.kord.common.entity.optional.OptionalSnowflake
import dev.kord.common.entity.optional.delegate.delegate
import dev.kord.rest.builder.AuditRequestBuilder
import dev.kord.rest.json.request.GuildMemberModifyRequest
import kotlinx.datetime.Instant

@KordDsl
class MemberModifyBuilder : AuditRequestBuilder<GuildMemberModifyRequest> {
Expand All @@ -25,6 +26,9 @@ class MemberModifyBuilder : AuditRequestBuilder<GuildMemberModifyRequest> {
private var _nickname: Optional<String?> = Optional.Missing()
var nickname: String? by ::_nickname.delegate()

private var _communicationDisabledUntil: Optional<Instant?> = Optional.Missing()
var communicationDisabledUntil: Instant? by ::_communicationDisabledUntil.delegate()

private var _roles: Optional<MutableSet<Snowflake>?> = Optional.Missing()
var roles: MutableSet<Snowflake>? by ::_roles.delegate()

Expand All @@ -33,6 +37,7 @@ class MemberModifyBuilder : AuditRequestBuilder<GuildMemberModifyRequest> {
channelId = _voiceChannelId,
mute = _muted,
deaf = _deafened,
roles = _roles
roles = _roles,
communicationDisabledUntil = _communicationDisabledUntil
)
}
}
4 changes: 4 additions & 0 deletions rest/src/main/kotlin/json/request/GuildRequests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ data class GuildMemberAddRequest(
val roles: Optional<Set<Snowflake>> = Optional.Missing(),
val mute: OptionalBoolean = OptionalBoolean.Missing,
val deaf: OptionalBoolean = OptionalBoolean.Missing,
@SerialName("communication_disabled_until")
val communicationDisabledUntil: Optional<Instant> = Optional.Missing()
)

@Serializable
Expand All @@ -123,6 +125,8 @@ data class GuildMemberModifyRequest(
val deaf: OptionalBoolean? = OptionalBoolean.Missing,
@SerialName("channel_id")
val channelId: OptionalSnowflake? = OptionalSnowflake.Missing,
@SerialName("communication_disabled_until")
val communicationDisabledUntil: Optional<Instant?> = Optional.Missing()
)


Expand Down

0 comments on commit 607f785

Please sign in to comment.