private async Task IrcMessageReceived(object sender, IrcMessageRecievedEventArgs e) { //Console.WriteLine($"{e.Prefix,-64}{e.Command,-16}{e.Parameters}"); switch (e.Command) { case "001": Connected?.Invoke(this); break; case "PING": await ircClient.SendIrcMessage("PONG :tmi.twitch.tv"); break; case "PRIVMSG": ChatMessageReceived?.Invoke(this, new ChatMessageReceivedEventArgs(this, e.Prefix, e.Parameters)); break; case "JOIN": TwitchChannel channel = new TwitchChannel(e.Parameters.Replace("#", null), this); joinedChannels.Add(channel); ChannelJoined?.Invoke(this, new ChannelJoinedEventArgs(channel)); break; } }
public ChatMessageReceivedEventArgs(TwitchIrcClient client, string prefix, string param) { IrcUser = prefix; User = prefix.Remove(prefix.IndexOf('!')); string[] paramSplit = param.Split(" :"); Channel = client.GetChannel(paramSplit[0].Replace("#", null)); Content = paramSplit[1]; }
private async Task TryProcessCommand(TwitchClient tcl, TwitchChannel channel, string content) { if (content.StartsWith(prefixChar)) { string[] split = content.Split(" "); string command = split[0].Replace("!", null); if (channel.CustomCommands.Exists(x => x.Key == command)) { CustomTwitchCommandInfo c = channel.CustomCommands.Find(x => x.Key == command); await channel.SendChatMessage(c.Value); } else if (commandList.ContainsKey(command)) { MethodInfo m = commandList[command]; TwitchCommandModule tcm = (TwitchCommandModule)Activator.CreateInstance(m.DeclaringType); tcm.Channel = channel; tcm.Client = tcl; int parametersLength = m.GetParameters().Length; object[] paramaters = new object[parametersLength]; for (int i = 0; i < parametersLength; ++i) { ParameterInfo p = m.GetParameters()[i]; Type t = p.ParameterType; if (i < split.Length - 1) { switch (t.Name) { case "String": paramaters[i] = split[i + 1]; break; case "String[]": paramaters[i] = split.Skip(i + 1).ToArray(); break; case "Int32": paramaters[i] = int.Parse(split[i + 1]); break; } } else { paramaters[i] = p.DefaultValue; } } m.Invoke(tcm, paramaters); } } }
public ChannelJoinedEventArgs(TwitchChannel chan) { Channel = chan; }
public async Task PartChannel(TwitchChannel channel) { await client.PartChannel(channel.Channel); }