Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Banana-Coding.com - Java Knuddels Emulator. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

Localhost

Ehemaliger Supporter

  • »Localhost« ist der Autor dieses Themas

Beiträge: 345

Wohnort: 127.0.0.1

  • Private Nachricht senden

1

Donnerstag, 26. April 2012, 16:24

/ig - Mitglieder ignorieren

  • 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.
No support via message.

"Der gute Programmierer ist nicht der, der keine Fehler macht, sondern der, der seine Fehler rasch findet und behebt."

Es haben sich bereits 2 registrierte Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Pwned, Gangstersheep

2

Sonntag, 29. April 2012, 21:16

Wieso benutzt Du hierfür keine ArrayList?

3

Sonntag, 29. April 2012, 22:51

Unterschreibe ich...
Ebenso würde ich dafür nicht eine Spalte in SQL nehmen sondern eine neue Tabelle in einer 1 zu N Verbindung zur Usertabelle.