Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net.Sockets;
- using System.IO;
- namespace IRCBot
- {
- struct IRCConfig
- {
- public string server;
- public int port;
- public string nick;
- public string name;
- }
- class IRCBot
- {
- TcpClient IRCConnection = null;
- IRCConfig config;
- NetworkStream ns = null;
- StreamReader sr = null;
- StreamWriter sw = null;
- public IRCBot(IRCConfig config)
- {
- this.config = config;
- try
- {
- IRCConnection = new TcpClient(config.server, config.port);
- sendData("USER", config.nick + " swivvet.com " + " swivvet.com" + " :" + config.name);
- sendData("NICK", config.nick);
- }
- catch
- {
- Console.WriteLine("Connection Error");
- }
- try
- {
- ns = IRCConnection.GetStream();
- sr = new StreamReader(ns);
- sw = new StreamWriter(ns);
- sendData("USER", config.nick + " swivvet.com " + " swivvet.com" + " :" + config.name);
- sendData("NICK", config.nick);
- }
- catch
- {
- Console.WriteLine("Communication error");
- }
- finally
- {
- if (sr != null)
- sr.Close();
- if (sw != null)
- sw.Close();
- if (ns != null)
- ns.Close();
- if (IRCConnection != null)
- IRCConnection.Close();
- }
- }
- public void sendData(string cmd, string param)
- {
- if (param == null)
- {
- sw.WriteLine(cmd);
- sw.Flush();
- Console.WriteLine(cmd);
- }
- else
- {
- sw.WriteLine(cmd + " " + param);
- sw.Flush();
- Console.WriteLine(cmd + " " + param);
- }
- }
- public void IRCWork()
- {
- string[] ex;
- string data;
- bool shouldRun = true;
- while (shouldRun)
- {
- data = sr.ReadLine();
- Console.WriteLine(data);
- char[] charSeparator = new char[] { ' ' };
- ex = data.Split(charSeparator, 5);
- if (ex[0] == "PING")
- {
- sendData("PONG", ex[1]);
- }
- if (ex.Length > 4) //is the command received long enough to be a bot command?
- {
- string command = ex[3]; //grab the command sent
- switch (command)
- {
- case ":!join":
- sendData("JOIN", ex[4]); //if the command is !join send the "JOIN" command to the server with the parameters set by the user
- break;
- case ":!say":
- sendData("PRIVMSG", ex[2] + " " + ex[4]); //if the command is !say, send a message to the chan (ex[2]) followed by the actual message (ex[4]).
- break;
- case ":!quit":
- sendData("QUIT", ex[4]); //if the command is quit, send the QUIT command to the server with a quit message
- shouldRun = false; //turn shouldRun to false - the server will stop sending us data so trying to read it will not work and result in an error. This stops the loop from running and we will close off the connections properly
- break;
- }
- }
- if (ex.Length > 3)
- {
- string command = ex[3];
- switch (command)
- {
- case ":!part":
- sendData("PART", ex[2]);
- break;
- }
- }
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- IRCConfig conf = new IRCConfig();
- conf.name = "PsyBot";
- conf.nick = "PsyBot";
- conf.port = 6667;
- conf.server = "irc.uk.mibbit.net";
- new IRCBot(conf);
- Console.WriteLine("Bot quit/crashed");
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment