Merge pull request #55 from duckietm/dev

Dev
This commit is contained in:
DuckieTM
2026-03-29 16:54:08 +02:00
committed by GitHub
9 changed files with 38 additions and 17 deletions
@@ -2,12 +2,14 @@ package com.eu.habbo.messages.incoming.guilds;
import com.eu.habbo.Emulator; import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.guilds.Guild; import com.eu.habbo.habbohotel.guilds.Guild;
import com.eu.habbo.habbohotel.guilds.GuildMember;
import com.eu.habbo.habbohotel.guilds.GuildState; import com.eu.habbo.habbohotel.guilds.GuildState;
import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.habbohotel.guilds.forums.ForumThread; import com.eu.habbo.habbohotel.guilds.forums.ForumThread;
import com.eu.habbo.messages.incoming.guilds.forums.GuildForumListEvent; import com.eu.habbo.messages.incoming.guilds.forums.GuildForumListEvent;
import com.eu.habbo.messages.outgoing.guilds.GuildInfoComposer;
import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer;
import com.eu.habbo.plugin.events.guilds.GuildChangedSettingsEvent; import com.eu.habbo.plugin.events.guilds.GuildChangedSettingsEvent;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -16,13 +18,18 @@ import org.slf4j.LoggerFactory;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.concurrent.ConcurrentHashMap;
public class GuildChangeSettingsEvent extends MessageHandler { public class GuildChangeSettingsEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(GuildChangeSettingsEvent.class); private static final Logger LOGGER = LoggerFactory.getLogger(GuildChangeSettingsEvent.class);
// Cooldown for forum toggle per guild: guildId -> last toggle timestamp
private static final ConcurrentHashMap<Integer, Long> forumToggleCooldown = new ConcurrentHashMap<>();
private static final long FORUM_TOGGLE_COOLDOWN_MS = 30_000; // 30 seconds
@Override @Override
public int getRatelimit() { public int getRatelimit() {
return 500; return 2000; // 2 seconds between settings saves
} }
@Override @Override
@@ -47,6 +54,14 @@ public class GuildChangeSettingsEvent extends MessageHandler {
boolean wasForumEnabled = guild.hasForum(); boolean wasForumEnabled = guild.hasForum();
if (forumEnabled != wasForumEnabled) { if (forumEnabled != wasForumEnabled) {
// Enforce cooldown on forum toggle to prevent rapid enable/disable spam
Long lastToggle = forumToggleCooldown.get(guildId);
long now = System.currentTimeMillis();
if (lastToggle != null && (now - lastToggle) < FORUM_TOGGLE_COOLDOWN_MS) {
LOGGER.warn("Forum toggle cooldown for guild {} by user {}", guildId, this.client.getHabbo().getHabboInfo().getUsername());
} else {
forumToggleCooldown.put(guildId, now);
guild.setForum(forumEnabled); guild.setForum(forumEnabled);
if (!forumEnabled) { if (!forumEnabled) {
@@ -58,6 +73,8 @@ public class GuildChangeSettingsEvent extends MessageHandler {
// Invalidate caches // Invalidate caches
GuildForumDataComposer.invalidateUnreadCache(guildId); GuildForumDataComposer.invalidateUnreadCache(guildId);
GuildForumListEvent.invalidateActiveForumsCache(); GuildForumListEvent.invalidateActiveForumsCache();
GuildForumListEvent.invalidateMyForumsCache(this.client.getHabbo().getHabboInfo().getId());
}
} }
Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(guild.getRoomId()); Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(guild.getRoomId());
@@ -68,6 +85,10 @@ public class GuildChangeSettingsEvent extends MessageHandler {
guild.needsUpdate = true; guild.needsUpdate = true;
Emulator.getThreading().run(guild); Emulator.getThreading().run(guild);
// Send updated group info back to client so hasForum flag refreshes immediately
GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guild, this.client.getHabbo());
this.client.sendResponse(new GuildInfoComposer(guild, this.client, false, member));
} }
} }
} }
@@ -15,7 +15,7 @@ public class GuildForumMarkAsReadEvent extends MessageHandler {
@Override @Override
public int getRatelimit() { public int getRatelimit() {
return 500; return 2000;
} }
@Override @Override
@@ -18,7 +18,7 @@ import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumModerateMessageEvent extends MessageHandler { public class GuildForumModerateMessageEvent extends MessageHandler {
@Override @Override
public int getRatelimit() { public int getRatelimit() {
return 500; return 2000;
} }
@Override @Override
@@ -27,7 +27,7 @@ public class GuildForumModerateThreadEvent extends MessageHandler {
@Override @Override
public int getRatelimit() { public int getRatelimit() {
return 500; return 2000;
} }
@Override @Override
@@ -18,7 +18,7 @@ public class GuildForumPostThreadEvent extends MessageHandler {
@Override @Override
public int getRatelimit() { public int getRatelimit() {
return 1000; return 2000;
} }
@Override @Override
@@ -17,7 +17,7 @@ import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumThreadUpdateEvent extends MessageHandler { public class GuildForumThreadUpdateEvent extends MessageHandler {
@Override @Override
public int getRatelimit() { public int getRatelimit() {
return 500; return 2000;
} }
@Override @Override
@@ -20,7 +20,7 @@ public class GuildForumThreadsEvent extends MessageHandler {
Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId); Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId);
if (guild == null || !guild.hasForum()) { if (guild == null) {
this.client.sendResponse(new ConnectionErrorComposer(404)); this.client.sendResponse(new ConnectionErrorComposer(404));
return; return;
} }
@@ -12,7 +12,7 @@ import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumUpdateSettingsEvent extends MessageHandler { public class GuildForumUpdateSettingsEvent extends MessageHandler {
@Override @Override
public int getRatelimit() { public int getRatelimit() {
return 500; return 2000;
} }
@Override @Override