Du bist nicht angemeldet.

Sonntag, 3. Juni 2012, 00:18

Kurzbeschreibung

Ermöglicht es, Mitglieder zu ignorieren.

Beschreibung

  • Autor: Localhost
  • Datum: 26.04.2012
Datenbank

Folgenden Code als SQL-Befehl ausführen:

MySQL-Abfrage(n)

1
ALTER TABLE `accounts` ADD `ignoredNicks` LONGTEXT NOT NULL


Client.java

Suche:

Quellcode

1
private String name;


Darunter:

Quellcode

1
private String ignoredNicks;


Suche:

Quellcode

1
2
3
public String getName() {
    	return name;
	}


Darunter:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public String getIgnoredNicks() {
		return ignoredNicks;
	}
	
	public void setIgnoredNicks(String ignoredNicks) {
		this.ignoredNicks = ignoredNicks;
	}
	
	public boolean checkIgnored(String nick) {
		return ignoredNicks.contains(String.format("|%s|", nick));
	}
	
	public void addIgnoredNick(String nick) {
		ignoredNicks = String.format("%s|%s|", ignoredNicks, nick);
	}
	
	public void removeIgnoredNick(String nick) {
		ignoredNicks = ignoredNicks.replace(String.format("|%s|", nick), "");
	}


Suche:

Quellcode

1
this.name = rs.getString("name");


Darunter:

Quellcode

1
ignoredNicks = rs.getString("ignoredNicks");


[!] Die saveStats() Methode muss eigenständig erweitert werden.

CommandParser.java

Neue Methode:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
public static int countChars(String text, char c) {
   	int counter = 0;
   	
   	for (int i=0;i<text.length();i++) {
        	if (text.charAt(i) == c) {
        		counter++;
        	}
   	}

   	return counter;
	}


w-Funktion:
Füge nach der Prüfung des Nicks folgenden Code hinzu:

Quellcode

1
2
3
4
        	if(target.checkIgnored(client.getName())) {
        		client.sendButlerMessage(channel.getName(), String.format("Du kannst das Profil von %s nicht ansehen. %s ignoriert dich.", target.getName(), target.getName()));
        		return;
        	}


Suche:

Quellcode

1
2
3
4
5
6
if (target != client) {
            	Button buttonMessage = new Button("Nachricht");
            	buttonMessage.setCommand(String.format("/serverpp %s", nickname));
            	buttonMessage.disableClose();
            	panel.addComponent(buttonMessage);
        	}


Darunter:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
if(client != target && !target.isModerator()) {
            	if (!client.checkIgnored(target.getName())) {
            		Button buttonMessage = new Button("Ignore");
                	buttonMessage.setCommand(String.format("/ig %s", target.getName()));
                	buttonMessage.disableClose();
                	panel.addComponent(buttonMessage);
            	} else {
                	Button buttonMessage = new Button("Unignore");
                	buttonMessage.setCommand(String.format("/ig !%s", target.getName()));
                	buttonMessage.disableClose();
                	panel.addComponent(buttonMessage);
            	}
        	} 


p-Funktion:
Suche:

Quellcode

1
2
3
4
5
if (target == null) {
                	client.sendButlerMessage(channel.getName(), String.format("%s ist mir unbekannt.", rcp));
            	} else if (!targets.contains(target)) {
                	targets.add(target);
            	}


Ersetzen mit:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
if (target == null) {
                	client.sendButlerMessage(channel.getName(), String.format("%s ist mir unbekannt.", rcp));
            	} else if(target.checkIgnored(client.getName())) {
            		client.sendButlerMessage(channel.getName(), String.format("Sie werden von %s ignoriert.", target.getName()));
            	} else if (!targets.contains(target)) {
            		String nick = target.getName().replace("<", "\\<");
            		
            		if(client.checkIgnored(target.getName())) {
            			client.sendButlerMessage(channel.getName(), String.format("_°>_h%s|/serverpp "|/w "<° steht auf deiner Ignore-Liste_ und wird deshalb nicht antworten können. Mit _°BB>_h/ig !%s|"<r°_ kannst du °>_h%s|/serverpp "|/w "<° wieder von der Ignore-Liste löschen.", nick, nick, nick));
            		}
            		
                	targets.add(target);
            	}


Vorhandene /ig Funktion löschen & neue hinzufügen (else-Condition erweitern):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
if (cmd.equals("ig") || cmd.equals("ignore")) {
    		arg = KCodeParser.escape(arg);
    		
    		if(arg.isEmpty()) {
    			if(client.getIgnoredNicks().isEmpty()) {
    				client.sendButlerMessage(channel.getName(), "Momentan ignorierst du niemanden.");
    			} else {
    				StringBuilder ignoredNicks = new StringBuilder();
    				int countNicks = 1;
    				
    				for(String nick : client.getIgnoredNicks().split("\\|")) {
    					if(!nick.isEmpty()) {
    						String name = nick.replace("<", "\\<");
    						
    						if(countNicks != 1) {
    							ignoredNicks.append(", ");
    						}
    						
    						ignoredNicks.append("°>_h").append(name).append("|/serverpp "|/w "<°");
    						countNicks++;
    					}
    				}
    				
    				client.sendButlerMessage(channel.getName(), String.format("Folgende Mitglieder werden momentan von dir ignoriert:#%s", ignoredNicks.toString()));
    			}
    			
    			return;
    		}

    		Client target = Server.get().getClient(arg);
    		boolean remove = false;
    		
    		if(arg.startsWith("!")) {
    			remove = true;
    			arg = arg.substring(1);
    		}
    		
    		if(target == null) {
    			target = new Client(null);
    			target.loadStats(arg);
    			
    			if(target.getName() == null) {
    				client.sendButlerMessage(channel.getName(), String.format("Wer ist %s?", arg));
    				return;
    			}
    		}
    		
    		String nick = target.getName();
    		String name = nick.replace("<", "\\<");
    		
    		if(remove) {
    			if(!client.checkIgnored(target.getName())) {
    				client.sendButlerMessage(channel.getName(), String.format("Du hast °>_h%s|/serverpp "|/w "<° niemals ignoriert!", name));
        			return;
    			}
    			
    			client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp "|/w "<° wird von nun an nicht mehr von dir ignoriert!", name));
				client.removeIgnoredNick(target.getName());
    		} else {
    			int maxIgnoredNicks = client.getRank()*5+10;
    			int currentIgnoredNicks = countChars(client.getIgnoredNicks(), '|')/2;
    			String lastIgnoredNick = "";
    			
    			if(!client.getIgnoredNicks().isEmpty()) {
    				lastIgnoredNick = client.getIgnoredNicks().substring(1).split("\\|")[0];
    			}
    			
    			if(target == client) {
    				client.sendButlerMessage(channel.getName(), "Jeder hat mal Probleme, aber deshalb musst du dich doch nicht selbst ignorieren?!");
    				return;
    			}
    			
    			if(target.isModerator()) {
    				client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp "|/w "<° kann nicht ignoriert werden.", name));
    				return;
    			}
    			
    			if(client.checkIgnored(target.getName())) {
    				client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp "|/w "<° steht bereits auf ihrer Ignoreliste.", name));
    				return;
    			}
    				
    			client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp "|/w "<° wird von nun an von dir _ignoriert_, was du mit _°>/ig !%s|"<°_ rückgängig machen kannst.%s", name, nick, currentIgnoredNicks == maxIgnoredNicks ? String.format("#Da deine Ignoreliste voll war, wurde %s wieder von deiner Liste entfernt.", lastIgnoredNick) : ""));
    			
    			if(currentIgnoredNicks == maxIgnoredNicks) {
        			client.removeIgnoredNick(lastIgnoredNick);
    			}
    			
    			client.addIgnoredNick(target.getName());
    		}
    	}


Channel.java

Methode broadcastMessage:
Suche:

Quellcode

1
2
3
for (Client c : getClients()) {
    		c.send(msg);
    	}


Ersetzen mit:

Quellcode

1
2
3
4
5
for (Client c : getClients()) {
    		if(!c.checkIgnored(client.getName())) {
    			c.send(msg);
    		}
    	}


Methode broadcastAction:
Suche:

Quellcode

1
2
3
for (Client c : getClients()) {
    		c.send(action);
    	}


Ersetzen mit:

Quellcode

1
2
3
4
5
for (Client c : getClients()) {
    		if(!c.checkIgnored(sender)) {
    			c.send(action);
    		}
    	}


Hinweise
  • Man kann weder sich selbst noch User ab dem Status Moderator ignorieren.
  • Man kann als User max. 10 Mitglieder ignorieren, ab VIP 15, Moderatoren 20 etc. (RANGID*5+10).
  • Wenn die Ignoreliste voll ist und man ignoriert einen User, wird der User, den man als erstes ignoriert hat, automatisch wieder von der Liste entfernt.
  • /ig zeigt eine Übersicht mit allen Nicks, welche man ignoriert hat, an.
  • /ig NICKNAME fügt der Ignoreliste einen Nick hinzu, /ig !NICK entfernt diesen Nick wieder.


Webdisk 1.1.5 © www.viecode.com 2010-2012