diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java index ca7cc0fe..a55d23b9 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java @@ -252,6 +252,25 @@ public class Guild implements Runnable { return this.readForum; } + public boolean canHabboReadForum(int habboId, GuildMember member, boolean staff) { + if (staff || this.getOwnerId() == habboId) { + return true; + } + + switch (this.readForum) { + case EVERYONE: + return true; + case MEMBERS: + return member != null && member.getRank().type <= GuildRank.MEMBER.type; + case ADMINS: + return member != null && member.getRank().type < GuildRank.MEMBER.type; + case OWNER: + return false; + default: + return true; + } + } + public void setReadForum(SettingsState readForum) { this.readForum = readForum; } diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java index 1e383706..b6806a02 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java @@ -29,6 +29,11 @@ public class GuildDeclineMembershipEvent extends MessageHandler { if (guild != null) { GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guild, this.client.getHabbo()); if (userId == this.client.getHabbo().getHabboInfo().getId() || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || (member != null && (member.getRank().equals(GuildRank.ADMIN) || member.getRank().equals(GuildRank.OWNER))) || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) { + GuildMember target = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, userId); + if (target == null || target.getRank().type != GuildRank.REQUESTED.type) { + return; + } + guild.decreaseRequestCount(); Emulator.getGameEnvironment().getGuildManager().removeMember(guild, userId); this.client.sendResponse(new GuildMembersComposer(guild, Emulator.getGameEnvironment().getGuildManager().getGuildMembers(guild, 0, 0, ""), this.client.getHabbo(), 0, 0, "", true, Emulator.getGameEnvironment().getGuildManager().getGuildMembersCount(guild, 0, 0, ""))); diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java index ec1d213e..d1d64e82 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java @@ -2,7 +2,11 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; +import com.eu.habbo.habbohotel.guilds.GuildMember; +import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer; public class GuildForumDataEvent extends MessageHandler { @@ -20,10 +24,18 @@ public class GuildForumDataEvent extends MessageHandler { if (guild == null) return; if (!guild.hasForum()) return; + GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId()); + boolean staff = this.client.getHabbo().hasPermission(Permission.ACC_MODTOOL_TICKET_Q); + + if (!guild.canHabboReadForum(this.client.getHabbo().getHabboInfo().getId(), member, staff)) { + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_ACCESS_DENIED.key).compose()); + return; + } + this.client.sendResponse(new GuildForumDataComposer(guild, this.client.getHabbo())); if (!Emulator.getGameEnvironment().getGuildManager().hasViewedForum(this.client.getHabbo().getHabboInfo().getId(), guildId)) { Emulator.getGameEnvironment().getGuildManager().addView(this.client.getHabbo().getHabboInfo().getId(), guildId); } } -} \ No newline at end of file +} diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java index 3672a62a..8cde29ee 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java @@ -2,7 +2,11 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; +import com.eu.habbo.habbohotel.guilds.GuildMember; +import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumThreadsComposer; import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer; @@ -24,8 +28,15 @@ public class GuildForumThreadsEvent extends MessageHandler { this.client.sendResponse(new ConnectionErrorComposer(404)); return; } + GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId()); + boolean staff = this.client.getHabbo().hasPermission(Permission.ACC_MODTOOL_TICKET_Q); + + if (!guild.canHabboReadForum(this.client.getHabbo().getHabboInfo().getId(), member, staff)) { + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_ACCESS_DENIED.key).compose()); + return; + } this.client.sendResponse(new GuildForumDataComposer(guild, this.client.getHabbo())); this.client.sendResponse(new GuildForumThreadsComposer(guild, index)); } -} \ No newline at end of file +} diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java index 3680677f..9d490352 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java @@ -38,7 +38,6 @@ public class GuildForumThreadsMessagesEvent extends MessageHandler { return; } - // Verify thread belongs to the requested guild if (thread.getGuildId() != guildId) { this.client.sendResponse(new ConnectionErrorComposer(403)); return; @@ -47,6 +46,11 @@ public class GuildForumThreadsMessagesEvent extends MessageHandler { GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId()); boolean isGuildAdministrator = (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || (member != null && member.getRank().equals(GuildRank.ADMIN))); + if (!guild.canHabboReadForum(this.client.getHabbo().getHabboInfo().getId(), member, hasStaffPermissions)) { + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_ACCESS_DENIED.key).compose()); + return; + } + if (thread.getState() != ForumThreadState.HIDDEN_BY_GUILD_ADMIN || hasStaffPermissions || isGuildAdministrator) { this.client.sendResponse(new GuildForumCommentsComposer(guildId, threadId, index, thread.getComments(limit, index))); this.client.sendResponse(new GuildForumDataComposer(guild, this.client.getHabbo()));