diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-01-26 00:59:43 +0900 |
|---|---|---|
| committer | Sho Sakuma <me@m1sk9.dev> | 2026-01-26 00:59:43 +0900 |
| commit | c5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c (patch) | |
| tree | 1db77d1a98e91faae14366608083fe872d1d0968 /engine | |
| parent | 1dc724dbb96a0d1fdc36c5105538e67efa5b0b87 (diff) | |
| download | LunaticChat-c5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c.tar.gz LunaticChat-c5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c.tar.bz2 LunaticChat-c5e355b851ad4d71d32d3c10f89aa4ed1f6dc41c.zip | |
feat: Add chatmode data
Diffstat (limited to 'engine')
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") |
