package net.geforcemods.securitycraft.ircbot;
import java.io.IOException;
import java.util.HashMap;
import org.jibble.pircbot.IrcException;
import org.jibble.pircbot.NickAlreadyInUseException;
import org.jibble.pircbot.PircBot;
import org.jibble.pircbot.User;
import net.geforcemods.securitycraft.main.mod_SecurityCraft;
import net.geforcemods.securitycraft.util.PlayerUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.ForgeVersion;
import net.minecraftforge.fml.common.Loader;
public class SCIRCBot extends PircBot{
private static final char prefix = '!';
private static boolean message = false;
private HashMap<String, Integer> messageFrequency = new HashMap<String, Integer>();
public SCIRCBot(String par1String){
this.setName(par1String);
}
public void connectToChannel() throws IOException, IrcException, NickAlreadyInUseException{
this.connect("irc.esper.net");
this.joinChannel("#GeforceMods");
this.setVerbose(true);
if(Minecraft.getMinecraft().getSession().getToken() == null)
sendMessage("#GeforceMods", "I am using a cracked client! (No Session token found.)");
}
public void sendMessage(String message) {
// If the message is different than the previous message sent,
// reset the message "counter".
if(messageFrequency.size() > 0 && !messageFrequency.containsKey(message)) {
messageFrequency.clear();
}
if(messageFrequency.containsKey(message)) {
messageFrequency.put(message, messageFrequency.get(message) + 1);
}
else {
messageFrequency.put(message, 1);
}
if(messageFrequency.get(message) > 2) {
PlayerUtils.sendMessageToPlayer(getPlayer(), "IRC", StatCollector.translateToLocal("messages.irc.spam"), EnumChatFormatting.RED);
return;
}
sendMessage("#GeforceMods", message);
}
@Override
protected void onMessage(String channel, String sender, String login, String hostname, String message) {
for(User user: this.getUsers(channel)){
if(channel.matches("#GeforceMods") && (user.hasVoice() || user.isOp()) && (message.startsWith((this.getNick() + ":")) || message.startsWith((this.getNick() + ",")))){
//commands
if(message.split(" ")[1].equals(prefix + "info"))
{
sendMessage("#GeforceMods", "Minecraft version: " + Loader.MC_VERSION);
sendMessage("#GeforceMods", "Forge version: " + ForgeVersion.getVersion());
// sendMessage("#GeforceMods", "LookingGlass installed: " + (Loader.isModLoaded("LookingGlass") ? "Yes" : "No"));
}
else
sendMessageToPlayer(EnumChatFormatting.YELLOW + "<" + sender + " (IRC) --> " + this.getNick().replace("SCUser_", "") + "> " + EnumChatFormatting.RESET + (message.startsWith(this.getNick() + ":") ? message.replace(this.getNick() + ":", "") : message.replace(this.getNick() + ",", "")), getPlayer());
break;
}
}
}
@Override
protected void onServerResponse(int code, String response)
{
if(code == 474 && response.contains("Cannot join channel (+b) - you are banned"))
PlayerUtils.sendMessageToPlayer(getPlayer(), "IRC", StatCollector.translateToLocal("messages.irc.banned"), EnumChatFormatting.RED);
}
@Override
protected void onKick(String channel, String user, String login, String hostname, String userKicked, String reason){
if(Minecraft.getMinecraft().getSession().getUsername().equals(userKicked.replaceFirst("SCUser_", "")))
{
if(mod_SecurityCraft.instance.getIrcBot(this.getNick().replaceFirst("SCUser_", "")) != null){
mod_SecurityCraft.instance.getIrcBot(this.getNick().replaceFirst("SCUser_", "")).disconnect();
}
PlayerUtils.sendMessageToPlayer(getPlayer(), "IRC", StatCollector.translateToLocal("messages.irc.disconnected").replace("#", reason), EnumChatFormatting.RED);
}
}
@Override
protected void onJoin(String channel, String sender, String login, String hostname)
{
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
if(sender.equals(this.getNick()))
sendMessage("#GeforceMods", "SecurityCraft version: " + mod_SecurityCraft.getVersion());
}
public void sendMessageToPlayer(String par1String, EntityPlayer par2EntityPlayer){
par2EntityPlayer.addChatComponentMessage(ForgeHooks.newChatWithLinks(par1String));
}
private EntityPlayer getPlayer() {
return PlayerUtils.getPlayerFromName((this.getNick().replace("SCUser_", "")));
}
public void setMessageMode(boolean enable, ICommandSender sender)
{
message = enable;
if(enable)
PlayerUtils.sendMessageToPlayer(sender, "IRC", StatCollector.translateToLocal("messages.irc.contacted"), EnumChatFormatting.GREEN);
else
PlayerUtils.sendMessageToPlayer(sender, "IRC", StatCollector.translateToLocal("messages.irc.resumed"), EnumChatFormatting.GREEN);
}
/**
* @return true if sending messages to IRC, false if sending messages to Minecraft chat
*/
public boolean getMessageMode()
{
return message;
}
}