You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-20 15:36:17 +00:00
+22
-1
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ public class GuildForumMarkAsReadEvent extends MessageHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getRatelimit() {
|
public int getRatelimit() {
|
||||||
return 500;
|
return 2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ public class GuildForumModerateThreadEvent extends MessageHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getRatelimit() {
|
public int getRatelimit() {
|
||||||
return 500;
|
return 2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ public class GuildForumPostThreadEvent extends MessageHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getRatelimit() {
|
public int getRatelimit() {
|
||||||
return 1000;
|
return 2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user