IRC parsing, tokenization, and state handling in C#
1using System.Collections.Generic;
2using System.Linq;
3
4namespace IRCRobots
5{
6 public class Capability : ICapability
7 {
8 public string Name { get; set; }
9 public string DraftName { get; set; }
10 public string Alias { get; }
11 public IEnumerable<string> DependsOn { get; set; }
12 private IEnumerable<string> Caps { get; }
13
14 public Capability()
15 {
16 Alias ??= Name;
17 Caps = new List<string> {Name, DraftName};
18 }
19
20 public string? Available(IEnumerable<string> capabilities)
21 {
22 return Caps.FirstOrDefault(cap => cap != null && capabilities.Contains(cap));
23 }
24
25 public bool Match(string capability)
26 {
27 return Caps.Contains(capability);
28 }
29 }
30}