MoparClassic/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/BanHandler.java.autothread

69 lines
3.4 KiB
Plaintext

package org.rscdaemon.ls.packethandler.loginserver;
import org.rscdaemon.ls.packethandler.PacketHandler;
import org.rscdaemon.ls.Server;
import org.rscdaemon.ls.model.World;
import org.rscdaemon.ls.net.LSPacket;
import org.rscdaemon.ls.net.Packet;
import org.rscdaemon.ls.util.DataConversions;
import org.rscdaemon.ls.packetbuilder.loginserver.ReplyPacketBuilder;
import org.apache.mina.common.IoSession;
import java.sql.ResultSet;
public class BanHandler implements PacketHandler {
private ReplyPacketBuilder builder = new ReplyPacketBuilder();
public void handlePacket(Packet p, IoSession session) throws Exception {
final long uID = ((LSPacket)p).getUID();
boolean banned = ((LSPacket)p).getID() == 4;
long user = p.readLong();
long modhash = p.readLong();
ResultSet result = Server.db.getQuery("SELECT u.group_id, p.playermod, p.owner FROM `users` AS u INNER JOIN `rscd_players` AS p ON p.owner=u.id WHERE p.user=" + user);
if(!result.next()) {
builder.setSuccess(false);
builder.setReply("There is not an account by that username");
}
else if(banned && (result.getInt("group_id") < 3 || result.getInt("playermod") == 1)) {
builder.setSuccess(false);
builder.setReply("You cannot ban a (p)mod or admin!");
}
else if(Server.db.updateQuery("UPDATE `rscd_players` SET `banned`='" + (banned ? "1" : "0") + "' WHERE `user` LIKE '" + user + "'") == 0) {
builder.setSuccess(false);
builder.setReply("There is not an account by that username");
}
else {
World w = Server.getServer().findWorld(user);
if(w != null) {
w.getActionSender().logoutUser(user);
}
if(banned) {
String owner = result.getString("owner");
Server.db.updateQuery("INSERT `rscd_banlog` VALUES('" + user + "','" + modhash + "','" + (System.currentTimeMillis() / 1000) + "')");
ResultSet result2 = Server.db.getQuery("SELECT username FROM `users` WHERE id=" + owner);
String username = result2.getString("username");
Server.db.updateQuery("INSERT `topics` (poster, subject, posted, last_post, last_poster, forum_id) VALUES('" + username + "','[" + DataConversions.hashToUsername(user) + "] Banned by [" + DataConversions.hashToUsername(modhash) + "]','" + (System.currentTimeMillis() / 1000) + "','" + (System.currentTimeMillis() / 1000) + "','" + username + "','19')");
ResultSet result3 = Server.db.getQuery("SELECT LAST_INSERT_ID()");
String tid = result3.getString(1);
Server.db.updateQuery("INSERT `posts` (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES('" + username + "','0.0.0.0','null@null.org', This thread will close in 24h, post in here if you are the account owner.','1','" + (System.currentTimeMillis() / 1000) + "','" + tid + "')");
ResultSet result4 = Server.db.getQuery("SELECT LAST_INSERT_ID()");
String pid = result4.getString(1);
Server.db.updateQuery("UPDATE `posts` SET last_post_id=`" + pid + "` WHERE id=`" + tid + "`");
}
builder.setSuccess(true);
builder.setReply(DataConversions.hashToUsername(user) + " has been " + (banned ? "banned" : "unbanned"));
}
builder.setUID(uID);
LSPacket temp = builder.getPacket();
if(temp != null) {
session.write(temp);
}
}
}