Ejemplo n.º 1
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);
     }
 }
Ejemplo n.º 2
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);
 }
Ejemplo n.º 4
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();
                    }
                }
            }
        }