Advertisement
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 timebot1 {
- class Program {
- public static TcpClient socket;
- public static StreamReader reader;
- public static StreamWriter writer;
- static bool running = true;
- static DateTime dtLaunched = DateTime.Now;
- static string
- username = "timebot",
- host = "irc.freenode.net",
- desc = "timebot",
- password = "hunter2",
- admin = "timeshifter",
- command_char = "~";
- static void Main() {
- try {
- socket = new TcpClient(host, 6667);
- socket.ReceiveBufferSize = 1024;
- Console.WriteLine("Connected");
- NetworkStream stream = socket.GetStream();
- reader = new StreamReader(stream);
- writer = new StreamWriter(stream);
- Send("USER " + username + " 8 * :" + desc);
- Send("NICK " + username);
- Send("PRIVMSG NickServ :identify " + password);
- Send("JOIN #timebot");
- ReadMessage(reader);
- reader.Close();
- writer.Close();
- stream.Close();
- }
- catch (Exception ex) {
- Console.WriteLine("Error: " + ex.Message);
- }
- }
- //shorthand command for sending to a specific target
- static void SendMessage(string target, string data) {
- Send("PRIVMSG " + target + " :" + data);
- }
- //general "send to network" command
- static void Send(string data) {
- try {
- writer.WriteLine(data);
- Console.WriteLine(">>> " + data);
- writer.Flush();
- }
- catch (Exception ex) {
- Console.WriteLine("Send error: " + ex.Message);
- }
- }
- static void ReadMessage(StreamReader reader) {
- try {
- while (running) {
- string data = reader.ReadLine();
- Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + data);
- string[] msgParts = data.Split(' ');
- if (msgParts[0].ToLower() == "ping") { //ping request
- Send("PONG " + msgParts[1]);
- }
- else {
- string
- user = msgParts[0].Split('!')[0].Substring(1),
- cmd = msgParts[1].ToLower(),
- target = msgParts[2];
- switch (cmd) {
- case "join":
- //user joined target
- //if user == username, bot joined
- break;
- case "part":
- //user left target
- //if user == username, bot left
- break;
- case "nick":
- //user changed their nick
- break;
- case "quit":
- //user quit
- break;
- case "invite":
- //bot was invited to target
- break;
- case "notice":
- string msg = data.Split(":".ToCharArray(), 3)[2];
- if (msg.Contains("You are now identified for ")) {
- //bot is identified
- SendMessage(admin, "I am authenticated.");
- }
- break;
- case "privmsg":
- //channel or private message
- ParseInput(user, target, data.Split(":".ToCharArray(), 3)[2]);
- break;
- }
- }
- }
- }
- catch (Exception ex) {
- Console.WriteLine("Error: " + ex.Message);
- System.Threading.Thread.Sleep(15000);
- ReadMessage(reader);
- }
- }
- static void ParseInput(string user, string target, string msg) {
- if (msg.StartsWith(command_char)) { //bot command
- string[] cmdParts = msg.Split(" ".ToCharArray(), 2);
- switch (cmdParts[0].Substring(1)) {
- case "uptime":
- TimeSpan ts = DateTime.Now - dtLaunched;
- SendMessage(target, string.Format("I have been running for {0}{1}{2}{3}",
- ts.Days > 0 ? ts.Days.ToString() + "d " : "",
- ts.Hours > 0 ? ts.Hours.ToString() + "h " : "",
- ts.Minutes > 0 ? ts.Minutes.ToString() + "m " : "",
- ts.Seconds.ToString() + "s"
- ));
- break;
- case "hello":
- SendMessage(target, string.Format("Greetings, {0}!", user));
- break;
- case "quit":
- if (user == admin) {
- Send("QUIT");
- running = false;
- }
- break;
- case "rolldie":
- if(cmdParts.Length<2)
- SendMessage(target, "Not enough parameters.");
- else{
- Random r = new Random();
- int result = r.Next(int.Parse(cmdParts[1]), int.Parse(cmdParts[2]));
- SendMessage(target, string.Format("You rolled {0}.", result);
- }
- break;
- }
- }
- else { // any other message
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement