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