示例#1
0
        public async Task HandleCommand(IListener listener, IRespondable respondTo, IList <string> args, LinkedMessage e)
        {
            SendOptions opts = new SendOptions();

            try{
                opts.Parse(args);
                string msg = opts.Parameters.Count > 0 ? LilGUtil.ArgJoiner(opts.Parameters.ToArray()) : opts.Parameters[0];
                if (opts.Raw)
                {
                    LinkedIrcMessage message = (LinkedIrcMessage)e;
                    message.Client.SendRawMessage(msg);
                    return;
                }

                if (opts.channelId != 0)
                {
                    DiscordChannel channel = await Program.Config.DiscordSocketClient.GetChannelAsync(opts.channelId);

                    await channel.SendMessageAsync(msg);

                    return;
                }

                if (opts.channel != null)
                {
                    LinkedIrcMessage message = (LinkedIrcMessage)e;
                    if (message.Client.Channels.Contains(opts.channel))
                    {
                        message.Client.SendMessage(msg, opts.channel);
                    }
                }
            } catch (GetOptException) { await Help(listener, respondTo, args, e); }
        }
示例#2
0
        private async void OnChannelMessageRecieved(PrivateMessageEventArgs e)
        {
            LinkedIrcChannel channel = e.PrivateMessage.Channel;
            LinkedIrcMessage message = e;

            LogMessage(channel, message);
            bool isCommand = await CommandHandler(e);

            if (!isCommand)
            {
                await Program.CommandList.message(this, channel, message);
            }

            Logger.Info("{0} from {1} by {2}: {3}",
                        isCommand ? "Command" : "Message",
                        e.PrivateMessage.Source,
                        e.PrivateMessage.User.Hostmask,
                        e.PrivateMessage.Message);
        }
示例#3
0
        public async Task <bool> CommandHandler(PrivateMessageEventArgs e)
        {
            if (e.PrivateMessage.User.Hostmask == IrcSelf.Hostmask)
            {
                return(false);
            }

            string message      = e.PrivateMessage.Message;
            string messageLower = message.ToLower();

            string[]     args = message.SplitMessage();
            IRespondable respondTo;

            if (e.PrivateMessage.IsChannelMessage)
            {
                respondTo = (LinkedIrcChannel)e.PrivateMessage.Channel;
            }
            else
            {
                respondTo = (LinkedIrcUser)e.PrivateMessage.User;
            }

            string first           = args[0].ToLower();
            bool   commandByName   = first.StartsWith(IrcSelf.Nick.ToLower());
            bool   commandByPrefix = messageLower.StartsWithAny(Config.CommandPrefixes);

            if (commandByName || commandByPrefix)
            {
                string command = null;
                int    offset  = 1;
                if (commandByName)
                {
                    if (args.Length < 2)
                    {
                        return(false);
                    }

                    command = args[1];
                    offset  = 2;
                }

                if (commandByPrefix)
                {
                    foreach (string prefix in Config.CommandPrefixes)
                    {
                        if (messageLower.StartsWith(prefix))
                        {
                            if (prefix.EndsWith(" "))
                            {
                                if (args.Length < 2)
                                {
                                    return(false);
                                }

                                command = args[1];
                                offset  = 2;
                                break;
                            }

                            command = args[0].Substring(prefix.Length);
                            break;
                        }
                    }
                }

                if (command == null)
                {
                    return(false);
                }

                if (Program.CommandList.ContainsCommand(command))
                {
                    LinkedIrcMessage linkedMessage = e;
                    if (!LilGUtil.CheckPermission(command, linkedMessage))
                    {
                        await respondTo.respond($"Sorry, you don't have the permission to run {command}");

                        return(true);
                    }

                    ICommand icommand             = Program.CommandList[command];
                    ArraySegment <string> segment = new ArraySegment <string>(args, offset, args.Length - offset);
                    try{ await icommand.HandleCommand(this, respondTo, segment, (LinkedIrcMessage)e); } catch (Exception ex) {
                        Logger.Error(ex, "Problem processing command: \n{0}", ex.StackTrace);
                        await respondTo.respond($"Sorry there was a problem processing the command: {ex.Message}");

                        return(true);
                    }

                    return(true);
                }
            }

            return(false);
        }