rendered paste bodyusing 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; }
}
}
}