0
0
mirror of https://github.com/Wurst-Imperium/Wurst7.git synced 2024-09-19 17:02:13 +02:00

Create FilterOwnMessagesSetting to handle own message detection

This commit is contained in:
Alexander01998 2024-07-22 17:39:43 +02:00
parent 2ee6402c1a
commit 2bd08f5220
2 changed files with 54 additions and 34 deletions

View File

@ -7,13 +7,11 @@
*/
package net.wurstclient.hacks;
import java.util.regex.Pattern;
import net.wurstclient.Category;
import net.wurstclient.SearchTags;
import net.wurstclient.events.ChatInputListener;
import net.wurstclient.hack.Hack;
import net.wurstclient.settings.CheckboxSetting;
import net.wurstclient.hacks.chattranslator.FilterOwnMessagesSetting;
import net.wurstclient.settings.LanguageSetting;
import net.wurstclient.settings.LanguageSetting.Language;
import net.wurstclient.util.ChatUtils;
@ -32,16 +30,8 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener
private final LanguageSetting translateTo =
LanguageSetting.withoutAutoDetect("Translate to", Language.ENGLISH);
private final CheckboxSetting filterOwnMessages = new CheckboxSetting(
"Filter own messages",
"Won't translate messages that appear to be sent by you.\n"
+ "It tries to detect your messages based on common chat formats"
+ " like \"<username>\", \"[username]\", or \"username:\". This"
+ " might not work correctly on some servers.",
true);
private Pattern ownMessagePattern;
private String lastUsername;
private final FilterOwnMessagesSetting filterOwnMessages =
new FilterOwnMessagesSetting();
public ChatTranslatorHack()
{
@ -75,7 +65,8 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener
|| message.startsWith(toLang.getPrefix()))
return;
if(filterOwnMessages.isChecked() && isOwnMessage(message))
if(filterOwnMessages.isChecked()
&& filterOwnMessages.isOwnMessage(message))
return;
Thread.ofVirtual().name("ChatTranslator")
@ -83,26 +74,6 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener
.start(() -> showTranslated(message, fromLang, toLang));
}
private boolean isOwnMessage(String message)
{
updateOwnMessagePattern();
return ownMessagePattern.matcher(message).find();
}
private void updateOwnMessagePattern()
{
String username = MC.getSession().getUsername();
if(username.equals(lastUsername))
return;
String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}";
String namePattern = Pattern.quote(username);
String regex = "^" + rankPattern + "[<\\[]?" + namePattern + "[>\\]:]";
ownMessagePattern = Pattern.compile(regex);
lastUsername = username;
}
private void showTranslated(String message, Language fromLang,
Language toLang)
{

View File

@ -0,0 +1,49 @@
/*
* Copyright (c) 2014-2024 Wurst-Imperium and contributors.
*
* This source code is subject to the terms of the GNU General Public
* License, version 3. If a copy of the GPL was not distributed with this
* file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt
*/
package net.wurstclient.hacks.chattranslator;
import java.util.regex.Pattern;
import net.wurstclient.WurstClient;
import net.wurstclient.settings.CheckboxSetting;
public class FilterOwnMessagesSetting extends CheckboxSetting
{
private Pattern ownMessagePattern;
private String lastUsername;
public FilterOwnMessagesSetting()
{
super("Filter own messages",
"Won't translate messages that appear to be sent by you.\n"
+ "It tries to detect your messages based on common chat formats"
+ " like \"<username>\", \"[username]\", or \"username:\". This"
+ " might not work correctly on some servers.",
true);
}
public boolean isOwnMessage(String message)
{
updateOwnMessagePattern();
return ownMessagePattern.matcher(message).find();
}
private void updateOwnMessagePattern()
{
String username = WurstClient.MC.getSession().getUsername();
if(username.equals(lastUsername))
return;
String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}";
String namePattern = Pattern.quote(username);
String regex = "^" + rankPattern + "[<\\[]?" + namePattern + "[>\\]:]";
ownMessagePattern = Pattern.compile(regex);
lastUsername = username;
}
}