diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-01-27 18:56:34 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-27 18:56:34 +0900 |
| commit | bb2dbeb80ade2a7e128d9eb62fff65358779b075 (patch) | |
| tree | 4090253d55c73bb1079dfc6260d49cfe5b497a93 /engine | |
| parent | c3649ec2b53b21ed5b859cc9410f8db58e661d31 (diff) | |
| parent | 5c3a0d8027eb7be1d5decea71eae4d9bd03accc7 (diff) | |
| download | LunaticChat-bb2dbeb80ade2a7e128d9eb62fff65358779b075.tar.gz LunaticChat-bb2dbeb80ade2a7e128d9eb62fff65358779b075.tar.bz2 LunaticChat-bb2dbeb80ade2a7e128d9eb62fff65358779b075.zip | |
Merge pull request #72 from m1sk9/fix-channel-feature
feat: Implement the remaining channel chat features
Diffstat (limited to 'engine')
12 files changed, 102 insertions, 1 deletions
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt index cc1f743..568839a 100644 --- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt @@ -13,6 +13,7 @@ import java.util.UUID * @property isPrivate Indicates whether the channel is private or public. * @property ownerId UUID of the user who owns the channel. * @property createdAt Timestamp of when the channel was created. + * @property bannedPlayers Set of UUIDs of players who are banned from the channel. */ @Serializable data class Channel( @@ -23,6 +24,10 @@ data class Channel( @Serializable(with = UUIDSerializer::class) val ownerId: UUID, val createdAt: Long = System.currentTimeMillis(), + val bannedPlayers: Set< + @Serializable(with = UUIDSerializer::class) + UUID, + > = emptySet(), ) { init { require(id.matches(CHANNEL_ID_PATTERN)) { diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelCannotInviteSelfException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelCannotInviteSelfException.kt new file mode 100644 index 0000000..5d1be73 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelCannotInviteSelfException.kt @@ -0,0 +1,7 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelCannotInviteSelfException( + playerId: UUID, +) : Exception("Player $playerId cannot invite themselves") diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelLimitExceededException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelLimitExceededException.kt new file mode 100644 index 0000000..c111ab4 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelLimitExceededException.kt @@ -0,0 +1,7 @@ +package dev.m1sk9.lunaticChat.engine.exception + +class ChannelLimitExceededException( + val limit: Int, +) : Exception( + "Channel creation failed: server has reached the maximum limit of $limit channels", + ) diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelMemberLimitExceededException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelMemberLimitExceededException.kt new file mode 100644 index 0000000..7e080dc --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelMemberLimitExceededException.kt @@ -0,0 +1,8 @@ +package dev.m1sk9.lunaticChat.engine.exception + +class ChannelMemberLimitExceededException( + val channelId: String, + val limit: Int, +) : Exception( + "Cannot join channel '$channelId': channel has reached the maximum member limit of $limit", + ) diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerAlreadyBannedException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerAlreadyBannedException.kt new file mode 100644 index 0000000..ce905f0 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerAlreadyBannedException.kt @@ -0,0 +1,8 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelPlayerAlreadyBannedException( + val playerId: UUID, + val channelId: String, +) : Exception("Player $playerId is already banned from channel $channelId") diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBannedException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBannedException.kt new file mode 100644 index 0000000..9a70c72 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBannedException.kt @@ -0,0 +1,8 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelPlayerBannedException( + playerId: UUID, + val channelId: String, +) : Exception("Player $playerId is banned from channel $channelId") diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassBanException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassBanException.kt new file mode 100644 index 0000000..529f590 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassBanException.kt @@ -0,0 +1,8 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelPlayerBypassBanException( + playerId: UUID, + val channelId: String, +) : Exception("Cannot ban player $playerId: player has bypass permission") diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassKickException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassKickException.kt new file mode 100644 index 0000000..e818657 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassKickException.kt @@ -0,0 +1,8 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelPlayerBypassKickException( + playerId: UUID, + val channelId: String, +) : Exception("Cannot kick player $playerId: player has bypass permission") diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerMembershipLimitExceededException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerMembershipLimitExceededException.kt new file mode 100644 index 0000000..afad6bf --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerMembershipLimitExceededException.kt @@ -0,0 +1,10 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelPlayerMembershipLimitExceededException( + val playerId: UUID, + val limit: Int, +) : Exception( + "Player $playerId has reached the maximum channel membership limit of $limit", + ) diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerNotBannedException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerNotBannedException.kt new file mode 100644 index 0000000..8dcc293 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerNotBannedException.kt @@ -0,0 +1,8 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelPlayerNotBannedException( + playerId: UUID, + val channelId: String, +) : Exception("Player $playerId is not banned from channel $channelId") diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPrivateRequiresInvitationException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPrivateRequiresInvitationException.kt new file mode 100644 index 0000000..737a529 --- /dev/null +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPrivateRequiresInvitationException.kt @@ -0,0 +1,8 @@ +package dev.m1sk9.lunaticChat.engine.exception + +import java.util.UUID + +class ChannelPrivateRequiresInvitationException( + val playerId: UUID, + val channelId: String, +) : Exception("Player $playerId cannot join private channel $channelId without invitation") diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNode.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNode.kt index 838a48b..9b6c3c6 100644 --- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNode.kt +++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNode.kt @@ -27,13 +27,29 @@ sealed class LunaticChatPermissionNode( object ChannelStatus : LunaticChatPermissionNode("lunaticchat.command.lc.channel.status") + object ChannelInfo : LunaticChatPermissionNode("lunaticchat.command.lc.channel.info") + object ChannelDelete : LunaticChatPermissionNode("lunaticchat.command.lc.channel.delete") + object ChannelInvite : LunaticChatPermissionNode("lunaticchat.command.lc.channel.invite") + + object ChannelKick : LunaticChatPermissionNode("lunaticchat.command.lc.channel.kick") + + object ChannelBan : LunaticChatPermissionNode("lunaticchat.command.lc.channel.ban") + + object ChannelUnban : LunaticChatPermissionNode("lunaticchat.command.lc.channel.unban") + + object ChannelMod : LunaticChatPermissionNode("lunaticchat.command.lc.channel.mod") + + object ChannelOwnership : LunaticChatPermissionNode("lunaticchat.command.lc.channel.ownership") + object ChatMode : LunaticChatPermissionNode("lunaticchat.command.lc.chatmode") object ChatModeToggle : LunaticChatPermissionNode("lunaticchat.command.lc.chatmode.toggle") object Spy : LunaticChatPermissionNode("lunaticchat.spy") - object NoticeUpdate : LunaticChatPermissionNode("lunaticchat.noticeUpdate") + object NoticeUpdate : LunaticChatPermissionNode("lunaticchat.noticeupdate") + + object ChannelBypass : LunaticChatPermissionNode("lunaticchat.channelbypass") } |
