diff --git a/src/domains/freetalk/components/ChatRoomModal.jsx b/src/domains/freetalk/components/ChatRoomModal.jsx
index 653be25..d3d0901 100644
--- a/src/domains/freetalk/components/ChatRoomModal.jsx
+++ b/src/domains/freetalk/components/ChatRoomModal.jsx
@@ -466,6 +466,39 @@ const ChatRoomModal = ({ open, onClose, room, onLeave }) => {
)
}
+ // 투표 관련 메시지 (POLL_CREATE, POLL_VOTE, POLL_END)
+ if (message.messageType === 'POLL_CREATE' || message.messageType === 'poll_create' ||
+ message.messageType === 'POLL_VOTE' || message.messageType === 'poll_vote' ||
+ message.messageType === 'POLL_END' || message.messageType === 'poll_end') {
+ return (
+
+
+
+ {message.content}
+
+
+
+ )
+ }
+
return (
[...prev, pollMessage])
@@ -107,8 +108,8 @@ export function useChatWebSocket(roomId, userId) {
onPollVote: (data) => {
console.log('[useChatWebSocket] Poll vote:', data)
const voteData = data.data || data
- setMessages((prev) =>
- prev.map((msg) => {
+ setMessages((prev) => {
+ const updated = prev.map((msg) => {
if (msg.id === `poll-${voteData.pollId}` && msg.data) {
return {
...msg,
@@ -120,14 +121,26 @@ export function useChatWebSocket(roomId, userId) {
}
return msg
})
- )
+ if (data.content) {
+ updated.push({
+ id: `poll-vote-${Date.now()}`,
+ messageType: 'POLL_VOTE',
+ userId: voteData.voterId || voteData.userId,
+ content: data.content,
+ createdAt: data.createdAt || new Date().toISOString(),
+ data: voteData,
+ })
+ }
+ return updated
+ })
},
onPollEnd: (data) => {
console.log('[useChatWebSocket] Poll ended:', data)
+ console.log('[useChatWebSocket] Poll end content:', data.content)
const endData = data.data || data
- setMessages((prev) =>
- prev.map((msg) => {
+ setMessages((prev) => {
+ const updated = prev.map((msg) => {
if (msg.id === `poll-${endData.pollId}` && msg.data) {
return {
...msg,
@@ -140,7 +153,21 @@ export function useChatWebSocket(roomId, userId) {
}
return msg
})
- )
+ console.log('[useChatWebSocket] Adding poll end message, content exists:', !!data.content)
+ if (data.content) {
+ const pollEndMsg = {
+ id: `poll-end-${endData.pollId}`,
+ messageType: 'POLL_END',
+ userId: endData.endedBy,
+ content: data.content,
+ createdAt: data.createdAt || new Date().toISOString(),
+ data: endData,
+ }
+ console.log('[useChatWebSocket] Poll end message:', pollEndMsg)
+ updated.push(pollEndMsg)
+ }
+ return updated
+ })
},
onClearChat: (data) => {
@@ -166,16 +193,20 @@ export function useChatWebSocket(roomId, userId) {
},
onSystemCommand: (data) => {
+ console.log('[useChatWebSocket] System command received:', data)
const commandData = data.data || {}
+ const displayText = data.content || data.message || commandData.content || commandData.message || commandData.displayText || ''
+ console.log('[useChatWebSocket] System command displayText:', displayText)
const commandMessage = {
id: `syscmd-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
messageType: 'SYSTEM_COMMAND',
userId: commandData.userId || commandData.nickname || data.userId,
+ content: displayText,
createdAt: data.createdAt || new Date().toISOString(),
data: {
commandType: commandData.type || 'help',
userId: commandData.userId || commandData.nickname,
- displayText: data.content || data.message || '',
+ displayText: displayText,
result: typeof commandData.result === 'object'
? commandData.result
: { value: commandData.result },
diff --git a/src/domains/freetalk/services/chatWebSocketService.js b/src/domains/freetalk/services/chatWebSocketService.js
index f8fbe75..81f78e4 100644
--- a/src/domains/freetalk/services/chatWebSocketService.js
+++ b/src/domains/freetalk/services/chatWebSocketService.js
@@ -178,6 +178,8 @@ class ChatWebSocketConnection {
case 'system_command':
case 'SYSTEM_COMMAND':
// 시스템 명령어 응답 (예: /dice, /coin, /random, /members, /help 등)
+ console.log('[ChatWebSocket] System command received:', data)
+ console.log('[ChatWebSocket] onSystemCommand callback exists:', !!this.callbacks.onSystemCommand)
this.callbacks.onSystemCommand?.(data)
break
case 'poll_create':
diff --git a/src/domains/games/components/WaitingChat.jsx b/src/domains/games/components/WaitingChat.jsx
index 7eeaf27..1c48981 100644
--- a/src/domains/games/components/WaitingChat.jsx
+++ b/src/domains/games/components/WaitingChat.jsx
@@ -3,6 +3,8 @@ import {Avatar, Box, IconButton, Paper, TextField, Typography} from '@mui/materi
import {Send as SendIcon} from '@mui/icons-material'
import {GAME_COLORS} from '../theme/gameTheme'
import {useThemeMode} from '../../../contexts/ThemeContext'
+import SystemCommandMessage from '../../freetalk/components/SystemCommandMessage'
+import {MessageType} from '../../freetalk/types/chatCommandTypes'
const WaitingChat = ({ messages, onSendMessage, currentUserId, disabled }) => {
const {mode} = useThemeMode()
@@ -62,6 +64,45 @@ const WaitingChat = ({ messages, onSendMessage, currentUserId, disabled }) => {
const isOwn = message.userId === currentUserId
const isSystem = message.isSystem
+ // 시스템 명령어 메시지 (SYSTEM_COMMAND) - /dice, /coin 등
+ if (message.messageType === MessageType.SYSTEM_COMMAND || message.messageType === 'SYSTEM_COMMAND') {
+ return (
+
+ )
+ }
+
+ // 투표 관련 메시지 (POLL_CREATE, POLL_VOTE, POLL_END)
+ if (message.messageType === 'POLL_CREATE' || message.messageType === 'poll_create' ||
+ message.messageType === 'POLL_VOTE' || message.messageType === 'poll_vote' ||
+ message.messageType === 'POLL_END' || message.messageType === 'poll_end') {
+ return (
+
+
+
+ {message.content}
+
+
+
+ )
+ }
+
if (isSystem) {
return (