Dies ist nur das Ban-System selbst, die Funktion zum (Ent-)Sperren ist nicht enthalten!
Wir haben zwei neue Tabellen: bans und ipbans.
|
MySQL-Abfrage(n)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
CREATE TABLE `bans` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`type` enum('ban','unban') NOT NULL,
`user` int(10) unsigned NOT NULL,
`mod` varchar(25) DEFAULT NULL,
`reason` text NOT NULL,
`lift` bigint(20) unsigned NOT NULL DEFAULT '0',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `ipbans` (
`ip` varchar(39) NOT NULL,
PRIMARY KEY (`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
Die Tabelle
bans speichert zum Einen Informationen über eine Sperre und dient uns zum Anderen als Log, daher die Spalten
type,
user und
timestamp. In der Tabelle
ipbans werden nur IP-Adressen gespeichert, jeder dort vorhandenen IP-Adresse wird der Login verwehrt.
Dann muss die Tabelle
accounts noch um die Spalte
ban erweitert werden.
|
MySQL-Abfrage(n)
|
1
|
ALTER TABLE `accounts` ADD COLUMN `ban` INTEGER UNSIGNED NOT NULL DEFAULT 0;
|
Diese Spalte speichert als Wert entweder 0 wenn der Chatter nicht gesperrt ist oder die Id der Sperre, um so später an die nötigen Informationen zu kommen.
Nachdem wir die MySQL-Abfragen ausgeführt haben öffnen wir
Client.java und fügen
|
Quellcode
|
1
|
private int ban;
|
unter
|
Quellcode
|
1
|
private String ipAddress;
|
ein,
|
Quellcode
|
1
|
ban = rs.getInt("ban");
|
über
|
Quellcode
|
1
|
away = false;
|
und
|
Quellcode
|
1
2
3
|
public int getBan() {
return ban;
}
|
unter
|
Quellcode
|
1
2
3
|
public String getIPAddress() {
return ipAddress;
}
|
Zunächst öffnen wir
JoinChannelHandler.java und ersetzen
|
Quellcode
|
1
|
client.login(nickname);
|
durch
|
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
|
client.login(nickname);
if (client.getBan() != 0) {
ps.close();
ps = con.prepareStatement("SELECT `mod`, `reason`, `lift` FROM `bans` WHERE `id` = ?");
ps.setInt(1, client.getBan());
rs = ps.executeQuery();
rs.next();
long lift = rs.getLong("lift");
if (lift != 0 && System.currentTimeMillis() > lift) {
// Hier die temporäre Sperre aufheben.
} else {
StringBuilder msg = new StringBuilder();
msg.append("_");
msg.append(rs.getString("mod"));
msg.append("_ hat dich aus folgenden Gründen gesperrt:##");
msg.append(rs.getString("reason"));
msg.append("##");
if (lift == 0) {
msg.append("Dies ist eine permanente Sperre.");
} else {
msg.append("Die Sperre wird am#_");
msg.append(new Date(lift).toString());
msg.append("_#aufgehoben.");
}
client.send(Popup.create("Problem", "Gesperrt", msg.toString(), 400, 300));
return;
}
} else {
ps.close();
ps = con.prepareStatement("SELECT * FROM `ipbans` WHERE `ip` = ?");
ps.setString(1, client.getIPAddress());
rs = ps.executeQuery();
if (rs.next()) {
client.send(Popup.create("Problem", "Gesperrt", "Ihrer IP-Adresse wurde der Zugang zum Chat verwehrt.", 400, 300));
return;
}
}
|
Und das war's dann auch schon.