diff --git a/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/api/GlobalValidation.java b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/api/GlobalValidation.java index a7b294d..daa8530 100644 --- a/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/api/GlobalValidation.java +++ b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/api/GlobalValidation.java @@ -2,6 +2,7 @@ package xyz.sheepstar.global.api; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import xyz.sheepstar.global.api.models.GlobalUserSlowMode; +import xyz.sheepstar.global.api.models.UserPrivacyManager; import xyz.sheepstar.global.api.models.ban.ServerBanManager; import xyz.sheepstar.global.api.models.ban.UserBanManager; import xyz.sheepstar.util.bot.command.GuildEventController; @@ -13,6 +14,7 @@ public class GlobalValidation extends GuildListener { GlobalUserSlowMode slowMode = (GlobalUserSlowMode) table(GlobalUserSlowMode.class); UserBanManager userBan = (UserBanManager) table(UserBanManager.class); ServerBanManager serverBan = (ServerBanManager) table(ServerBanManager.class); + UserPrivacyManager privacyManager = (UserPrivacyManager) table(UserPrivacyManager.class); /** * Validates the global message received event @@ -25,6 +27,8 @@ public class GlobalValidation extends GuildListener { String messageContent = receivedEvent.getMessage().getContentRaw(); String lowerContent = messageContent.toLowerCase(); + if (privacyManager.isPrivateClient(event.getAuthor().getId())) throw new PublicCommandException("global.user_privacy"); + // Check if the bot is tagged if (messageContent.startsWith(String.format("<@!%s>", jda.getSelfUser().getId()))) return false; diff --git a/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/api/models/UserPrivacyManager.java b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/api/models/UserPrivacyManager.java new file mode 100644 index 0000000..6926c75 --- /dev/null +++ b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/api/models/UserPrivacyManager.java @@ -0,0 +1,41 @@ +package xyz.sheepstar.global.api.models; + +import de.gnmyt.sqltoolkit.types.SQLType; +import xyz.sheepstar.util.sql.SheepManager; + +public class UserPrivacyManager extends SheepManager { + + @Override + protected String tableName() { + return "global_privacy"; + } + + @Override + protected void tableFields() { + custom("clientId").type(SQLType.VARCHAR).length(38).add(); + custom("status").type(SQLType.INTEGER).length(1).add(); + } + + public boolean exists(String clientId) { + return containsRow("clientId", clientId); + } + + public boolean isPrivateClient(String clientId) { + if (!exists(clientId)) return false; + return select().where("clientId", clientId).getResult().getInteger("status") == 1; + } + + private void registerPrivateClient(String clientId, boolean status) { + if (exists(clientId)) return; + insert().value("clientId", clientId).value("status", status ? 1 : 0).execute(); + } + + public void setPrivateClient(String clientId, boolean status) { + if (!exists(clientId)) { + registerPrivateClient(clientId, status); + return; + } + + update().where("clientId", clientId).set("status", status ? 1 : 0).execute(); + } +} diff --git a/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/commands/PrivacyCommand.java b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/commands/PrivacyCommand.java new file mode 100644 index 0000000..c8520ca --- /dev/null +++ b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/commands/PrivacyCommand.java @@ -0,0 +1,27 @@ +package xyz.sheepstar.global.commands; + +import net.dv8tion.jda.api.interactions.commands.OptionType; +import xyz.sheepstar.global.api.GlobalCommand; +import xyz.sheepstar.global.api.models.UserPrivacyManager; +import xyz.sheepstar.util.bot.command.Arguments; +import xyz.sheepstar.util.bot.command.GuildEventController; +import xyz.sheepstar.util.bot.command.annotations.CommandMeta; + +@CommandMeta(aliases = "global", subAliases = "privacy", description = "Updates the privacy of your user account") +public class PrivacyCommand extends GlobalCommand { + + private final UserPrivacyManager privacyManager = (UserPrivacyManager) table(UserPrivacyManager.class); + + @Override + public void usage() { + usage(OptionType.BOOLEAN, "tracking", "Allow sheepstar to read the content of messages written to a global channel") + .required(true).add(); + } + + @Override + public void execute(GuildEventController event, Arguments args) throws Exception { + privacyManager.setPrivateClient(event.getAuthor().getId(), !args.getBoolean("tracking")); + + event.primary("global.user.privacy_updated", args.getBoolean("tracking") ? "Yes" : "No"); + } +} diff --git a/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/core/GlobalBootstrap.java b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/core/GlobalBootstrap.java index eb3d5ab..04c4da2 100644 --- a/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/core/GlobalBootstrap.java +++ b/SheepstarModules/GlobalV1/src/main/java/xyz/sheepstar/global/core/GlobalBootstrap.java @@ -2,20 +2,14 @@ package xyz.sheepstar.global.core; import xyz.sheepstar.global.api.DesignManager; import xyz.sheepstar.global.api.GlobalValidator; -import xyz.sheepstar.global.api.models.GlobalManager; -import xyz.sheepstar.global.api.models.GlobalUserSlowMode; -import xyz.sheepstar.global.api.models.RoomCategoryManager; -import xyz.sheepstar.global.api.models.RoomManager; +import xyz.sheepstar.global.api.models.*; import xyz.sheepstar.global.api.models.ban.*; import xyz.sheepstar.global.api.models.emote.EmotePackManager; import xyz.sheepstar.global.api.models.emote.EnabledEmotePackManager; import xyz.sheepstar.global.api.models.emote.GlobalEmoteManager; import xyz.sheepstar.global.api.models.log.LogManager; import xyz.sheepstar.global.api.models.log.OriginalLogManager; -import xyz.sheepstar.global.commands.EmotePackCommand; -import xyz.sheepstar.global.commands.ListEmotesCommand; -import xyz.sheepstar.global.commands.LogCommand; -import xyz.sheepstar.global.commands.RulesCommand; +import xyz.sheepstar.global.commands.*; import xyz.sheepstar.global.commands.ban.*; import xyz.sheepstar.global.commands.design.ChangeDesignCommand; import xyz.sheepstar.global.commands.language.ChangeLanguageCommand; @@ -145,6 +139,8 @@ public class GlobalBootstrap extends SheepstarModule { registerTable(new EmotePackManager()); registerTable(new EnabledEmotePackManager()); + + registerTable(new UserPrivacyManager()); } /** @@ -181,6 +177,9 @@ public class GlobalBootstrap extends SheepstarModule { // Register report commands importManager.registerCommands(new ReportCommand()); + // Register privacy command + importManager.registerCommands(new PrivacyCommand()); + // Register listeners importManager.registerListener(new GlobalListener()); importManager.registerListener(new DeleteListener());