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:
parent
385f421080
commit
993893be65
4 changed files with 71 additions and 4 deletions
|
@ -59,6 +59,7 @@ public class CommandManager {
|
|||
tempCommands.put(new String[] { "rgb", "rainbow" }, new RainbowDimmerCommand());
|
||||
tempCommands.put(new String[] { "afk", "idle" }, new AfkCommand());
|
||||
tempCommands.put(new String[] { "guidestatus" }, new GuideStatusCommand());
|
||||
tempCommands.put(new String[] {"cl", "chatlog", "wys"}, new ChatlogCommand());
|
||||
|
||||
// Staff commands
|
||||
tempCommands.put(new String[] { "copyroom" }, new CopyRoomCommand());
|
||||
|
|
|
@ -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.";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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.rooms.user.*;
|
||||
import org.alexdev.havana.messages.types.MessageComposer;
|
||||
import org.alexdev.havana.util.DateUtil;
|
||||
import org.alexdev.havana.util.config.GameConfiguration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
@ -75,12 +73,15 @@ public abstract class RoomEntity {
|
|||
private int carryId;
|
||||
private String carryValue;
|
||||
|
||||
private long enteredRoomAt;
|
||||
|
||||
public RoomEntity(Entity entity) {
|
||||
this.entity = entity;
|
||||
this.statuses = new ConcurrentHashMap<>();
|
||||
this.path = new LinkedList<>();
|
||||
this.packetQueueAfterRoomLeave = new LinkedBlockingQueue<MessageComposer>();
|
||||
this.timerManager = new RoomTimerManager(this);
|
||||
this.enteredRoomAt = DateUtil.getCurrentTimeSeconds();
|
||||
}
|
||||
|
||||
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.chatMessages = new CopyOnWriteArrayList<>();
|
||||
this.timerManager.resetTimers();
|
||||
this.enteredRoomAt = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1078,4 +1080,11 @@ public abstract class RoomEntity {
|
|||
return pixelAvailableTick;
|
||||
}
|
||||
|
||||
public long getEnteredRoomAt() {
|
||||
return enteredRoomAt;
|
||||
}
|
||||
|
||||
public void setEnteredRoomAt() {
|
||||
this.enteredRoomAt = DateUtil.getCurrentTimeSeconds();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -183,6 +183,7 @@ public class RoomEntityManager {
|
|||
entity.getRoomUser().reset();
|
||||
entity.getRoomUser().setRoom(this.room);
|
||||
entity.getRoomUser().setInstanceId(this.generateUniqueId());
|
||||
entity.getRoomUser().setEnteredRoomAt();
|
||||
|
||||
Position entryPosition = this.room.getModel().getDoorLocation();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue