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 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(); } } } }