You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-19 15:06:19 +00:00
@@ -73,4 +73,17 @@ INSERT IGNORE INTO `emulator_settings` (`key`, `value`, `comment`) VALUES
|
|||||||
|
|
||||||
ALTER TABLE `wordfilter`
|
ALTER TABLE `wordfilter`
|
||||||
ADD COLUMN `prefix_only` ENUM('0','1') NOT NULL DEFAULT '0'
|
ADD COLUMN `prefix_only` ENUM('0','1') NOT NULL DEFAULT '0'
|
||||||
COMMENT 'When 1, this word only applies to custom prefixes, not to chat/motto/guild.' AFTER `mute`;
|
COMMENT 'When 1, this word only applies to custom prefixes, not to chat/motto/guild.' AFTER `mute`;
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
-- 5. Per-user mention preferences (:disablementions / :disablemassmentions)
|
||||||
|
--
|
||||||
|
-- Read by HabboStats (default '1' = enabled), toggled by the commands.
|
||||||
|
-- Without these columns the toggle commands cannot persist.
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ALTER TABLE `users_settings`
|
||||||
|
ADD COLUMN IF NOT EXISTS `mentions_enabled` ENUM('0','1') NOT NULL DEFAULT '1'
|
||||||
|
COMMENT 'Receive @nick mention notifications.',
|
||||||
|
ADD COLUMN IF NOT EXISTS `mass_mentions_enabled` ENUM('0','1') NOT NULL DEFAULT '1'
|
||||||
|
COMMENT 'Receive broadcast (@all / @friends / @room) mentions.';
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class HabboMention {
|
|||||||
private final int mentionType;
|
private final int mentionType;
|
||||||
private final int timestamp;
|
private final int timestamp;
|
||||||
private final boolean read;
|
private final boolean read;
|
||||||
|
private final String senderFigure;
|
||||||
|
|
||||||
public HabboMention(ResultSet set) throws SQLException {
|
public HabboMention(ResultSet set) throws SQLException {
|
||||||
this.id = set.getInt("id");
|
this.id = set.getInt("id");
|
||||||
@@ -33,6 +34,16 @@ public class HabboMention {
|
|||||||
this.mentionType = set.getInt("mention_type");
|
this.mentionType = set.getInt("mention_type");
|
||||||
this.timestamp = set.getInt("timestamp");
|
this.timestamp = set.getInt("timestamp");
|
||||||
this.read = set.getInt("read") == 1;
|
this.read = set.getInt("read") == 1;
|
||||||
|
this.senderFigure = hasSenderFigure(set) ? set.getString("sender_figure") : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean hasSenderFigure(ResultSet set) {
|
||||||
|
try {
|
||||||
|
set.findColumn("sender_figure");
|
||||||
|
return true;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public HabboMention(int targetUserId, int id, Habbo sender, Room room, String roomName, String message, int mentionType, int timestamp) {
|
public HabboMention(int targetUserId, int id, Habbo sender, Room room, String roomName, String message, int mentionType, int timestamp) {
|
||||||
@@ -46,6 +57,7 @@ public class HabboMention {
|
|||||||
this.mentionType = mentionType;
|
this.mentionType = mentionType;
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
this.read = false;
|
this.read = false;
|
||||||
|
this.senderFigure = sender.getHabboInfo().getLook();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
@@ -87,4 +99,8 @@ public class HabboMention {
|
|||||||
public boolean isRead() {
|
public boolean isRead() {
|
||||||
return this.read;
|
return this.read;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSenderFigure() {
|
||||||
|
return this.senderFigure == null ? "" : this.senderFigure;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,18 +9,8 @@ import com.eu.habbo.habbohotel.users.HabboManager;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.*;
|
||||||
import java.sql.PreparedStatement;
|
import java.util.*;
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Statement;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class MentionManager {
|
public class MentionManager {
|
||||||
@@ -43,7 +33,6 @@ public class MentionManager {
|
|||||||
return Emulator.getConfig().getInt("mentions.enabled", 1) == 1;
|
return Emulator.getConfig().getInt("mentions.enabled", 1) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Broadcast category resolved from a mention alias. */
|
|
||||||
public enum BroadcastScope {
|
public enum BroadcastScope {
|
||||||
NONE,
|
NONE,
|
||||||
ROOM,
|
ROOM,
|
||||||
@@ -249,7 +238,9 @@ public class MentionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean acceptsMention(Habbo recipient, boolean isBroadcast) {
|
private boolean acceptsMention(Habbo recipient, boolean isBroadcast) {
|
||||||
if (recipient == null || recipient.getHabboStats() == null) return true;
|
if (recipient == null) return false;
|
||||||
|
if (recipient.getClient() == null) return false;
|
||||||
|
if (recipient.getHabboStats() == null) return false;
|
||||||
if (!recipient.getHabboStats().mentionsEnabled()) return false;
|
if (!recipient.getHabboStats().mentionsEnabled()) return false;
|
||||||
if (isBroadcast && !recipient.getHabboStats().massMentionsEnabled()) return false;
|
if (isBroadcast && !recipient.getHabboStats().massMentionsEnabled()) return false;
|
||||||
return true;
|
return true;
|
||||||
@@ -297,7 +288,7 @@ public class MentionManager {
|
|||||||
if (limit > 200) limit = 200;
|
if (limit > 200) limit = 200;
|
||||||
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection();
|
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection();
|
||||||
PreparedStatement statement = connection.prepareStatement(
|
PreparedStatement statement = connection.prepareStatement(
|
||||||
"SELECT * FROM habbo_mentions WHERE target_user_id = ? ORDER BY id DESC LIMIT ?")) {
|
"SELECT habbo_mentions.*, users.look AS sender_figure FROM habbo_mentions LEFT JOIN users ON users.id = habbo_mentions.sender_user_id WHERE target_user_id = ? ORDER BY id DESC LIMIT ?")) {
|
||||||
statement.setInt(1, userId);
|
statement.setInt(1, userId);
|
||||||
statement.setInt(2, limit);
|
statement.setInt(2, limit);
|
||||||
try (ResultSet set = statement.executeQuery()) {
|
try (ResultSet set = statement.executeQuery()) {
|
||||||
@@ -423,14 +414,49 @@ public class MentionManager {
|
|||||||
return value.substring(0, max);
|
return value.substring(0, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isBotOrPetName(Room room, String token) {
|
||||||
|
if (room == null || token == null || token.isEmpty()) return false;
|
||||||
|
|
||||||
|
List<com.eu.habbo.habbohotel.bots.Bot> bots = room.getBots(token);
|
||||||
|
if (bots != null && !bots.isEmpty()) return true;
|
||||||
|
|
||||||
|
if (room.getUnitManager() != null && room.getUnitManager().getPets() != null) {
|
||||||
|
for (com.eu.habbo.habbohotel.pets.Pet pet : room.getUnitManager().getPets()) {
|
||||||
|
if (pet != null && pet.getName() != null && pet.getName().equalsIgnoreCase(token)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private Habbo resolveHabbo(Room room, String rawToken) {
|
private Habbo resolveHabbo(Room room, String rawToken) {
|
||||||
|
if (isBotOrPetName(room, rawToken)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String trimmedForBotCheck = trimTrailingPunctuation(rawToken);
|
||||||
|
if (!trimmedForBotCheck.equals(rawToken) && isBotOrPetName(room, trimmedForBotCheck)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
Habbo habbo = room.getHabbo(rawToken);
|
Habbo habbo = room.getHabbo(rawToken);
|
||||||
if (habbo != null) {
|
if (habbo != null) {
|
||||||
return habbo;
|
return habbo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HabboManager habboManager = Emulator.getGameEnvironment().getHabboManager();
|
||||||
|
habbo = habboManager.getHabbo(rawToken);
|
||||||
|
if (habbo != null) {
|
||||||
|
return habbo;
|
||||||
|
}
|
||||||
String trimmed = trimTrailingPunctuation(rawToken);
|
String trimmed = trimTrailingPunctuation(rawToken);
|
||||||
if (!trimmed.isEmpty() && !trimmed.equals(rawToken)) {
|
if (!trimmed.isEmpty() && !trimmed.equals(rawToken)) {
|
||||||
return room.getHabbo(trimmed);
|
habbo = room.getHabbo(trimmed);
|
||||||
|
if (habbo != null) {
|
||||||
|
return habbo;
|
||||||
|
}
|
||||||
|
return habboManager.getHabbo(trimmed);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -18,6 +18,7 @@ public class MentionReceivedComposer extends MessageComposer {
|
|||||||
this.response.appendInt(this.mention.getId());
|
this.response.appendInt(this.mention.getId());
|
||||||
this.response.appendInt(this.mention.getSenderUserId());
|
this.response.appendInt(this.mention.getSenderUserId());
|
||||||
this.response.appendString(this.mention.getSenderUsername());
|
this.response.appendString(this.mention.getSenderUsername());
|
||||||
|
this.response.appendString(this.mention.getSenderFigure());
|
||||||
this.response.appendInt(this.mention.getRoomId());
|
this.response.appendInt(this.mention.getRoomId());
|
||||||
this.response.appendString(this.mention.getRoomName());
|
this.response.appendString(this.mention.getRoomName());
|
||||||
this.response.appendString(this.mention.getMessage());
|
this.response.appendString(this.mention.getMessage());
|
||||||
|
|||||||
+1
@@ -23,6 +23,7 @@ public class MentionsListComposer extends MessageComposer {
|
|||||||
this.response.appendInt(mention.getId());
|
this.response.appendInt(mention.getId());
|
||||||
this.response.appendInt(mention.getSenderUserId());
|
this.response.appendInt(mention.getSenderUserId());
|
||||||
this.response.appendString(mention.getSenderUsername());
|
this.response.appendString(mention.getSenderUsername());
|
||||||
|
this.response.appendString(mention.getSenderFigure());
|
||||||
this.response.appendInt(mention.getRoomId());
|
this.response.appendInt(mention.getRoomId());
|
||||||
this.response.appendString(mention.getRoomName());
|
this.response.appendString(mention.getRoomName());
|
||||||
this.response.appendString(mention.getMessage());
|
this.response.appendString(mention.getMessage());
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ and is developed for free by talented developers and is compatible with the foll
|
|||||||
[Latest compiled version](https://github.com/duckietm/Arcturus-Morningstar-Extended/tree/main/Latest_Compiled_Version)
|
[Latest compiled version](https://github.com/duckietm/Arcturus-Morningstar-Extended/tree/main/Latest_Compiled_Version)
|
||||||
|
|
||||||
## Connection ##
|
## Connection ##
|
||||||
Use the Websocket plugin!
|
Use the BUILD-IN Websocket so do NOT load any websocket plugin!
|
||||||
|
|
||||||
### How do I connect to my emulator using Secure Websockets (wss)?
|
### How do I connect to my emulator using Secure Websockets (wss)?
|
||||||
You have several options to add WSS support to your websocket server.
|
You have several options to add WSS support to your websocket server.
|
||||||
|
|||||||
Reference in New Issue
Block a user