private void AddQuestionnaire(IIQuestionnaire quest, Action <string> method, int userid, PalBot bot)
        {
            PrivateInstances.Add(userid, new KeyValuePair <IIQuestionnaire, Action <string> >(quest, method));

            quest.Next   = (a) => PrivateInstances[userid] = new KeyValuePair <IIQuestionnaire, Action <string> >(quest, a);
            quest.Finish = () =>
            {
                QuestionnaireFinished(quest);
                PrivateInstances.Remove(userid);
            };
            quest.MoveToPrivate = () => false;
            quest.MoveToGroup   = (i) =>
            {
                if (!GroupInstances.ContainsKey(i))
                {
                    GroupInstances.Add(i, new Dictionary <int, KeyValuePair <IIQuestionnaire, Action <string> > >());
                }
                if (GroupInstances[i].ContainsKey(userid))
                {
                    return(false);
                }
                AddQuestionnaire(quest, PrivateInstances[userid].Value, i, userid, bot);
                PrivateInstances.Remove(userid);
                return(true);
            };
            ((IQuestionnaire)quest)._doStartUp(bot);
        }
Ejemplo n.º 2
0
        private void DoPluginSort(PalBot bot, Message msg)
        {
            var group = msg.GroupId.GetGroup(bot);
            var user  = msg.SourceUser.GetUser(bot);

            string m = msg.Content.Trim();

            foreach (var type in Plugins)
            {
                foreach (var meth in type.Value)
                {
                    var matching = meth.Value.Where(t => m.StartsWith(t.Trigger)).ToArray();

                    foreach (var Forum in matching)
                    {
                        if (!Forum.Type.HasFlag(msg.MesgType))
                        {
                            continue;
                        }
                        if (bot.Title != null && Forum.For != null && Forum.For.Length > 0 && !Forum.For.Contains(bot.Title))
                        {
                            continue;
                        }
                        if (!Forum.PermissionEngine.CheckPermissions(Forum.Permissions, user, group))
                        {
                            bot.On.Trigger("pf", bot, new FailedPermissionsReport(msg, Forum.Permissions, Forum.Trigger, PluginType.Forum));
                            continue;
                        }

                        var sm = m.Remove(0, Forum.Trigger.Length).Trim();

                        var i = (IIForum)Activator.CreateInstance(type.Key);
                        i.Bot               = bot;
                        i.Language          = Forum.Language;
                        i.Message           = msg;
                        i.AttributeInstance = Forum;
                        if (msg.MesgType == MessageType.Group)
                        {
                            if (!GroupInstances.ContainsKey(msg.GroupId))
                            {
                                GroupInstances.Add(msg.GroupId, new Dictionary <int, Action <Message> >());
                            }
                            GroupInstances[msg.GroupId].Add(msg.SourceUser, (m2) => { });
                        }
                        else
                        {
                            PrivateInstances.Add(msg.SourceUser, (m2) => { });
                        }

                        new Thread(() =>
                        {
                            try
                            {
                                meth.Key.Invoke(i, new object[] { sm });
                                RemoveInstance(msg);
                            }
                            catch (Exception ex)
                            {
                                bot.On.Trigger("e", ex);
                            }
                        }).Start();
                    }
                }
            }
        }