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);
        }
        private void OnMessage(PalBot bot, Message message)
        {
            try
            {
                if (message.MesgType == Subprofile.Types.MessageType.Group && GroupInstances.ContainsKey(message.GroupId) && GroupInstances[message.GroupId].ContainsKey(message.SourceId))
                {
                    var p = GroupInstances[message.GroupId][message.SourceId];
                    RunQuestionnaire(p, message, bot);
                    return;
                }
                if (message.MesgType == Subprofile.Types.MessageType.Private && PrivateInstances.ContainsKey(message.SourceId))
                {
                    var p = PrivateInstances[message.SourceId];
                    RunQuestionnaire(p, message, bot);
                    return;
                }
            }
            catch (Exception ex)
            {
                bot.On.Trigger("e", ex);
                return;
            }

            DoTyping(bot, message, null, message.Content, null);
        }
        public bool RemovePrivateQuestionnaire(int userid)
        {
            if (!PrivateInstances.ContainsKey(userid))
            {
                return(false);
            }

            PrivateInstances[userid].Key.Finish();
            return(true);
        }
Ejemplo n.º 4
0
        private void OnMessage(PalBot bot, Message msg)
        {
            try
            {
                if (msg.MesgType == MessageType.Group && GroupInstances.ContainsKey(msg.GroupId) && GroupInstances[msg.GroupId].ContainsKey(msg.SourceUser))
                {
                    GroupInstances[msg.GroupId][msg.SourceUser](msg);
                    return;
                }
                if (msg.MesgType == MessageType.Private && PrivateInstances.ContainsKey(msg.SourceUser))
                {
                    PrivateInstances[msg.SourceUser](msg);
                    return;
                }
            }
            catch (Exception ex)
            {
                bot.On.Trigger("e", ex);
                return;
            }

            DoPluginSort(bot, msg);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Removes an instance of a Forum based on the specifications of the Message supplied.
 /// </summary>
 /// <param name="msg"></param>
 public void RemoveInstance(Message msg)
 {
     if (msg.MesgType == MessageType.Group &&
         GroupInstances.ContainsKey(msg.GroupId) &&
         GroupInstances[msg.GroupId].ContainsKey(msg.SourceUser))
     {
         GroupInstances[msg.GroupId].Remove(msg.SourceUser);
     }
     else if (msg.MesgType == MessageType.Private &&
              PrivateInstances.ContainsKey(msg.SourceUser))
     {
         PrivateInstances.Remove(msg.SourceUser);
     }
 }
 public bool IsInPrivateQuestionnaire(int userid)
 {
     return(PrivateInstances.ContainsKey(userid));
 }
Ejemplo n.º 7
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();
                    }
                }
            }
        }