1
Fork 0
mirror of https://github.com/Quackster/Havana.git synced 2025-07-05 06:07:46 +00:00

feat: add chatlog cmd for viewing missed chat msgs

This commit is contained in:
jtieri 2023-04-16 23:00:06 -05:00
parent 385f421080
commit 993893be65
4 changed files with 71 additions and 4 deletions

View file

@ -59,6 +59,7 @@ public class CommandManager {
tempCommands.put(new String[] { "rgb", "rainbow" }, new RainbowDimmerCommand()); tempCommands.put(new String[] { "rgb", "rainbow" }, new RainbowDimmerCommand());
tempCommands.put(new String[] { "afk", "idle" }, new AfkCommand()); tempCommands.put(new String[] { "afk", "idle" }, new AfkCommand());
tempCommands.put(new String[] { "guidestatus" }, new GuideStatusCommand()); tempCommands.put(new String[] { "guidestatus" }, new GuideStatusCommand());
tempCommands.put(new String[] {"cl", "chatlog", "wys"}, new ChatlogCommand());
// Staff commands // Staff commands
tempCommands.put(new String[] { "copyroom" }, new CopyRoomCommand()); tempCommands.put(new String[] { "copyroom" }, new CopyRoomCommand());

View file

@ -0,0 +1,56 @@
package org.alexdev.havana.game.commands.registered;
import org.alexdev.havana.dao.mysql.RoomDao;
import org.alexdev.havana.game.commands.Command;
import org.alexdev.havana.game.entity.Entity;
import org.alexdev.havana.game.entity.EntityType;
import org.alexdev.havana.game.moderation.ChatMessage;
import org.alexdev.havana.game.player.Player;
import org.alexdev.havana.game.player.PlayerRank;
import org.alexdev.havana.messages.outgoing.alerts.ALERT;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
public class ChatlogCommand extends Command {
@Override
public void setPlayerRank() {
super.setPlayerRank(PlayerRank.NORMAL);
}
@Override
public void handleCommand(Entity entity, String message, String[] args) {
var roomChatLogs = RoomDao.getModChatlog(entity.getRoomUser().getRoom().getId());
StringBuilder viewableLogs = new StringBuilder();
var sortedChatLogs = roomChatLogs.stream()
.filter(msg -> msg.getSentTime() > entity.getRoomUser().getEnteredRoomAt())
.sorted(Comparator.comparing(ChatMessage::getSentTime))
.toList();
for (var commandSet : sortedChatLogs) {
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(commandSet.getSentTime(), 0, java.time.ZoneOffset.UTC);
String formattedTime = dateTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));
viewableLogs.append("[").append(formattedTime).append("] ");
viewableLogs.append(commandSet.getPlayerName());
viewableLogs.append(": ");
viewableLogs.append(commandSet.getMessage());
viewableLogs.append("<br>");
}
if (entity.getType() == EntityType.PLAYER) {
Player player = (Player) entity;
player.send(new ALERT(viewableLogs.toString()));
}
}
@Override
public String getDescription() {
return "Display chat log for current room.";
}
}

View file

@ -26,12 +26,10 @@ import org.alexdev.havana.game.wordfilter.WordfilterManager;
import org.alexdev.havana.messages.outgoing.effects.USER_AVATAR_EFFECT; import org.alexdev.havana.messages.outgoing.effects.USER_AVATAR_EFFECT;
import org.alexdev.havana.messages.outgoing.rooms.user.*; import org.alexdev.havana.messages.outgoing.rooms.user.*;
import org.alexdev.havana.messages.types.MessageComposer; import org.alexdev.havana.messages.types.MessageComposer;
import org.alexdev.havana.util.DateUtil;
import org.alexdev.havana.util.config.GameConfiguration; import org.alexdev.havana.util.config.GameConfiguration;
import java.util.ArrayList; import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
@ -75,12 +73,15 @@ public abstract class RoomEntity {
private int carryId; private int carryId;
private String carryValue; private String carryValue;
private long enteredRoomAt;
public RoomEntity(Entity entity) { public RoomEntity(Entity entity) {
this.entity = entity; this.entity = entity;
this.statuses = new ConcurrentHashMap<>(); this.statuses = new ConcurrentHashMap<>();
this.path = new LinkedList<>(); this.path = new LinkedList<>();
this.packetQueueAfterRoomLeave = new LinkedBlockingQueue<MessageComposer>(); this.packetQueueAfterRoomLeave = new LinkedBlockingQueue<MessageComposer>();
this.timerManager = new RoomTimerManager(this); this.timerManager = new RoomTimerManager(this);
this.enteredRoomAt = DateUtil.getCurrentTimeSeconds();
} }
public void reset() { public void reset() {
@ -103,6 +104,7 @@ public abstract class RoomEntity {
this.pixelAvailableTick = new AtomicInteger(GameConfiguration.getInstance().getInteger("pixels.max.tries.single.room.instance")); this.pixelAvailableTick = new AtomicInteger(GameConfiguration.getInstance().getInteger("pixels.max.tries.single.room.instance"));
this.chatMessages = new CopyOnWriteArrayList<>(); this.chatMessages = new CopyOnWriteArrayList<>();
this.timerManager.resetTimers(); this.timerManager.resetTimers();
this.enteredRoomAt = 0;
} }
/** /**
@ -1078,4 +1080,11 @@ public abstract class RoomEntity {
return pixelAvailableTick; return pixelAvailableTick;
} }
public long getEnteredRoomAt() {
return enteredRoomAt;
}
public void setEnteredRoomAt() {
this.enteredRoomAt = DateUtil.getCurrentTimeSeconds();
}
} }

View file

@ -183,6 +183,7 @@ public class RoomEntityManager {
entity.getRoomUser().reset(); entity.getRoomUser().reset();
entity.getRoomUser().setRoom(this.room); entity.getRoomUser().setRoom(this.room);
entity.getRoomUser().setInstanceId(this.generateUniqueId()); entity.getRoomUser().setInstanceId(this.generateUniqueId());
entity.getRoomUser().setEnteredRoomAt();
Position entryPosition = this.room.getModel().getDoorLocation(); Position entryPosition = this.room.getModel().getDoorLocation();