Exemplo n.º 1
0
 public override bool CanProcess(PluginContext ctx)
 {
     var t = ctx.ReceiveMessage as RecTextMessage;
     const RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace;
     var notExist = string.IsNullOrEmpty(Pattern);
     return t != null && (notExist || Regex.IsMatch(t.Content, Pattern, options));
 }
Exemplo n.º 2
0
        /// <summary>
        ///     将调用转到合适的插件并由找到的插件执行处理。
        ///     <para>如果没有任何插件接收此次调用,将返回null。</para>
        /// </summary>
        /// <param name="context">如果为null,则自动从请求中获取数据</param>
        /// <returns></returns>
        public static ResponseMessage Invoke(InvokerContext context = null)
        {
            if (context == null)
            {
                context = ParseFromContext();
            }
            var msg = context.Message; //接收的消息
            var ctx = new PluginContext
            {
                ReceiveMessage = msg,
                Seller = Obtainer == null ? null : Obtainer.Obtain(msg.ToUserName),
                UserContext = UserContext.Get(msg.ToUserName, msg.FromUserName)
            };

            //需要验证签名
            if (RequireCheck && !EntrySign.ParseFromContext().Check(ctx.Seller == null ? null : ctx.Seller.Token))
            {
                return null;
            }

            var plugin = Plugins.FirstOrDefault(p => p.CanProcess(ctx));
            var rep = plugin == null ? null : plugin.Execute(ctx); //传递PluginContext

            //触发事件
            if (Invoked != null)
                Invoked(ctx, rep);

            return rep;
        }
Exemplo n.º 3
0
        /// <summary>
        ///     将调用转到合适的插件并由找到的插件执行处理。
        ///     <para>如果没有任何插件接收此次调用,将返回null。</para>
        /// </summary>
        /// <param name="context">如果为null,则自动从请求中获取数据</param>
        /// <returns></returns>
        public static ResponseMessage Invoke(InvokerContext context = null)
        {
            if (context == null)
            {
                context = ParseFromContext();
            }
            var msg = context.Message; //接收的消息
            var ctx = new PluginContext
            {
                ReceiveMessage = msg,
                Seller         = Obtainer == null ? null : Obtainer.Obtain(msg.ToUserName),
                UserContext    = UserContext.Get(msg.ToUserName, msg.FromUserName)
            };

            //需要验证签名
            if (RequireCheck && !EntrySign.ParseFromContext().Check(ctx.Seller == null ? null : ctx.Seller.Token))
            {
                return(null);
            }

            //执行前逻辑
            var pre = new PluginInvokingContext(ctx);

            if (Invoking != null)
            {
                Invoking(pre);

                //如果终止执行则直接返回响应
                if (pre.Aborted)
                {
                    return(pre.Response);
                }
            }

            var plugin = Plugins.FirstOrDefault(p => p.CanProcess(ctx));
            var rep    = plugin == null ? null : plugin.Execute(ctx); //传递PluginContext

            //触发事件
            if (Invoked != null)
            {
                Invoked(ctx, rep);
            }

            return(rep);
        }
Exemplo n.º 4
0
 public override bool CanProcess(PluginContext ctx)
 {
     var msg = ctx.ReceiveMessage;
     return msg is RecEventMessage && Key.Equals((msg as RecEventMessage).EventKey);
 }
Exemplo n.º 5
0
 public virtual ResponseMessage Execute(PluginContext ctx)
 {
     return(null); //不会有任何响应。实际上,不会执行到此方法。
 }
Exemplo n.º 6
0
 /// <summary>
 ///     由此判断,决定是否处理当前请求。
 ///     <para>比如,如果不同的商家可能启用了不同的插件,可在此判断,当商家没有启动此插件时返回false即可。</para>
 ///     <para>如果商家没有启用此插件但需要给予提示,使得用户催促商家开通此插件的话,可返回true然后在Execute方法下返回提示信息。</para>
 /// </summary>
 /// <param name="ctx"></param>
 /// <returns></returns>
 public virtual bool CanProcess(PluginContext ctx)
 {
     return(false); //不处理任何请求
 }
Exemplo n.º 7
0
 public virtual ResponseMessage Execute(PluginContext ctx)
 {
     return null;//不会有任何响应。实际上,不会执行到此方法。
 }
Exemplo n.º 8
0
 /// <summary>
 /// 由此判断,决定是否处理当前请求。
 /// <para>比如,如果不同的商家可能启用了不同的插件,可在此判断,当商家没有启动此插件时返回false即可。</para>
 /// <para>如果商家没有启用此插件但需要给予提示,使得用户催促商家开通此插件的话,可返回true然后在Execute方法下返回提示信息。</para>
 /// </summary>
 /// <param name="ctx"></param>
 /// <returns></returns>
 public virtual bool CanProcess(PluginContext ctx)
 {
     return false;//不处理任何请求
 }
Exemplo n.º 9
0
        public override bool CanProcess(PluginContext ctx)
        {
            var msg = ctx.ReceiveMessage;

            return(msg is RecEventMessage && Key.Equals((msg as RecEventMessage).EventKey));
        }
Exemplo n.º 10
0
 public override bool CanProcess(PluginContext ctx)
 {
     return(_asDefault || base.CanProcess(ctx));
 }
Exemplo n.º 11
0
 public override ResponseMessage Execute(PluginContext ctx)
 {
     var seller = ctx.Seller;
     var rep = ctx.ReceiveMessage.GetTextResponse("系统使用帮助");
     return rep;
 }
Exemplo n.º 12
0
 public override bool CanProcess(PluginContext ctx)
 {
     return _asDefault || base.CanProcess(ctx);
 }
 /// <summary>
 ///     从基类创建实例,复制基类的值(仅复制引用,这意味着修改参数值将影响到后续的传递)
 /// </summary>
 /// <param name="ctx"></param>
 public PluginInvokingContext(PluginContext ctx)
 {
     ReceiveMessage = ctx.ReceiveMessage;
     Seller = ctx.Seller;
     UserContext = ctx.UserContext;
 }
Exemplo n.º 14
0
 /// <summary>
 ///     从基类创建实例,复制基类的值(仅复制引用,这意味着修改参数值将影响到后续的传递)
 /// </summary>
 /// <param name="ctx"></param>
 public PluginInvokingContext(PluginContext ctx)
 {
     ReceiveMessage = ctx.ReceiveMessage;
     Seller         = ctx.Seller;
     UserContext    = ctx.UserContext;
 }