summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorSho Sakuma <me@m1sk9.dev>2026-01-26 00:59:43 +0900
committerSho Sakuma <me@m1sk9.dev>2026-01-26 00:59:43 +0900
commitc5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c (patch)
tree1db77d1a98e91faae14366608083fe872d1d0968 /engine
parent1dc724dbb96a0d1fdc36c5105538e67efa5b0b87 (diff)
downloadLunaticChat-c5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c.tar.gz
LunaticChat-c5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c.tar.bz2
LunaticChat-c5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c.zip
feat: Add chatmode data
Diffstat (limited to 'engine')
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatMode.kt43
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatModeData.kt14
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt (renamed from engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/Channel.kt)2
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelData.kt (renamed from engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelData.kt)2
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelMember.kt (renamed from engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelMember.kt)2
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelRole.kt (renamed from engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelRole.kt)2
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChatModeStorageException.kt6
-rw-r--r--engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNode.kt4
8 files changed, 71 insertions, 4 deletions
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatMode.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatMode.kt
new file mode 100644
index 0000000..98bb79d
--- /dev/null
+++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatMode.kt
@@ -0,0 +1,43 @@
+package dev.m1sk9.lunaticChat.engine.chat
+
+/**
+ * Represents the chat mode for a player.
+ *
+ * Chat mode determines where messages are sent by default:
+ * - GLOBAL: All messages go to global chat (visible to everyone)
+ * - CHANNEL: All messages go to the active channel (visible to channel members only)
+ *
+ * Players can temporarily override their mode by prefixing messages with '!'.
+ * Chat mode is persisted and maintains its state across server restarts.
+ * Default mode is GLOBAL.
+ */
+enum class ChatMode {
+ /**
+ * Global chat mode - messages visible to all players.
+ */
+ GLOBAL,
+
+ /**
+ * Channel chat mode - messages visible only to channel members.
+ * Requires player to be in an active channel.
+ */
+ CHANNEL,
+ ;
+
+ /**
+ * Returns the opposite chat mode.
+ * Used when player prefixes message with '!'.
+ */
+ fun toggle(): ChatMode =
+ when (this) {
+ GLOBAL -> CHANNEL
+ CHANNEL -> GLOBAL
+ }
+
+ companion object {
+ /**
+ * Default chat mode for all players.
+ */
+ val DEFAULT = GLOBAL
+ }
+}
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatModeData.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatModeData.kt
new file mode 100644
index 0000000..b462ede
--- /dev/null
+++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/ChatModeData.kt
@@ -0,0 +1,14 @@
+package dev.m1sk9.lunaticChat.engine.chat
+
+import dev.m1sk9.lunaticChat.engine.settings.UUIDSerializer
+import kotlinx.serialization.Serializable
+import java.util.UUID
+
+@Serializable
+data class ChatModeData(
+ val modes: Map<
+ @Serializable(with = UUIDSerializer::class)
+ UUID,
+ ChatMode,
+ > = emptyMap(),
+)
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/Channel.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt
index 427e526..cc1f743 100644
--- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/Channel.kt
+++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/Channel.kt
@@ -1,4 +1,4 @@
-package dev.m1sk9.lunaticChat.engine.channel.modal
+package dev.m1sk9.lunaticChat.engine.chat.channel
import dev.m1sk9.lunaticChat.engine.settings.UUIDSerializer
import kotlinx.serialization.Serializable
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelData.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelData.kt
index 67e86ec..de942f7 100644
--- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelData.kt
+++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelData.kt
@@ -1,4 +1,4 @@
-package dev.m1sk9.lunaticChat.engine.channel.modal
+package dev.m1sk9.lunaticChat.engine.chat.channel
import kotlinx.serialization.Serializable
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelMember.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelMember.kt
index 3bc2b67..1eb49f4 100644
--- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelMember.kt
+++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelMember.kt
@@ -1,4 +1,4 @@
-package dev.m1sk9.lunaticChat.engine.channel.modal
+package dev.m1sk9.lunaticChat.engine.chat.channel
import dev.m1sk9.lunaticChat.engine.settings.UUIDSerializer
import kotlinx.serialization.Serializable
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelRole.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelRole.kt
index 6a3309a..be7bf58 100644
--- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/channel/modal/ChannelRole.kt
+++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/chat/channel/ChannelRole.kt
@@ -1,4 +1,4 @@
-package dev.m1sk9.lunaticChat.engine.channel.modal
+package dev.m1sk9.lunaticChat.engine.chat.channel
import kotlinx.serialization.Serializable
diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChatModeStorageException.kt b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChatModeStorageException.kt
new file mode 100644
index 0000000..85c1e69
--- /dev/null
+++ b/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/exception/ChatModeStorageException.kt
@@ -0,0 +1,6 @@
+package dev.m1sk9.lunaticChat.engine.exception
+
+class ChatModeStorageException(
+ message: String,
+ cause: Throwable? = null,
+) : Exception(message, cause)
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 b615fb7..838a48b 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
@@ -29,6 +29,10 @@ sealed class LunaticChatPermissionNode(
object ChannelDelete : LunaticChatPermissionNode("lunaticchat.command.lc.channel.delete")
+ 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")