using System; using System.Collections.Generic; using System.Text; using Meebey.SmartIrc4net; namespace MaowBot { class IrcListen { private IrcClient client; public IrcListen() { client = Program.client; this.RegisterEvents(); client.ActiveChannelSyncing = true; } public void Begin() { Program.client.Listen(); Program.client.Disconnect(); } public void RegisterEvents() { client.OnChannelMessage += new IrcEventHandler(OnChannelMessage); client.OnConnected += new EventHandler(OnConnected); } private void OnChannelMessage(Object sender, IrcEventArgs args) { if (args.Data.Message.ToLower().StartsWith("maow")) { String command = args.Data.Message.Split(' ')[1]; String parameters = args.Data.Message.Substring(args.Data.Message.IndexOf(command) + command.Length +1); IrcUser from = client.GetIrcUser(args.Data.Nick); Channel channel = client.GetChannel(args.Data.Channel); bool isOp = channel.Ops.ContainsKey(from.Nick); bool isVoice = channel.Voices.ContainsKey(from.Nick); if (command.ToLower().Equals("kick") && isOp) { String[] p = parameters.Split(' '); String reason; ChannelUser target; if (p.Length < 2) { reason = "Kick from " + from.Nick; } else { reason = parameters.Substring(parameters.IndexOf(p[0])); } target = GetUser(p[0], channel.Name); if (target == null) { client.SendMessage(SendType.Notice, from.Nick, "Invalid matches."); Console.WriteLine("Unable to find {0} on {1}.",p[0],channel.Name); return; } if (IsOp(target.Nick,channel.Name)) { client.SendMessage(SendType.Notice, from.Nick, "Invalid permissions."); Console.WriteLine("Permission denied for user {0} to kick {1} from {2}", from.Nick, p[0], channel.Name); return; } client.RfcKick(channel.Name, target.Nick,reason); Console.WriteLine("Kicked {0} from {1} on {2}'s request.", target.Nick, channel.Name, from.Nick); } } } private void OnConnected(object sender, EventArgs args) { Console.WriteLine("Connected >.>"); System.Threading.Thread.Sleep(2000); client.RfcPart("#The-Hangout"); client.RfcJoin("#The-Hangout"); client.RfcUsers("#The-Hangout"); } public bool IsOp(String nick, String channel) { return client.GetChannel(channel).Ops.ContainsKey(nick); } public ChannelUser GetUser(String nick, String channel) { int count = 0; ChannelUser u = null; foreach (System.Collections.DictionaryEntry e in client.GetChannel(channel).Users) { ChannelUser c = (ChannelUser)e.Value; if (c.Nick.ToLower().Contains(nick.ToLower())) { count++; u = c; } Console.WriteLine(nick + "!=" + e.Value + ", " + c.Nick); } if (u == null || count == 0 || count > 1) { return null; } else { return u; } } } }