Help with Java Language Filter

In summary: Freezes a player * @param String playername - Player's name */ void freezePlayer(String playerName) { PlayerChar player = playerList.get(playerName); if (player != null && !player.isMod()) { try { player.setFrozen(true); player.getIoSession().write("mYou have been frozen."); Thread.sleep(500); } catch (Exception e) { } finally { System.out.println(playerName + " was frozen!"); } } } /** * Unfreezes a player
  • #1
PG-Abby
1
0
I have run into a problem... The language filter we have been using is out of date and it periodically does not work. I was hoping I could get some help on making a new one.

The old one:
Code:
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Map;
import java.util.Scanner;
import java.util.StringTokenizer;

import pokeglobal.server.object.Char;
import pokeglobal.server.object.PlayerChar;

/*
 * 
 *
 * Filters bad language along with Game Moderator commands
 * 
 */
public class Moderator {
	private ArrayList<Filter> CensorList = new ArrayList<Filter>();
	private Map<String, PlayerChar> playerList;

	   /**
	    * Default Constructor which loads bad language database
		*/
	public Moderator()
	{
		loadFilter();
		playerList = ClientHandler.getPlayerList();
		
	}
	
	   /**
	    * Adds a new bad word to the database and restarts the moderating system without a server shutdown.
	    * @param String wordToFilter - badword:goodword , The word to be filtered will be replaced with the good word
		*/
	//Allows mods to add a new word to the filter
	void addFilter(String wordToFilter)
	{
		try
		{	
			if (!wordToFilter.contains(":")) throw new Exception();
			PrintWriter filterWord = new PrintWriter(new FileWriter(
					"res/badwords.txt"));
			for(int i = 0; i < CensorList.size(); i++)
			{
				filterWord.println(CensorList.get(i).getOriginal() + ":" + CensorList.get(i).getNew());
			}
			filterWord.println(wordToFilter);
			//Close PrintWriters
			filterWord.close();
			
			//Reload filter list
			loadFilter();
		}
		catch (Exception e)
		{
			System.out.println("Could not add word to filter database");
		}
	}
	
	   /**
	    * Reloads the moderating database without restarting the server
		*/
	//Reloads the filter list
	void loadFilter()
	{
		try
		{
			CensorList.clear();
			Scanner originalWords = new Scanner(new File("res/badwords.txt"));
			while(originalWords.hasNextLine())
			{
				String s = originalWords.nextLine();
				Filter f = new Filter();
				if(s.indexOf("*") == 0)
					f.set(s.substring(1), true);
				else
					f.set(s, false);
				CensorList.add(f);	
			}
			originalWords.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}		
	}

	   /**
	    * Filters words/commands appropriately
	    * @param String messageSent - The message sent by the player
	    * @param PlayerChar username - The player who sent the message
		*/
	//Returns the filtered word and executes any mods commands sent by mods
	String filter(String messageSent, PlayerChar username)
	{
		String output = "";
		if(!username.isMod())
			output = removeBad(messageSent);
		else
		{
			boolean playerFound = false;
			if(messageSent.indexOf("/addWord") == 0)
			{
				addFilter(messageSent.substring(8));
				output = username.getName() + " updated the Moderating System";
			}
			else if(messageSent.indexOf("/kick ") == 0)
			{
				for (String key : playerList.keySet())
				{
					if(key.equalsIgnoreCase(messageSent.substring(5).trim()))
					{
						if (!playerList.get(key).isMod()){
							playerFound = true;
							kickPlayer(key);
							username.getMap().sendToAll("CServer: " + messageSent.substring(5).trim() + " was kicked!");
						}
						break;
					}
				}
				if (!playerFound)
					username.getIoSession().write("CServer: " + messageSent.substring(5).trim() + " does not exist!");
			}
			else if(messageSent.indexOf("/kickall") == 0)
			{
				for (String key : playerList.keySet())
				{
					kickPlayer(key);
					username.getMap().sendToAll("CServer: " + messageSent.substring(5).trim() + " was kicked!");
				}
			}
			else if(messageSent.indexOf("/mute") == 0)
			{
					for (String key : playerList.keySet())
					{
						if(key.equalsIgnoreCase(messageSent.substring(5).trim()))
						{
							if (!playerList.get(key).isMod()){
								playerFound = true;
								mutePlayer(key);
								username.getMap().sendToAll("CServer: " + messageSent.substring(5).trim() + " was muted!");
							}
							break;
						}
					}
					if (!playerFound)
						username.getIoSession().write("CServer: " + messageSent.substring(5).trim() + " does not exist!");
			}
			else if(messageSent.indexOf("/silentmute") == 0)
			{
					for (String key : playerList.keySet())
					{
						if(key.equalsIgnoreCase(messageSent.substring(11).trim()))
						{
							if (!playerList.get(key).isMod()){
								playerFound = true;
								silentmutePlayer(key);
								
							}
							break;
						}
					}
					if (!playerFound)
						username.getIoSession().write("CServer: " + messageSent.substring(5).trim() + " does not exist!");
			}
			else if(messageSent.indexOf("/disable") == 0)
			{
					for (String key : playerList.keySet())
					{
						if(key.equalsIgnoreCase(messageSent.substring(8).trim()))
						{
							if (!playerList.get(key).isMod()){
								playerFound = true;
								disablePlayer(key);
								username.getMap().sendToAll("CServer: " + messageSent.substring(8).trim() + " was disabled!");
							}
							break;
						}
					}
					if (!playerFound)
						username.getIoSession().write("CServer: " + messageSent.substring(8).trim() + " does not exist!");
			}
			else if(messageSent.indexOf("/enable") == 0)
			{
					for (String key : playerList.keySet())
					{
						if(key.equalsIgnoreCase(messageSent.substring(7).trim()))
						{
							if (!playerList.get(key).isMod()){
								playerFound = true;
								enablePlayer(key);
								username.getMap().sendToAll("CServer: " + messageSent.substring(7).trim() + " was freed from all moderator restrictions!");
							}
							break;
						}
					}
					if (!playerFound)
						username.getIoSession().write("CServer: " + messageSent.substring(7).trim() + " does not exist!");
			}
			else if(messageSent.indexOf("/unmute") == 0)
			{
					for (String key : playerList.keySet())
					{
						if(key.equalsIgnoreCase(messageSent.substring(7).trim()))
						{
							if (!playerList.get(key).isMod()){
								playerFound = true;
								unmutePlayer(key);
								username.getMap().sendToAll("CServer: " + messageSent.substring(7).trim() + " was unmuted!");
							}
							break;
						}
					}
					if (!playerFound)
						username.getIoSession().write("CServer: " + messageSent.substring(7).trim() + " does not exist!");
			}
			else if(messageSent.indexOf("/freeze") == 0)
			{
				for (String key : playerList.keySet())
				{
					if(key.equalsIgnoreCase(messageSent.substring(7).trim()))
					{
						if (!playerList.get(key).isMod()){
							playerFound = true;
							freezePlayer(key);
							username.getMap().sendToAll("CServer: " + messageSent.substring(7).trim() + " was frozen!");
						}
						break;
					}
				}
				if (!playerFound)
					username.getIoSession().write("CServer: " + messageSent.substring(7).trim() + " does not exist!");
			}
			/*else if(messageSent.indexOf("/trade") == 0)
			{
				for (String key : playerList.keySet())
				{
					if(key.equalsIgnoreCase(messageSent.substring(6).trim()))
					{
							playerFound = true;
							PlayerChar player = playerList.get(key);
							player.addTradePokemon(username.getParty()[0]);
							username.removePokemon(username.getParty()[0]);
							username.getMap().sendToAll("CServer: ");
						break;
					}
				}
				if (!playerFound)
					username.getIoSession().write("CServer: " + messageSent.substring(5).trim() + " does not exist!");
			}*/
			else if(messageSent.indexOf("/unfreeze") == 0)
			{
				for (String key : playerList.keySet())
				{
					if(key.equalsIgnoreCase(messageSent.substring(9).trim()))
					{
						if (!playerList.get(key).isMod()){
							playerFound = true;
							unfreezePlayer(key);
							username.getMap().sendToAll("CServer: " + messageSent.substring(9).trim() + " was unfrozen!");
						break;
						}
					}
				}
				if (!playerFound)
					username.getIoSession().write("CServer: " + messageSent.substring(9).trim() + " does not exist!");
			}
			else if(messageSent.indexOf("/who") == 0)
			{
				int playerCount = 0;
				for (String key : playerList.keySet())
				{
					playerCount = playerCount + 1;
					output = output + key + ", ";
				}
				username.getIoSession().write("C" + playerCount + " Players Online: " + output);
				output = "";
			} else if (messageSent.indexOf("/antilag") == 0) {
				playerList.get(username).getIoSession().close();
			}			/*else if(messageSent.indexOf("/setsprite") == 0){
				
				username.getName();
				username.setSprite(messageSent.substring(10));
				username.getMap().sendToAll("CServer: GM changed his sprite and needs to reload.");
				
			}*/
			
			
			// /pos command gets server to tell your position in chat.
			else if(messageSent.indexOf("/pos") == 0){		
				
				for (String key : playerList.keySet())
				{
					if(key.equalsIgnoreCase(messageSent.substring(4).trim()))
					{
						if (!playerList.get(key).isMod()){
							playerFound = true;
							posPlayer(key, username);
						}
						break;
					}
				}
				if (!playerFound)
					username.getIoSession().write("CServer: " + messageSent.substring(4).trim() + " does not exist!");
				
			}
			else if(messageSent.indexOf("/teletoplayer") == 0){		
				
				for (String key : playerList.keySet())
				{
					if(key.equalsIgnoreCase(messageSent.substring(13).trim()))
					{
						if (!playerList.get(key).isMod()){
							playerFound = true;
							teleToPlayerPlayer(key, username);
						}
						break;
					}
				}
				if (!playerFound)
					username.getIoSession().write("CServer: " + messageSent.substring(4).trim() + " does not exist!");
				
			}
			else if(messageSent.indexOf("/getip") == 0){
				for(String key : playerList.keySet()){
					if(key.equalsIgnoreCase(messageSent.substring(13).trim())){
						PlayerChar player = playerList.get(key);
						if(!playerList.get(key).isMod()){
							username.getIoSession().write("CServer: The player " + player.getName() + " ip is " + player.getIoSession().getLocalAddress());
						}else{
							username.getIoSession().write("CServer: You cannot try to get game moderator ip address.");
						}
							
					}
				}
			}
			else if(messageSent.indexOf("/announce") == 0){
				for (PlayerChar p : playerList.values())
					p.getIoSession().write("C<Server Announcement>: " + messageSent.substring(9).trim());
				
			}
			else
				output = removeBad(messageSent);
		}
		return output;
	}
	
	   /**
	    * Removes all bad language
	    * @param String messageSent
		*/
	String removeBad(String messageSent)
	{
		String temp = messageSent.trim();
		StringTokenizer st3 = new StringTokenizer(temp);
		String output = "";
		while(st3.hasMoreTokens())
		{
			String check = st3.nextToken();
			for(int i = 0; i < CensorList.size(); i++)
			{
				if(CensorList.get(i).hasWildCard)
				{
					if(check.toLowerCase().indexOf(CensorList.get(i).getOriginal().toLowerCase()) >= 0)
					{
						check = CensorList.get(i).getNew();
						break;
					}				
				}
				else
				{
					if(check.equalsIgnoreCase(CensorList.get(i).getOriginal()))
					{
						check = CensorList.get(i).getNew();
						break;
					}						
				}
			}
			output = output + check + " ";
		}
		return output;
	}
	
	   /**
	    * Kicks a player from the server and informs the player they have been kicked
	    * @param String playerName - Player's name
		*/
	void kickPlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.getIoSession().write("mYou have been kicked from Pokemon Global.");
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				player.getIoSession().close();
				System.out.println(playerName + " was kicked!");
			}
		}
	}
	
	   /**
	    * Mutes a player (disables them from using chat) and informs them they have been muted
	    * @param String playername - Player's name
		*/
	void mutePlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.getIoSession().write("mYou have been muted. You may no longer use the chat functions.");
				player.setMuted(true);
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				System.out.println(playerName + " was muted!");
			}
		}
	}
	void silentmutePlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.setMuted(true);
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
		}
	}
	
	   /**
	    * Unmutes a player and informs them they have been unmuted
	    * @param String playername - Player's name
		*/
	void unmutePlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.getIoSession().write("mYou have been unmuted. You may now use the chat functions again.");
				player.setMuted(false);
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				System.out.println(playerName + " was unmuted!");
			}
		}
	}
	
	   /**
	    * Freezes and Mutes a player
	    * @param String playername - Player's name
		*/
	void disablePlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.setFrozen(true);
				player.setMuted(true);
				player.getIoSession().write("mYou have been disabled from using Pokemon Global.");
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				player.getIoSession().close();
				System.out.println(playerName + " was disabled!");
			}
		}
	}
	
	   /**
	    * Unfreezes and unmutes a player
	    * @param String playername - Player's name
		*/
	void enablePlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.setFrozen(false);
				player.setMuted(false);
				player.getIoSession().write("mYou have been freed from all moderator restrictions.");
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				System.out.println(playerName + " was enabled!");
			}
		}
	}
	   /**
	    * Disables player movement
	    * @param String playername - Player's name
		*/
		void freezePlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.getIoSession().write("mYou have been frozen. You may no longer move. A moderator may require your attention.");
				player.setFrozen(true);
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				System.out.println(playerName + " was frozen!");
			}
		}
	}
	
		   /**
		    * Re-enables player's movement
		    * @param String playername - Player's name
			*/
	void unfreezePlayer(String playerName)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				player.getIoSession().write("mYou have been unfrozen. You may move again.");
				player.setFrozen(false);
				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				System.out.println(playerName + " was unfrozen!");
			}
		}
	}
	
	void posPlayer(String playerName, PlayerChar username)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				username.getIoSession().write("C" +
				"------------------------" +
				player.getName() +
				"'s current map position is: " +
				player.getMapX() +
				", " +
				player.getMapY() +
				". " +
				player.getName() +
				"'s current map co-ord's are: " +
				player.getX() +
				", " +
				player.getY() +
				". " +
				"------------------------");

				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				System.out.println("Found the position for " + playerName);
			}
		}
	}
	void teleToPlayerPlayer(String playerName, PlayerChar username)
	{
		PlayerChar player = playerList.get(playerName);
		if (player != null && !player.isMod()) {
			try
			{
				username.setMap(player.getMap());
				username.setX(player.getX());
				username.setY(player.getY());
				username.getIoSession().write("C" + "You have teleported to player" + playerName);

				Thread.sleep(500);
			}
			catch (Exception e)
			{
			}
			finally
			{
				System.out.println("Found the position for " + playerName);
			}
		}
	}
}

class Filter
{
	private String f;
	boolean hasWildCard;
	
	void set(String o1, boolean wild)
	{
		f = o1;
		hasWildCard = wild;		
	}
	
	String getOriginal()
	{
		return f.substring(0, f.indexOf(':'));
	}
	
	String getNew()
	{
		return f.substring(f.indexOf(':') + 1);
	}
}

The "/res/badwords.txt" is:

Badword:GoodWord

Badword is any bad word that you want filtered out
Goodword is what you are replacing it with (like !@#$)

Now this system does work sometimes, but recently the server was updated and this system has fallen apart. If anyone has any concept ideas or anything please let me know. Thank you.
 
Last edited:
Technology news on Phys.org
  • #2
Do you get paid for fixing this? We don't.

We're here to help, so you need to help us to help you.

Most people would look at a post, and give an answer in a matter of a minute. If it takes more time than that, they move on. Guess why there is not a single answer since your post ten days ago.

Here are some suggestions:
1. Be precise about your problem.
...it periodically does not work.
...this system has fallen apart.
does not tell us much unless you indicate what makes you think it does not work, error messages, etc.
2. Extract the part of the code that you think is causing the problem.
If you think people have nothing better to do than to study your precisely 650 lines of code to look for your problem, think twice. This is your responsibility to help people to help you.
If you are not a programmer, or if you did not write the programme, hire one.
 

1. What is a Java Language Filter?

A Java Language Filter is a piece of code or program that is used to filter and manipulate data or information written in the Java programming language. It is commonly used to restrict or allow certain types of data or information based on specified criteria.

2. How does a Java Language Filter work?

A Java Language Filter works by intercepting incoming requests, such as user input or data, and analyzing the data against predefined rules or criteria. If the data meets the criteria, it is allowed to pass through, otherwise it is blocked or manipulated.

3. What are some common use cases for a Java Language Filter?

A Java Language Filter can be used for a variety of purposes, such as validating user input, preventing cross-site scripting (XSS) attacks, enforcing data security and access control, and implementing content restrictions for web applications.

4. Are there any built-in Java Language Filters?

Yes, Java provides a built-in language filter called the Servlet Filter. This filter can be used for general purpose filtering of web-based applications. Additionally, there are also third-party libraries and frameworks that offer more advanced filtering capabilities.

5. How can I implement a Java Language Filter in my project?

To implement a Java Language Filter, you can create a class that implements the javax.servlet.Filter interface, define your filtering logic in the doFilter() method, and then register the filter in your web application's deployment descriptor (web.xml file).

Similar threads

  • Programming and Computer Science
Replies
2
Views
620
  • Programming and Computer Science
Replies
1
Views
1K
  • Programming and Computer Science
Replies
3
Views
3K
  • Programming and Computer Science
Replies
1
Views
1K
  • Programming and Computer Science
Replies
4
Views
2K
  • Programming and Computer Science
Replies
1
Views
3K
  • Programming and Computer Science
Replies
3
Views
2K
  • Programming and Computer Science
Replies
5
Views
2K
  • Programming and Computer Science
Replies
2
Views
2K
  • Programming and Computer Science
Replies
4
Views
1K
Back
Top