All pastes #370775 Raw Edit

Untitled

public text v1 · immutable
#370775 ·published 2007-02-24 21:18 UTC
rendered paste body
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;  }
        }
    }
}