Hier mal mein kleiner IRC - Bot...kann nicht viel aber es reicht ja vorerst mal....
Java
package com.bot;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IrcBot {
/**
* @param args
* @author www.uncreativ.de 23. Januar 2009 23:10 Uhr
* @version 1.0
*/
BufferedWriter writer = null;
BufferedReader reader = null;
BufferedReader readConsole = null;
Socket irc = null;
Matcher ownership = null;
String line = null;
String nick = "Uncreativ.de - Bot";
String login = "uncreativ";
String server = "irc.seilen.de";
String channel = "#blablubChan";
int port = 6667;
String owner = "uncreativ";
static String chuckWitz[] = {
"Chuck Norris schläft bei Licht. Nicht weil er Angst vor der Dunkelheit hat, weil die Dunkelheit Angst vor ihm hat.",
"Chuck Norris hat bis Unendlich gezählt...schon zwei mal!",
"Wenn Chuck Norris Liegestützen macht, drückt er die Welt nach unten.",
"Chuck Norris kann eine Fünfminutenterrine in einer drei�ig Sekunden zubereiten.",
"Wenn Chuck Norris in den Himmel schaut, fangen die Wolken an zu schwitzen, manche nennen es auch Regen.",
"Chuck Norris hat sich aus dem Bauch seiner Mutter durch einen Roundhouse Kick befreit. Kurz darauf wuchs im ein Bart.",
"Chuck Norris liest keine Bücher: Er starrt sie so lange an, bis sie ihm freiwillig sagen was er wissen will.",
"Wenn Chuck Norris ins Wasser geht wird er nicht nass, sondern dass Wasser Chuck Norris.",
"Chuck Norris kann mit einer Lupe Feuer machen, und dass bei Dunkelheit.",
"Chuck Norris kann eine Drehtür zuschlagen.",
"Chuck Norris kann den Stuhl auf dem er sitzt hochheben.",
"Chuck Norris isst keinen Honig, er kaut Bienen!!",
"Wenn Chuck Norris teilt, bleibt kein Rest.",
"Chuck Norris war Kamikaze-Pilotâ?¦ 12 mal",
"Was ist der Unterschied zwischen chuck norris und Gott? Gott kennt Gnade...",
"Es gibt feindliche Aliens , sie warten nur bis Chuck Norris gestorben ist damit sie angreifen können!",
"Chuck Norris ist eigentlich schon vor 10 Jahren gestorben , der Tod traut sich bloss nicht ihm bescheid zu sagen!",
"Es wurde mal behauptet, das Chuck Norris mal einen Kampf gegen einen Piraten verloren hätte, das ist natürlich eine Lüge die Chuck Norris selbst in die Welt gesetzt hat um noch mehr Piraten anzulocken.",
"Die Kinder schlafen nachts mit Supermanschlafanzügen...Superman schläft mit einem Chuck-Norris-Schlafanzug.",
"Chuck Norris hat als erster einer Meerjungfrau zwischen die beine gepackt",
"Chuck Norris ist so cool, dass die Schafe ihn zählen, wenn er ins Bett geht!",
"Chuck Norris sucht nicht - er findet.",
"Chuck Norris fährt keine Stra�enbahn - die Bahn fährt Chuck Norris.",
"Chuck Norris Tränen können Krebs heilen,doch Chuck Norris weint nicht.",
"Sido hat mal gefragt, wer Chuck Norris ist ....seitdem trägt Sido eine Maske.",
"Chuck Norris isst zu jeder Mahlzeit ein Steak - meistens vergisst er, vorher die Kuh zu schlachten.",
"Chuck Norris schläft mit einem Kopfkissen unter seiner Waffe.",
"Chuck Norris trägt keine Uhr - ER entscheidet wie spät es ist.",
};
public static void main(String[] args) {
IrcBot bot = new IrcBot();
bot.connect();
}
public void connect() {
try
{
irc = new Socket(server, port);
writer = new BufferedWriter(new OutputStreamWriter(irc.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(irc.getInputStream()));
readConsole = new BufferedReader(new InputStreamReader(System.in));
//Beim Server anmelden
writer.write("NICK " + nick + "\n");
writer.write("USER " + login + " localhost " + server + " Ph0xEn's Bot\n");
writer.flush();
//Zum Channel verbinden
writer.write("JOIN " + channel + "\n");
writer.write("PRIVMSG " + channel + " :IRC BOT BY Ph0xEn online\n");
writer.flush();
System.out.println("Verbindung erfolgreich aufgebaut Bot im Channel " + channel);
//Consolen-Lese Thread
new Thread(new Runnable() {
public void run() {
while(true) {
readConsole();
}
}
}).start();
//Alle andere Funktionen Thread
new Thread(new Runnable() {
public void run() {
try
{
while((line = reader.readLine()) != null )
{
System.out.println(line);
pingPong(line);
getOwner(line);
getTime(line);
kickUser(line);
getChuckWitz(line);
exitBot(line);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}).start();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void pingPong(String line) {
//Regular Expressions für die suche nach dem Ping um dann ein Pong zurückzusenden
Pattern pingRegex = Pattern.compile( "^PING", Pattern.CASE_INSENSITIVE );
Matcher ping = pingRegex.matcher(line);
if(ping.find())
{
try
{
writer.write("PONG " + channel + "\n");
writer.flush();
System.out.println("Pong gesendet...");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void getOwner(String line) {
//Nur der inhaber darf auch Server befehle ausführen!
Pattern checkOwner = Pattern.compile("^:" + owner + "!"); //da muss die regex noch so angepasst werden das nur genau dieser name verwendet werden kann und nich z.B. Ph0xEn1 statt Ph0xEn
ownership = checkOwner.matcher(line.subSequence(0, owner.length()+2));
}
public void exitBot(String line) {
//!exit - quit current irc room
Pattern exitRegex = Pattern.compile("!exit", Pattern.CASE_INSENSITIVE);
Matcher exit = exitRegex.matcher(line);
if(exit.find() && ownership.find()) //Den Owner noch mal überpfüfen Ganz wichtig
{
try
{
writer.write("PRIVMSG " + channel + " :Ciao Ladies!\n");
writer.write("QUIT " + channel + "\n");
writer.flush();
irc.close();
System.exit(0);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void getChuckWitz(String line) {
Pattern chuckRegEx = Pattern.compile("!chuck", Pattern.CASE_INSENSITIVE);
Matcher chuck = chuckRegEx.matcher(line);
if(chuck.find()) {
try
{
writer.write("PRIVMSG " + channel + " :" + chuckWitz[rand()] + "\n");
writer.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void kickUser(String line) {
//Benutzer Kicken
Pattern kickRegEx = Pattern.compile("!kick", Pattern.CASE_INSENSITIVE);
Matcher kick = kickRegEx.matcher(line);
if(kick.find() && ownership.find()) {
try
{
String user = "";
user = line.substring(line.indexOf(":!kick ") + 7, line.length());
writer.write("KICK " + channel + " :" + user +"\n");
writer.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void getTime(String line) {
//Zeit ausgeben
Pattern timeRegex = Pattern.compile("!time", Pattern.CASE_INSENSITIVE);
Matcher time = timeRegex.matcher(line);
if(time.find() && ownership.find() )
{
try
{
Date date = new Date();
writer.write("PRIVMSG " + channel + " :" + date +"\n");
writer.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void readConsole() {
try
{
writer.write("PRIVMSG " + channel + " :" + readConsole.readLine() + "\n");
writer.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public int rand() {
Random r = new Random();
int randint = r.nextInt(chuckWitz.length);
return randint;
}
}
Alles anzeigen
MfG