Esempio n. 1
0
        public async Task <bool> Handle(IrcMessage message, CancellationToken token)
        {
            if (IrcCommandHelper.TryParse(message.Message, out IrcCommand ircCommand, out string ircParameter) &&
                ircCommand == IrcCommand.Dcc &&
                DccCommandHelper.TryParse(ircParameter, out DccCommand dccCommand, out string dccParameter))
            {
                Console.Write(dccParameter);
                switch (dccCommand)
                {
                case DccCommand.Send:
                    var regex   = new Regex("([\\x21-\\x7E]+|\"[\\x20-\\x7E]+\") (\\d+) (\\d+) (\\d+)");
                    var matches = regex.Match(dccParameter);

                    if (matches.Success &&
                        matches.Groups.Count > 4 &&
                        uint.TryParse(matches.Groups[2].Value, out var bitwiseIp) &&
                        int.TryParse(matches.Groups[3].Value, out var port) &&
                        ulong.TryParse(matches.Groups[4].Value, out var filesize))
                    {
                        var client = new DccClient(matches.Groups[1].Value.Trim('"'), filesize);

                        var ipBytes = BitConverter.GetBytes(bitwiseIp);
                        var host    = $"{ipBytes[3]}.{ipBytes[2]}.{ipBytes[1]}.{ipBytes[0]}";

                        await client.Connect(host, port, token).ConfigureAwait(false);

                        FileReceived?.Invoke(client);
                    }

                    return(true);
                }
            }
            return(false);
        }
Esempio n. 2
0
 public BotCommand(string line)
 {
     this.Parameters = new List <string>();
     if (!string.IsNullOrEmpty(line))
     {
         SetProperties(IrcCommandHelper.ParseIrcCommand(line), this);
     }
 }
Esempio n. 3
0
        public async Task <bool> Handle(IrcMessage message, CancellationToken token)
        {
            if (IrcCommandHelper.TryParse(message.Message, out var ircCommand, out var parameter) &&
                commands.Contains(ircCommand))
            {
                var sender = message.Sender;
                if (sender != null)
                {
                    var idx = sender.IndexOf('!');
                    if (idx >= 0)
                    {
                        sender = sender.Remove(idx);
                    }
                }

                var privMessage = parameter;
                var firstIdx    = privMessage.IndexOf('\x01');
                var lastIdx     = privMessage.LastIndexOf('\x01');
                if (firstIdx >= 0 && lastIdx >= 0 && firstIdx != lastIdx)
                {
                    privMessage = privMessage
                                  .Remove(lastIdx)[(firstIdx + 1)..];
Esempio n. 4
0
        public async Task <bool> Handle(IrcMessage message, CancellationToken token)
        {
            if (IrcCommandHelper.TryParse(message.Message, out var command, out var parameter))
            {
                switch (command)
                {
                /*
                 * case IrcCommand.Cap:
                 *  if (parameter.Contains("LS"))
                 *      await this.connection.Send(IrcCommand.Cap, "REQ away-notify chghost multi-prefix userhost-in-names");
                 *  if (parameter.Contains("ACK"))
                 *      await this.connection.Send(IrcCommand.Cap, "END");
                 *  return true;
                 */
                case IrcCommand.Ping:
                    await this.connection.Send(IrcCommand.Pong, parameter, token);

                    return(true);
                }
            }

            return(false);
        }