Gøre kode objekt orienteret
HejJeg er godt i gang med en irc bot i java, og jeg tænker at den nok kunne gøres mere objekt orienteret og struktureret end den er nu.
Koden er her, nogle forslag til hvad jeg kan ændre ?
(Java 1.4.x og bruger Eclipse som IDE)
package ircbot;
/**
IRC-bot v.3
@author: Claus Jørgensen
@date 23.01.05
*/
import java.io.*;
import java.net.*;
import java.util.Date;
import java.text.DateFormat;
public class IrcBot
{
public static void main(String[] args) throws Exception
{
// variabler
Socket ircSocket = null;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(new FileOutputStream("ircbot.log", true)); // log fil
int position;
int port;
long starttime = System.currentTimeMillis();
String username = new String();
String server = new String();
String newtopic = new String();
String msg = new String();
String channel = new String();
String line;
String RealName = new String("Teh 1337 Java-Bot, by TheDeathArt"); // Beskrivelse af botten
String operators[] = new String[100];
System.out.print("Indtast server: \n");
server = br.readLine(); // IP'en til serveren
System.out.print("Indtast port: \n");
port = Integer.parseInt(br.readLine()); // Porten til IRC-serveren
System.out.print("Indtast botnick: \n");
String botnick = br.readLine(); // Bottens nick
// Åbner en socket til irc netværket
try
{
ircSocket = new Socket(server , port);
out = new PrintWriter(ircSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(ircSocket.getInputStream()));
}
catch (UnknownHostException e)
{
System.err.println("Kunne ikke finde: " + server);
System.exit(1);
}
while((line = in.readLine()) != null)
{
String newlinet = line.substring(2);
if(line.indexOf("!") > 0)
{
position = line.indexOf("!");
username = line.substring(1,position);
}
if(newlinet.indexOf(":") > 0)
{
position = newlinet.indexOf(":") + 1;
String newline = newlinet.substring(position);
pw.println(newline);
pw.flush();
System.out.println(newline); // udkskriver pæn linje
if(newlinet.indexOf("#") > 0)
{
position = newlinet.indexOf("#");
String newchannel = newlinet.substring(position);
if(newchannel.indexOf(":") > 0)
{
position = newchannel.indexOf(":") - 1;
channel = newchannel.substring(0,position);
}
}
}
else
{
System.out.println(line);
pw.println(line);
pw.flush();
}
if(line.indexOf("No ident respons") > 0)
{
out.println("USER " + botnick + " none none : " + RealName );
out.println();
out.println("NICK " + botnick);
out.println();
}
if(line.indexOf("End of /MOTD command.") > 0)
{
out.println("PRIVMSG TheDeathArt : Teh 1337 JavaBot is online my master");
}
/* Ping-Pong servicen, sørger for at holde botten online */
if(line.startsWith("PING"))
{
out.println("PONG " + line.substring(5));
System.out.println("Ping? Pong!");
}
/* checker for !uptime */
if(line.indexOf("!uptime") > 0)
{
long uptime = (System.currentTimeMillis() - starttime) / 1000;
out.println("NOTICE " + username + " :Min Uptime er " + uptime + " sek. ");
}
if(line.indexOf("!time") > 0)
{
Date now = new Date();
DateFormat nowTime = DateFormat.getTimeInstance();
out.println("NOTICE " + username + " :" + "Klokken er: " + nowTime.format(now));
}
if(line.indexOf("!topic") > 0)
{
position = line.indexOf("!topic") + 7;
try
{
msg = line.substring(position);
for(int i = 0; i < operators.length; i++) // løber listen af operators igennem ved forsøg på at sætte topic via. !topic
{
if( operators[i].equalsIgnoreCase("@" + username) )
{
System.out.println(username + " er godkendt");
}
else
{
System.out.println(username + " er IKKE godkendt");
}
}
out.println("TOPIC " + channel + " :" + msg);
} catch (Exception e) {}
}
if(line.indexOf("!listopers") > 0)
{
for(int i = 0; i < operators.length; i++)
{
System.out.println("Operators: " + operators[i]);
}
}
if(line.indexOf("!say") > 0)
{
position = line.indexOf("!say") + 5;
try
{
msg = line.substring(position);
out.println("PRIVMSG " + channel + " :" + msg);
} catch (Exception e) {}
}
if(line.indexOf("!join") > 0)
{
position = line.indexOf("!join") + 6;
try
{
msg = line.substring(position);
out.println("JOIN " + msg);
} catch (Exception e) {}
}
if(line.indexOf("!part") > 0)
{
position = line.indexOf("!part") + 6;
try
{
msg = line.substring(position);
out.println("PART " + msg);
} catch (Exception e) {}
}
/* lukker botten */
if(line.indexOf("!quit") > 0)
{
out.println("QUIT : Farvel, og tak for denne gang");
out.close();
in.close();
ircSocket.close();
System.exit(0);
}
if(line.indexOf("!auth") > 0)
{
out.println("PRIVMSG Q@CServe.quakenet.org :AUTH JavaBot xhtml2004");
System.out.println(" Q@CServe.quakenet.org :AUTH JavaBot xhtml2004");
}
}
// Lukker sockets igen.
out.close();
in.close();
ircSocket.close();
}
}
