summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorSho Sakuma <me@m1sk9.dev>2026-01-27 18:56:34 +0900
committerGitHub <noreply@github.com>2026-01-27 18:56:34 +0900
commitbb2dbeb80ade2a7e128d9eb62fff65358779b075 (patch)
tree4090253d55c73bb1079dfc6260d49cfe5b497a93 /engine
parentc3649ec2b53b21ed5b859cc9410f8db58e661d31 (diff)
parent5c3a0d8027eb7be1d5decea71eae4d9bd03accc7 (diff)
downloadLunaticChat-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')
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt5
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelCannotInviteSelfException.kt7
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelLimitExceededException.kt7
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelMemberLimitExceededException.kt8
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerAlreadyBannedException.kt8
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBannedException.kt8
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassBanException.kt8
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerBypassKickException.kt8
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerMembershipLimitExceededException.kt10
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPlayerNotBannedException.kt8
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChannelPrivateRequiresInvitationException.kt8
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNode.kt18
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")
}