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 IsInGroupQuestionnaire(int userid, out int[] groupids)
        {
            var items = GroupInstances.Where(t => t.Value.ContainsKey(userid)).ToArray();

            groupids = items.Select(t => t.Key).ToArray();

            return(groupids.Length > 0);
        }
 public bool RemoveGroupQuestionnaire(int groupid, int userid)
 {
     if (!GroupInstances.ContainsKey(groupid))
     {
         return(false);
     }
     if (!GroupInstances[groupid].ContainsKey(userid))
     {
         return(false);
     }
     GroupInstances[groupid][userid].Key.Finish();
     return(true);
 }
Beispiel #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);
     }
 }
Beispiel #6
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);
        }
 public bool IsInGroupQuestionnaire(int groupid, int userid)
 {
     return(GroupInstances.ContainsKey(groupid) ? GroupInstances[groupid].ContainsKey(userid) : false);
 }
 public bool IsInGroupQuestionnaire(int userid)
 {
     return(GroupInstances.Any(t => t.Value.ContainsKey(userid)));
 }
Beispiel #9
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();
                    }
                }
            }
        }