2
using System.Collections.Generic;
6
namespace IrcDotNet.Samples.Common
8
// Provides access to basic commands for controlling an IRC bot.
9
public abstract class BasicIrcBot : IrcBot
16
public abstract IrcRegistrationInfo RegistrationInfo
21
protected override void InitializeChatCommandProcessors()
23
this.ChatCommandProcessors.Add("help", ProcessChatCommandHelp);
26
#region Chat Command Processors
28
private void ProcessChatCommandHelp(IrcClient client, IIrcMessageSource source,
29
IList<IIrcMessageTarget> targets, string command, IList<string> parameters)
31
if (parameters.Count != 0)
32
throw new InvalidCommandParametersException(1);
34
// List all commands recognized by this bot.
35
var replyTarget = GetDefaultReplyTarget(client, source, targets);
36
client.LocalUser.SendMessage(replyTarget, "Commands recognized by bot:");
37
client.LocalUser.SendMessage(replyTarget, string.Join(", ",
38
this.ChatCommandProcessors.Select(kvPair => kvPair.Key)));
43
protected override void InitializeCommandProcessors()
45
this.CommandProcessors.Add("exit", ProcessCommandExit);
46
this.CommandProcessors.Add("connect", ProcessCommandConnect);
47
this.CommandProcessors.Add("c", ProcessCommandConnect);
48
this.CommandProcessors.Add("disconnect", ProcessCommandDisconnect);
49
this.CommandProcessors.Add("d", ProcessCommandDisconnect);
50
this.CommandProcessors.Add("join", ProcessCommandJoin);
51
this.CommandProcessors.Add("j", ProcessCommandJoin);
52
this.CommandProcessors.Add("leave", ProcessCommandLeave);
53
this.CommandProcessors.Add("l", ProcessCommandLeave);
54
this.CommandProcessors.Add("list", ProcessCommandList);
57
#region Command Processors
59
private void ProcessCommandExit(string command, IList<string> parameters)
64
private void ProcessCommandConnect(string command, IList<string> parameters)
66
if (parameters.Count < 1)
67
throw new ArgumentException(Properties.Resources.ErrorMessageNotEnoughArgs);
69
Connect(parameters[0], this.RegistrationInfo);
72
private void ProcessCommandDisconnect(string command, IList<string> parameters)
74
if (parameters.Count < 1)
75
throw new ArgumentException(Properties.Resources.ErrorMessageNotEnoughArgs);
77
Disconnect(parameters[0]);
80
private void ProcessCommandJoin(string command, IList<string> parameters)
82
if (parameters.Count < 2)
83
throw new ArgumentException(Properties.Resources.ErrorMessageNotEnoughArgs);
85
// Join given channel on given server.
86
var client = GetClientFromServerNameMask(parameters[0]);
87
var channelName = parameters[1];
88
client.Channels.Join(channelName);
91
private void ProcessCommandLeave(string command, IList<string> parameters)
93
if (parameters.Count < 2)
94
throw new ArgumentException(Properties.Resources.ErrorMessageNotEnoughArgs);
96
// Leave given channel on the given server.
97
var client = GetClientFromServerNameMask(parameters[0]);
98
var channelName = parameters[1];
99
client.Channels.Leave(channelName);
102
private void ProcessCommandList(string command, IList<string> parameters)
104
// List all active server connections and channels of which local user is currently member.
105
foreach (var client in this.Clients)
107
Console.Out.WriteLine("Server: {0}", client.ServerName ?? "(unknown)");
108
foreach (var channel in client.Channels)
110
if (channel.Users.Any(u => u.User == client.LocalUser))
112
Console.Out.WriteLine(" * {0}", channel.Name);